ちくわ工務店

雰囲気でつくろう

勉強メモ Instagram gemを使う

自分の投稿を引っ張ってくるまでのメモ

結果から言うとエンドポイントが古いAPIがあって一部使えなかった。 でもとりあえず欲しいAPIのエンドポイントはまだ生きていたので使用した。

参考

インストール

Gemfileに以下を追加してbundle install

gem 'instagram'

アプリケーションの登録, Client IDの取得

下記から登録

http://instagram.com/developer/

登録内容は参考ページ参照

登録できると、CLIENT ID, Client Secretが取得できる。

なお、最初はSandbox Modeなる設定になっている。 Instagramのコンテンツに完全にアクセスするにはレビューが必要らしい。

Sandbox Modeでも機能制限はあるものの普通にAPIは使えるっぽい。 詳しくはこちら

取得したClient IDClient secretを登録

require 'instagram'

Instagram.configure do |config|
  config.client_id = "CLIENT_ID"
  config.client_secret = "CLIENT_SECRET"
end

AccessTokenを取得

APIを使用するためににAccessTokenが必要。 使用しないと怒られる

400: The access_token provided is invalid. (Instagram::BadRequest)

AccessTokenの取得方法はこちら

以下にかいつまんだ取得方法を

1. Codeを取得する

以下のURLを叩いてcodeを取得する

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

叩くとredirect URLにcodeが付加されている

http://your-redirect-uri?code=CODE

これをコピっておく

2. AccessTokenをリクエス

以下のCURLを叩く

    curl -F 'client_id=CLIENT_ID' \
    -F 'client_secret=CLIENT_SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \
    -F 'code=CODE' \
    https://api.instagram.com/oauth/access_token

うまくいくと以下のレスポンスが返ってくる

{
    "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d",
    "user": {
        "id": "1574083",
        "username": "snoopdogg",
        "full_name": "Snoop Dogg",
        "profile_picture": "..."
    }
}

フィードを取得する

以下、実装例

require 'instagram'

Instagram.configure do |config|
  config.client_id = "CLIENT_ID"
  config.client_secret = "CLIENT_SECRET"
end

Instagram.access_token = "ACCESS_TOKEN"
medias = Instagram.user_recent_media(USER_ID)

medias.each do |media|
  p media
end

ここで必要なのはACCESS_TOKEN(前述)とUSER_ID USER_IDはAccessToken取得時のレスポンスの"id"からコピペする。