class Unsplash::Photo

Unsplash Photo operations.

Public Class Methods

all(page = 1, per_page = 10, order_by = "latest") click to toggle source

Get a list of all photos. @param page [Integer] Which page of search results to return. @param per_page [Integer] The number of search results per page. (default: 10, maximum: 30) @param order_by [String] How to sort the photos. (Valid values: latest, oldest, popular; default: latest) @return [Array] A single page of Unsplash::Photo search results.

# File lib/unsplash/photo.rb, line 103
def all(page = 1, per_page = 10, order_by = "latest")
  params = {
    page:     page,
    per_page: per_page,
    order_by: order_by
  }
  parse_list connection.get("/photos/", params).body
end
create(filepath) click to toggle source

Upload a photo on behalf of the current user. @param filepath [String] The local path of the image file to upload. @return [Unsplash::Photo] The uploaded photo. DEPRECATED

# File lib/unsplash/photo.rb, line 130
def create(filepath)
  raise Unsplash::DeprecationError.new "API photo-upload endpoint has been deprecated and removed."
end
curated(page = 1, per_page = 10, order_by = "latest") click to toggle source

Get a single page from the list of the curated photos (front-page’s photos). @param page [Integer] Which page of search results to return. @param per_page [Integer] The number of search results per page. (default: 10, maximum: 30) @param order_by [String] How to sort the photos. (Valid values: latest, oldest, popular; default: latest) @return [Array] A single page of Unsplash::Photo search results.

# File lib/unsplash/photo.rb, line 117
def curated(page = 1, per_page = 10, order_by = "latest")
  params = {
    page:     page,
    per_page: per_page,
    order_by: order_by
  }
  parse_list connection.get("/photos/curated", params).body
end
find(id, width: nil, height: nil, crop_rect: nil) click to toggle source

Get a photo. Can be cropped or resized using the optional parameters. @param id [String] The ID of the photo to retrieve. @param width [Integer] Width of customized version of the photo. @param height [Integer] Height of the customized version of the photo. @param crop_rect [String] A comma-separated list (x,y,width,height) of the rectangle to crop from the photo. @return [Unsplash::Photo] The Unsplash Photo.

# File lib/unsplash/photo.rb, line 34
def find(id, width: nil, height: nil, crop_rect: nil)
  custom = {
    w:    width,
    h:    height,
    rect: crop_rect
  }.select { |k,v| v }
  photo = Unsplash::Photo.new JSON.parse(connection.get("/photos/#{id}", custom).body)
  photo.user = Unsplash::User.new photo.user
  photo
end
random(count: nil, categories: nil, collections: nil, featured: nil, user: nil, query: nil, width: nil, height: nil, orientation: nil) click to toggle source

Get a random photo or set of photos. The photo selection pool can be narrowed using a combination of optional parameters. Can also optionally specify a custom image size. @param count [Integer] Number of photos required. Default=1, Max=30 @param categories [Array] Limit selection to given category ID's. @param featured [Boolean] Limit selection to featured photos. @param user [String] Limit selection to given User's ID. @param query [String] Limit selection to given search query. @param width [Integer] Width of customized version of the photo. @param height [Integer] Height of the customized version of the photo. @param orientation [String] Filter by orientation of the photo. Valid values are landscape, portrait, and squarish. @return [Unsplash::Photo] An Unsplash Photo if count parameter is omitted @return [Array] An array of Unsplash Photos if the count parameter is specified. An array is returned even if count is 1

# File lib/unsplash/photo.rb, line 57
def random(count: nil, categories: nil, collections: nil, featured: nil, user: nil, query: nil, width: nil, height: nil, orientation: nil)
  params = {
    category: (categories && categories.join(",")),
    collections: (collections && collections.join(",")),
    featured: featured,
    username: user,
    query:    query,
    w:        width,
    h:        height,
    orientation: orientation
  }.select { |k,v| v }
  if count
    params[:count] = count
    photos = parse_list connection.get("/photos/random/", params).body
    photos.map { |photo|
      photo.user = Unsplash::User.new photo[:user]
      photo
    }
  else
    photo = Unsplash::Photo.new JSON.parse(connection.get("/photos/random", params).body)
    photo.user = Unsplash::User.new photo.user
    photo
  end
end

Private Class Methods

parse_list(json) click to toggle source
# File lib/unsplash/photo.rb, line 136
def parse_list(json)
  JSON.parse(json).map { |photo| new photo }
end

Public Instance Methods

download!() click to toggle source

Download a photo. @return [String] URL of image file for download.

# File lib/unsplash/photo.rb, line 22
def download!
  connection.get(links.download_location)["url"]
end
like!() click to toggle source

Like a photo for the current user. @return [Boolean] True if successful. Will raise on error.

# File lib/unsplash/photo.rb, line 8
def like!
  connection.post("/photos/#{id}/like")
  true
end
unlike!() click to toggle source

Unlike a photo for the current user. @return [Boolean] True if successful. Will raise on error.

# File lib/unsplash/photo.rb, line 15
def unlike!
  connection.delete("/photos/#{id}/like")
  true
end