Upload
kobayashi-yoshinori
View
697
Download
4
Embed Size (px)
Citation preview
【CoEdo.rb】Ruby / Ruby on Rails ビギナーズ勉強会 第6回
Ticklecode
Yoshinori Kobayashi 1
Instagram Ruby Gem と Instagram API から学んだことまとめ
Instagram Ruby Gem でユーザーの最近の投稿を取得する
2
生まれは 奈良県 です
小林由憲(こばやしよしのり)
Twitter:
TickleCode ブログ:
@yoshiii514
もくもく会(自主勉強会) を複数の運営メンバーや アドバイザーの方々と ともに、定期開催しています。
勉強会を開催しています)^o^(
3
【CoEdo.rb】
Ruby / Ruby on Rails ビギナーズ勉強会
Swiftビギナーズ勉強会
WordPressもくもく 勉強会
http://wp-moku.doorkeeper.jp/
https://swift-beginners.doorkeeper.jp/
https://coedo-rails.doorkeeper.jp/
自己紹介
4
Instagram Ruby Gem を使えるようにする
5
Rails と Instagram Ruby Gem を使って作る世界遺産検索サイト
Instagram Ruby Gem を使えるようにする。
Instagram と Instagram Ruby Gem の概要については 以前にスライドでまとめた。
InstagramのAPIを使って画像をひっぱてくる - Qiita
最初の設定はこちらの記事がよくまとまっています。
重要な箇所を補足します。
6
Instagram Ruby Gem を使えるようにする。
アプリケーション登録をして、CLIENT ID(クライアントID), CLIENT SECRET(クライアントシークレット)を取得する。
Register a Client Instagram Developer Documentation
7
取得したCLIENT ID, CLIENT SECRETを記述する。
require "instagram"
Instagram.configure do |config|
config.client_id = "INSTAGRAM_CLIENT_ID"
config.client_secret = "INSTAGRAM_CLIENT_SECRET"
end
Instagram Ruby Gem を使えるようにする。
/config/initializers/instagram.rb
8
ユーザーの最近の投稿を取得する
9
home_controller.rb
結果、user_recent_media メソッドで取得できる。
class HomeController < ApplicationController
def index
@user = Instagram.user_recent_media(12413015,{:count
=> 20})
end
end
index.html.erb
<% @user.each do |p| %>
<%= image_tag(p.images.low_resolution.url,:class => "img-
rounded") %>
<% end %>
ユーザーの最近の投稿を取得する
10
自分の最近の投稿が取得できている。
ユーザーの最近の投稿を取得する
Railsの勉強になったので、ここまでの手順をまとめてみる。
11
ユーザーの最近の投稿を取得する
ユーザーの直近の情報を取得したい。
Qiita の記事から user_recent_media がそれっぽい!とわかる。
パラメタとかもう少し、使い方を知りたい。
12
ユーザーの最近の投稿を取得する
instagram-ruby-gem/lib/instagram/client/users.rb
詳しくは、こちらをみて!と書かれている。
@see http://instagram.com/developer/endpoints/users/#get_users_media_recent
user_recent_media メソッドを探してみる。
13
GET /users/user-id/media/recent
https://api.instagram.com/v1/users/{user-id}/media/recent/?access_token=ACCESS-TOKEN
ユーザーの直近のメディアを取得する。アクセストークンの所有者によって最も直近のメディアを取得させるために、あなたは user-idの代わりにselftを使うことができる。
[パラメーター]
COUNT 取得するメディアの件数
MAX_TIMESTAMP この日時(UNIX timestamp)より以前のメディアを取得
ACCESS_TOKEN 有効なアクセストークン ※Instagram Ruby Gem では自動で設定される。
MIN_TIMESTAMP この日時(UNIX timestamp)より以後のメディアを取得
MIN_ID このメディアIDより後を取得
MAX_ID このメディアIDより前を取得
Instagram: get_users_media_recent
ユーザーの最近の投稿を取得する
Instagram Web API ドキュメント どこまで使えるか確認できる。
14
ACCESS TOKEN アクセストークン とは
トークン はプログラムでは単語や記号の最小単位。 セキュリティでは、パスワードを発行する機器、または認証用の文字列を生成する仕組み。
Instagram ではユーザーIDとパスワードを入力してログインして、使用できる。
Webサービスのリクエストベースではログイン画面で入力するのは難しいので、CLIENT ID, CLIENT SECRETから生成された文字列(アクセストークン)を付加してもらうことで認証している。
ユーザーの最近の投稿を取得する
15
ACCESS TOKEN アクセストークン は必要なときに、 Instagram Ruby gemが、CLIENT ID, CLIENT SECRETから生成してくれる。
ユーザーの最近の投稿を取得する
require "instagram"
Instagram.configure do |config|
config.client_id = "INSTAGRAM_CLIENT_ID"
config.client_secret = "INSTAGRAM_CLIENT_SECRET"
end
/config/initializers/instagram.rb
16
GET /users/user-id/media/recent
https://api.instagram.com/v1/users/{user-id}/media/recent/?access_token=ACCESS-TOKEN
ユーザーの直近のメディアを取得する。アクセストークンの所有者によって最も直近のメディアを取得させるために、あなたは user-idの代わりにselftを使うことができる。
[パラメーター]
COUNT 取得するメディアの件数
MAX_TIMESTAMP この日時(UNIX timestamp)より以前のメディアを取得
ACCESS_TOKEN 有効なアクセストークン ※Instagram Ruby Gem では自動で設定される。
MIN_TIMESTAMP この日時(UNIX timestamp)より以後のメディアを取得
MIN_ID このメディアIDより後を取得
MAX_ID このメディアIDより前を取得
https://instagram.com/developer/endpoints/users/#get_users_media_recent
ユーザーの最近の投稿を取得する
あと、user-id(ユーザーID)をどうするか・・・
17
Instagram ではユーザー名しかわからない。
ユーザーの最近の投稿を取得する
18
http://jelled.com/instagram/lookup-user-id#
ユーザー名からユーザーIDを取得してあげる。
ユーザーの最近の投稿を取得する
19
次は、user_recent_media リクエストがわかったので、レスポンスを確認してみる。
ユーザーの最近の投稿を取得する
Instagram: get_users_media_recent
20
home_controller.rb
Viewでデバックしてみる。
class HomeController < ApplicationController
def index
@user = Instagram.user_recent_media(12413015,{:count =>
20})
end
end
index.html.erb
<% @user.each do |p| %>
<%= debug p %>
<%= image_tag(p.images.low_resolution.url,:class => "img-
rounded") %>
<% end %>
ユーザーの最近の投稿を取得する
21
ユーザーの最近の投稿を取得する
debug での出力結果で確認
standard resolution が標準解像度(640x640)
low resolution が低解像度(320x320)
出力結果を見て、どのデータが使えるか、「アタリ」をつける。
22
階層をたどって、イメージを取得すればOK!
index.html.erb
<% @user.each do |p| %>
<%= debug p %>
<%= image_tag(p.images.low_resolution.url,:class => "img-
rounded") %>
<% end %>
ユーザーの最近の投稿を取得する
debug での出力結果
23
最後に
8月はTokyuRuby会議に行きます! (ビギナーズは9月に開催予定) ぜひ、みんなで行きましょう!
24
今後の問い合わせ先
何かございましたら、
ご連絡ください(・∀・)
Twitter: @yoshiii514
Facebook: Yoshinori.Koba
Mail: [email protected]
最後に
25
ご清聴ありがとうございました。