class Flckr::Api
Public Class Methods
new(api_key)
click to toggle source
# File lib/flckr/api.rb, line 10 def initialize(api_key) @api_key = api_key end
Public Instance Methods
download(url, dir)
click to toggle source
# File lib/flckr/api.rb, line 22 def download(url, dir) response = conn.get url File.open("#{dir}/#{SecureRandom.hex(5)}.jpg", 'wb') { |fp| fp.write(response.body) } end
download_by(keywords, dir)
click to toggle source
# File lib/flckr/api.rb, line 14 def download_by(keywords, dir) ten_keywords = Dict.make_ten_words keywords urls = search_all ten_keywords urls.map do |url| download(url, dir) end end
generate_url(photo_id:, server_id:, farm_id:, secret:)
click to toggle source
# File lib/flckr/api.rb, line 27 def generate_url(photo_id:, server_id:, farm_id:, secret:) "https://farm#{farm_id}.staticflickr.com/#{server_id}/#{photo_id}_#{secret}_m.jpg" end
search(keywords)
click to toggle source
# File lib/flckr/api.rb, line 38 def search(keywords) [].tap do |responses| client = conn client.in_parallel do keywords.each do |keyword| responses << client.get('/services/rest', params(@api_key, keyword)) end end end end
search_all(keywords)
click to toggle source
# File lib/flckr/api.rb, line 31 def search_all(keywords) search(keywords) .map { |r| parse r } .reject(&:nil?) .map { |e| generate_url e } end
Private Instance Methods
conn()
click to toggle source
# File lib/flckr/api.rb, line 65 def conn Faraday.new(url: 'https://api.flickr.com') do |faraday| faraday.adapter :typhoeus end end
params(api_key, keyword)
click to toggle source
# File lib/flckr/api.rb, line 71 def params(api_key, keyword) { method: 'flickr.photos.search', api_key: api_key, text: keyword, format: 'json', nojsoncallback: 1, page: 1, per_page: 1 } end
parse(response)
click to toggle source
# File lib/flckr/api.rb, line 51 def parse(response) hash = JSON.parse response.body return $stderr.puts hash['message'] if hash['stat'] == 'fail' photo = hash['photos']['photo'].first to_hash photo unless photo.nil? end
to_hash(photo)
click to toggle source
# File lib/flckr/api.rb, line 58 def to_hash(photo) { photo_id: photo['id'], farm_id: photo['farm'], secret: photo['secret'], server_id: photo['server'] } end