2016年6月からInstagramの仕様が変更となり、審査に通らないと自動的にsandboxモードになるようになりました。
詳しくは以下の様なサイトを参照してください。
https://dandashokai.com/1315
http://outof-rails.seesaa.net/article/432446339.html
自分のページだけで使用するアプリにInstagramAPIを利用する場合、審査に通らない可能性が非常に高いので、ここではsandboxモードで使用することを前提に書きます。
最終目的としては、特定のハッシュタグでの投稿を集めることです。
下記の猫stagramみたいな感じです。
http://blog.ruedap.com/2011/02/28/instagram-api-of-exclusive-use-for-cat-lovers-nekostagram
基本的には上記の猫stagramのページのままなのですが、初心者用の詳しい内容などが載っているページが見つからなかったので、今後の自分のメモとしても残します。
必要となるgemは'instagram'のみです。
環境
Ruby 2.3.0
Rails 4.2.3
1.Gemファイルに gem 'instagram' を追加する
gem 'instagram'
2.bundle install実行
普通に「bundle install」を実行します。
3.config > initializersにconstants.rbファイルを作成
Railsコマンドを使わずに「constants.rb」という名前のファイルを作るだけです。
4.作成したconstants.rbファイルを編集
module Constants
# instagram
ACCESS_TOKEN = "******"
end
その他も設定したい方はこちら↓
module Constants
# instagram
CLIENT_ID = "******"
CLIENT_SECRET = "******"
ACCESS_TOKEN = "******"
REDIRECT_URL = '******'
TAG_NAME = '******'
end
各項目の取得方法は以下URL参照
確か上記ページの通りにするとエラーが出たと思うのですが、その時はエラーメッセージの最後の文章でググったらすぐ出てきたと思います。
「CLIENT_ID」とか「CLIENT_SECRET」は変数なので分かりやすければ何でもいいです。
twitterとかfacebookとか他のSNSの情報も持たせたい場合は「TW_CLIENT_ID」とかにすると分かりやすいです。
ただしコントローラーと整合性は持たせてくださいね(^o^)
5.コントローラ(app > controllers > top_controller.rb)の設定
class TopController < ApplicationController
require 'instagram'
require 'json'
def index
Instagram.access_token = "#{Constants::ACCESS_TOKEN}"
unless Instagram.tag_recent_media("はんにゃらばんばんばん")
@medias = ""
else
@medias = Instagram.tag_recent_media("はんにゃらばんばんばん")
end
end
end
嫌だー!access_token以外も使いたいんだー!という方はこちら↓
class TopController < ApplicationController
require 'instagram'
# require 'uri'
require 'json'
def index
Instagram.configure do |config|
config.client_id = "#{Constants::CLIENT_ID}"
config.client_secret = "#{Constants::CLIENT_SECRET}"
config.access_token = "#{Constants::ACCESS_TOKEN}"
end
unless Instagram.tag_recent_media("はんにゃらばんばんばん")
@medias = ""
else
@medias = Instagram.tag_recent_media("はんにゃらばんばんばん")
end
end
end
6.view(app > views > top > index.html.erb)の編集
<% if @medias == nil %>
<%= "投稿がありません" %>
<% else %>
<% @medias.each do |media| %>
<!-- 投稿画像 -->
<%= link_to image_tag(media.images.low_resolution.url, :class => "img- rounded" ), media.link, :target=>["_blank"] %><br>
<!-- 投稿者名 -->
<%= media['caption']['from']['full_name'] %><br>
<!-- コメント -->
<%= media.caption.text %><br>
<!-- いいねカウント -->
<img src = "/images/heart.gif"><%= media['likes']['count'] %><br>
<!-- コメントカウント -->
<img src = "/images/comment.gif"><%= media['comments']['count'] %><br>
<% end %>
<% end %>
完成
これで完成です。
全然成形していないので、縦にダラダラでてきますのでCSSとかで適当にいじって下さい。
その他の情報を記載したい場合はindex.html.erbの中に「<%= @medias %>」を置けば、JSONが表示されるので、表示したい内容を探して付け加えて下さい。
全然出ないじゃねーか!と突っ込まれる前にAPIにユーザーを登録したか確認してくださいね(^^;)
sandboxモードだと登録済みユーザーの中でハッシュタグ検索した結果しか出ませんから(ToT)
非常に使いにくいAPIになってしまいましたね・・・