├── .formatter.exs ├── .gitignore ├── .travis.yml ├── fixture ├── photo.jpg └── vcr_cassettes │ ├── users_username_likes.json │ ├── users_username_portfolio.json │ ├── users_username_collections.json │ ├── search_users.json │ ├── photos_download_link.json │ ├── stats_month.json │ ├── stats_total.json │ ├── photos_random.json │ ├── photos_statistics.json │ ├── users_username_statistics.json │ ├── users_username.json │ ├── collections_id.json │ ├── collections_get_curated_id.json │ ├── collections_get_related_id.json │ ├── collections_related_photos_id.json │ ├── photos_id.json │ ├── collections_curated_photos_id.json │ └── collections_photos_id.json ├── test ├── unsplash │ ├── utils_test.exs │ ├── stats_test.exs │ ├── search_test.exs │ ├── collections_test.exs │ ├── photos_test.exs │ └── users_test.exs └── test_helper.exs ├── config ├── secrets.example.exs └── config.exs ├── lib ├── unsplash.ex └── unsplash │ ├── stats.ex │ ├── utils │ ├── api.ex │ ├── result_stream.ex │ └── o_auth.ex │ ├── search.ex │ ├── collections.ex │ ├── users.ex │ └── photos.ex ├── mix.exs ├── README.md ├── mix.lock └── .credo.exs /.formatter.exs: -------------------------------------------------------------------------------- 1 | [ 2 | inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}"] 3 | ] 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /_build 2 | /cover 3 | /deps 4 | /doc 5 | erl_crash.dump 6 | *.ez 7 | secrets.exs 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: elixir 3 | elixir: '1.6' 4 | env: 5 | - MIX_ENV=test 6 | -------------------------------------------------------------------------------- /fixture/photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/waynehoover/unsplash-elixir/HEAD/fixture/photo.jpg -------------------------------------------------------------------------------- /test/unsplash/utils_test.exs: -------------------------------------------------------------------------------- 1 | defmodule Unplash.UtilsTest do 2 | use ExUnit.Case, async: true 3 | doctest Unsplash.Utils.OAuth 4 | doctest Unsplash.Utils.ResultStream 5 | end 6 | -------------------------------------------------------------------------------- /config/secrets.example.exs: -------------------------------------------------------------------------------- 1 | use Mix.Config 2 | 3 | config :unsplash, 4 | application_id: "Access Key", 5 | application_secret: "Secret Key", 6 | application_redirect_uri: "urn:ietf:wg:oauth:2.0:oob" 7 | -------------------------------------------------------------------------------- /lib/unsplash.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash do 2 | @moduledoc ~S""" 3 | # An Unslpash API client for Elixir 4 | 5 | Example Usage: 6 | 7 | `Unsplash.Photos.search(query: "Austin", catgeroy: "2") |> Enum.take(1)` 8 | """ 9 | def start(_type, _args) do 10 | Unsplash.Utils.OAuth.start() 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /config/config.exs: -------------------------------------------------------------------------------- 1 | use Mix.Config 2 | 3 | # Don't import the secrets.exs file in travis CI because its not avialable there. 4 | # It is needed in all other enviorments. 5 | # Travis then requires that the VCR files (in /fxture) are created and commited. 6 | 7 | if !System.get_env("TRAVIS") do 8 | import_config "secrets.exs" 9 | end 10 | 11 | config :exvcr, 12 | filter_request_headers: ["Authorization"] 13 | -------------------------------------------------------------------------------- /lib/unsplash/stats.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Stats do 2 | @moduledoc ~S""" 3 | All /stats/* api endpoints 4 | """ 5 | 6 | alias Unsplash.Utils.ResultStream 7 | 8 | @doc ~S""" 9 | GET /stats/total 10 | """ 11 | def total do 12 | ResultStream.new("/stats/total") 13 | end 14 | 15 | @doc ~S""" 16 | GET /stats/month 17 | """ 18 | def month do 19 | ResultStream.new("/stats/total") 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /test/test_helper.exs: -------------------------------------------------------------------------------- 1 | ExUnit.configure(exclude: [skip: true]) 2 | ExUnit.start() 3 | # Not sure I need this? 4 | HTTPoison.start() 5 | 6 | # To run the tests needing authorization, without using VCR, 7 | # follow the auth steps in the readme, and put the code you get back into the function below. 8 | # Unsplash.OAuth.authorize! code: "code_goes_here" 9 | 10 | defmodule PathHelpers do 11 | def fixture_path do 12 | Path.expand("../fixture", __DIR__) 13 | end 14 | 15 | def fixture_path(file_path) do 16 | Path.join(fixture_path(), file_path) 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /test/unsplash/stats_test.exs: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.StatsTest do 2 | use ExUnit.Case, async: false 3 | use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney 4 | 5 | test "Unsplash.Stats.total" do 6 | use_cassette "stats_total" do 7 | response = Unsplash.Stats.total() |> Enum.to_list() 8 | assert response 9 | refute response |> Enum.into(%{}) |> Map.get("errors") 10 | end 11 | end 12 | 13 | test "Unsplash.Stats.month" do 14 | use_cassette "stats_month" do 15 | response = Unsplash.Stats.month() |> Enum.to_list() 16 | assert response 17 | refute response |> Enum.into(%{}) |> Map.get("errors") 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /lib/unsplash/utils/api.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Utils.API do 2 | alias Unsplash.Utils.OAuth 3 | 4 | @moduledoc false 5 | @doc false 6 | use HTTPoison.Base 7 | 8 | @endpoint "https://api.unsplash.com" 9 | 10 | def endpoint do 11 | @endpoint 12 | end 13 | 14 | defp process_url(url) do 15 | @endpoint <> url 16 | end 17 | 18 | def process_request_headers(headers) do 19 | headers = 20 | headers ++ 21 | [ 22 | {"Accept-Version", "v1"}, 23 | {"Authorization", "Client-ID #{application_id()}"}, 24 | {"Content-type", "application/json; charset=utf-8"} 25 | ] 26 | 27 | if OAuth.get_access_token() do 28 | headers ++ [{"Authorization", "Bearer #{OAuth.get_access_token()}"}] 29 | else 30 | headers 31 | end 32 | end 33 | 34 | defp application_id do 35 | Application.get_env(:unsplash, :application_id) 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /test/unsplash/search_test.exs: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.SearchTest do 2 | use ExUnit.Case, async: false 3 | use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney 4 | 5 | test "Unsplash.Search.photos" do 6 | use_cassette "search_photos" do 7 | response = Unsplash.Search.photos(query: "El Capitan") |> Enum.take(1) 8 | assert response 9 | refute response |> Enum.into(%{}) |> Map.get("errors") 10 | end 11 | end 12 | 13 | test "Unsplash.Search.collections" do 14 | use_cassette "search_collections" do 15 | response = Unsplash.Search.collections(query: "El Capitan") |> Enum.take(1) 16 | assert response 17 | refute response |> Enum.into(%{}) |> Map.get("errors") 18 | end 19 | end 20 | 21 | test "Unsplash.Search.users" do 22 | use_cassette "search_users" do 23 | response = Unsplash.Search.users(query: "El Capitan") |> Enum.take(1) 24 | assert response 25 | refute response |> Enum.into(%{}) |> Map.get("errors") 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /lib/unsplash/search.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Search do 2 | @moduledoc ~S""" 3 | All /search/* api endpoints 4 | """ 5 | 6 | alias Unsplash.Utils.ResultStream 7 | 8 | @doc ~S""" 9 | GET /search/photos 10 | 11 | Args: 12 | * `opts` - Keyword list of options 13 | 14 | Options: 15 | * `query` - Search terms. 16 | * `collections` - Collection ID(‘s) to narrow search. If multiple, comma-separated. 17 | * `orientation` - Filter search results by photo orientation. Valid values are landscape, portrait, and squarish. 18 | """ 19 | def photos(opts \\ []) do 20 | ResultStream.new("/search/photos", opts) 21 | end 22 | 23 | @doc ~S""" 24 | GET /search/collections 25 | 26 | Args: 27 | * `query` Search terms. 28 | """ 29 | def collections(opts \\ []) do 30 | ResultStream.new("/search/collections", opts) 31 | end 32 | 33 | @doc ~S""" 34 | GET /search/users 35 | 36 | Args: 37 | * `query` Search terms. 38 | """ 39 | def users(opts \\ []) do 40 | ResultStream.new("/search/users", opts) 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /lib/unsplash/utils/result_stream.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Utils.ResultStream do 2 | @moduledoc ~S""" 3 | Utility functions for traversing api pagination by generating an elixir Stream to work on. 4 | """ 5 | 6 | alias Unsplash.Utils.API 7 | 8 | def new(path, params) do 9 | %URI{path: path, query: URI.encode_query(params)} 10 | |> URI.to_string() 11 | |> new 12 | end 13 | 14 | def new(url) do 15 | Stream.resource(fn -> fetch_page(url) end, &process_page/1, fn _ -> true end) 16 | end 17 | 18 | defp fetch_page(url) do 19 | response = API.get!(url) 20 | items = Jason.decode!(response.body) 21 | links = response.headers |> Enum.into(%{}) |> Map.get("Link") |> parse_links 22 | 23 | {items, links["next"]} 24 | end 25 | 26 | def parse_links(nil) do 27 | %{} 28 | end 29 | 30 | def parse_links(links_string) do 31 | links_string 32 | |> String.split(", ") 33 | |> Enum.map(fn link -> 34 | [_, name] = Regex.run(~r{rel="([a-z]+)"}, link) 35 | [_, url] = Regex.run(~r{<([^>]+)>}, link) 36 | short_url = String.replace(url, API.endpoint(), "") 37 | 38 | {name, short_url} 39 | end) 40 | |> Enum.into(%{}) 41 | end 42 | 43 | defp process_page({nil, nil}) do 44 | {:halt, nil} 45 | end 46 | 47 | defp process_page({nil, next_page_url}) do 48 | next_page_url 49 | |> fetch_page 50 | |> process_page 51 | end 52 | 53 | defp process_page({items, next_page_url}) do 54 | {items, {nil, next_page_url}} 55 | end 56 | end 57 | -------------------------------------------------------------------------------- /mix.exs: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Mixfile do 2 | use Mix.Project 3 | 4 | def project do 5 | [ 6 | app: :unsplash, 7 | version: "1.2.0", 8 | elixir: "~> 1.6", 9 | description: "Unsplash API for Elixir", 10 | source_url: "https://github.com/waynehoover/unsplash-elixir", 11 | homepage_url: "https://github.com/waynehoover/unsplash-elixir", 12 | package: package(), 13 | deps: deps(), 14 | docs: docs(), 15 | test_coverage: [tool: ExCoveralls], 16 | preferred_cli_env: [ 17 | coveralls: :test, 18 | "coveralls.detail": :test, 19 | "coveralls.post": :test, 20 | "coveralls.html": :test 21 | ] 22 | ] 23 | end 24 | 25 | def application do 26 | [ 27 | applications: [:logger, :httpoison, :oauth2], 28 | mod: {Unsplash, []} 29 | ] 30 | end 31 | 32 | defp deps do 33 | [ 34 | {:httpoison, "~> 1.6.2"}, 35 | {:jason, "~> 1.1"}, 36 | {:oauth2, "~> 2.0.0"}, 37 | {:earmark, "~> 1.4.2", only: :dev}, 38 | {:ex_doc, "~> 0.21.2", only: :dev, runtime: false}, 39 | {:exvcr, "~> 0.11.0", only: [:test, :dev]}, 40 | {:credo, "~> 1.1.5", only: [:dev, :test], runtime: false}, 41 | {:excoveralls, "~> 0.12.0", only: :test} 42 | ] 43 | end 44 | 45 | defp docs do 46 | [ 47 | extras: ["README.md"] 48 | ] 49 | end 50 | 51 | defp package do 52 | [ 53 | maintainers: ["waynehoover"], 54 | licenses: ["MIT"], 55 | links: %{ 56 | "github" => "https://github.com/waynehoover/unsplash-elixir", 57 | "docs" => "http://hexdocs.pm/unsplash/" 58 | } 59 | ] 60 | end 61 | end 62 | -------------------------------------------------------------------------------- /fixture/vcr_cassettes/users_username_likes.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/users/believenyaself/likes?" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "[]", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "X-Total": "0", 26 | "X-Per-Page": "10", 27 | "Content-Type": "application/json", 28 | "X-Ratelimit-Limit": "50", 29 | "X-Ratelimit-Remaining": "36", 30 | "X-Request-Id": "fb933a66-0f17-45a7-aab1-7c78a3924241", 31 | "X-Runtime": "0.043045", 32 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 33 | "Via": "1.1 vegur", 34 | "Content-Length": "2", 35 | "Accept-Ranges": "bytes", 36 | "Date": "Wed, 10 Apr 2019 02:55:17 GMT", 37 | "Age": "2030", 38 | "Connection": "keep-alive", 39 | "X-Served-By": "cache-iad2132-IAD, cache-pao17420-PAO", 40 | "X-Cache": "HIT, HIT", 41 | "X-Cache-Hits": "1, 1", 42 | "X-Timer": "S1554864917.431241,VS0,VE1", 43 | "Vary": "Origin, Authorization" 44 | }, 45 | "status_code": 200, 46 | "type": "ok" 47 | } 48 | } 49 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/users_username_portfolio.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/users/believenyaself/portfolio" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"url\":\"https://www.tumblr.com/blog/believenyaself\"}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "18", 28 | "X-Request-Id": "013f55d1-5eac-4f5b-b497-44e2e7015ba5", 29 | "X-Runtime": "0.024393", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "52", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:17 GMT", 35 | "Age": "0", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2130-IAD, cache-pao17420-PAO", 38 | "X-Cache": "MISS, MISS", 39 | "X-Cache-Hits": "0, 0", 40 | "X-Timer": "S1554864917.006451,VS0,VE96", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/users_username_collections.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/users/believenyaself/collections?" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "[]", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "X-Total": "0", 26 | "X-Per-Page": "30", 27 | "Content-Type": "application/json", 28 | "X-Ratelimit-Limit": "50", 29 | "X-Ratelimit-Remaining": "34", 30 | "X-Request-Id": "2b75c562-9a58-4697-b9cd-9cdf51078ff6", 31 | "X-Runtime": "0.036302", 32 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 33 | "Via": "1.1 vegur", 34 | "Content-Length": "2", 35 | "Accept-Ranges": "bytes", 36 | "Date": "Wed, 10 Apr 2019 02:55:16 GMT", 37 | "Age": "2026", 38 | "Connection": "keep-alive", 39 | "X-Served-By": "cache-iad2149-IAD, cache-pao17420-PAO", 40 | "X-Cache": "HIT, HIT", 41 | "X-Cache-Hits": "1, 1", 42 | "X-Timer": "S1554864917.680433,VS0,VE0", 43 | "Vary": "Origin, Authorization" 44 | }, 45 | "status_code": 200, 46 | "type": "ok" 47 | } 48 | } 49 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/search_users.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/search/users?query=El+Capitan" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"total\":0,\"total_pages\":0,\"results\":[]}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "X-Total": "0", 26 | "X-Per-Page": "10", 27 | "Content-Type": "application/json", 28 | "X-Ratelimit-Limit": "50", 29 | "X-Ratelimit-Remaining": "26", 30 | "X-Request-Id": "10e96282-bd4b-40c7-8502-84a493b300ac", 31 | "X-Runtime": "0.022611", 32 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 33 | "Via": "1.1 vegur", 34 | "Content-Length": "40", 35 | "Accept-Ranges": "bytes", 36 | "Date": "Wed, 10 Apr 2019 02:55:04 GMT", 37 | "Age": "1553", 38 | "Connection": "keep-alive", 39 | "X-Served-By": "cache-iad2146-IAD, cache-pao17422-PAO", 40 | "X-Cache": "HIT, MISS", 41 | "X-Cache-Hits": "1, 0", 42 | "X-Timer": "S1554864905.670358,VS0,VE69", 43 | "Vary": "Origin, Authorization" 44 | }, 45 | "status_code": 200, 46 | "type": "ok" 47 | } 48 | } 49 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/photos_download_link.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/photos/0XR2s9D3PLI/download" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"url\":\"https://images.unsplash.com/photo-1437924705289-8b6f9ea2bb36?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\"}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "41", 28 | "X-Request-Id": "0dc4f37e-a28b-4bdc-bbf9-cac8a89ef15d", 29 | "X-Runtime": "0.019775", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "118", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:14 GMT", 35 | "Age": "2038", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2151-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864915.818249,VS0,VE1", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/stats_month.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/stats/total" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"total_photos\":936159,\"photo_downloads\":880359980,\"photos\":936159,\"downloads\":880359980,\"views\":154581017194,\"likes\":17488298,\"photographers\":130790,\"pixels\":14507148337600,\"downloads_per_second\":22,\"views_per_second\":4110,\"developers\":57870,\"applications\":1027,\"requests\":19511642542}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "17", 28 | "X-Request-Id": "f2335306-91a7-4d4b-82a8-b1f118b12a92", 29 | "X-Runtime": "0.021303", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "286", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:19 GMT", 35 | "Age": "0", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2120-IAD, cache-pao17420-PAO", 38 | "X-Cache": "MISS, MISS", 39 | "X-Cache-Hits": "0, 0", 40 | "X-Timer": "S1554864919.191543,VS0,VE97", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/stats_total.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/stats/total" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"total_photos\":936159,\"photo_downloads\":880359980,\"photos\":936159,\"downloads\":880359980,\"views\":154581017194,\"likes\":17488298,\"photographers\":130790,\"pixels\":14507148337600,\"downloads_per_second\":22,\"views_per_second\":4110,\"developers\":57870,\"applications\":1027,\"requests\":19511642542}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "16", 28 | "X-Request-Id": "4fb82325-5de8-4c63-bd0f-00970ab98e36", 29 | "X-Runtime": "0.022792", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "286", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:19 GMT", 35 | "Age": "0", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2140-IAD, cache-pao17420-PAO", 38 | "X-Cache": "MISS, MISS", 39 | "X-Cache-Hits": "0, 0", 40 | "X-Timer": "S1554864920.631140,VS0,VE108", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unsplash [![Build Status](https://travis-ci.org/waynehoover/unsplash-elixir.svg?branch=master)](https://travis-ci.org/waynehoover/unsplash-elixir) [![Hex pm](http://img.shields.io/hexpm/v/unsplash.svg?style=flat)](https://hex.pm/packages/unsplash) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/9ecf49d0c73e4b268e77b34e766e149a)](https://www.codacy.com/app/waynehoover/unsplash-elixir?utm_source=github.com&utm_medium=referral&utm_content=waynehoover/unsplash-elixir&utm_campaign=Badge_Grade) 2 | 3 | [Unsplash](https://unsplash.com) API wrapper in Elixir. 4 | 5 | 6 | ## Exmaple Usage 7 | 8 | * `Unsplash.Photos.search(query: "Austin", catgeroy: "2") |> Enum.take(1)` 9 | * `Unsplash.Collections.all |> Enum.take(1)` 10 | * All [API endpoints](https://unsplash.com/documentation) are supported. See the [documentation](http://hexdocs.pm/unsplash/Unsplash.html) for full list. 11 | 12 | Each API call that is paginated returns a stream. You can resolve the stream by calling any Enum function, this way you don't have to think about pagination. For example to get one random photo: `Unsplash.Photos.random |> Enum.take(1)` or to get 100 random photos: `Unsplash.Photos.random |> Enum.take(100)`. 13 | 14 | 15 | ## Configuration 16 | 17 | See the `secrets.exs` file on what configuration variables need to be configured. 18 | 19 | 20 | ## Authorization 21 | 22 | Get an auth code by directing a user to the url generated by this command (replace the scope with what you would like): 23 | `Unsplash.OAuth.authorize_url! scope: "public read_user write_user read_photos write_photos write_likes read_collections write_collections"` 24 | 25 | After the user grants access, she will be redirected back to your redirect_uri whith a `code` query paramater, which you then set like this: 26 | `Unsplash.OAuth.authorize!(code: auth_code_from_the_callback)` 27 | 28 | Now every API call will use the access_code gerenated in the above step automatically. 29 | 30 | 31 | ## Installation 32 | 33 | 1. Add unsplash to your list of dependencies in `mix.exs`: 34 | ```elixir 35 | def deps do 36 | [{:unsplash, "~> 1.1.0"}] 37 | end 38 | ``` 39 | 40 | 2. Ensure unsplash is started before your application: 41 | ```elixir 42 | def application do 43 | [applications: [:unsplash]] 44 | end 45 | ``` 46 | -------------------------------------------------------------------------------- /test/unsplash/collections_test.exs: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.CollectionsTest do 2 | use ExUnit.Case, async: false 3 | use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney 4 | 5 | test "Unsplash.Collections.all" do 6 | use_cassette "collections" do 7 | response = Unsplash.Collections.all() |> Enum.at(0) 8 | assert response 9 | refute response |> Enum.into(%{}) |> Map.get("errors") 10 | end 11 | end 12 | 13 | test "Unsplash.Collections.featured" do 14 | use_cassette "collections_featured" do 15 | response = Unsplash.Collections.featured() |> Enum.at(0) 16 | assert response 17 | refute response |> Enum.into(%{}) |> Map.get("errors") 18 | end 19 | end 20 | 21 | test "Unsplash.Collections.get(id)" do 22 | use_cassette "collections_id" do 23 | response = Unsplash.Collections.get("175361") |> Enum.to_list() 24 | assert response 25 | refute response |> Enum.into(%{}) |> Map.get("errors") 26 | end 27 | end 28 | 29 | test "Unsplash.Collections.get_related(id)" do 30 | use_cassette "collections_get_related_id" do 31 | response = Unsplash.Collections.get_related("175361") |> Enum.at(0) 32 | assert response 33 | refute response |> Enum.into(%{}) |> Map.get("errors") 34 | end 35 | end 36 | 37 | test "Unsplash.Collections.photos(id)" do 38 | use_cassette "collections_photos_id" do 39 | response = Unsplash.Collections.photos("175361") |> Enum.at(0) 40 | assert response 41 | refute response |> Enum.into(%{}) |> Map.get("errors") 42 | end 43 | end 44 | 45 | test "Unsplash.Collections.related_photos(id)" do 46 | use_cassette "collections_related_photos_id" do 47 | response = Unsplash.Collections.related_photos("175361") |> Enum.at(0) 48 | assert response 49 | refute response |> Enum.into(%{}) |> Map.get("errors") 50 | end 51 | end 52 | 53 | # Below ToDo requires oAuth token 54 | @tag skip: true 55 | test "Unsplash.Collections.create(opts)" do 56 | end 57 | 58 | @tag skip: true 59 | test "Unsplash.Collections.update(id, opts)" do 60 | end 61 | 62 | @tag skip: true 63 | test "Unsplash.Collections.delete(id)" do 64 | end 65 | 66 | @tag skip: true 67 | test "Unsplash.Collections.add_photo(id, photo_id)" do 68 | end 69 | 70 | @tag skip: true 71 | test "Unsplash.Collections.remove_photo(id, photo_id)" do 72 | end 73 | end 74 | -------------------------------------------------------------------------------- /test/unsplash/photos_test.exs: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.PhotosTest do 2 | use ExUnit.Case, async: false 3 | use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney 4 | 5 | test "Unsplash.Photos.all" do 6 | use_cassette "photos" do 7 | response = Unsplash.Photos.all() |> Enum.at(0) 8 | assert response 9 | refute response |> Enum.into(%{}) |> Map.get("errors") 10 | end 11 | end 12 | 13 | test "Unsplash.Photos.random(opts)" do 14 | use_cassette "photos_random" do 15 | response = Unsplash.Photos.random(query: "nature") |> Enum.to_list() 16 | assert response 17 | refute response |> Enum.into(%{}) |> Map.get("errors") 18 | end 19 | end 20 | 21 | test "Unsplash.Photos.statistics(id)" do 22 | use_cassette "photos_statistics" do 23 | response = Unsplash.Photos.statistics("0XR2s9D3PLI") |> Enum.to_list() 24 | assert response 25 | refute response |> Enum.into(%{}) |> Map.get("errors") 26 | end 27 | end 28 | 29 | test "Unsplash.Photos.download_link(id)" do 30 | use_cassette "photos_download_link" do 31 | response = Unsplash.Photos.download_link("0XR2s9D3PLI") |> Enum.to_list() 32 | assert response 33 | refute response |> Enum.into(%{}) |> Map.get("errors") 34 | end 35 | end 36 | 37 | test "Unsplash.Photos.get(id)" do 38 | use_cassette "photos_id" do 39 | response = Unsplash.Photos.get("0XR2s9D3PLI") |> Enum.to_list() 40 | assert response 41 | refute response |> Enum.into(%{}) |> Map.get("errors") 42 | end 43 | end 44 | 45 | @tag skip: true 46 | test "Unsplash.Photos.update(id, opts)" do 47 | use_cassette "update_photo" do 48 | response = 49 | Unsplash.Photos.update("0XR2s9D3PLI", location: [name: "Bishop"]) |> Enum.to_list() 50 | 51 | assert response 52 | refute response |> Enum.into(%{}) |> Map.get("errors") 53 | end 54 | end 55 | 56 | @tag skip: true 57 | test "Unsplash.Photos.like(id)" do 58 | use_cassette "like_photo" do 59 | response = Unsplash.Photos.like("0XR2s9D3PLI") |> Enum.to_list() 60 | assert response 61 | refute response |> Enum.into(%{}) |> Map.get("errors") 62 | end 63 | end 64 | 65 | @tag skip: true 66 | test "Unsplash.Photos.unlike(id)" do 67 | use_cassette "unlike_photo" do 68 | response = Unsplash.Photos.unlike("0XR2s9D3PLI") 69 | assert response 70 | refute response |> Enum.into(%{}) |> Map.get("errors") 71 | end 72 | end 73 | end 74 | -------------------------------------------------------------------------------- /test/unsplash/users_test.exs: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.UsersTest do 2 | use ExUnit.Case, async: false 3 | use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney 4 | 5 | test "Unsplash.Users.get(username)" do 6 | use_cassette "users_username" do 7 | response = Unsplash.Users.get("believenyaself") |> Enum.to_list() 8 | assert response 9 | refute response |> Enum.into(%{}) |> Map.get("errors") 10 | end 11 | end 12 | 13 | test "Unsplash.Users.portfolio(username)" do 14 | use_cassette "users_username_portfolio" do 15 | response = Unsplash.Users.portfolio("believenyaself") 16 | assert response |> Map.get("url") 17 | refute response |> Enum.into(%{}) |> Map.get("errors") 18 | end 19 | end 20 | 21 | test "Unsplash.Users.photos(username)" do 22 | use_cassette "users_username_photos" do 23 | response = Unsplash.Users.photos("believenyaself", stats: true) |> Enum.at(0) 24 | assert response 25 | refute response |> Enum.into(%{}) |> Map.get("errors") 26 | end 27 | end 28 | 29 | test "Unsplash.Users.likes(username)" do 30 | use_cassette "users_username_likes" do 31 | response = Unsplash.Users.likes("believenyaself") |> Enum.to_list() 32 | assert response 33 | refute response |> Enum.into(%{}) |> Map.get("errors") 34 | end 35 | end 36 | 37 | test "Unsplash.Users.collections(username)" do 38 | use_cassette "users_username_collections" do 39 | response = Unsplash.Users.collections("believenyaself") |> Enum.to_list() 40 | assert response 41 | refute response |> Enum.into(%{}) |> Map.get("errors") 42 | end 43 | end 44 | 45 | test "Unsplash.Users.statistics(username)" do 46 | use_cassette "users_username_statistics" do 47 | response = Unsplash.Users.statistics("believenyaself") |> Enum.to_list() 48 | assert response 49 | refute response |> Enum.into(%{}) |> Map.get("errors") 50 | end 51 | end 52 | 53 | @tag skip: true 54 | test "Unsplash.Users.me" do 55 | use_cassette "me" do 56 | response = Unsplash.Users.me() |> Enum.to_list() 57 | assert response 58 | refute response |> Enum.into(%{}) |> Map.get("errors") 59 | end 60 | end 61 | 62 | @tag skip: true 63 | test "Unsplash.Users.update_me" do 64 | use_cassette "update_me" do 65 | response = 66 | Unsplash.Users.update_me( 67 | first_name: "Elixir", 68 | last_name: "Rocks", 69 | email: "elixir-#{Enum.take_random(?a..?z, 5)}@elixir-lang.org", 70 | url: "http://elixir-lang.org/", 71 | location: "São Paulo", 72 | bio: 73 | "Elixir is a dynamic, functional language designed for building scalable and maintainable applications.", 74 | instagram_username: "elixirlang" 75 | ) 76 | |> Enum.to_list() 77 | 78 | assert response 79 | refute response |> Enum.into(%{}) |> Map.get("errors") 80 | end 81 | end 82 | end 83 | -------------------------------------------------------------------------------- /lib/unsplash/utils/o_auth.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Utils.OAuth do 2 | @moduledoc ~S""" 3 | Functions for user oAuth authentication. 4 | 5 | Example usage: 6 | 7 | `Unsplash.OAuth.authorize_url!(scope: "public read_user write_user read_photos write_photos write_likes read_collections write_collections")` 8 | `Unsplash.OAuth.authorize!(code: auth_code_from_the_callback_above)` 9 | 10 | Now all calls will be authorized. 11 | """ 12 | 13 | @doc false 14 | use OAuth2.Strategy 15 | 16 | def client do 17 | OAuth2.Client.new( 18 | strategy: __MODULE__, 19 | client_id: Application.get_env(:unsplash, :application_id), 20 | client_secret: Application.get_env(:unsplash, :application_secret), 21 | redirect_uri: Application.get_env(:unsplash, :application_redirect_uri), 22 | site: "https://api.unsplash.com", 23 | authorize_url: "https://unsplash.com/oauth/authorize", 24 | token_url: "https://unsplash.com/oauth/token" 25 | ) 26 | end 27 | 28 | @doc ~S""" 29 | Generates the authorization url which then authenticates with the user. 30 | 31 | The `scope` option should be space seperated string of requested scopes. 32 | 33 | Possible scopes: 34 | * `public` Default. Read public data. 35 | * `read_user` Access user’s private data. 36 | * `write_user` Update the user’s profile. 37 | * `read_photos` Read private data from the user’s photos. 38 | * `write_photos` Upload photos on the user’s behalf. 39 | * `write_likes` Like or unlike a photo on the user’s behalf 40 | * `write_followers` Follow or unfollow a user on the user’s behalf. 41 | * `read_collections` View a user’s private collections. 42 | * `write_collections` Create and update a user’s collections. 43 | 44 | ## Examples 45 | iex> url = Unsplash.Utils.OAuth.authorize_url! scope: "public read_user write_user read_photos write_photos write_likes read_collections write_collections" 46 | iex> is_binary(url) 47 | true 48 | 49 | """ 50 | def authorize_url!(params \\ []) do 51 | client() 52 | |> OAuth2.Client.authorize_url!(params) 53 | end 54 | 55 | # Get and store the token 56 | def authorize!(params \\ [], headers \\ [], options \\ []) do 57 | client() 58 | |> OAuth2.Client.get_token!(params, headers, options) 59 | |> store_token 60 | end 61 | 62 | # Callbacks 63 | def authorize_url(client, params) do 64 | client 65 | |> OAuth2.Strategy.AuthCode.authorize_url(params) 66 | end 67 | 68 | def get_token(client, params, headers) do 69 | client 70 | |> OAuth2.Strategy.AuthCode.get_token(params, headers) 71 | end 72 | 73 | ## Token storage in an Agent 74 | def start do 75 | Agent.start_link(fn -> %{} end, name: __MODULE__) 76 | end 77 | 78 | def store_token(token) do 79 | Agent.update(__MODULE__, &Map.put(&1, :token, token)) 80 | token 81 | end 82 | 83 | defdelegate un_authorize!, to: __MODULE__, as: :remove_token 84 | 85 | def remove_token do 86 | Agent.update(__MODULE__, &Map.put(&1, :token, nil)) 87 | end 88 | 89 | # Get the Oauth.AccessToken struct from the agent 90 | def get_access_token do 91 | process_token(Agent.get(__MODULE__, &Map.get(&1, :token))) 92 | end 93 | 94 | # If the token is expired refresh it. 95 | def process_token(token) when is_map(token) do 96 | # if OAuth2.AccessToken.expired?(token) do 97 | # token = token |> OAuth2.AccessToken.refresh! |> store_token 98 | # end 99 | token.access_token 100 | end 101 | 102 | # all other cases 103 | def process_token(_token), do: nil 104 | end 105 | -------------------------------------------------------------------------------- /lib/unsplash/collections.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Collections do 2 | @moduledoc ~S""" 3 | All /collections/* api endpoints 4 | """ 5 | 6 | alias Unsplash.Utils.{API, ResultStream} 7 | 8 | @doc ~S""" 9 | GET /collections 10 | """ 11 | def all(opts \\ []) do 12 | ResultStream.new("/collections", opts) 13 | end 14 | 15 | @doc ~S""" 16 | GET /collections/featured 17 | """ 18 | def featured(opts \\ []) do 19 | ResultStream.new("/collections/featured", opts) 20 | end 21 | 22 | @doc ~S""" 23 | GET /collections/:id 24 | 25 | Args: 26 | * `id` - The collections ID 27 | """ 28 | def get(id) do 29 | ResultStream.new("/collections/#{id}") 30 | end 31 | 32 | @doc ~S""" 33 | GET /collections/:id/related 34 | 35 | Args: 36 | * `id` - The collections ID 37 | """ 38 | def get_related(id) do 39 | ResultStream.new("/collections/#{id}/related") 40 | end 41 | 42 | @doc ~S""" 43 | GET /collections/:id/photos 44 | 45 | Args: 46 | * `id` - The collections ID 47 | """ 48 | def photos(id) do 49 | ResultStream.new("/collections/#{id}/photos") 50 | end 51 | 52 | @doc ~S""" 53 | GET /collections/:id/related 54 | 55 | Args: 56 | * `id` - The collections ID 57 | """ 58 | def related_photos(id) do 59 | ResultStream.new("/collections/#{id}/related") 60 | end 61 | 62 | @doc ~S""" 63 | POST /collections 64 | 65 | Args: 66 | * `opts` - Keyword list of options 67 | 68 | Options: 69 | * `title` - The title of the collection. (Required.) 70 | * `description` - The collection’s description. (Optional.) 71 | * `private` - Whether to make this collection private. (Optional; default false). 72 | 73 | Requires `write_collections` scope 74 | """ 75 | def create(opts \\ []) do 76 | params = 77 | opts 78 | |> Keyword.take([:title, :description, :private]) 79 | |> Enum.into(%{}) 80 | |> Jason.encode!() 81 | 82 | API.post!("/collections", params).body |> Jason.decode!() 83 | end 84 | 85 | @doc ~S""" 86 | PUT /collections/:id 87 | 88 | Args: 89 | * `opts` - Keyword list of options 90 | 91 | Options: 92 | * `title` - The title of the collection. (Required.) 93 | * `description` - The collection’s description. (Optional.) 94 | * `private` - Whether to make this collection private. (Optional; default false). 95 | 96 | Requires `write_collections` scope 97 | """ 98 | def update(id, opts \\ []) do 99 | params = 100 | opts 101 | |> Keyword.take([:title, :description, :private]) 102 | |> Enum.into(%{}) 103 | |> Jason.encode!() 104 | 105 | API.put!("/collections/#{id}", params).body |> Jason.decode!() 106 | end 107 | 108 | @doc ~S""" 109 | DELETE /collections/:id 110 | 111 | Requires `write_collections` scope 112 | """ 113 | def delete(id) do 114 | API.delete!("/collections/#{id}").body |> Jason.decode!() 115 | end 116 | 117 | @doc ~S""" 118 | POST /collections/:collection_id/add 119 | 120 | Args: 121 | * `collection_id` - The collection’s ID. Required. 122 | * `photo_id` - The photo’s ID. Required. 123 | 124 | Requires `write_collections` scope 125 | """ 126 | def add_photo(id, photo_id) do 127 | params = %{photo_id: photo_id} |> Jason.decode!() 128 | API.post!("/collections/#{id}/add", params).body |> Jason.decode!() 129 | end 130 | 131 | @doc ~S""" 132 | DELETE /collections/:collection_id/add 133 | 134 | Args: 135 | * `collection_id` - The collection’s ID. Required. 136 | * `photo_id` - The photo’s ID. Required. 137 | 138 | Requires `write_collections` scope 139 | """ 140 | def remove_photo(id, photo_id) do 141 | params = %{photo_id: photo_id} |> Jason.decode!() 142 | API.delete!("/collections/#{id}/remove", params).body |> Jason.decode!() 143 | end 144 | end 145 | -------------------------------------------------------------------------------- /lib/unsplash/users.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Users do 2 | @moduledoc ~S""" 3 | API endpoints for current-user and users 4 | """ 5 | 6 | alias Unsplash.Utils.{API, ResultStream} 7 | 8 | @doc ~S""" 9 | GET /users/:username 10 | 11 | The image URLs returned for the user’s profile image are instances of dynamically resizable image URLs. 12 | 13 | Args: 14 | * `username` - the username string 15 | """ 16 | def get(username) do 17 | ResultStream.new("/users/#{username}") 18 | end 19 | 20 | @doc ~S""" 21 | GET /users/:username/portfolio 22 | 23 | Retrieve a single user’s portfolio link. 24 | 25 | Args: 26 | * `username` - The user’s username. Required. 27 | """ 28 | def portfolio(username) do 29 | API.get!("/users/#{username}/portfolio").body |> Jason.decode!() 30 | end 31 | 32 | @doc ~S""" 33 | GET /users/:username/photos 34 | 35 | Args: 36 | * `username` The user’s username. Required. 37 | * `opts` keyword list of optional params 38 | 39 | Options: 40 | * `page` Page number to retrieve. (Optional; default: 1) 41 | * `per_page` Number of items per page. (Optional; default: 10) 42 | * `order_by` How to sort the photos. Optional. (Valid values: latest, oldest, popular; default: latest) 43 | * `stats` how the stats for each user’s photo. (Optional; default: false) 44 | * `resolution` The frequency of the stats. (Optional; default: “days”) 45 | * `quantity` The amount of for each stat. (Optional; default: 30) 46 | """ 47 | def photos(username, opts \\ []) do 48 | ResultStream.new("/users/#{username}/photos", opts) 49 | end 50 | 51 | @doc ~S""" 52 | GET /users/:username/likes 53 | 54 | Args: 55 | * `username` the username string 56 | * `opts` keyword list of optional params 57 | 58 | Options: 59 | * `order_by` How to sort the photos. Optional. (Valid values: latest, oldest, popular; default: latest) 60 | """ 61 | def likes(username, opts \\ []) do 62 | ResultStream.new("/users/#{username}/likes", opts) 63 | end 64 | 65 | @doc ~S""" 66 | GET /users/:username/collections 67 | 68 | Args: 69 | * `username` - The user’s username. Required 70 | """ 71 | def collections(username, opts \\ []) do 72 | ResultStream.new("/users/#{username}/collections", opts) 73 | end 74 | 75 | @doc ~S""" 76 | GET /users/:username/statistics 77 | 78 | Args: 79 | * `username` -The user’s username. Required. 80 | * `opts` keyword list of optional params 81 | 82 | Options: 83 | * `resolution` -The frequency of the stats. (Optional; default: “days”) 84 | * `quantity` -The amount of for each stat. (Optional; default: 30) 85 | """ 86 | def statistics(username, opts \\ []) do 87 | ResultStream.new("/users/#{username}/statistics", opts) 88 | end 89 | 90 | @doc ~S""" 91 | GET /me 92 | 93 | Requires `read_user` scope 94 | """ 95 | def me do 96 | ResultStream.new("/me") 97 | end 98 | 99 | @doc ~S""" 100 | PUT /me 101 | 102 | Args: 103 | * `opts` keyword list of optional params 104 | 105 | Options: 106 | * `username` - Username. 107 | * `first_name` - First name. 108 | * `last_name` - Last name. 109 | * `email` - Email. 110 | * `url` - Portfolio/personal URL. 111 | * `location` - Location. 112 | * `bio` - About/bio. 113 | * `instagram_username` - Instagram username. 114 | 115 | Requires `write_user` scope 116 | """ 117 | def update_me(opts \\ []) do 118 | params = 119 | opts 120 | |> Keyword.take([ 121 | :username, 122 | :first_name, 123 | :last_name, 124 | :email, 125 | :url, 126 | :location, 127 | :bio, 128 | :instagram_username 129 | ]) 130 | |> Enum.into(%{}) 131 | |> Jason.encode!() 132 | 133 | API.put!("/me", params).body |> Jason.decode!() 134 | end 135 | end 136 | -------------------------------------------------------------------------------- /lib/unsplash/photos.ex: -------------------------------------------------------------------------------- 1 | defmodule Unsplash.Photos do 2 | @moduledoc ~S""" 3 | All /photos/* api endpoints 4 | """ 5 | 6 | alias Unsplash.Utils.{API, ResultStream} 7 | 8 | @doc ~S""" 9 | GET /photos 10 | 11 | Args: 12 | * `opts` - Keyword list of options 13 | 14 | Options: 15 | * `order_by` - How to sort the photos. Optional. (Valid values: latest, oldest, popular; default: latest) 16 | """ 17 | def all(opts \\ []) do 18 | ResultStream.new("/photos", opts) 19 | end 20 | 21 | @doc ~S""" 22 | GET /photos/:id 23 | 24 | Returns instances of dynamically resizable image URLs. 25 | 26 | Args: 27 | * `id` - the photo id 28 | """ 29 | def get(id) do 30 | ResultStream.new("/photos/#{id}") 31 | end 32 | 33 | @doc ~S""" 34 | GET /photos/random 35 | 36 | Returns instances of dynamically resizable image URLs. 37 | 38 | Args: 39 | * `opts` - Keyword list of options 40 | 41 | Options: 42 | * `collections` - Public collection ID(‘s) to filter selection. If multiple, comma-separated 43 | * `featured` - Limit selection to featured photos. 44 | * `username` - Limit selection to a single user. 45 | * `query` - Limit selection to photos matching a search term. 46 | * `orientation` - Filter search results by photo orientation. Valid values are landscape, portrait, and squarish. 47 | * `count` - The number of photos to return. (Default: 1; max: 30) 48 | """ 49 | def random(opts \\ []) do 50 | ResultStream.new("/photos/random", opts) 51 | end 52 | 53 | @doc ~S""" 54 | POST /photos/:id/statistics 55 | 56 | Args 57 | * `id` - The public id of the photo. Required. 58 | * `opts` - Keyword list of options 59 | 60 | Options: 61 | * `resolution` - The frequency of the stats. (Optional; default: “days”) 62 | * `quantity` - The amount of for each stat. (Optional; default: 30) 63 | """ 64 | def statistics(id, opts \\ []) do 65 | ResultStream.new("/photos/#{id}/statistics", opts) 66 | end 67 | 68 | @doc ~S""" 69 | GET /photos/:id/download 70 | 71 | Args: 72 | * `id` - the photo id 73 | """ 74 | def download_link(id) do 75 | API.get!("/photos/#{id}/download").body |> Jason.decode!() 76 | end 77 | 78 | @doc ~S""" 79 | PUT /photos/:id 80 | 81 | Args: 82 | * `id` - The photo’s ID. Required. 83 | * `opts` - Keyword list of options 84 | 85 | Options: 86 | * `location[latitude]` - The photo location’s latitude (Optional) 87 | * `location[longitude]` - The photo location’s longitude (Optional) 88 | * `location[name]` - The photo location’s name (Optional) 89 | * `location[city]` - The photo location’s city (Optional) 90 | * `location[country]` - The photo location’s country (Optional) 91 | * `location[confidential]` - The photo location’s confidentiality (Optional) 92 | * `exif[make]` - Camera’s brand (Optional) 93 | * `exif[model]` - Camera’s model (Optional) 94 | * `exif[exposure_time]` - Camera’s exposure time (Optional) 95 | * `exif[aperture_value]` - Camera’s aperture value (Optional) 96 | * `exif[focal_length]` - Camera’s focal length (Optional) 97 | * `exif[iso_speed_ratings]` - Camera’s iso (Optional) 98 | 99 | Requires the `write_photos` scope 100 | """ 101 | def update(id, opts \\ []) do 102 | optional_params = [ 103 | location: [:latitude, :longitude, :name, :city, :country, :confidential], 104 | exif: [ 105 | :make, 106 | :model, 107 | :exposure_time, 108 | :exposure_value, 109 | :aperture_value, 110 | :focal_length, 111 | :iso_speed_ratings 112 | ] 113 | ] 114 | 115 | params = 116 | opts 117 | |> Keyword.take(optional_params) 118 | |> Enum.into(%{}) 119 | |> Jason.encode!() 120 | 121 | API.put!("/photos/#{id}", params).body |> Jason.decode!() 122 | end 123 | 124 | @doc ~S""" 125 | POST /photos/:id/like 126 | 127 | Args: 128 | * `id` - the photo id 129 | 130 | Requires the `write_likes` scope 131 | """ 132 | def like(id) do 133 | API.post!("/photos/#{id}/like", []).body |> Jason.decode!() 134 | end 135 | 136 | @doc ~S""" 137 | DELETE /photos/:id/like 138 | 139 | Args: 140 | * `id` - the photo id 141 | """ 142 | def unlike(id) do 143 | API.delete!("/photos/#{id}/like").body |> Jason.decode!() 144 | end 145 | end 146 | -------------------------------------------------------------------------------- /fixture/vcr_cassettes/photos_random.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/photos/random?query=nature" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":\"pSIZJPBMAPY\",\"created_at\":\"2019-03-21T16:00:09-04:00\",\"updated_at\":\"2019-03-25T15:02:24-04:00\",\"width\":3024,\"height\":4032,\"color\":\"#F3EEE2\",\"description\":null,\"alt_description\":\"snow covered waterfalls during daytime\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1553198378-cec7b0855ced?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1553198378-cec7b0855ced?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1553198378-cec7b0855ced?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1553198378-cec7b0855ced?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1553198378-cec7b0855ced?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/pSIZJPBMAPY\",\"html\":\"https://unsplash.com/photos/pSIZJPBMAPY\",\"download\":\"https://unsplash.com/photos/pSIZJPBMAPY/download\",\"download_location\":\"https://api.unsplash.com/photos/pSIZJPBMAPY/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"jU-C6hOy-mg\",\"updated_at\":\"2019-03-26T12:34:22-04:00\",\"username\":\"bloodymizz\",\"name\":\"Miriam Stephanie\",\"first_name\":\"Miriam\",\"last_name\":\"Stephanie\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":null,\"location\":\"Iceland\",\"links\":{\"self\":\"https://api.unsplash.com/users/bloodymizz\",\"html\":\"https://unsplash.com/@bloodymizz\",\"photos\":\"https://api.unsplash.com/users/bloodymizz/photos\",\"likes\":\"https://api.unsplash.com/users/bloodymizz/likes\",\"portfolio\":\"https://api.unsplash.com/users/bloodymizz/portfolio\",\"following\":\"https://api.unsplash.com/users/bloodymizz/following\",\"followers\":\"https://api.unsplash.com/users/bloodymizz/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1553198175265-16f9bd806ad3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1553198175265-16f9bd806ad3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1553198175265-16f9bd806ad3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"buntesisland\",\"total_collections\":0,\"total_likes\":42,\"total_photos\":9,\"accepted_tos\":true},\"exif\":{\"make\":\"Apple\",\"model\":\"iPhone 7\",\"exposure_time\":\"1/694\",\"aperture\":\"1.8\",\"focal_length\":\"4.0\",\"iso\":20},\"location\":{\"title\":\"Seljalandsfoss, Iceland\",\"name\":\"Seljalandsfoss\",\"city\":null,\"country\":\"Iceland\",\"position\":{\"latitude\":null,\"longitude\":null}},\"views\":2759,\"downloads\":21}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "19", 28 | "X-Request-Id": "715fe2f6-b5ea-490a-84c3-02983751f235", 29 | "X-Runtime": "0.210497", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "2883", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:14 GMT", 35 | "Age": "0", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2131-IAD, cache-pao17420-PAO", 38 | "X-Cache": "MISS, MISS", 39 | "X-Cache-Hits": "0, 0", 40 | "X-Timer": "S1554864914.962942,VS0,VE289", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /mix.lock: -------------------------------------------------------------------------------- 1 | %{ 2 | "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"}, 3 | "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"}, 4 | "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, 5 | "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm"}, 6 | "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"}, 7 | "exactor": {:hex, :exactor, "2.2.4", "5efb4ddeb2c48d9a1d7c9b465a6fffdd82300eb9618ece5d34c3334d5d7245b1", [:mix], [], "hexpm"}, 8 | "excoveralls": {:hex, :excoveralls, "0.12.0", "50e17a1b116fdb7facc2fe127a94db246169f38d7627b391376a0bc418413ce1", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, 9 | "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm"}, 10 | "exvcr": {:hex, :exvcr, "0.11.0", "59d5c11c9022852e9265d223fbde38c512cc350404f695a7b838cd7fb8dabed8", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"}, 11 | "hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.5", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, 12 | "httpoison": {:hex, :httpoison, "1.6.2", "ace7c8d3a361cebccbed19c283c349b3d26991eff73a1eaaa8abae2e3c8089b6", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, 13 | "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, 14 | "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"}, 15 | "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm"}, 16 | "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, 17 | "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"}, 18 | "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm"}, 19 | "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, 20 | "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm"}, 21 | "nimble_parsec": {:hex, :nimble_parsec, "0.5.2", "1d71150d5293d703a9c38d4329da57d3935faed2031d64bc19e77b654ef2d177", [:mix], [], "hexpm"}, 22 | "oauth2": {:hex, :oauth2, "2.0.0", "338382079fe16c514420fa218b0903f8ad2d4bfc0ad0c9f988867dfa246731b0", [:mix], [{:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, 23 | "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"}, 24 | "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, 25 | "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm"}, 26 | "unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm"}, 27 | } 28 | -------------------------------------------------------------------------------- /fixture/vcr_cassettes/photos_statistics.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/photos/0XR2s9D3PLI/statistics?" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":\"0XR2s9D3PLI\",\"downloads\":{\"total\":202,\"historical\":{\"change\":2,\"resolution\":\"days\",\"quantity\":30,\"values\":[{\"date\":\"2019-03-10\",\"value\":0},{\"date\":\"2019-03-11\",\"value\":0},{\"date\":\"2019-03-12\",\"value\":0},{\"date\":\"2019-03-13\",\"value\":0},{\"date\":\"2019-03-14\",\"value\":0},{\"date\":\"2019-03-15\",\"value\":0},{\"date\":\"2019-03-16\",\"value\":0},{\"date\":\"2019-03-17\",\"value\":0},{\"date\":\"2019-03-18\",\"value\":0},{\"date\":\"2019-03-19\",\"value\":0},{\"date\":\"2019-03-20\",\"value\":0},{\"date\":\"2019-03-21\",\"value\":0},{\"date\":\"2019-03-22\",\"value\":0},{\"date\":\"2019-03-23\",\"value\":0},{\"date\":\"2019-03-24\",\"value\":0},{\"date\":\"2019-03-25\",\"value\":0},{\"date\":\"2019-03-26\",\"value\":0},{\"date\":\"2019-03-27\",\"value\":0},{\"date\":\"2019-03-28\",\"value\":0},{\"date\":\"2019-03-29\",\"value\":1},{\"date\":\"2019-03-30\",\"value\":0},{\"date\":\"2019-03-31\",\"value\":0},{\"date\":\"2019-04-01\",\"value\":0},{\"date\":\"2019-04-02\",\"value\":0},{\"date\":\"2019-04-03\",\"value\":0},{\"date\":\"2019-04-04\",\"value\":0},{\"date\":\"2019-04-05\",\"value\":0},{\"date\":\"2019-04-06\",\"value\":1},{\"date\":\"2019-04-07\",\"value\":0},{\"date\":\"2019-04-08\",\"value\":0}]}},\"views\":{\"total\":696,\"historical\":{\"change\":5,\"resolution\":\"days\",\"quantity\":30,\"values\":[{\"date\":\"2019-03-10\",\"value\":2},{\"date\":\"2019-03-11\",\"value\":0},{\"date\":\"2019-03-12\",\"value\":1},{\"date\":\"2019-03-13\",\"value\":0},{\"date\":\"2019-03-14\",\"value\":0},{\"date\":\"2019-03-15\",\"value\":0},{\"date\":\"2019-03-16\",\"value\":0},{\"date\":\"2019-03-17\",\"value\":0},{\"date\":\"2019-03-18\",\"value\":0},{\"date\":\"2019-03-19\",\"value\":0},{\"date\":\"2019-03-20\",\"value\":0},{\"date\":\"2019-03-21\",\"value\":0},{\"date\":\"2019-03-22\",\"value\":0},{\"date\":\"2019-03-23\",\"value\":1},{\"date\":\"2019-03-24\",\"value\":0},{\"date\":\"2019-03-25\",\"value\":0},{\"date\":\"2019-03-26\",\"value\":1},{\"date\":\"2019-03-27\",\"value\":0},{\"date\":\"2019-03-28\",\"value\":0},{\"date\":\"2019-03-29\",\"value\":0},{\"date\":\"2019-03-30\",\"value\":0},{\"date\":\"2019-03-31\",\"value\":0},{\"date\":\"2019-04-01\",\"value\":0},{\"date\":\"2019-04-02\",\"value\":0},{\"date\":\"2019-04-03\",\"value\":0},{\"date\":\"2019-04-04\",\"value\":0},{\"date\":\"2019-04-05\",\"value\":0},{\"date\":\"2019-04-06\",\"value\":0},{\"date\":\"2019-04-07\",\"value\":0},{\"date\":\"2019-04-08\",\"value\":0}]}},\"likes\":{\"total\":0,\"historical\":{\"change\":0,\"resolution\":\"days\",\"quantity\":30,\"values\":[{\"date\":\"2019-03-10\",\"value\":0},{\"date\":\"2019-03-11\",\"value\":0},{\"date\":\"2019-03-12\",\"value\":0},{\"date\":\"2019-03-13\",\"value\":0},{\"date\":\"2019-03-14\",\"value\":0},{\"date\":\"2019-03-15\",\"value\":0},{\"date\":\"2019-03-16\",\"value\":0},{\"date\":\"2019-03-17\",\"value\":0},{\"date\":\"2019-03-18\",\"value\":0},{\"date\":\"2019-03-19\",\"value\":0},{\"date\":\"2019-03-20\",\"value\":0},{\"date\":\"2019-03-21\",\"value\":0},{\"date\":\"2019-03-22\",\"value\":0},{\"date\":\"2019-03-23\",\"value\":0},{\"date\":\"2019-03-24\",\"value\":0},{\"date\":\"2019-03-25\",\"value\":0},{\"date\":\"2019-03-26\",\"value\":0},{\"date\":\"2019-03-27\",\"value\":0},{\"date\":\"2019-03-28\",\"value\":0},{\"date\":\"2019-03-29\",\"value\":0},{\"date\":\"2019-03-30\",\"value\":0},{\"date\":\"2019-03-31\",\"value\":0},{\"date\":\"2019-04-01\",\"value\":0},{\"date\":\"2019-04-02\",\"value\":0},{\"date\":\"2019-04-03\",\"value\":0},{\"date\":\"2019-04-04\",\"value\":0},{\"date\":\"2019-04-05\",\"value\":0},{\"date\":\"2019-04-06\",\"value\":0},{\"date\":\"2019-04-07\",\"value\":0},{\"date\":\"2019-04-08\",\"value\":0}]}}}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "40", 28 | "X-Request-Id": "b18bf5a5-59f7-448d-8985-6c926f0f02cc", 29 | "X-Runtime": "0.187383", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "3181", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:13 GMT", 35 | "Age": "2036", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2147-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864913.260245,VS0,VE0", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/users_username_statistics.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/users/believenyaself/statistics?" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":\"bHXqjvnKicM\",\"username\":\"believenyaself\",\"downloads\":{\"total\":4888,\"historical\":{\"change\":118,\"average\":4,\"resolution\":\"days\",\"quantity\":30,\"values\":[{\"date\":\"2019-03-10\",\"value\":4},{\"date\":\"2019-03-11\",\"value\":3},{\"date\":\"2019-03-12\",\"value\":5},{\"date\":\"2019-03-13\",\"value\":2},{\"date\":\"2019-03-14\",\"value\":3},{\"date\":\"2019-03-15\",\"value\":0},{\"date\":\"2019-03-16\",\"value\":2},{\"date\":\"2019-03-17\",\"value\":3},{\"date\":\"2019-03-18\",\"value\":0},{\"date\":\"2019-03-19\",\"value\":4},{\"date\":\"2019-03-20\",\"value\":3},{\"date\":\"2019-03-21\",\"value\":9},{\"date\":\"2019-03-22\",\"value\":1},{\"date\":\"2019-03-23\",\"value\":4},{\"date\":\"2019-03-24\",\"value\":2},{\"date\":\"2019-03-25\",\"value\":5},{\"date\":\"2019-03-26\",\"value\":3},{\"date\":\"2019-03-27\",\"value\":6},{\"date\":\"2019-03-28\",\"value\":23},{\"date\":\"2019-03-29\",\"value\":6},{\"date\":\"2019-03-30\",\"value\":3},{\"date\":\"2019-03-31\",\"value\":5},{\"date\":\"2019-04-01\",\"value\":5},{\"date\":\"2019-04-02\",\"value\":3},{\"date\":\"2019-04-03\",\"value\":3},{\"date\":\"2019-04-04\",\"value\":4},{\"date\":\"2019-04-05\",\"value\":1},{\"date\":\"2019-04-06\",\"value\":2},{\"date\":\"2019-04-07\",\"value\":2},{\"date\":\"2019-04-08\",\"value\":2}]}},\"views\":{\"total\":700384,\"historical\":{\"change\":22840,\"average\":761,\"resolution\":\"days\",\"quantity\":30,\"values\":[{\"date\":\"2019-03-10\",\"value\":496},{\"date\":\"2019-03-11\",\"value\":819},{\"date\":\"2019-03-12\",\"value\":939},{\"date\":\"2019-03-13\",\"value\":937},{\"date\":\"2019-03-14\",\"value\":737},{\"date\":\"2019-03-15\",\"value\":849},{\"date\":\"2019-03-16\",\"value\":708},{\"date\":\"2019-03-17\",\"value\":527},{\"date\":\"2019-03-18\",\"value\":761},{\"date\":\"2019-03-19\",\"value\":846},{\"date\":\"2019-03-20\",\"value\":954},{\"date\":\"2019-03-21\",\"value\":959},{\"date\":\"2019-03-22\",\"value\":975},{\"date\":\"2019-03-23\",\"value\":676},{\"date\":\"2019-03-24\",\"value\":459},{\"date\":\"2019-03-25\",\"value\":847},{\"date\":\"2019-03-26\",\"value\":891},{\"date\":\"2019-03-27\",\"value\":844},{\"date\":\"2019-03-28\",\"value\":865},{\"date\":\"2019-03-29\",\"value\":810},{\"date\":\"2019-03-30\",\"value\":524},{\"date\":\"2019-03-31\",\"value\":532},{\"date\":\"2019-04-01\",\"value\":851},{\"date\":\"2019-04-02\",\"value\":893},{\"date\":\"2019-04-03\",\"value\":880},{\"date\":\"2019-04-04\",\"value\":870},{\"date\":\"2019-04-05\",\"value\":739},{\"date\":\"2019-04-06\",\"value\":537},{\"date\":\"2019-04-07\",\"value\":456},{\"date\":\"2019-04-08\",\"value\":659}]}},\"likes\":{\"total\":32,\"historical\":{\"change\":3,\"average\":0,\"resolution\":\"days\",\"quantity\":30,\"values\":[{\"date\":\"2019-03-10\",\"value\":0},{\"date\":\"2019-03-11\",\"value\":0},{\"date\":\"2019-03-12\",\"value\":0},{\"date\":\"2019-03-13\",\"value\":0},{\"date\":\"2019-03-14\",\"value\":0},{\"date\":\"2019-03-15\",\"value\":0},{\"date\":\"2019-03-16\",\"value\":0},{\"date\":\"2019-03-17\",\"value\":0},{\"date\":\"2019-03-18\",\"value\":0},{\"date\":\"2019-03-19\",\"value\":0},{\"date\":\"2019-03-20\",\"value\":0},{\"date\":\"2019-03-21\",\"value\":1},{\"date\":\"2019-03-22\",\"value\":0},{\"date\":\"2019-03-23\",\"value\":0},{\"date\":\"2019-03-24\",\"value\":0},{\"date\":\"2019-03-25\",\"value\":0},{\"date\":\"2019-03-26\",\"value\":0},{\"date\":\"2019-03-27\",\"value\":0},{\"date\":\"2019-03-28\",\"value\":0},{\"date\":\"2019-03-29\",\"value\":0},{\"date\":\"2019-03-30\",\"value\":0},{\"date\":\"2019-03-31\",\"value\":0},{\"date\":\"2019-04-01\",\"value\":0},{\"date\":\"2019-04-02\",\"value\":0},{\"date\":\"2019-04-03\",\"value\":0},{\"date\":\"2019-04-04\",\"value\":0},{\"date\":\"2019-04-05\",\"value\":0},{\"date\":\"2019-04-06\",\"value\":1},{\"date\":\"2019-04-07\",\"value\":0},{\"date\":\"2019-04-08\",\"value\":1}]}}}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "33", 28 | "X-Request-Id": "abc0f329-81ee-45bf-b47b-da97e6ec2a60", 29 | "X-Runtime": "0.050813", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "3319", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:18 GMT", 35 | "Age": "2028", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2139-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864918.200267,VS0,VE1", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/users_username.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/users/believenyaself" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":\"bHXqjvnKicM\",\"updated_at\":\"2019-01-15T18:59:17-05:00\",\"username\":\"believenyaself\",\"name\":\"Enya Hodgson\",\"first_name\":\"Enya\",\"last_name\":\"Hodgson \",\"twitter_username\":null,\"portfolio_url\":\"https://www.tumblr.com/blog/believenyaself\",\"bio\":null,\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/believenyaself\",\"html\":\"https://unsplash.com/@believenyaself\",\"photos\":\"https://api.unsplash.com/users/believenyaself/photos\",\"likes\":\"https://api.unsplash.com/users/believenyaself/likes\",\"portfolio\":\"https://api.unsplash.com/users/believenyaself/portfolio\",\"following\":\"https://api.unsplash.com/users/believenyaself/following\",\"followers\":\"https://api.unsplash.com/users/believenyaself/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":0,\"total_likes\":0,\"total_photos\":10,\"accepted_tos\":false,\"followed_by_user\":false,\"photos\":[{\"id\":\"8ZWFcHKnXRU\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1437927299554-445d12695824?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1437927299554-445d12695824?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1437927299554-445d12695824?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1437927299554-445d12695824?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1437927299554-445d12695824?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"ReYy_2LMfDk\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1437927197704-750d462472f0?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1437927197704-750d462472f0?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1437927197704-750d462472f0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1437927197704-750d462472f0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1437927197704-750d462472f0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"vTxzu4fbdZ0\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1437925079016-cf04843dde58?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1437925079016-cf04843dde58?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1437925079016-cf04843dde58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1437925079016-cf04843dde58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1437925079016-cf04843dde58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"badge\":null,\"downloads\":4888,\"tags\":{\"custom\":[{\"title\":\"sky\"},{\"title\":\"summer\"},{\"title\":\"travel\"},{\"title\":\"happy\"},{\"title\":\"outdoor\"}],\"aggregated\":[{\"title\":\"sky\"},{\"title\":\"summer\"},{\"title\":\"travel\"},{\"title\":\"tourism\"},{\"title\":\"river\"},{\"title\":\"natural\"},{\"title\":\"smile\"},{\"title\":\"happy\"},{\"title\":\"outdoor\"},{\"title\":\"city\"},{\"title\":\"architecture\"},{\"title\":\"urban\"},{\"title\":\"landscape\"},{\"title\":\"water\"},{\"title\":\"tower\"},{\"title\":\"landmark\"},{\"title\":\"scenic\"},{\"title\":\"structure\"},{\"title\":\"europe\"},{\"title\":\"old\"},{\"title\":\"sun\"},{\"title\":\"house\"},{\"title\":\"monument\"},{\"title\":\"town\"},{\"title\":\"historic\"},{\"title\":\"day\"},{\"title\":\"ancient\"},{\"title\":\"famou\"},{\"title\":\"building\"},{\"title\":\"cloud\"}]},\"followers_count\":0,\"following_count\":1,\"allow_messages\":true,\"numeric_id\":10166}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "32", 28 | "X-Request-Id": "dfbe82bf-5ef5-45de-8c28-077645240180", 29 | "X-Runtime": "0.030266", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "4047", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:17 GMT", 35 | "Age": "2026", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2144-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864918.800786,VS0,VE1", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /.credo.exs: -------------------------------------------------------------------------------- 1 | # This file contains the configuration for Credo and you are probably reading 2 | # this after creating it with `mix credo.gen.config`. 3 | # 4 | # If you find anything wrong or unclear in this file, please report an 5 | # issue on GitHub: https://github.com/rrrene/credo/issues 6 | # 7 | %{ 8 | # 9 | # You can have as many configs as you like in the `configs:` field. 10 | configs: [ 11 | %{ 12 | # 13 | # Run any exec using `mix credo -C `. If no exec name is given 14 | # "default" is used. 15 | # 16 | name: "default", 17 | # 18 | # These are the files included in the analysis: 19 | files: %{ 20 | # 21 | # You can give explicit globs or simply directories. 22 | # In the latter case `**/*.{ex,exs}` will be used. 23 | # 24 | included: ["lib/", "src/", "test/", "web/", "apps/"], 25 | excluded: [~r"/_build/", ~r"/deps/"] 26 | }, 27 | # 28 | # If you create your own checks, you must specify the source files for 29 | # them here, so they can be loaded by Credo before running the analysis. 30 | # 31 | requires: [], 32 | # 33 | # If you want to enforce a style guide and need a more traditional linting 34 | # experience, you can change `strict` to `true` below: 35 | # 36 | strict: false, 37 | # 38 | # If you want to use uncolored output by default, you can change `color` 39 | # to `false` below: 40 | # 41 | color: true, 42 | # 43 | # You can customize the parameters of any check by adding a second element 44 | # to the tuple. 45 | # 46 | # To disable a check put `false` as second element: 47 | # 48 | # {Credo.Check.Design.DuplicatedCode, false} 49 | # 50 | checks: [ 51 | # 52 | ## Consistency Checks 53 | # 54 | {Credo.Check.Consistency.ExceptionNames}, 55 | {Credo.Check.Consistency.LineEndings}, 56 | {Credo.Check.Consistency.ParameterPatternMatching}, 57 | {Credo.Check.Consistency.SpaceAroundOperators}, 58 | {Credo.Check.Consistency.SpaceInParentheses}, 59 | {Credo.Check.Consistency.TabsOrSpaces}, 60 | 61 | # 62 | ## Design Checks 63 | # 64 | # You can customize the priority of any check 65 | # Priority values are: `low, normal, high, higher` 66 | # 67 | {Credo.Check.Design.AliasUsage, priority: :low}, 68 | # For some checks, you can also set other parameters 69 | # 70 | # If you don't want the `setup` and `test` macro calls in ExUnit tests 71 | # or the `schema` macro in Ecto schemas to trigger DuplicatedCode, just 72 | # set the `excluded_macros` parameter to `[:schema, :setup, :test]`. 73 | # 74 | {Credo.Check.Design.DuplicatedCode, excluded_macros: []}, 75 | # You can also customize the exit_status of each check. 76 | # If you don't want TODO comments to cause `mix credo` to fail, just 77 | # set this value to 0 (zero). 78 | # 79 | {Credo.Check.Design.TagTODO, exit_status: 2}, 80 | {Credo.Check.Design.TagFIXME}, 81 | 82 | # 83 | ## Readability Checks 84 | # 85 | {Credo.Check.Readability.AliasOrder}, 86 | {Credo.Check.Readability.FunctionNames}, 87 | {Credo.Check.Readability.LargeNumbers}, 88 | {Credo.Check.Readability.MaxLineLength, priority: :low, max_length: 98}, 89 | {Credo.Check.Readability.ModuleAttributeNames}, 90 | {Credo.Check.Readability.ModuleDoc}, 91 | {Credo.Check.Readability.ModuleNames}, 92 | {Credo.Check.Readability.ParenthesesOnZeroArityDefs}, 93 | {Credo.Check.Readability.ParenthesesInCondition}, 94 | {Credo.Check.Readability.PredicateFunctionNames}, 95 | {Credo.Check.Readability.PreferImplicitTry}, 96 | {Credo.Check.Readability.RedundantBlankLines}, 97 | {Credo.Check.Readability.StringSigils}, 98 | {Credo.Check.Readability.TrailingBlankLine}, 99 | {Credo.Check.Readability.TrailingWhiteSpace}, 100 | {Credo.Check.Readability.VariableNames}, 101 | {Credo.Check.Readability.Semicolons}, 102 | {Credo.Check.Readability.SpaceAfterCommas}, 103 | 104 | # 105 | ## Refactoring Opportunities 106 | # 107 | {Credo.Check.Refactor.DoubleBooleanNegation}, 108 | {Credo.Check.Refactor.CondStatements}, 109 | {Credo.Check.Refactor.CyclomaticComplexity}, 110 | {Credo.Check.Refactor.FunctionArity}, 111 | {Credo.Check.Refactor.LongQuoteBlocks}, 112 | {Credo.Check.Refactor.MatchInCondition}, 113 | {Credo.Check.Refactor.NegatedConditionsInUnless}, 114 | {Credo.Check.Refactor.NegatedConditionsWithElse}, 115 | {Credo.Check.Refactor.Nesting}, 116 | {Credo.Check.Refactor.PipeChainStart, 117 | excluded_argument_types: [:atom, :binary, :fn, :keyword], excluded_functions: []}, 118 | {Credo.Check.Refactor.UnlessWithElse}, 119 | 120 | # 121 | ## Warnings 122 | # 123 | {Credo.Check.Warning.BoolOperationOnSameValues}, 124 | {Credo.Check.Warning.ExpensiveEmptyEnumCheck}, 125 | {Credo.Check.Warning.IExPry}, 126 | {Credo.Check.Warning.IoInspect}, 127 | {Credo.Check.Warning.LazyLogging}, 128 | {Credo.Check.Warning.OperationOnSameValues}, 129 | {Credo.Check.Warning.OperationWithConstantResult}, 130 | {Credo.Check.Warning.UnusedEnumOperation}, 131 | {Credo.Check.Warning.UnusedFileOperation}, 132 | {Credo.Check.Warning.UnusedKeywordOperation}, 133 | {Credo.Check.Warning.UnusedListOperation}, 134 | {Credo.Check.Warning.UnusedPathOperation}, 135 | {Credo.Check.Warning.UnusedRegexOperation}, 136 | {Credo.Check.Warning.UnusedStringOperation}, 137 | {Credo.Check.Warning.UnusedTupleOperation}, 138 | {Credo.Check.Warning.RaiseInsideRescue}, 139 | 140 | # 141 | # Controversial and experimental checks (opt-in, just remove `, false`) 142 | # 143 | {Credo.Check.Refactor.ABCSize, false}, 144 | {Credo.Check.Refactor.AppendSingleItem, false}, 145 | {Credo.Check.Refactor.VariableRebinding, false}, 146 | {Credo.Check.Warning.MapGetUnsafePass, false}, 147 | {Credo.Check.Consistency.MultiAliasImportRequireUse, false}, 148 | 149 | # 150 | # Deprecated checks (these will be deleted after a grace period) 151 | # 152 | {Credo.Check.Readability.Specs, false} 153 | 154 | # 155 | # Custom checks can be created using `mix credo.gen.check`. 156 | # 157 | ] 158 | } 159 | ] 160 | } 161 | -------------------------------------------------------------------------------- /fixture/vcr_cassettes/collections_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/collections/175361" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":175361,\"title\":\"Website Ideas\",\"description\":\"Possibility for Johns website\",\"published_at\":\"2016-03-29T02:48:12-04:00\",\"updated_at\":\"2018-01-15T14:22:27-05:00\",\"curated\":false,\"featured\":false,\"total_photos\":10,\"private\":false,\"share_key\":\"e4aa6f2380e18dd479ddf31731199f2d\",\"tags\":[{\"title\":\"light\"},{\"title\":\"night\"},{\"title\":\"wallpaper\"},{\"title\":\"star\"},{\"title\":\"silhouette\"},{\"title\":\"outdoor\"}],\"cover_photo\":{\"id\":\"xsGApcVbojU\",\"created_at\":\"2016-02-13T07:56:41-05:00\",\"updated_at\":\"2019-03-27T17:41:58-04:00\",\"width\":4928,\"height\":3264,\"color\":\"#FCFDFD\",\"description\":null,\"alt_description\":\"person watching through hole\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/xsGApcVbojU\",\"html\":\"https://unsplash.com/photos/xsGApcVbojU\",\"download\":\"https://unsplash.com/photos/xsGApcVbojU/download\",\"download_location\":\"https://api.unsplash.com/photos/xsGApcVbojU/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":852,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"IpQHcXdHE2k\",\"updated_at\":\"2019-03-21T16:07:50-04:00\",\"username\":\"ratushny\",\"name\":\"Dmitry Ratushny\",\"first_name\":\"Dmitry\",\"last_name\":\"Ratushny\",\"twitter_username\":null,\"portfolio_url\":\"http://instagram.com/d_ratushnyi\",\"bio\":\"an ordinary boy with a camera\",\"location\":\"Ukraine\",\"links\":{\"self\":\"https://api.unsplash.com/users/ratushny\",\"html\":\"https://unsplash.com/@ratushny\",\"photos\":\"https://api.unsplash.com/users/ratushny/photos\",\"likes\":\"https://api.unsplash.com/users/ratushny/likes\",\"portfolio\":\"https://api.unsplash.com/users/ratushny/portfolio\",\"following\":\"https://api.unsplash.com/users/ratushny/following\",\"followers\":\"https://api.unsplash.com/users/ratushny/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1442426654549-ab90ecad1eb0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1442426654549-ab90ecad1eb0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1442426654549-ab90ecad1eb0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"d_ratushnyi\",\"total_collections\":0,\"total_likes\":141,\"total_photos\":34,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"xsGApcVbojU\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"DYTQrnJ5FJ0\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"2PODhmrvLik\",\"urls\":{\"raw\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"3-3k_sYEJ1s\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"FlYoGkaUO_Y\",\"updated_at\":\"2018-05-03T19:37:11-04:00\",\"username\":\"jayjaywhite\",\"name\":\"Jay White\",\"first_name\":\"Jay\",\"last_name\":\"White\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":null,\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/jayjaywhite\",\"html\":\"https://unsplash.com/@jayjaywhite\",\"photos\":\"https://api.unsplash.com/users/jayjaywhite/photos\",\"likes\":\"https://api.unsplash.com/users/jayjaywhite/likes\",\"portfolio\":\"https://api.unsplash.com/users/jayjaywhite/portfolio\",\"following\":\"https://api.unsplash.com/users/jayjaywhite/following\",\"followers\":\"https://api.unsplash.com/users/jayjaywhite/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":1,\"total_likes\":0,\"total_photos\":0,\"accepted_tos\":false},\"links\":{\"self\":\"https://api.unsplash.com/collections/175361\",\"html\":\"https://unsplash.com/collections/175361/website-ideas\",\"photos\":\"https://api.unsplash.com/collections/175361/photos\",\"related\":\"https://api.unsplash.com/collections/175361/related\"},\"meta\":{\"title\":null,\"description\":null,\"index\":true,\"canonical\":null}}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "45", 28 | "X-Request-Id": "db23b073-4bf3-4462-bb7e-308c1f732347", 29 | "X-Runtime": "0.116962", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "7100", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:09 GMT", 35 | "Age": "2036", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2127-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864910.713339,VS0,VE0", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/collections_get_curated_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/collections/curated/145" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":145,\"title\":\"Collection #145: Trello\",\"description\":\"Collection #145, curated by Trello, the easiest way to see the big picture on life's projects.\",\"published_at\":\"2017-05-04T14:05:26-04:00\",\"updated_at\":\"2019-02-16T21:48:01-05:00\",\"curated\":true,\"featured\":true,\"total_photos\":9,\"private\":false,\"share_key\":\"5e50536790aeac434ecc65c75a542170\",\"tags\":[{\"title\":\"outdoor\"},{\"title\":\"blue\"},{\"title\":\"silhouette\"},{\"title\":\"leafe\"},{\"title\":\"summer\"},{\"title\":\"cloud\"}],\"cover_photo\":{\"id\":\"wdL8UywQtWU\",\"created_at\":\"2017-04-11T13:57:00-04:00\",\"updated_at\":\"2019-03-27T17:50:45-04:00\",\"width\":4032,\"height\":3024,\"color\":\"#EEF1F7\",\"description\":\"One of my favorite shots from Georgia Aquarium.\",\"alt_description\":\"silhouette group of people standing in front of blue whale on underwater museum\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/wdL8UywQtWU\",\"html\":\"https://unsplash.com/photos/wdL8UywQtWU\",\"download\":\"https://unsplash.com/photos/wdL8UywQtWU/download\",\"download_location\":\"https://api.unsplash.com/photos/wdL8UywQtWU/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1126,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"N02g8g5BJGw\",\"updated_at\":\"2019-03-17T18:30:50-04:00\",\"username\":\"mtthlbg\",\"name\":\"Matt Helbig\",\"first_name\":\"Matt\",\"last_name\":\"Helbig\",\"twitter_username\":\"mtthlbg\",\"portfolio_url\":\"http://matthelbig.com/\",\"bio\":\"no bad days \\ud83c\\udf34 confine yourself to the present\",\"location\":\"Chicago, IL\",\"links\":{\"self\":\"https://api.unsplash.com/users/mtthlbg\",\"html\":\"https://unsplash.com/@mtthlbg\",\"photos\":\"https://api.unsplash.com/users/mtthlbg/photos\",\"likes\":\"https://api.unsplash.com/users/mtthlbg/likes\",\"portfolio\":\"https://api.unsplash.com/users/mtthlbg/portfolio\",\"following\":\"https://api.unsplash.com/users/mtthlbg/following\",\"followers\":\"https://api.unsplash.com/users/mtthlbg/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-fb-1491932963-299c427f172d.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-fb-1491932963-299c427f172d.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-fb-1491932963-299c427f172d.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"mtthlbg\",\"total_collections\":3,\"total_likes\":7,\"total_photos\":14,\"accepted_tos\":false}},\"preview_photos\":[{\"id\":\"wdL8UywQtWU\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"Lxz__X7NAbA\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"5EVrQKXPa5g\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"1_EedIBc6jY\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"TfxFKY88aEk\",\"updated_at\":\"2019-02-16T07:25:39-05:00\",\"username\":\"trello\",\"name\":\"Trello\",\"first_name\":\"Trello\",\"last_name\":null,\"twitter_username\":\"trello\",\"portfolio_url\":\"https://trello.com\",\"bio\":\"The easiest way to see the big picture on life's projects.\",\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/trello\",\"html\":\"https://unsplash.com/@trello\",\"photos\":\"https://api.unsplash.com/users/trello/photos\",\"likes\":\"https://api.unsplash.com/users/trello/likes\",\"portfolio\":\"https://api.unsplash.com/users/trello/portfolio\",\"following\":\"https://api.unsplash.com/users/trello/following\",\"followers\":\"https://api.unsplash.com/users/trello/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1490388765454-56cdd966c465?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1490388765454-56cdd966c465?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1490388765454-56cdd966c465?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"trelloapp\",\"total_collections\":2,\"total_likes\":0,\"total_photos\":0,\"accepted_tos\":false},\"links\":{\"self\":\"https://api.unsplash.com/collections/145\",\"html\":\"https://unsplash.com/collections/145/collection-145-trello\",\"photos\":\"https://api.unsplash.com/collections/145/photos\",\"related\":\"https://api.unsplash.com/collections/145/related\"},\"meta\":{\"title\":null,\"description\":null,\"index\":false,\"canonical\":null}}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Warning": "Curated Collection endpoints are deprecated. Use Collections instead. See: https://unsplash.com/documentation#collections", 26 | "Content-Type": "application/json", 27 | "X-Ratelimit-Limit": "50", 28 | "X-Ratelimit-Remaining": "48", 29 | "X-Request-Id": "a04d509c-e6a8-4f27-bbfb-273fc058b8f3", 30 | "X-Runtime": "0.043777", 31 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 32 | "Via": "1.1 vegur", 33 | "Content-Length": "7264", 34 | "Accept-Ranges": "bytes", 35 | "Date": "Wed, 10 Apr 2019 02:55:12 GMT", 36 | "Age": "2042", 37 | "Connection": "keep-alive", 38 | "X-Served-By": "cache-iad2121-IAD, cache-pao17420-PAO", 39 | "X-Cache": "HIT, HIT", 40 | "X-Cache-Hits": "1, 1", 41 | "X-Timer": "S1554864913.916725,VS0,VE1", 42 | "Vary": "Origin, Authorization" 43 | }, 44 | "status_code": 200, 45 | "type": "ok" 46 | } 47 | } 48 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/collections_get_related_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/collections/175361/related" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "[{\"id\":497,\"title\":\"fire, sun & lights\",\"description\":null,\"published_at\":\"2017-05-25T08:27:11-04:00\",\"updated_at\":\"2019-04-07T15:20:55-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":242,\"private\":false,\"share_key\":\"dc5f808b07e56b7f191c9942948e5056\",\"tags\":[{\"title\":\"light\"},{\"title\":\"sun\"},{\"title\":\"fire\"},{\"title\":\"night\"},{\"title\":\"city\"},{\"title\":\"sunset\"}],\"cover_photo\":{\"id\":\"PeLkhi_B3wI\",\"created_at\":\"2019-03-05T11:05:45-05:00\",\"updated_at\":\"2019-03-12T17:44:56-04:00\",\"width\":5170,\"height\":3447,\"color\":\"#F5D0A1\",\"description\":null,\"alt_description\":\"lighted houses near ocean\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/PeLkhi_B3wI\",\"html\":\"https://unsplash.com/photos/PeLkhi_B3wI\",\"download\":\"https://unsplash.com/photos/PeLkhi_B3wI/download\",\"download_location\":\"https://api.unsplash.com/photos/PeLkhi_B3wI/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":82,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"gQD-fS-Aro0\",\"updated_at\":\"2019-03-30T20:07:13-04:00\",\"username\":\"bjorns\",\"name\":\"Bjorn Snelders\",\"first_name\":\"Bjorn\",\"last_name\":\"Snelders\",\"twitter_username\":\"bjornsnelders\",\"portfolio_url\":\"http://shinemedia.be\",\"bio\":\"Freelancer / Photographer / Graphic & Web Designer / Film enthousiast / Amateur coffee lover / Available for hire and willing to (read: love to) travel\",\"location\":\"Lommel, Belgium\",\"links\":{\"self\":\"https://api.unsplash.com/users/bjorns\",\"html\":\"https://unsplash.com/@bjorns\",\"photos\":\"https://api.unsplash.com/users/bjorns/photos\",\"likes\":\"https://api.unsplash.com/users/bjorns/likes\",\"portfolio\":\"https://api.unsplash.com/users/bjorns/portfolio\",\"following\":\"https://api.unsplash.com/users/bjorns/following\",\"followers\":\"https://api.unsplash.com/users/bjorns/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1551976137479-c4b047b58fbb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1551976137479-c4b047b58fbb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1551976137479-c4b047b58fbb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"bjornsnelders\",\"total_collections\":0,\"total_likes\":0,\"total_photos\":4,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"PeLkhi_B3wI\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"TfRHSL2GKDc\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"RLrM2yTqsDQ\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"J4Jrhdrs1q4\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"LunNwARM6ac\",\"updated_at\":\"2019-04-09T05:34:12-04:00\",\"username\":\"manuschwendener\",\"name\":\"manu schwendener\",\"first_name\":\"manu\",\"last_name\":\"schwendener\",\"twitter_username\":\"manuschwendener\",\"portfolio_url\":\"http://manuschwendener.ch\",\"bio\":\"Fujifilm X-T30\",\"location\":\"Basel\",\"links\":{\"self\":\"https://api.unsplash.com/users/manuschwendener\",\"html\":\"https://unsplash.com/@manuschwendener\",\"photos\":\"https://api.unsplash.com/users/manuschwendener/photos\",\"likes\":\"https://api.unsplash.com/users/manuschwendener/likes\",\"portfolio\":\"https://api.unsplash.com/users/manuschwendener/portfolio\",\"following\":\"https://api.unsplash.com/users/manuschwendener/following\",\"followers\":\"https://api.unsplash.com/users/manuschwendener/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1510000711360-dcf69da5f7d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1510000711360-dcf69da5f7d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1510000711360-dcf69da5f7d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":29,\"total_likes\":916,\"total_photos\":25,\"accepted_tos\":true},\"links\":{\"self\":\"https://api.unsplash.com/collections/497\",\"html\":\"https://unsplash.com/collections/497/fire-sun-lights\",\"photos\":\"https://api.unsplash.com/collections/497/photos\",\"related\":\"https://api.unsplash.com/collections/497/related\"}},{\"id\":291422,\"title\":\"Night Lights\",\"description\":null,\"published_at\":\"2018-08-18T06:38:41-04:00\",\"updated_at\":\"2019-03-18T21:08:36-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":209,\"private\":false,\"share_key\":\"4ba323690ae8fd6676f163cb96c5d9c1\",\"tags\":[{\"title\":\"light\"},{\"title\":\"night\"},{\"title\":\"city\"},{\"title\":\"highway\"},{\"title\":\"road\"},{\"title\":\"street\"}],\"cover_photo\":{\"id\":\"wydEbTWhzTc\",\"created_at\":\"2017-08-30T04:34:26-04:00\",\"updated_at\":\"2019-03-27T17:56:58-04:00\",\"width\":3757,\"height\":5651,\"color\":\"#F9AFB0\",\"description\":\"Brompton Rd. at night\",\"alt_description\":\"black taxi in the street passing trough Harrods Mall during nighttime\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/wydEbTWhzTc\",\"html\":\"https://unsplash.com/photos/wydEbTWhzTc\",\"download\":\"https://unsplash.com/photos/wydEbTWhzTc/download\",\"download_location\":\"https://api.unsplash.com/photos/wydEbTWhzTc/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":546,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"lFi9PEn8WN4\",\"updated_at\":\"2019-04-08T03:59:43-04:00\",\"username\":\"bielmorro\",\"name\":\"Biel Morro\",\"first_name\":\"Biel\",\"last_name\":\"Morro\",\"twitter_username\":\"bielmorro93\",\"portfolio_url\":\"https://www.instagram.com/asodiuesdiari/\",\"bio\":\"UX/UI Designer. Join me on Instagram (@asodiuesdiari). \\r\\n\",\"location\":\"Barcelona\",\"links\":{\"self\":\"https://api.unsplash.com/users/bielmorro\",\"html\":\"https://unsplash.com/@bielmorro\",\"photos\":\"https://api.unsplash.com/users/bielmorro/photos\",\"likes\":\"https://api.unsplash.com/users/bielmorro/likes\",\"portfolio\":\"https://api.unsplash.com/users/bielmorro/portfolio\",\"following\":\"https://api.unsplash.com/users/bielmorro/following\",\"followers\":\"https://api.unsplash.com/users/bielmorro/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1544983476977-0cd01050314b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1544983476977-0cd01050314b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1544983476977-0cd01050314b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"asodiuesdiari\",\"total_collections\":0,\"total_likes\":135,\"total_photos\":30,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"wydEbTWhzTc\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"sNyFgVJ72is\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"HTicW9-i4xY\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"GVV5H3bNrhk\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"Ifu_z9WHvhg\",\"updated_at\":\"2019-04-09T05:04:48-04:00\",\"username\":\"unsplasharchive\",\"name\":\"Unsplash Archive\",\"first_name\":\"Unsplash\",\"last_name\":\"Archive\",\"twitter_username\":\"unsplash\",\"portfolio_url\":\"https://unsplash.com\",\"bio\":\"The official Unsplash collection archive.\",\"location\":\"Montreal, Canada\",\"links\":{\"self\":\"https://api.unsplash.com/users/unsplasharchive\",\"html\":\"https://unsplash.com/@unsplasharchive\",\"photos\":\"https://api.unsplash.com/users/unsplasharchive/photos\",\"likes\":\"https://api.unsplash.com/users/unsplasharchive/likes\",\"portfolio\":\"https://api.unsplash.com/users/unsplasharchive/portfolio\",\"following\":\"https://api.unsplash.com/users/unsplasharchive/following\",\"followers\":\"https://api.unsplash.com/users/unsplasharchive/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1544708109221-8babb4834855?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1544708109221-8babb4834855?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1544708109221-8babb4834855?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"unsplash\",\"total_collections\":104,\"total_likes\":0,\"total_photos\":0,\"accepted_tos\":false},\"links\":{\"self\":\"https://api.unsplash.com/collections/291422\",\"html\":\"https://unsplash.com/collections/291422/night-lights\",\"photos\":\"https://api.unsplash.com/collections/291422/photos\",\"related\":\"https://api.unsplash.com/collections/291422/related\"}},{\"id\":1538150,\"title\":\"Milkyway\",\"description\":null,\"published_at\":\"2018-09-19T09:00:06-04:00\",\"updated_at\":\"2019-03-18T21:08:43-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":87,\"private\":false,\"share_key\":\"55ef8598a05b102796a84374cae5ff43\",\"tags\":[{\"title\":\"milkyway\"},{\"title\":\"star\"},{\"title\":\"night\"},{\"title\":\"milky way\"},{\"title\":\"dark\"},{\"title\":\"galaxy\"}],\"cover_photo\":{\"id\":\"sVQ2hLS6I7g\",\"created_at\":\"2018-07-19T11:32:29-04:00\",\"updated_at\":\"2019-03-27T18:20:03-04:00\",\"width\":4000,\"height\":6000,\"color\":\"#CA9B6E\",\"description\":\"Late-night Valley Spots, Weston, Vermont\",\"alt_description\":\"silhouette of the mountain under the starry skies\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/sVQ2hLS6I7g\",\"html\":\"https://unsplash.com/photos/sVQ2hLS6I7g\",\"download\":\"https://unsplash.com/photos/sVQ2hLS6I7g/download\",\"download_location\":\"https://api.unsplash.com/photos/sVQ2hLS6I7g/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":237,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"trrMZGH6hTE\",\"updated_at\":\"2019-04-08T03:51:35-04:00\",\"username\":\"bradfickeisen\",\"name\":\"Brad Fickeisen\",\"first_name\":\"Brad\",\"last_name\":\"Fickeisen\",\"twitter_username\":\"bradfickeisen\",\"portfolio_url\":\"http://www.bradfickeisen.com\",\"bio\":\"\",\"location\":\"Northeast, USA\",\"links\":{\"self\":\"https://api.unsplash.com/users/bradfickeisen\",\"html\":\"https://unsplash.com/@bradfickeisen\",\"photos\":\"https://api.unsplash.com/users/bradfickeisen/photos\",\"likes\":\"https://api.unsplash.com/users/bradfickeisen/likes\",\"portfolio\":\"https://api.unsplash.com/users/bradfickeisen/portfolio\",\"following\":\"https://api.unsplash.com/users/bradfickeisen/following\",\"followers\":\"https://api.unsplash.com/users/bradfickeisen/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1466624332063-ec6025c7022f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1466624332063-ec6025c7022f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1466624332063-ec6025c7022f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"bradfickeisen\",\"total_collections\":0,\"total_likes\":5528,\"total_photos\":15,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"sVQ2hLS6I7g\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"qTN7y0IyG4w\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"OiVM2mwykx8\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"gq-t3P37Yk4\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"gUgi6ncPlWg\",\"updated_at\":\"2019-04-09T08:55:28-04:00\",\"username\":\"wsanter\",\"name\":\"Wilfried Santer\",\"first_name\":\"Wilfried\",\"last_name\":\"Santer\",\"twitter_username\":null,\"portfolio_url\":\"http://wsanter.com\",\"bio\":\"UI/UX Designer based in the heart of the Alps \\u2022 South Tyrol / Italy\",\"location\":\"Italy\",\"links\":{\"self\":\"https://api.unsplash.com/users/wsanter\",\"html\":\"https://unsplash.com/@wsanter\",\"photos\":\"https://api.unsplash.com/users/wsanter/photos\",\"likes\":\"https://api.unsplash.com/users/wsanter/likes\",\"portfolio\":\"https://api.unsplash.com/users/wsanter/portfolio\",\"following\":\"https://api.unsplash.com/users/wsanter/following\",\"followers\":\"https://api.unsplash.com/users/wsanter/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1471013250625-924d58efc28b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1471013250625-924d58efc28b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1471013250625-924d58efc28b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"wilfriedsanter\",\"total_collections\":33,\"total_likes\":4897,\"total_photos\":93,\"accepted_tos\":true},\"links\":{\"self\":\"https://api.unsplash.com/collections/1538150\",\"html\":\"https://unsplash.com/collections/1538150/milkyway\",\"photos\":\"https://api.unsplash.com/collections/1538150/photos\",\"related\":\"https://api.unsplash.com/collections/1538150/related\"}}]", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "47", 28 | "X-Request-Id": "f279126c-992b-4bff-9d62-d3706482b8d4", 29 | "X-Runtime": "0.113842", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "21320", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:12 GMT", 35 | "Age": "2040", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2128-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 2", 40 | "X-Timer": "S1554864913.559920,VS0,VE0", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/collections_related_photos_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/collections/175361/related" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "[{\"id\":497,\"title\":\"fire, sun & lights\",\"description\":null,\"published_at\":\"2017-05-25T08:27:11-04:00\",\"updated_at\":\"2019-04-07T15:20:55-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":242,\"private\":false,\"share_key\":\"dc5f808b07e56b7f191c9942948e5056\",\"tags\":[{\"title\":\"light\"},{\"title\":\"sun\"},{\"title\":\"fire\"},{\"title\":\"night\"},{\"title\":\"city\"},{\"title\":\"sunset\"}],\"cover_photo\":{\"id\":\"PeLkhi_B3wI\",\"created_at\":\"2019-03-05T11:05:45-05:00\",\"updated_at\":\"2019-03-12T17:44:56-04:00\",\"width\":5170,\"height\":3447,\"color\":\"#F5D0A1\",\"description\":null,\"alt_description\":\"lighted houses near ocean\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/PeLkhi_B3wI\",\"html\":\"https://unsplash.com/photos/PeLkhi_B3wI\",\"download\":\"https://unsplash.com/photos/PeLkhi_B3wI/download\",\"download_location\":\"https://api.unsplash.com/photos/PeLkhi_B3wI/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":82,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"gQD-fS-Aro0\",\"updated_at\":\"2019-03-30T20:07:13-04:00\",\"username\":\"bjorns\",\"name\":\"Bjorn Snelders\",\"first_name\":\"Bjorn\",\"last_name\":\"Snelders\",\"twitter_username\":\"bjornsnelders\",\"portfolio_url\":\"http://shinemedia.be\",\"bio\":\"Freelancer / Photographer / Graphic & Web Designer / Film enthousiast / Amateur coffee lover / Available for hire and willing to (read: love to) travel\",\"location\":\"Lommel, Belgium\",\"links\":{\"self\":\"https://api.unsplash.com/users/bjorns\",\"html\":\"https://unsplash.com/@bjorns\",\"photos\":\"https://api.unsplash.com/users/bjorns/photos\",\"likes\":\"https://api.unsplash.com/users/bjorns/likes\",\"portfolio\":\"https://api.unsplash.com/users/bjorns/portfolio\",\"following\":\"https://api.unsplash.com/users/bjorns/following\",\"followers\":\"https://api.unsplash.com/users/bjorns/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1551976137479-c4b047b58fbb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1551976137479-c4b047b58fbb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1551976137479-c4b047b58fbb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"bjornsnelders\",\"total_collections\":0,\"total_likes\":0,\"total_photos\":4,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"PeLkhi_B3wI\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1551801319-ca06060f3fcc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"TfRHSL2GKDc\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1550956917-84effe9bdbb9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"RLrM2yTqsDQ\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1550763229-dfdee850a9cf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"J4Jrhdrs1q4\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1549983835-3e558644fa56?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"LunNwARM6ac\",\"updated_at\":\"2019-04-09T05:34:12-04:00\",\"username\":\"manuschwendener\",\"name\":\"manu schwendener\",\"first_name\":\"manu\",\"last_name\":\"schwendener\",\"twitter_username\":\"manuschwendener\",\"portfolio_url\":\"http://manuschwendener.ch\",\"bio\":\"Fujifilm X-T30\",\"location\":\"Basel\",\"links\":{\"self\":\"https://api.unsplash.com/users/manuschwendener\",\"html\":\"https://unsplash.com/@manuschwendener\",\"photos\":\"https://api.unsplash.com/users/manuschwendener/photos\",\"likes\":\"https://api.unsplash.com/users/manuschwendener/likes\",\"portfolio\":\"https://api.unsplash.com/users/manuschwendener/portfolio\",\"following\":\"https://api.unsplash.com/users/manuschwendener/following\",\"followers\":\"https://api.unsplash.com/users/manuschwendener/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1510000711360-dcf69da5f7d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1510000711360-dcf69da5f7d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1510000711360-dcf69da5f7d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":29,\"total_likes\":916,\"total_photos\":25,\"accepted_tos\":true},\"links\":{\"self\":\"https://api.unsplash.com/collections/497\",\"html\":\"https://unsplash.com/collections/497/fire-sun-lights\",\"photos\":\"https://api.unsplash.com/collections/497/photos\",\"related\":\"https://api.unsplash.com/collections/497/related\"}},{\"id\":291422,\"title\":\"Night Lights\",\"description\":null,\"published_at\":\"2018-08-18T06:38:41-04:00\",\"updated_at\":\"2019-03-18T21:08:36-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":209,\"private\":false,\"share_key\":\"4ba323690ae8fd6676f163cb96c5d9c1\",\"tags\":[{\"title\":\"light\"},{\"title\":\"night\"},{\"title\":\"city\"},{\"title\":\"highway\"},{\"title\":\"road\"},{\"title\":\"street\"}],\"cover_photo\":{\"id\":\"wydEbTWhzTc\",\"created_at\":\"2017-08-30T04:34:26-04:00\",\"updated_at\":\"2019-03-27T17:56:58-04:00\",\"width\":3757,\"height\":5651,\"color\":\"#F9AFB0\",\"description\":\"Brompton Rd. at night\",\"alt_description\":\"black taxi in the street passing trough Harrods Mall during nighttime\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/wydEbTWhzTc\",\"html\":\"https://unsplash.com/photos/wydEbTWhzTc\",\"download\":\"https://unsplash.com/photos/wydEbTWhzTc/download\",\"download_location\":\"https://api.unsplash.com/photos/wydEbTWhzTc/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":546,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"lFi9PEn8WN4\",\"updated_at\":\"2019-04-08T03:59:43-04:00\",\"username\":\"bielmorro\",\"name\":\"Biel Morro\",\"first_name\":\"Biel\",\"last_name\":\"Morro\",\"twitter_username\":\"bielmorro93\",\"portfolio_url\":\"https://www.instagram.com/asodiuesdiari/\",\"bio\":\"UX/UI Designer. Join me on Instagram (@asodiuesdiari). \\r\\n\",\"location\":\"Barcelona\",\"links\":{\"self\":\"https://api.unsplash.com/users/bielmorro\",\"html\":\"https://unsplash.com/@bielmorro\",\"photos\":\"https://api.unsplash.com/users/bielmorro/photos\",\"likes\":\"https://api.unsplash.com/users/bielmorro/likes\",\"portfolio\":\"https://api.unsplash.com/users/bielmorro/portfolio\",\"following\":\"https://api.unsplash.com/users/bielmorro/following\",\"followers\":\"https://api.unsplash.com/users/bielmorro/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1544983476977-0cd01050314b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1544983476977-0cd01050314b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1544983476977-0cd01050314b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"asodiuesdiari\",\"total_collections\":0,\"total_likes\":135,\"total_photos\":30,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"wydEbTWhzTc\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504081957329-d6542dbe9de6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"sNyFgVJ72is\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504350274292-13f3a028f36b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"HTicW9-i4xY\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504388664877-c025f9f197e9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"GVV5H3bNrhk\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504144945390-cb7aa99e8e6a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"Ifu_z9WHvhg\",\"updated_at\":\"2019-04-09T05:04:48-04:00\",\"username\":\"unsplasharchive\",\"name\":\"Unsplash Archive\",\"first_name\":\"Unsplash\",\"last_name\":\"Archive\",\"twitter_username\":\"unsplash\",\"portfolio_url\":\"https://unsplash.com\",\"bio\":\"The official Unsplash collection archive.\",\"location\":\"Montreal, Canada\",\"links\":{\"self\":\"https://api.unsplash.com/users/unsplasharchive\",\"html\":\"https://unsplash.com/@unsplasharchive\",\"photos\":\"https://api.unsplash.com/users/unsplasharchive/photos\",\"likes\":\"https://api.unsplash.com/users/unsplasharchive/likes\",\"portfolio\":\"https://api.unsplash.com/users/unsplasharchive/portfolio\",\"following\":\"https://api.unsplash.com/users/unsplasharchive/following\",\"followers\":\"https://api.unsplash.com/users/unsplasharchive/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1544708109221-8babb4834855?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1544708109221-8babb4834855?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1544708109221-8babb4834855?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"unsplash\",\"total_collections\":104,\"total_likes\":0,\"total_photos\":0,\"accepted_tos\":false},\"links\":{\"self\":\"https://api.unsplash.com/collections/291422\",\"html\":\"https://unsplash.com/collections/291422/night-lights\",\"photos\":\"https://api.unsplash.com/collections/291422/photos\",\"related\":\"https://api.unsplash.com/collections/291422/related\"}},{\"id\":1538150,\"title\":\"Milkyway\",\"description\":null,\"published_at\":\"2018-09-19T09:00:06-04:00\",\"updated_at\":\"2019-03-18T21:08:43-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":87,\"private\":false,\"share_key\":\"55ef8598a05b102796a84374cae5ff43\",\"tags\":[{\"title\":\"milkyway\"},{\"title\":\"star\"},{\"title\":\"night\"},{\"title\":\"milky way\"},{\"title\":\"dark\"},{\"title\":\"galaxy\"}],\"cover_photo\":{\"id\":\"sVQ2hLS6I7g\",\"created_at\":\"2018-07-19T11:32:29-04:00\",\"updated_at\":\"2019-03-27T18:20:03-04:00\",\"width\":4000,\"height\":6000,\"color\":\"#CA9B6E\",\"description\":\"Late-night Valley Spots, Weston, Vermont\",\"alt_description\":\"silhouette of the mountain under the starry skies\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/sVQ2hLS6I7g\",\"html\":\"https://unsplash.com/photos/sVQ2hLS6I7g\",\"download\":\"https://unsplash.com/photos/sVQ2hLS6I7g/download\",\"download_location\":\"https://api.unsplash.com/photos/sVQ2hLS6I7g/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":237,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"trrMZGH6hTE\",\"updated_at\":\"2019-04-08T03:51:35-04:00\",\"username\":\"bradfickeisen\",\"name\":\"Brad Fickeisen\",\"first_name\":\"Brad\",\"last_name\":\"Fickeisen\",\"twitter_username\":\"bradfickeisen\",\"portfolio_url\":\"http://www.bradfickeisen.com\",\"bio\":\"\",\"location\":\"Northeast, USA\",\"links\":{\"self\":\"https://api.unsplash.com/users/bradfickeisen\",\"html\":\"https://unsplash.com/@bradfickeisen\",\"photos\":\"https://api.unsplash.com/users/bradfickeisen/photos\",\"likes\":\"https://api.unsplash.com/users/bradfickeisen/likes\",\"portfolio\":\"https://api.unsplash.com/users/bradfickeisen/portfolio\",\"following\":\"https://api.unsplash.com/users/bradfickeisen/following\",\"followers\":\"https://api.unsplash.com/users/bradfickeisen/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1466624332063-ec6025c7022f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1466624332063-ec6025c7022f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1466624332063-ec6025c7022f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"bradfickeisen\",\"total_collections\":0,\"total_likes\":5528,\"total_photos\":15,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"sVQ2hLS6I7g\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1532013945770-64eabc9a46b9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"qTN7y0IyG4w\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1547501344-5301c9fb9edf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"OiVM2mwykx8\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1543472293-c4499a395bed?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"gq-t3P37Yk4\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1537435893976-0bc7f4854a46?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"gUgi6ncPlWg\",\"updated_at\":\"2019-04-09T08:55:28-04:00\",\"username\":\"wsanter\",\"name\":\"Wilfried Santer\",\"first_name\":\"Wilfried\",\"last_name\":\"Santer\",\"twitter_username\":null,\"portfolio_url\":\"http://wsanter.com\",\"bio\":\"UI/UX Designer based in the heart of the Alps \\u2022 South Tyrol / Italy\",\"location\":\"Italy\",\"links\":{\"self\":\"https://api.unsplash.com/users/wsanter\",\"html\":\"https://unsplash.com/@wsanter\",\"photos\":\"https://api.unsplash.com/users/wsanter/photos\",\"likes\":\"https://api.unsplash.com/users/wsanter/likes\",\"portfolio\":\"https://api.unsplash.com/users/wsanter/portfolio\",\"following\":\"https://api.unsplash.com/users/wsanter/following\",\"followers\":\"https://api.unsplash.com/users/wsanter/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1471013250625-924d58efc28b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1471013250625-924d58efc28b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1471013250625-924d58efc28b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"wilfriedsanter\",\"total_collections\":33,\"total_likes\":4897,\"total_photos\":93,\"accepted_tos\":true},\"links\":{\"self\":\"https://api.unsplash.com/collections/1538150\",\"html\":\"https://unsplash.com/collections/1538150/milkyway\",\"photos\":\"https://api.unsplash.com/collections/1538150/photos\",\"related\":\"https://api.unsplash.com/collections/1538150/related\"}}]", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "47", 28 | "X-Request-Id": "f279126c-992b-4bff-9d62-d3706482b8d4", 29 | "X-Runtime": "0.113842", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "21320", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:09 GMT", 35 | "Age": "2037", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2128-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864909.271072,VS0,VE1", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/photos_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/photos/0XR2s9D3PLI" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "{\"id\":\"0XR2s9D3PLI\",\"created_at\":\"2015-07-26T11:33:45-04:00\",\"updated_at\":\"2019-03-27T17:39:54-04:00\",\"width\":2048,\"height\":1364,\"color\":\"#525252\",\"description\":null,\"alt_description\":null,\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1437924705289-8b6f9ea2bb36?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1437924705289-8b6f9ea2bb36?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1437924705289-8b6f9ea2bb36?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1437924705289-8b6f9ea2bb36?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1437924705289-8b6f9ea2bb36?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/0XR2s9D3PLI\",\"html\":\"https://unsplash.com/photos/0XR2s9D3PLI\",\"download\":\"https://unsplash.com/photos/0XR2s9D3PLI/download\",\"download_location\":\"https://api.unsplash.com/photos/0XR2s9D3PLI/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":0,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"bHXqjvnKicM\",\"updated_at\":\"2019-01-15T18:59:17-05:00\",\"username\":\"believenyaself\",\"name\":\"Enya Hodgson\",\"first_name\":\"Enya\",\"last_name\":\"Hodgson \",\"twitter_username\":null,\"portfolio_url\":\"https://www.tumblr.com/blog/believenyaself\",\"bio\":null,\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/believenyaself\",\"html\":\"https://unsplash.com/@believenyaself\",\"photos\":\"https://api.unsplash.com/users/believenyaself/photos\",\"likes\":\"https://api.unsplash.com/users/believenyaself/likes\",\"portfolio\":\"https://api.unsplash.com/users/believenyaself/portfolio\",\"following\":\"https://api.unsplash.com/users/believenyaself/following\",\"followers\":\"https://api.unsplash.com/users/believenyaself/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":0,\"total_likes\":0,\"total_photos\":10,\"accepted_tos\":false},\"exif\":{\"make\":null,\"model\":null,\"exposure_time\":null,\"aperture\":null,\"focal_length\":null,\"iso\":null},\"location\":{\"title\":\"Austin, United States\",\"name\":\"Austin\",\"city\":\"Austin\",\"country\":\"United States\",\"position\":{\"latitude\":30.267153,\"longitude\":-97.7430608}},\"tags\":[{\"title\":\"person\"},{\"title\":\"relaxation\"},{\"title\":\"gorgeou\"},{\"title\":\"blonde\"},{\"title\":\"work\"},{\"title\":\"fun\"},{\"title\":\"health\"},{\"title\":\"office\"},{\"title\":\"indoor\"},{\"title\":\"human\"},{\"title\":\"girl\"},{\"title\":\"outdoor\"},{\"title\":\"business\"},{\"title\":\"studio\"},{\"title\":\"lip\"},{\"title\":\"body\"},{\"title\":\"skin\"},{\"title\":\"hand\"},{\"title\":\"cheerful\"},{\"title\":\"lady\"}],\"photo_tags\":[{\"title\":\"person\"},{\"title\":\"relaxation\"},{\"title\":\"gorgeou\"},{\"title\":\"blonde\"},{\"title\":\"work\"}],\"story\":{\"title\":null,\"description\":null},\"related_collections\":{\"total\":1402,\"type\":\"related\",\"results\":[{\"id\":311432,\"title\":\"THE WILD LIFE\",\"description\":null,\"published_at\":\"2016-11-11T12:12:47-05:00\",\"updated_at\":\"2019-03-14T06:45:08-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":602,\"private\":false,\"share_key\":\"bc06140c9e7ef0ee57e13bb8f08534bb\",\"tags\":[{\"title\":\"wild\"},{\"title\":\"animal\"},{\"title\":\"mammal\"},{\"title\":\"wildlife\"},{\"title\":\"grass\"},{\"title\":\"face\"}],\"cover_photo\":{\"id\":\"acrNWNR5wjc\",\"created_at\":\"2018-07-09T19:21:58-04:00\",\"updated_at\":\"2019-03-27T18:18:54-04:00\",\"width\":4000,\"height\":6000,\"color\":\"#F4F0DE\",\"description\":\"Chase me if you can\",\"alt_description\":null,\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/acrNWNR5wjc\",\"html\":\"https://unsplash.com/photos/acrNWNR5wjc\",\"download\":\"https://unsplash.com/photos/acrNWNR5wjc/download\",\"download_location\":\"https://api.unsplash.com/photos/acrNWNR5wjc/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":10,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"UTCeqHgnc1U\",\"updated_at\":\"2019-04-08T15:29:35-04:00\",\"username\":\"adspedia\",\"name\":\"Val Vesa\",\"first_name\":\"Val\",\"last_name\":\"Vesa\",\"twitter_username\":\"adspedia\",\"portfolio_url\":\"https://instagram.com/adspedia\",\"bio\":\"I love to travel and I do it a lot, for business. But I always try to enjoy the places I go to and take lots of photographs.\\r\\nSocial Media is my field of expertise and I like to help people tell their stories online.\\r\\nAvailable for private projects. \",\"location\":\"Cluj Napoca, Romania\",\"links\":{\"self\":\"https://api.unsplash.com/users/adspedia\",\"html\":\"https://unsplash.com/@adspedia\",\"photos\":\"https://api.unsplash.com/users/adspedia/photos\",\"likes\":\"https://api.unsplash.com/users/adspedia/likes\",\"portfolio\":\"https://api.unsplash.com/users/adspedia/portfolio\",\"following\":\"https://api.unsplash.com/users/adspedia/following\",\"followers\":\"https://api.unsplash.com/users/adspedia/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1442134817324-d583fe4c0b88?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1442134817324-d583fe4c0b88?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1442134817324-d583fe4c0b88?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"adspedia\",\"total_collections\":1,\"total_likes\":106,\"total_photos\":375,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"acrNWNR5wjc\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1531178470005-2e65c577c709?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"ixigZfL4Oho\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1528746130128-7f29ef2202fc?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1528746130128-7f29ef2202fc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1528746130128-7f29ef2202fc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1528746130128-7f29ef2202fc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1528746130128-7f29ef2202fc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"D7y_ylit0Tw\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1528835903908-c3c61ea16729?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1528835903908-c3c61ea16729?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1528835903908-c3c61ea16729?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1528835903908-c3c61ea16729?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1528835903908-c3c61ea16729?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"Q0PbNqx_BwI\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1527461216-ee09b6a40038?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1527461216-ee09b6a40038?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1527461216-ee09b6a40038?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1527461216-ee09b6a40038?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1527461216-ee09b6a40038?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"uBndOLWEozU\",\"updated_at\":\"2019-03-30T11:52:44-04:00\",\"username\":\"susanlkh\",\"name\":\"Susan H.\",\"first_name\":\"Susan\",\"last_name\":\"H.\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":\"I'm just a simple girl. Not yet who I'm destined to be. No longer who I was. But always a servant of Christ.\",\"location\":\"United States \",\"links\":{\"self\":\"https://api.unsplash.com/users/susanlkh\",\"html\":\"https://unsplash.com/@susanlkh\",\"photos\":\"https://api.unsplash.com/users/susanlkh/photos\",\"likes\":\"https://api.unsplash.com/users/susanlkh/likes\",\"portfolio\":\"https://api.unsplash.com/users/susanlkh/portfolio\",\"following\":\"https://api.unsplash.com/users/susanlkh/following\",\"followers\":\"https://api.unsplash.com/users/susanlkh/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1482372680161-d234e9c8f9b1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1482372680161-d234e9c8f9b1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1482372680161-d234e9c8f9b1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"donotcallmesue \",\"total_collections\":236,\"total_likes\":23632,\"total_photos\":0,\"accepted_tos\":false},\"links\":{\"self\":\"https://api.unsplash.com/collections/311432\",\"html\":\"https://unsplash.com/collections/311432/the-wild-life\",\"photos\":\"https://api.unsplash.com/collections/311432/photos\",\"related\":\"https://api.unsplash.com/collections/311432/related\"}},{\"id\":313205,\"title\":\"Wedding\",\"description\":null,\"published_at\":\"2016-09-13T06:38:50-04:00\",\"updated_at\":\"2018-11-26T13:50:53-05:00\",\"curated\":false,\"featured\":true,\"total_photos\":75,\"private\":false,\"share_key\":\"2c8c11d147952274820b1f7e4db6f0c0\",\"tags\":[{\"title\":\"wedding\"},{\"title\":\"bride\"},{\"title\":\"love\"},{\"title\":\"marriage\"},{\"title\":\"woman\"},{\"title\":\"dress\"}],\"cover_photo\":{\"id\":\"436ZVxZOtEM\",\"created_at\":\"2016-12-06T18:27:55-05:00\",\"updated_at\":\"2019-03-27T17:47:33-04:00\",\"width\":3648,\"height\":5472,\"color\":\"#1F2B2E\",\"description\":\"Flowers\",\"alt_description\":\"bride smelling the flowers\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/436ZVxZOtEM\",\"html\":\"https://unsplash.com/photos/436ZVxZOtEM\",\"download\":\"https://unsplash.com/photos/436ZVxZOtEM/download\",\"download_location\":\"https://api.unsplash.com/photos/436ZVxZOtEM/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":314,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"72LTYoSQTD0\",\"updated_at\":\"2019-04-05T21:32:17-04:00\",\"username\":\"alvinmahmudov\",\"name\":\"Alvin Mahmudov\",\"first_name\":\"Alvin\",\"last_name\":\"Mahmudov\",\"twitter_username\":\"alvinmahmudov\",\"portfolio_url\":\"https://instagram.com/alvinmahmudov\",\"bio\":\"alvinmahmudov.com\",\"location\":\"Azerbaijan Baku\",\"links\":{\"self\":\"https://api.unsplash.com/users/alvinmahmudov\",\"html\":\"https://unsplash.com/@alvinmahmudov\",\"photos\":\"https://api.unsplash.com/users/alvinmahmudov/photos\",\"likes\":\"https://api.unsplash.com/users/alvinmahmudov/likes\",\"portfolio\":\"https://api.unsplash.com/users/alvinmahmudov/portfolio\",\"following\":\"https://api.unsplash.com/users/alvinmahmudov/following\",\"followers\":\"https://api.unsplash.com/users/alvinmahmudov/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1533418043629-284750059a51?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1533418043629-284750059a51?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1533418043629-284750059a51?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"alvinmahmudov\",\"total_collections\":0,\"total_likes\":43,\"total_photos\":48,\"accepted_tos\":true}},\"preview_photos\":[{\"id\":\"436ZVxZOtEM\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1481066717861-4775e000c88a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"4Um0IDn_ax4\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1481497265154-2000ecf45246?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1481497265154-2000ecf45246?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1481497265154-2000ecf45246?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1481497265154-2000ecf45246?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1481497265154-2000ecf45246?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"SXHOGEudn7k\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1484677460604-9c1334e783a1?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1484677460604-9c1334e783a1?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1484677460604-9c1334e783a1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1484677460604-9c1334e783a1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1484677460604-9c1334e783a1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"iJY-h1wEMK4\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1484676681417-64a0ea3475fd?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1484676681417-64a0ea3475fd?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1484676681417-64a0ea3475fd?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1484676681417-64a0ea3475fd?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1484676681417-64a0ea3475fd?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"sK-APnXeVgI\",\"updated_at\":\"2018-05-07T17:10:10-04:00\",\"username\":\"josedj12\",\"name\":\"Jos\\u00e9 Funes\",\"first_name\":\"Jos\\u00e9\",\"last_name\":\"Funes\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":null,\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/josedj12\",\"html\":\"https://unsplash.com/@josedj12\",\"photos\":\"https://api.unsplash.com/users/josedj12/photos\",\"likes\":\"https://api.unsplash.com/users/josedj12/likes\",\"portfolio\":\"https://api.unsplash.com/users/josedj12/portfolio\",\"following\":\"https://api.unsplash.com/users/josedj12/following\",\"followers\":\"https://api.unsplash.com/users/josedj12/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-fb-1451254123-23061f2c0679.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-fb-1451254123-23061f2c0679.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-fb-1451254123-23061f2c0679.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":3,\"total_likes\":181,\"total_photos\":0,\"accepted_tos\":false},\"links\":{\"self\":\"https://api.unsplash.com/collections/313205\",\"html\":\"https://unsplash.com/collections/313205/wedding\",\"photos\":\"https://api.unsplash.com/collections/313205/photos\",\"related\":\"https://api.unsplash.com/collections/313205/related\"}},{\"id\":250310,\"title\":\"Urban Jungle\",\"description\":\"A collection of Beuts from an urban jungle \",\"published_at\":\"2016-12-19T07:23:12-05:00\",\"updated_at\":\"2019-04-09T01:33:23-04:00\",\"curated\":false,\"featured\":true,\"total_photos\":118,\"private\":false,\"share_key\":\"ec94354e972904f87960173cc3704cf5\",\"tags\":[{\"title\":\"urban\"},{\"title\":\"city\"},{\"title\":\"street\"},{\"title\":\"building\"},{\"title\":\"architecture\"},{\"title\":\"window\"}],\"cover_photo\":{\"id\":\"RR3wzbxMwIo\",\"created_at\":\"2018-02-17T10:03:37-05:00\",\"updated_at\":\"2019-03-27T18:08:08-04:00\",\"width\":5965,\"height\":3353,\"color\":\"#D8E0E4\",\"description\":null,\"alt_description\":null,\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/RR3wzbxMwIo\",\"html\":\"https://unsplash.com/photos/RR3wzbxMwIo\",\"download\":\"https://unsplash.com/photos/RR3wzbxMwIo/download\",\"download_location\":\"https://api.unsplash.com/photos/RR3wzbxMwIo/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":42,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"v2LD2C8E7MY\",\"updated_at\":\"2018-07-10T23:39:11-04:00\",\"username\":\"qarloscuiapo_sink_sink_sink_sink_sink_sink\",\"name\":\"Carlos Quiapo\",\"first_name\":\"Carlos\",\"last_name\":\"Quiapo\",\"twitter_username\":null,\"portfolio_url\":\"http://qarloscuiapo.com\",\"bio\":\"design engineer, among other things\",\"location\":\"Tokyo, Japan\",\"links\":{\"self\":\"https://api.unsplash.com/users/qarloscuiapo_sink_sink_sink_sink_sink_sink\",\"html\":\"https://unsplash.com/@qarloscuiapo_sink_sink_sink_sink_sink_sink\",\"photos\":\"https://api.unsplash.com/users/qarloscuiapo_sink_sink_sink_sink_sink_sink/photos\",\"likes\":\"https://api.unsplash.com/users/qarloscuiapo_sink_sink_sink_sink_sink_sink/likes\",\"portfolio\":\"https://api.unsplash.com/users/qarloscuiapo_sink_sink_sink_sink_sink_sink/portfolio\",\"following\":\"https://api.unsplash.com/users/qarloscuiapo_sink_sink_sink_sink_sink_sink/following\",\"followers\":\"https://api.unsplash.com/users/qarloscuiapo_sink_sink_sink_sink_sink_sink/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1518879913828-eb978d41fae4?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1518879913828-eb978d41fae4?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1518879913828-eb978d41fae4?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"qarloscuiapo\",\"total_collections\":1,\"total_likes\":10,\"total_photos\":0,\"accepted_tos\":false}},\"preview_photos\":[{\"id\":\"RR3wzbxMwIo\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1518879776099-fec4ea3edc5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"v2IJKX5QBIw\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1504420379316-1a01ae921844?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1504420379316-1a01ae921844?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1504420379316-1a01ae921844?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1504420379316-1a01ae921844?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1504420379316-1a01ae921844?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"G5KxRNPmccI\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1499886681157-375d49a64f89?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1499886681157-375d49a64f89?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1499886681157-375d49a64f89?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1499886681157-375d49a64f89?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1499886681157-375d49a64f89?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}},{\"id\":\"A0gu37z4ht0\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1496979149951-4fd28cf221e7?ixlib=rb-1.2.1\",\"full\":\"https://images.unsplash.com/photo-1496979149951-4fd28cf221e7?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb\",\"regular\":\"https://images.unsplash.com/photo-1496979149951-4fd28cf221e7?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max\",\"small\":\"https://images.unsplash.com/photo-1496979149951-4fd28cf221e7?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max\",\"thumb\":\"https://images.unsplash.com/photo-1496979149951-4fd28cf221e7?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max\"}}],\"user\":{\"id\":\"Sr9QprEgsbc\",\"updated_at\":\"2019-04-09T17:33:02-04:00\",\"username\":\"clemono2\",\"name\":\"Clem Onojeghuo\",\"first_name\":\"Clem\",\"last_name\":\"Onojeghuo\",\"twitter_username\":\"ClemOno2\",\"portfolio_url\":\"http://www.clemono.com/\",\"bio\":\"Unsplash Host - London | Street | Urban | Available for Projects Connect with me via instagram and twitter @clemono2 | clemono.com\",\"location\":\"London, UK\",\"links\":{\"self\":\"https://api.unsplash.com/users/clemono2\",\"html\":\"https://unsplash.com/@clemono2\",\"photos\":\"https://api.unsplash.com/users/clemono2/photos\",\"likes\":\"https://api.unsplash.com/users/clemono2/likes\",\"portfolio\":\"https://api.unsplash.com/users/clemono2/portfolio\",\"following\":\"https://api.unsplash.com/users/clemono2/following\",\"followers\":\"https://api.unsplash.com/users/clemono2/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1537740391424-86188f82f007?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1537740391424-86188f82f007?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1537740391424-86188f82f007?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"clemono2\",\"total_collections\":11,\"total_likes\":1947,\"total_photos\":419,\"accepted_tos\":true},\"links\":{\"self\":\"https://api.unsplash.com/collections/250310\",\"html\":\"https://unsplash.com/collections/250310/urban-jungle\",\"photos\":\"https://api.unsplash.com/collections/250310/photos\",\"related\":\"https://api.unsplash.com/collections/250310/related\"}}]},\"views\":696,\"downloads\":202}", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Content-Type": "application/json", 26 | "X-Ratelimit-Limit": "50", 27 | "X-Ratelimit-Remaining": "29", 28 | "X-Request-Id": "0a43c360-529f-4d8f-8cd8-74448a781593", 29 | "X-Runtime": "0.125539", 30 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 31 | "Via": "1.1 vegur", 32 | "Content-Length": "25157", 33 | "Accept-Ranges": "bytes", 34 | "Date": "Wed, 10 Apr 2019 02:55:13 GMT", 35 | "Age": "1682", 36 | "Connection": "keep-alive", 37 | "X-Served-By": "cache-iad2146-IAD, cache-pao17420-PAO", 38 | "X-Cache": "HIT, HIT", 39 | "X-Cache-Hits": "1, 1", 40 | "X-Timer": "S1554864914.599987,VS0,VE0", 41 | "Vary": "Origin, Authorization" 42 | }, 43 | "status_code": 200, 44 | "type": "ok" 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/collections_curated_photos_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/collections/curated/145/photos" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "[{\"id\":\"T9A31lqrXnU\",\"created_at\":\"2017-04-18T16:17:56-04:00\",\"updated_at\":\"2019-03-27T17:50:59-04:00\",\"width\":2918,\"height\":3648,\"color\":\"#FAC797\",\"description\":null,\"alt_description\":\"silhouette of man standing on field\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492546662075-aabebf46dee2?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492546662075-aabebf46dee2?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492546662075-aabebf46dee2?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492546662075-aabebf46dee2?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492546662075-aabebf46dee2?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/T9A31lqrXnU\",\"html\":\"https://unsplash.com/photos/T9A31lqrXnU\",\"download\":\"https://unsplash.com/photos/T9A31lqrXnU/download\",\"download_location\":\"https://api.unsplash.com/photos/T9A31lqrXnU/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1030,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"i_IRB9_gGZg\",\"updated_at\":\"2019-04-08T05:27:33-04:00\",\"username\":\"steve3p_0\",\"name\":\"Steve Halama\",\"first_name\":\"Steve\",\"last_name\":\"Halama\",\"twitter_username\":null,\"portfolio_url\":\"https://www.instagram.com/steve3p_0/\",\"bio\":\"Photographer, Explorer. Instagram: @steve3p_0 \",\"location\":\"Big Island Hawaii\",\"links\":{\"self\":\"https://api.unsplash.com/users/steve3p_0\",\"html\":\"https://unsplash.com/@steve3p_0\",\"photos\":\"https://api.unsplash.com/users/steve3p_0/photos\",\"likes\":\"https://api.unsplash.com/users/steve3p_0/likes\",\"portfolio\":\"https://api.unsplash.com/users/steve3p_0/portfolio\",\"following\":\"https://api.unsplash.com/users/steve3p_0/following\",\"followers\":\"https://api.unsplash.com/users/steve3p_0/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1524774790410-cc18d1fbeedf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1524774790410-cc18d1fbeedf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1524774790410-cc18d1fbeedf?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"Steve3p_0\",\"total_collections\":0,\"total_likes\":957,\"total_photos\":577,\"accepted_tos\":true}},{\"id\":\"jin4W1HqgL4\",\"created_at\":\"2017-04-18T02:29:08-04:00\",\"updated_at\":\"2019-03-27T17:50:58-04:00\",\"width\":3456,\"height\":5184,\"color\":\"#EDE5D2\",\"description\":\"Poor mans garden\",\"alt_description\":\"bokeh photography of person carrying soil\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492496913980-501348b61469?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492496913980-501348b61469?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492496913980-501348b61469?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492496913980-501348b61469?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492496913980-501348b61469?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/jin4W1HqgL4\",\"html\":\"https://unsplash.com/photos/jin4W1HqgL4\",\"download\":\"https://unsplash.com/photos/jin4W1HqgL4/download\",\"download_location\":\"https://api.unsplash.com/photos/jin4W1HqgL4/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1352,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"eomjMslMMFQ\",\"updated_at\":\"2019-04-05T15:02:58-04:00\",\"username\":\"gabrielj_photography\",\"name\":\"Gabriel Jimenez\",\"first_name\":\"Gabriel\",\"last_name\":\"Jimenez\",\"twitter_username\":\"gabrielj_photo2\",\"portfolio_url\":null,\"bio\":\"C A N O N | 6D ii\\r\\n\\r\\n\\\"It's not the camera, but rather the person behind the camera that takes great photos\\\"\",\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/gabrielj_photography\",\"html\":\"https://unsplash.com/@gabrielj_photography\",\"photos\":\"https://api.unsplash.com/users/gabrielj_photography/photos\",\"likes\":\"https://api.unsplash.com/users/gabrielj_photography/likes\",\"portfolio\":\"https://api.unsplash.com/users/gabrielj_photography/portfolio\",\"following\":\"https://api.unsplash.com/users/gabrielj_photography/following\",\"followers\":\"https://api.unsplash.com/users/gabrielj_photography/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1461777502581-6103e97a1875?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1461777502581-6103e97a1875?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1461777502581-6103e97a1875?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"gabrielj.photography2\",\"total_collections\":4,\"total_likes\":103,\"total_photos\":95,\"accepted_tos\":true}},{\"id\":\"JiWVJ5-vR44\",\"created_at\":\"2017-04-15T15:29:54-04:00\",\"updated_at\":\"2019-03-27T17:50:54-04:00\",\"width\":3645,\"height\":2734,\"color\":\"#25351A\",\"description\":null,\"alt_description\":\"shallow focus of brown bee on blue flower\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492284490029-f5a59af3e958?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492284490029-f5a59af3e958?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492284490029-f5a59af3e958?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492284490029-f5a59af3e958?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492284490029-f5a59af3e958?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/JiWVJ5-vR44\",\"html\":\"https://unsplash.com/photos/JiWVJ5-vR44\",\"download\":\"https://unsplash.com/photos/JiWVJ5-vR44/download\",\"download_location\":\"https://api.unsplash.com/photos/JiWVJ5-vR44/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":471,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"o25aSDn-4q0\",\"updated_at\":\"2019-04-09T11:04:19-04:00\",\"username\":\"aaronburden\",\"name\":\"Aaron Burden\",\"first_name\":\"Aaron\",\"last_name\":\"Burden\",\"twitter_username\":\"theaaronburden\",\"portfolio_url\":\"http://www.aaronburden.com\",\"bio\":\"Follower of Christ and Hobbyist Photographer\",\"location\":\"Michigan\",\"links\":{\"self\":\"https://api.unsplash.com/users/aaronburden\",\"html\":\"https://unsplash.com/@aaronburden\",\"photos\":\"https://api.unsplash.com/users/aaronburden/photos\",\"likes\":\"https://api.unsplash.com/users/aaronburden/likes\",\"portfolio\":\"https://api.unsplash.com/users/aaronburden/portfolio\",\"following\":\"https://api.unsplash.com/users/aaronburden/following\",\"followers\":\"https://api.unsplash.com/users/aaronburden/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1456513912833-f86f468b21e2?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1456513912833-f86f468b21e2?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1456513912833-f86f468b21e2?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"aaronburden\",\"total_collections\":61,\"total_likes\":2975,\"total_photos\":623,\"accepted_tos\":true}},{\"id\":\"DxAV6se7QPM\",\"created_at\":\"2017-04-14T23:58:36-04:00\",\"updated_at\":\"2019-03-27T17:50:53-04:00\",\"width\":3520,\"height\":5280,\"color\":\"#F3C9AE\",\"description\":\"Maple tree on Mt. Takao\",\"alt_description\":\"silhouette photography leaf\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492228612174-7bd78299c65e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492228612174-7bd78299c65e?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492228612174-7bd78299c65e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492228612174-7bd78299c65e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492228612174-7bd78299c65e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/DxAV6se7QPM\",\"html\":\"https://unsplash.com/photos/DxAV6se7QPM\",\"download\":\"https://unsplash.com/photos/DxAV6se7QPM/download\",\"download_location\":\"https://api.unsplash.com/photos/DxAV6se7QPM/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":672,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"TjFBv3LwIn8\",\"updated_at\":\"2019-03-30T15:17:45-04:00\",\"username\":\"takemaru\",\"name\":\"Takemaru Hirai\",\"first_name\":\"Takemaru\",\"last_name\":\"Hirai\",\"twitter_username\":\"takemaru_hirai\",\"portfolio_url\":null,\"bio\":\"Hello\",\"location\":\"Tokyo, Japan\",\"links\":{\"self\":\"https://api.unsplash.com/users/takemaru\",\"html\":\"https://unsplash.com/@takemaru\",\"photos\":\"https://api.unsplash.com/users/takemaru/photos\",\"likes\":\"https://api.unsplash.com/users/takemaru/likes\",\"portfolio\":\"https://api.unsplash.com/users/takemaru/portfolio\",\"following\":\"https://api.unsplash.com/users/takemaru/following\",\"followers\":\"https://api.unsplash.com/users/takemaru/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1493244456696-80e55390e887?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1493244456696-80e55390e887?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1493244456696-80e55390e887?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"takemaru.hirai\",\"total_collections\":1,\"total_likes\":76,\"total_photos\":75,\"accepted_tos\":true}},{\"id\":\"RU0KvKLjRSg\",\"created_at\":\"2017-04-14T07:34:58-04:00\",\"updated_at\":\"2019-03-27T17:50:52-04:00\",\"width\":5616,\"height\":3744,\"color\":\"#FEC274\",\"description\":\"Stairs on a winter night\",\"alt_description\":\"Multiple stairs with a single handrail and shadows\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492169594358-7228f2762a0c?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492169594358-7228f2762a0c?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492169594358-7228f2762a0c?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492169594358-7228f2762a0c?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492169594358-7228f2762a0c?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/RU0KvKLjRSg\",\"html\":\"https://unsplash.com/photos/RU0KvKLjRSg\",\"download\":\"https://unsplash.com/photos/RU0KvKLjRSg/download\",\"download_location\":\"https://api.unsplash.com/photos/RU0KvKLjRSg/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":484,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"6xZBKrPhYv8\",\"updated_at\":\"2019-03-24T02:50:37-04:00\",\"username\":\"c_reel\",\"name\":\"Cyril Saulnier\",\"first_name\":\"Cyril\",\"last_name\":\"Saulnier\",\"twitter_username\":null,\"portfolio_url\":\"http://www.c-reel.com\",\"bio\":\"French photographer based in Bali.\\r\\nBeautiful faces, places and things.\\r\\n\",\"location\":\"Bali\",\"links\":{\"self\":\"https://api.unsplash.com/users/c_reel\",\"html\":\"https://unsplash.com/@c_reel\",\"photos\":\"https://api.unsplash.com/users/c_reel/photos\",\"likes\":\"https://api.unsplash.com/users/c_reel/likes\",\"portfolio\":\"https://api.unsplash.com/users/c_reel/portfolio\",\"following\":\"https://api.unsplash.com/users/c_reel/following\",\"followers\":\"https://api.unsplash.com/users/c_reel/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1492158133254-c0b2850643bc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1492158133254-c0b2850643bc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1492158133254-c0b2850643bc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"c_reel\",\"total_collections\":2,\"total_likes\":43,\"total_photos\":13,\"accepted_tos\":false}},{\"id\":\"1_EedIBc6jY\",\"created_at\":\"2017-04-13T16:43:31-04:00\",\"updated_at\":\"2019-03-27T17:50:51-04:00\",\"width\":3110,\"height\":2332,\"color\":\"#000000\",\"description\":\"On the edge of Liberty\",\"alt_description\":\"Statue of Liberty\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492116136365-ab4b6cac399f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/1_EedIBc6jY\",\"html\":\"https://unsplash.com/photos/1_EedIBc6jY\",\"download\":\"https://unsplash.com/photos/1_EedIBc6jY/download\",\"download_location\":\"https://api.unsplash.com/photos/1_EedIBc6jY/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":728,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"peVUaNupitw\",\"updated_at\":\"2019-03-15T06:26:27-04:00\",\"username\":\"fabster74\",\"name\":\"Fabian Fauth\",\"first_name\":\"Fabian\",\"last_name\":\"Fauth\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":\"Amateur photo enthusiast // Leica M monochrome (still trying to get a hang of it), Canon 5D Mark II, Canon G7X, iPhone 8 plus and Canon 300D (got replaced by the 5D) // married, 2 boys // Golf, Wine, Baking and photography of course ;-)\",\"location\":\"Germany\",\"links\":{\"self\":\"https://api.unsplash.com/users/fabster74\",\"html\":\"https://unsplash.com/@fabster74\",\"photos\":\"https://api.unsplash.com/users/fabster74/photos\",\"likes\":\"https://api.unsplash.com/users/fabster74/likes\",\"portfolio\":\"https://api.unsplash.com/users/fabster74/portfolio\",\"following\":\"https://api.unsplash.com/users/fabster74/following\",\"followers\":\"https://api.unsplash.com/users/fabster74/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-fb-1491928617-7b27a55176ff.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-fb-1491928617-7b27a55176ff.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-fb-1491928617-7b27a55176ff.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"fabster74\",\"total_collections\":0,\"total_likes\":22,\"total_photos\":13,\"accepted_tos\":false}},{\"id\":\"5EVrQKXPa5g\",\"created_at\":\"2017-04-12T10:07:24-04:00\",\"updated_at\":\"2019-03-27T17:50:48-04:00\",\"width\":5472,\"height\":3539,\"color\":\"#E3EEF4\",\"description\":\"Like a painting over a number of days, I could see the landscape in front of me reshaping, transforming and breathing with life.\\r\\nThe way forward looked scary since it was just straight down from this point on wards. So I took this shot as a reminder, packed the camera in my rucksack and started the most beautiful descend of my life.\\r\\nThe peaks you can see in the font are Malubating and Miar. #RushSoloExpedition #NeverBeenTied\",\"alt_description\":\"mountains covered with clouds\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492005844208-658251ca63de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/5EVrQKXPa5g\",\"html\":\"https://unsplash.com/photos/5EVrQKXPa5g\",\"download\":\"https://unsplash.com/photos/5EVrQKXPa5g/download\",\"download_location\":\"https://api.unsplash.com/photos/5EVrQKXPa5g/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1104,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"3L5A4tlZNGM\",\"updated_at\":\"2019-03-29T03:32:32-04:00\",\"username\":\"muhammadbinmasood\",\"name\":\"Muhammad Masood\",\"first_name\":\"Muhammad\",\"last_name\":\"Masood\",\"twitter_username\":\"EM_BM\",\"portfolio_url\":\"https://500px.com/muhammadbinmasood\",\"bio\":null,\"location\":\"Pakistan\",\"links\":{\"self\":\"https://api.unsplash.com/users/muhammadbinmasood\",\"html\":\"https://unsplash.com/@muhammadbinmasood\",\"photos\":\"https://api.unsplash.com/users/muhammadbinmasood/photos\",\"likes\":\"https://api.unsplash.com/users/muhammadbinmasood/likes\",\"portfolio\":\"https://api.unsplash.com/users/muhammadbinmasood/portfolio\",\"following\":\"https://api.unsplash.com/users/muhammadbinmasood/following\",\"followers\":\"https://api.unsplash.com/users/muhammadbinmasood/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1492006163203-f7e7b812f311?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1492006163203-f7e7b812f311?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1492006163203-f7e7b812f311?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"muhammadbinmasood\",\"total_collections\":0,\"total_likes\":0,\"total_photos\":8,\"accepted_tos\":false}},{\"id\":\"Lxz__X7NAbA\",\"created_at\":\"2017-04-12T08:56:37-04:00\",\"updated_at\":\"2019-03-27T17:50:48-04:00\",\"width\":3423,\"height\":2566,\"color\":\"#040706\",\"description\":\"Feet on a translucent ceiling\",\"alt_description\":\"low angle photography of two people walked in glass flooring\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1492001774260-acf7a6817856?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/Lxz__X7NAbA\",\"html\":\"https://unsplash.com/photos/Lxz__X7NAbA\",\"download\":\"https://unsplash.com/photos/Lxz__X7NAbA/download\",\"download_location\":\"https://api.unsplash.com/photos/Lxz__X7NAbA/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1035,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"IZwxxQqM2uc\",\"updated_at\":\"2019-04-03T08:55:11-04:00\",\"username\":\"marasiganjayr\",\"name\":\"John Robert Marasigan\",\"first_name\":\"John Robert\",\"last_name\":\"Marasigan\",\"twitter_username\":\"marasiganjayr\",\"portfolio_url\":\"https://www.facebook.com/marasiganjayr\",\"bio\":null,\"location\":\"7th Floor YL Holding Corporation 115VA Rufino Corner Salcedo St. Legaspi Village, Makati, Metro Manila\",\"links\":{\"self\":\"https://api.unsplash.com/users/marasiganjayr\",\"html\":\"https://unsplash.com/@marasiganjayr\",\"photos\":\"https://api.unsplash.com/users/marasiganjayr/photos\",\"likes\":\"https://api.unsplash.com/users/marasiganjayr/likes\",\"portfolio\":\"https://api.unsplash.com/users/marasiganjayr/portfolio\",\"following\":\"https://api.unsplash.com/users/marasiganjayr/following\",\"followers\":\"https://api.unsplash.com/users/marasiganjayr/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-fb-1491979098-2ef2a918d326.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-fb-1491979098-2ef2a918d326.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-fb-1491979098-2ef2a918d326.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"marasiganjayr\",\"total_collections\":0,\"total_likes\":0,\"total_photos\":4,\"accepted_tos\":false}},{\"id\":\"wdL8UywQtWU\",\"created_at\":\"2017-04-11T13:57:00-04:00\",\"updated_at\":\"2019-03-27T17:50:45-04:00\",\"width\":4032,\"height\":3024,\"color\":\"#EEF1F7\",\"description\":\"One of my favorite shots from Georgia Aquarium.\",\"alt_description\":\"silhouette group of people standing in front of blue whale on underwater museum\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1491933367339-d869a4dcc137?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/wdL8UywQtWU\",\"html\":\"https://unsplash.com/photos/wdL8UywQtWU\",\"download\":\"https://unsplash.com/photos/wdL8UywQtWU/download\",\"download_location\":\"https://api.unsplash.com/photos/wdL8UywQtWU/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1126,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"N02g8g5BJGw\",\"updated_at\":\"2019-03-17T18:30:50-04:00\",\"username\":\"mtthlbg\",\"name\":\"Matt Helbig\",\"first_name\":\"Matt\",\"last_name\":\"Helbig\",\"twitter_username\":\"mtthlbg\",\"portfolio_url\":\"http://matthelbig.com/\",\"bio\":\"no bad days \\ud83c\\udf34 confine yourself to the present\",\"location\":\"Chicago, IL\",\"links\":{\"self\":\"https://api.unsplash.com/users/mtthlbg\",\"html\":\"https://unsplash.com/@mtthlbg\",\"photos\":\"https://api.unsplash.com/users/mtthlbg/photos\",\"likes\":\"https://api.unsplash.com/users/mtthlbg/likes\",\"portfolio\":\"https://api.unsplash.com/users/mtthlbg/portfolio\",\"following\":\"https://api.unsplash.com/users/mtthlbg/following\",\"followers\":\"https://api.unsplash.com/users/mtthlbg/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-fb-1491932963-299c427f172d.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-fb-1491932963-299c427f172d.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-fb-1491932963-299c427f172d.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"mtthlbg\",\"total_collections\":3,\"total_likes\":7,\"total_photos\":14,\"accepted_tos\":false}}]", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "Warning": "Curated Collection endpoints are deprecated. Use Collections instead. See: https://unsplash.com/documentation#collections", 26 | "X-Total": "9", 27 | "X-Per-Page": "10", 28 | "Content-Type": "application/json", 29 | "X-Ratelimit-Limit": "50", 30 | "X-Ratelimit-Remaining": "42", 31 | "X-Request-Id": "91058dc0-c19a-4772-92d8-e940de4c7272", 32 | "X-Runtime": "0.051760", 33 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 34 | "Via": "1.1 vegur", 35 | "Content-Length": "25104", 36 | "Accept-Ranges": "bytes", 37 | "Date": "Wed, 10 Apr 2019 02:55:11 GMT", 38 | "Age": "2035", 39 | "Connection": "keep-alive", 40 | "X-Served-By": "cache-iad2121-IAD, cache-pao17420-PAO", 41 | "X-Cache": "HIT, HIT", 42 | "X-Cache-Hits": "1, 1", 43 | "X-Timer": "S1554864911.283300,VS0,VE1", 44 | "Vary": "Origin, Authorization" 45 | }, 46 | "status_code": 200, 47 | "type": "ok" 48 | } 49 | } 50 | ] -------------------------------------------------------------------------------- /fixture/vcr_cassettes/collections_photos_id.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request": { 4 | "body": "", 5 | "headers": { 6 | "Accept-Version": "v1", 7 | "Authorization": "***", 8 | "Content-type": "application/json; charset=utf-8" 9 | }, 10 | "method": "get", 11 | "options": [], 12 | "request_body": "", 13 | "url": "https://api.unsplash.com/collections/175361/photos" 14 | }, 15 | "response": { 16 | "binary": false, 17 | "body": "[{\"id\":\"3-3k_sYEJ1s\",\"created_at\":\"2015-04-17T09:26:44-04:00\",\"updated_at\":\"2019-03-27T17:39:18-04:00\",\"width\":3000,\"height\":2000,\"color\":\"#AA8F78\",\"description\":\"Blonde woman in a skirt at sunset\",\"alt_description\":\"woman standing on grassfield\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1429277158984-614d155e0017?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/3-3k_sYEJ1s\",\"html\":\"https://unsplash.com/photos/3-3k_sYEJ1s\",\"download\":\"https://unsplash.com/photos/3-3k_sYEJ1s/download\",\"download_location\":\"https://api.unsplash.com/photos/3-3k_sYEJ1s/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":1310,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"u7Btz3jWO2M\",\"updated_at\":\"2019-04-09T18:24:10-04:00\",\"username\":\"juliacaesar\",\"name\":\"Julia Caesar\",\"first_name\":\"Julia\",\"last_name\":\"Caesar\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":\"22\\r\\nStockholm\\r\\njuliacaesar@hotmail.se\",\"location\":\"Stockholm\",\"links\":{\"self\":\"https://api.unsplash.com/users/juliacaesar\",\"html\":\"https://unsplash.com/@juliacaesar\",\"photos\":\"https://api.unsplash.com/users/juliacaesar/photos\",\"likes\":\"https://api.unsplash.com/users/juliacaesar/likes\",\"portfolio\":\"https://api.unsplash.com/users/juliacaesar/portfolio\",\"following\":\"https://api.unsplash.com/users/juliacaesar/following\",\"followers\":\"https://api.unsplash.com/users/juliacaesar/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1442443880039-e8b9745ade19?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1442443880039-e8b9745ade19?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1442443880039-e8b9745ade19?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"juliacaesar\",\"total_collections\":0,\"total_likes\":7,\"total_photos\":42,\"accepted_tos\":false}},{\"id\":\"2PODhmrvLik\",\"created_at\":\"2014-01-31T12:58:58-05:00\",\"updated_at\":\"2019-03-27T17:38:35-04:00\",\"width\":2074,\"height\":1383,\"color\":\"#94694D\",\"description\":\"Love under setting sun\",\"alt_description\":\"silhouette of person's hands forming heart\",\"urls\":{\"raw\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/reserve/Af0sF2OS5S5gatqrKzVP_Silhoutte.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/2PODhmrvLik\",\"html\":\"https://unsplash.com/photos/2PODhmrvLik\",\"download\":\"https://unsplash.com/photos/2PODhmrvLik/download\",\"download_location\":\"https://api.unsplash.com/photos/2PODhmrvLik/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":2342,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"73nBk44oqBE\",\"updated_at\":\"2019-04-05T00:18:59-04:00\",\"username\":\"mayurgala\",\"name\":\"Mayur Gala\",\"first_name\":\"Mayur\",\"last_name\":\"Gala\",\"twitter_username\":null,\"portfolio_url\":\"http://500px.com/iDeViL17\",\"bio\":null,\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/mayurgala\",\"html\":\"https://unsplash.com/@mayurgala\",\"photos\":\"https://api.unsplash.com/users/mayurgala/photos\",\"likes\":\"https://api.unsplash.com/users/mayurgala/likes\",\"portfolio\":\"https://api.unsplash.com/users/mayurgala/portfolio\",\"following\":\"https://api.unsplash.com/users/mayurgala/following\",\"followers\":\"https://api.unsplash.com/users/mayurgala/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":null,\"total_collections\":0,\"total_likes\":0,\"total_photos\":1,\"accepted_tos\":false}},{\"id\":\"DYTQrnJ5FJ0\",\"created_at\":\"2015-07-07T18:08:25-04:00\",\"updated_at\":\"2019-03-27T17:39:47-04:00\",\"width\":3000,\"height\":2000,\"color\":\"#725155\",\"description\":null,\"alt_description\":\"photo of woman on green grass field outdoors during daytime\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1436306896198-6f280fe8481b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/DYTQrnJ5FJ0\",\"html\":\"https://unsplash.com/photos/DYTQrnJ5FJ0\",\"download\":\"https://unsplash.com/photos/DYTQrnJ5FJ0/download\",\"download_location\":\"https://api.unsplash.com/photos/DYTQrnJ5FJ0/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":534,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"u7Btz3jWO2M\",\"updated_at\":\"2019-04-09T18:24:10-04:00\",\"username\":\"juliacaesar\",\"name\":\"Julia Caesar\",\"first_name\":\"Julia\",\"last_name\":\"Caesar\",\"twitter_username\":null,\"portfolio_url\":null,\"bio\":\"22\\r\\nStockholm\\r\\njuliacaesar@hotmail.se\",\"location\":\"Stockholm\",\"links\":{\"self\":\"https://api.unsplash.com/users/juliacaesar\",\"html\":\"https://unsplash.com/@juliacaesar\",\"photos\":\"https://api.unsplash.com/users/juliacaesar/photos\",\"likes\":\"https://api.unsplash.com/users/juliacaesar/likes\",\"portfolio\":\"https://api.unsplash.com/users/juliacaesar/portfolio\",\"following\":\"https://api.unsplash.com/users/juliacaesar/following\",\"followers\":\"https://api.unsplash.com/users/juliacaesar/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1442443880039-e8b9745ade19?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1442443880039-e8b9745ade19?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1442443880039-e8b9745ade19?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"juliacaesar\",\"total_collections\":0,\"total_likes\":7,\"total_photos\":42,\"accepted_tos\":false}},{\"id\":\"xsGApcVbojU\",\"created_at\":\"2016-02-13T07:56:41-05:00\",\"updated_at\":\"2019-03-27T17:41:58-04:00\",\"width\":4928,\"height\":3264,\"color\":\"#FCFDFD\",\"description\":null,\"alt_description\":\"person watching through hole\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1455368109333-ebc686ad6c58?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/xsGApcVbojU\",\"html\":\"https://unsplash.com/photos/xsGApcVbojU\",\"download\":\"https://unsplash.com/photos/xsGApcVbojU/download\",\"download_location\":\"https://api.unsplash.com/photos/xsGApcVbojU/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":852,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"IpQHcXdHE2k\",\"updated_at\":\"2019-03-21T16:07:50-04:00\",\"username\":\"ratushny\",\"name\":\"Dmitry Ratushny\",\"first_name\":\"Dmitry\",\"last_name\":\"Ratushny\",\"twitter_username\":null,\"portfolio_url\":\"http://instagram.com/d_ratushnyi\",\"bio\":\"an ordinary boy with a camera\",\"location\":\"Ukraine\",\"links\":{\"self\":\"https://api.unsplash.com/users/ratushny\",\"html\":\"https://unsplash.com/@ratushny\",\"photos\":\"https://api.unsplash.com/users/ratushny/photos\",\"likes\":\"https://api.unsplash.com/users/ratushny/likes\",\"portfolio\":\"https://api.unsplash.com/users/ratushny/portfolio\",\"following\":\"https://api.unsplash.com/users/ratushny/following\",\"followers\":\"https://api.unsplash.com/users/ratushny/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1442426654549-ab90ecad1eb0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1442426654549-ab90ecad1eb0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1442426654549-ab90ecad1eb0?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"d_ratushnyi\",\"total_collections\":0,\"total_likes\":141,\"total_photos\":34,\"accepted_tos\":true}},{\"id\":\"vATgbfp7oXA\",\"created_at\":\"2015-09-01T08:12:15-04:00\",\"updated_at\":\"2019-03-27T17:40:10-04:00\",\"width\":4762,\"height\":3092,\"color\":\"#C8B2A1\",\"description\":\"Teacup and laptop\",\"alt_description\":\"gray laptop beside teacup and bg\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1441109296207-fd911f7cd5e5?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1441109296207-fd911f7cd5e5?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1441109296207-fd911f7cd5e5?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1441109296207-fd911f7cd5e5?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1441109296207-fd911f7cd5e5?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/vATgbfp7oXA\",\"html\":\"https://unsplash.com/photos/vATgbfp7oXA\",\"download\":\"https://unsplash.com/photos/vATgbfp7oXA/download\",\"download_location\":\"https://api.unsplash.com/photos/vATgbfp7oXA/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":874,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"6wRwLLQO-PU\",\"updated_at\":\"2019-04-05T22:29:21-04:00\",\"username\":\"adeolueletu\",\"name\":\"Adeolu Eletu\",\"first_name\":\"Adeolu\",\"last_name\":\"Eletu\",\"twitter_username\":null,\"portfolio_url\":\"https://instagram.com/adeolueletu\",\"bio\":\"Design | Photography\",\"location\":null,\"links\":{\"self\":\"https://api.unsplash.com/users/adeolueletu\",\"html\":\"https://unsplash.com/@adeolueletu\",\"photos\":\"https://api.unsplash.com/users/adeolueletu/photos\",\"likes\":\"https://api.unsplash.com/users/adeolueletu/likes\",\"portfolio\":\"https://api.unsplash.com/users/adeolueletu/portfolio\",\"following\":\"https://api.unsplash.com/users/adeolueletu/following\",\"followers\":\"https://api.unsplash.com/users/adeolueletu/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1445452438624-0e0a8db82d57?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1445452438624-0e0a8db82d57?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1445452438624-0e0a8db82d57?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"adeolueletu\",\"total_collections\":1,\"total_likes\":489,\"total_photos\":52,\"accepted_tos\":false}},{\"id\":\"AtH9GMAkfPE\",\"created_at\":\"2015-08-27T10:33:21-04:00\",\"updated_at\":\"2019-03-27T17:40:07-04:00\",\"width\":4288,\"height\":5105,\"color\":\"#475074\",\"description\":null,\"alt_description\":\"gray and brown mountain formation\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1440610049442-a5101a2204ba?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1440610049442-a5101a2204ba?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1440610049442-a5101a2204ba?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1440610049442-a5101a2204ba?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1440610049442-a5101a2204ba?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/AtH9GMAkfPE\",\"html\":\"https://unsplash.com/photos/AtH9GMAkfPE\",\"download\":\"https://unsplash.com/photos/AtH9GMAkfPE/download\",\"download_location\":\"https://api.unsplash.com/photos/AtH9GMAkfPE/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":871,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"pT_ggsrORig\",\"updated_at\":\"2019-01-15T18:59:18-05:00\",\"username\":\"anna\",\"name\":\"Anna Anikina\",\"first_name\":\"Anna\",\"last_name\":\"Anikina\",\"twitter_username\":null,\"portfolio_url\":\"https://500px.com/anna_anikina\",\"bio\":null,\"location\":\"Russia\",\"links\":{\"self\":\"https://api.unsplash.com/users/anna\",\"html\":\"https://unsplash.com/@anna\",\"photos\":\"https://api.unsplash.com/users/anna/photos\",\"likes\":\"https://api.unsplash.com/users/anna/likes\",\"portfolio\":\"https://api.unsplash.com/users/anna/portfolio\",\"following\":\"https://api.unsplash.com/users/anna/following\",\"followers\":\"https://api.unsplash.com/users/anna/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/placeholder-avatars/extra-large.jpg?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"https://instagram.com/tolpa_yojikov/\",\"total_collections\":0,\"total_likes\":0,\"total_photos\":1,\"accepted_tos\":false}},{\"id\":\"eOLpJytrbsQ\",\"created_at\":\"2014-11-18T14:35:36-05:00\",\"updated_at\":\"2019-03-27T17:38:43-04:00\",\"width\":4000,\"height\":3000,\"color\":\"#A7A2A1\",\"description\":\"office desk with computer and music player\",\"alt_description\":\"white speaker in brown holder beside silver Imac\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/eOLpJytrbsQ\",\"html\":\"https://unsplash.com/photos/eOLpJytrbsQ\",\"download\":\"https://unsplash.com/photos/eOLpJytrbsQ/download\",\"download_location\":\"https://api.unsplash.com/photos/eOLpJytrbsQ/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":589,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"Ul0QVz12Goo\",\"updated_at\":\"2019-04-09T05:08:54-04:00\",\"username\":\"ugmonk\",\"name\":\"Jeff Sheldon\",\"first_name\":\"Jeff\",\"last_name\":\"Sheldon\",\"twitter_username\":\"ugmonk\",\"portfolio_url\":\"http://ugmonk.com/gather\",\"bio\":\"GATHER: The minimal, modular organizer that cuts clutter \\r\\n---------\\r\\n\\r\\nPre-order on Kickstarter \\u2192 http://kck.st/2qg9BUy\",\"location\":\"Downingtown, PA\",\"links\":{\"self\":\"https://api.unsplash.com/users/ugmonk\",\"html\":\"https://unsplash.com/@ugmonk\",\"photos\":\"https://api.unsplash.com/users/ugmonk/photos\",\"likes\":\"https://api.unsplash.com/users/ugmonk/likes\",\"portfolio\":\"https://api.unsplash.com/users/ugmonk/portfolio\",\"following\":\"https://api.unsplash.com/users/ugmonk/following\",\"followers\":\"https://api.unsplash.com/users/ugmonk/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"ugmonk\",\"total_collections\":4,\"total_likes\":15,\"total_photos\":28,\"accepted_tos\":false}},{\"id\":\"iRyGmA_no2Q\",\"created_at\":\"2013-10-20T00:48:46-04:00\",\"updated_at\":\"2019-03-27T17:38:34-04:00\",\"width\":2177,\"height\":3264,\"color\":\"#B19D90\",\"description\":\"Sand footprints\",\"alt_description\":\"foot prints on beach sand\",\"urls\":{\"raw\":\"https://images.unsplash.com/16/unsplash_526360a842e20_1.JPG?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/16/unsplash_526360a842e20_1.JPG?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/16/unsplash_526360a842e20_1.JPG?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/16/unsplash_526360a842e20_1.JPG?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/16/unsplash_526360a842e20_1.JPG?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/iRyGmA_no2Q\",\"html\":\"https://unsplash.com/photos/iRyGmA_no2Q\",\"download\":\"https://unsplash.com/photos/iRyGmA_no2Q/download\",\"download_location\":\"https://api.unsplash.com/photos/iRyGmA_no2Q/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":772,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"C7xAvedirUo\",\"updated_at\":\"2019-04-07T12:06:30-04:00\",\"username\":\"css\",\"name\":\"Christopher Sardegna\",\"first_name\":\"Christopher\",\"last_name\":\"Sardegna\",\"twitter_username\":\"rxcs\",\"portfolio_url\":\"https://chrissardegna.com\",\"bio\":\"Software engineer, financial analyst.\",\"location\":\"Los Angeles\",\"links\":{\"self\":\"https://api.unsplash.com/users/css\",\"html\":\"https://unsplash.com/@css\",\"photos\":\"https://api.unsplash.com/users/css/photos\",\"likes\":\"https://api.unsplash.com/users/css/likes\",\"portfolio\":\"https://api.unsplash.com/users/css/portfolio\",\"following\":\"https://api.unsplash.com/users/css/following\",\"followers\":\"https://api.unsplash.com/users/css/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1445384458055-b0c926b9353f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1445384458055-b0c926b9353f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1445384458055-b0c926b9353f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"reagentx\",\"total_collections\":0,\"total_likes\":0,\"total_photos\":25,\"accepted_tos\":false}},{\"id\":\"oMpAz-DN-9I\",\"created_at\":\"2015-10-12T22:36:06-04:00\",\"updated_at\":\"2019-03-27T17:40:34-04:00\",\"width\":5616,\"height\":3744,\"color\":\"#433329\",\"description\":null,\"alt_description\":\"silhouette photography of person\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1444703686981-a3abbc4d4fe3?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1444703686981-a3abbc4d4fe3?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1444703686981-a3abbc4d4fe3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1444703686981-a3abbc4d4fe3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1444703686981-a3abbc4d4fe3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/oMpAz-DN-9I\",\"html\":\"https://unsplash.com/photos/oMpAz-DN-9I\",\"download\":\"https://unsplash.com/photos/oMpAz-DN-9I/download\",\"download_location\":\"https://api.unsplash.com/photos/oMpAz-DN-9I/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":7782,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"XQqOpGtnD6U\",\"updated_at\":\"2019-04-08T16:44:59-04:00\",\"username\":\"grakozy\",\"name\":\"Greg Rakozy\",\"first_name\":\"Greg\",\"last_name\":\"Rakozy\",\"twitter_username\":\"grakozy\",\"portfolio_url\":\"http://gregrakozy.com\",\"bio\":\"Like my photos? https://buymeacoff.ee/grakozy\",\"location\":\"Salt Lake City, Utah\",\"links\":{\"self\":\"https://api.unsplash.com/users/grakozy\",\"html\":\"https://unsplash.com/@grakozy\",\"photos\":\"https://api.unsplash.com/users/grakozy/photos\",\"likes\":\"https://api.unsplash.com/users/grakozy/likes\",\"portfolio\":\"https://api.unsplash.com/users/grakozy/portfolio\",\"following\":\"https://api.unsplash.com/users/grakozy/following\",\"followers\":\"https://api.unsplash.com/users/grakozy/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1495388545592-e4e376925c59?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1495388545592-e4e376925c59?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1495388545592-e4e376925c59?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"grakozy\",\"total_collections\":16,\"total_likes\":159,\"total_photos\":76,\"accepted_tos\":false}},{\"id\":\"rMmibFe4czY\",\"created_at\":\"2016-02-06T23:00:04-05:00\",\"updated_at\":\"2019-03-27T17:41:54-04:00\",\"width\":3456,\"height\":5184,\"color\":\"#D9E8EC\",\"description\":null,\"alt_description\":\"silhouette photo of person standing\",\"urls\":{\"raw\":\"https://images.unsplash.com/photo-1454817481404-7e84c1b73b4a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"full\":\"https://images.unsplash.com/photo-1454817481404-7e84c1b73b4a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"regular\":\"https://images.unsplash.com/photo-1454817481404-7e84c1b73b4a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"small\":\"https://images.unsplash.com/photo-1454817481404-7e84c1b73b4a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\",\"thumb\":\"https://images.unsplash.com/photo-1454817481404-7e84c1b73b4a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE4MTU4fQ\"},\"links\":{\"self\":\"https://api.unsplash.com/photos/rMmibFe4czY\",\"html\":\"https://unsplash.com/photos/rMmibFe4czY\",\"download\":\"https://unsplash.com/photos/rMmibFe4czY/download\",\"download_location\":\"https://api.unsplash.com/photos/rMmibFe4czY/download\"},\"categories\":[],\"sponsored\":false,\"sponsored_by\":null,\"sponsored_impressions_id\":null,\"likes\":3775,\"liked_by_user\":false,\"current_user_collections\":[],\"user\":{\"id\":\"vwORNQCPONY\",\"updated_at\":\"2019-04-07T21:24:39-04:00\",\"username\":\"jeremythomasphoto\",\"name\":\"Jeremy Thomas\",\"first_name\":\"Jeremy\",\"last_name\":\"Thomas\",\"twitter_username\":\"Jeremytphoto\",\"portfolio_url\":null,\"bio\":null,\"location\":\"Boulder Colorado\",\"links\":{\"self\":\"https://api.unsplash.com/users/jeremythomasphoto\",\"html\":\"https://unsplash.com/@jeremythomasphoto\",\"photos\":\"https://api.unsplash.com/users/jeremythomasphoto/photos\",\"likes\":\"https://api.unsplash.com/users/jeremythomasphoto/likes\",\"portfolio\":\"https://api.unsplash.com/users/jeremythomasphoto/portfolio\",\"following\":\"https://api.unsplash.com/users/jeremythomasphoto/following\",\"followers\":\"https://api.unsplash.com/users/jeremythomasphoto/followers\"},\"profile_image\":{\"small\":\"https://images.unsplash.com/profile-1528314847747-a81014920ed5?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32\",\"medium\":\"https://images.unsplash.com/profile-1528314847747-a81014920ed5?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64\",\"large\":\"https://images.unsplash.com/profile-1528314847747-a81014920ed5?ixlib=rb-1.2.1&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128\"},\"instagram_username\":\"jeremythomasphoto\",\"total_collections\":0,\"total_likes\":226,\"total_photos\":45,\"accepted_tos\":false}}]", 18 | "headers": { 19 | "Server": "Cowboy", 20 | "Cache-Control": "no-cache, no-store, must-revalidate", 21 | "Access-Control-Allow-Origin": "*", 22 | "Access-Control-Request-Method": "*", 23 | "Access-Control-Allow-Headers": "*", 24 | "Access-Control-Expose-Headers": "Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining", 25 | "X-Total": "10", 26 | "X-Per-Page": "10", 27 | "Content-Type": "application/json", 28 | "X-Ratelimit-Limit": "50", 29 | "X-Ratelimit-Remaining": "43", 30 | "X-Request-Id": "b97a5002-d66b-41d4-ba34-f71d062d91bd", 31 | "X-Runtime": "0.042013", 32 | "Strict-Transport-Security": "max-age=31536000; includeSubDomains", 33 | "Via": "1.1 vegur", 34 | "Content-Length": "26662", 35 | "Accept-Ranges": "bytes", 36 | "Date": "Wed, 10 Apr 2019 02:55:12 GMT", 37 | "Age": "2037", 38 | "Connection": "keep-alive", 39 | "X-Served-By": "cache-iad2147-IAD, cache-pao17420-PAO", 40 | "X-Cache": "HIT, HIT", 41 | "X-Cache-Hits": "1, 1", 42 | "X-Timer": "S1554864912.141353,VS0,VE2", 43 | "Vary": "Origin, Authorization" 44 | }, 45 | "status_code": 200, 46 | "type": "ok" 47 | } 48 | } 49 | ] --------------------------------------------------------------------------------