DesignAssembler

備忘録に近い

instagram APIを使う

こんにちは。

web周りの勉強中です。今回はinstagramAPIを使ってみます。

使用言語はRuby2.0.0(古い)です。

instagramAPIでできる事

ユーザー取得
ユーザー検索
投稿の検索
コメント
フォロー
いいね
・・・etc

instagramのほぼ全ての機能がAPIで使えます。

instagramアプリケーションの登録

こちらにアクセスしてログインしてください

http://instagram.com/developer/clients/manage/

アクセスしたらRegister a New Clientボタンをクリックしてください。

f:id:hyottokoaloha:20150428135937p:plain


そしたらこのような画面になると思うので全て入力してください。

Application NameにはInstagramやIG、insta、gramは使えないと書いてますね。

自分はWebsite URLとRedirect URI(s)はどちらもhttp://localhostと書きました。

書いたらRegisterボタンを押します。ここでジャンプしたページに書いてあるCLIENT IDCLIENT SECRETをメモしておきます。

codeの取得

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

先ほどメモしたCLIENT IDと記入したREDIRECT URIをブラウザのアドレスバーに入力してジャンプします。

f:id:hyottokoaloha:20150428141040p:plain

そしたらこんなページに飛ぶのでAuthorizeボタンを押します。

これで入力したREDIRECT URIのページに飛ぶのですが、そのページのアドレスの末尾に

?code=1111111111111111111111111111111111

のような数字があると思います。これをまたメモしてください。

access_tokenの取得

ターミナルに以下のコマンドを入力してください。

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

ここで先ほどメモしたCLIENT_ID等を入力してください。

成功したらjsonの出力が返ってきます。これのaccess_tokenをメモしてください。

これで登録は完了です。


instagram gemのインストール

以下のコマンドでinstagram gemをインストールしてください。

$ sudo gem install instagram

コマンド一発でgemの準備はできました。

ソースコード

以下のコードはハッシュタグcatで検索した結果20件の画像URLとその投稿者のfull_nameを表示します。

require 'instagram'

Instagram.configure do |config|
  config.client_id = '(client_id)'
  config.access_token = '(access_token)'
end

photos = Instagram.tag_recent_media('cat')

photos.each do |photo|
  puts photo['images']['standard_resolution']['url'] 
  puts photo['caption']['from']['full_name']
end


表示されたURLをブラウザに入力してアクセスするとちゃんと画像を見る事ができます。

日本語で検索したい場合

日本語で検索するには、URLエンコードをしてやらなければなりません。ですので、以下のようにしてください。

まず、uri をrequireする。

require 'uri'

次に、tag_recent_mediaメソッドを以下のようにします。

photos = Instagram.tag_recent_media(URI.escape(""),count:100)

これで日本語ハッシュタグでの検索が可能になります。

第二引数のcount:100は、取得数です。ここでは100件取得と指定しているのですが、実際に取得できるのは30件ちょっとでした。

※ワード固定の場合別にソースコード中でエンコードしなくても、こことかでエンコードしてtag_recent_mediaメソッドに入れる方がいいかも・・・www.tagindex.com


参考

qiita.com


Rubyで自分のInstagramの最新5つを取得するにはsmallmakeprgnote.wordpress.com


公式ドキュメント
Module: Instagram::Client::Tags — Documentation for Instagram/instagram-ruby-gem (master)