もくじ
- Dribbbleとは?
- Dribbble APIとは?
- 準備
- 解説
-
- RubyからDribbble APIを実行する
-
- shotsの情報を1件ずつ取り出せるようにする
-
- Shotsの情報から必要な情報だけ取り出す
-
Dribbbleとは?
Dribbble - Show and tell for designers
デザイナー向けの招待制SNSです。
Dribbble APIとは?
Dribbbleが提供している開発者向けAPIです。
このAPIを利用すること投稿された作品(Shots)の情報などが取得できるようになります。
準備
Dribbble APIを使う準備についてはこちらの投稿を参考にさせていただきました。
Dribbble APIの使い方とランダムに画像とってくるやつの作り方 - Qiita
解説
RubyからDribbble APIを利用してShotsの情報を取得します。
サンプルプログラム
解説に利用したプログラムをGitHubで閲覧したい方はこちらからどうぞ。
Ruby-Sample-Dribbble/Qiita at master · NaokiIshimura/Ruby-Sample-Dribbble
1. RubyからDribbble APIを実行する
HTTPリクエストの送信には(私が使い慣れているという理由で)Faradayを利用するのでインストールしておきます。
$ gem install faraday
Applicationを登録すると発行されるClient Access Token
を変数token
に、とリクエストURLをurl
を設定します。
リクエストURLにはsort=recent
という条件を追加してあります。
# tokenを設定する
token = '<Client Access Token>'
# URLを設定する
url = 'https://api.dribbble.com/v1/shots?sort=recent'
# リクエストを送信
require 'faraday'
client = Faraday.new
res = client.get do |req|
req.url url
req.headers['Authorization'] = "Bearer #{token}"
end
# レスポンスを表示
puts '>>> STATUS'
p res.status
puts '>>> BODY'
p res.body
実行するとレスポンスボディにjson形式の文字列が返却されます。
$ ruby sample1.rb
>>> STATUS
200
>>> BODY
"[\n {\n \"id\": 3874819,\n \"title\": \"The Good Photo Co.\", ...
...
DribbbleのRecentでソートしたShotsと比較すると1件目の作品名がjsonでも取得できてることがわかります。
2. shotsの情報を1件ずつ取り出せるようにする
レスポンスボディを扱いやすくするために、jsonに変換します。
レスポンスボディには複数のjsonオブジェクトが(こんな{},{},{},,,感じに複数)含まれているため、jsonに変換してshotsの情報を1つずつ取り出せるようにします。
# tokenを設定する
token = '<Client Access Token>'
# URLを設定する
url = 'https://api.dribbble.com/v1/shots?sort=recent'
# リクエストを送信
require 'faraday'
client = Faraday.new
res = client.get do |req|
req.url url
req.headers['Authorization'] = "Bearer #{token}"
end
# レスポンスを表示
puts '>>> STATUS'
p res.status
# レスポンスボディをパースする
require 'json'
body = JSON.parse res.body
# jsonオブジェクトを1つずつ取り出す、
body.each.with_index(1) do |shots, i|
# Shotsの情報を表示
puts ">>> SHOTS:#{i}"
p shots
end
実行すると、Shotsの情報が1件ずつ取り出せるようになります。
$ ruby sample2.rb
>>> STATUS
200
>>> SHOTS:1
{"id"=>3874823, "title"=>"October 14 2017- Daily Vectors", ...
...
>>> SHOTS:12
{"id"=>3874806, "title"=>"Tank Stream App", ...
...
3. Shotsの情報から必要な情報だけ取り出す
最後にshotsの情報から必要な項目だけを取り出します。
id
とhidpi
の情報を取得する場合は以下のようになります。
# tokenを設定する
token = '<Client Access Token>'
# URLを設定する
url = 'https://api.dribbble.com/v1/shots?sort=recent'
# リクエストを送信
require 'faraday'
client = Faraday.new
res = client.get do |req|
req.url url
req.headers['Authorization'] = "Bearer #{token}"
end
# レスポンスを表示
puts '>>> STATUS'
p res.status
# レスポンスボディをパースする
require 'json'
body = JSON.parse res.body
# jsonオブジェクトを1つずつ取り出す、
body.each.with_index(1) do |shots, i|
# Shotsの情報を表示
puts ">>> SHOTS:#{i}"
p shots['title']
p shots['images']['hidpi']
end
実行するとshotsのid
とhidpi
の情報が取得できます。
$ ruby sample3.rb
>>> STATUS
200
>>> SHOTS:1
"TIWMUG"
"https://cdn.dribbble.com/users/1186561/screenshots/3874835/tiwmug.png"
>>> SHOTS:2
"Russian Yeti"
"https://cdn.dribbble.com/users/1186561/screenshots/3874834/russian_yeti.png"
...