回答編集履歴

3 修正

CHERRY

CHERRY score 20031

2017/12/08 20:57  投稿

具体的に どのようなソースコードをお使いかわからないのですが、access_token が、取得できないというのは、Instagram にリダイレクトされた後、callback の URL に戻ってきているのでしょうか?
----
gem 'instagram' ということなので、ruby の ライブラリと判断して、[facebookarchive/instagram-ruby-gem](https://github.com/facebookarchive/instagram-ruby-gem) のサンプルが、ほぼそのまま動きそうな感じだったので、 CALLBACK_URL / client_id / client_secret あたりを変更して、実行してみた感じでは、問題なく access_token が、取得できています。
Sandbox Mode で使えない機能はダメですが、自分の画像は表示できました。
----
(2017.12.08 20:50追記)
質問に記載されている URL のサンプルがうまく動かなかったので、修正しようかと思ったのですが、書き直す方が早そうだったので、最低限の確認できるだけの内容で書き直してます。
rails 5.0.1 で動作確認しました。
index で、@a_token を使っていますが、アクセストークンを確認のために view に表示したいだけなので、確認が済んだら消してOKです。
1.Rails プロジェクトを作成
```
rails new app1
```
2.Gemfiles の最後にに以下を追加
2.Gemfile の最後にに以下を追加
```
gem 'instagram'
```
3.ライブラリのインストール
3.Gemのインストール
```
bundle install --path vendor/bundle/
```
4.Instagram の Client_id / client_secret を設定
4.Instagram の client_id / client_secret を設定
config/initializers/instagram.rb
```
require "instagram"
Instagram.configure do |config|
 config.client_id = "INSTAGRAM_CLIENT_ID"
 config.client_secret = "INSTAGRAM_CLIENT_SECRET"
end
```
5.Home Controller を作成
```
rails g controller Home index
```
6.app/controllers/home_controller.rb を編集
```
class HomeController < ApplicationController
 require "instagram"
 # Callback URL (環境に合わせて変える)
 CALLBACK_URL = "http://example.com:3000/auth/instagram/callback"
 def index
   if session.key? :access_token
     @a_token = session[:access_token]
   end
 end
 # トークン発行URLへのリダイレクト
 def token
   redirect_to Instagram.authorize_url(:redirect_uri => CALLBACK_URL)
 end
 # access_tokenを取得 (コールバック)
 def get_token
   response = Instagram.get_access_token(params[:code], :redirect_uri => CALLBACK_URL)
   session[:access_token] = response.access_token
   redirect_to "/"
 end
 
 # メディアの表示
 def user_recent_media
   client = Instagram.client(:access_token => session[:access_token])
   @medias = client.user_recent_media
 end
end
```
7.ビューの作成
app/views/home/index.html.erb
```
<p><%= link_to "instagramにサインイン", "/auth/instagram" %></p>
<p><%= link_to "User Recent Media", "/user_recent_media" %> - ユーザーのメディアを表示</p>
<% if @a_token.present? %>
 <p>Instagram Access Token : <%= @a_token %> </p>
<% end %>
```
app/views/home/user_recent_media.html.erb
```
<p><%= link_to "Home", "/" %></p>
<% if @medias.present? %>
 <% @medias.each do |media| %>
   <%= link_to media.link, :target => "_blank" do %>
     <%= image_tag(media.images.low_resolution.url) %>
   <% end %>
 <% end %>
<% end %>
```
8.ルート定義
config/routes.rb
```
Rails.application.routes.draw do
 root 'home#index'
 get "/auth/instagram"         => "home#token"
 get "/auth/instagram/callback" => "home#get_token"
 get "/user_recent_media"      => "home#user_recent_media"
end
```
9.実行
9.サーバを実行
```
bundle exec rails s
```
webブラウザで、RailsアプリのURL( http://example.com:3000/ )に接続すると 一番上に「instagramにサインイン」のリンクがあると思うので、クリックすると Instagram の画面になって、アプリへの許可画面になるので、許可をしてください。
callback に戻って、最下行に 取得できたアクセストークンが、「Instagram Access Token : xxxxxxxxx」と表示されると思います。
「User Recent Media」のリンクをクリックすると ユーザーの画像を表示できると思います。(エラーチェックとかしていないので、Instagram にサインインしていない状態で、User Recent Media をクリックするとエラー画面になります。)
2 rails で動作確認したソースコードを記載

CHERRY

CHERRY score 20031

2017/12/08 20:55  投稿

具体的に どのようなソースコードをお使いかわからないのですが、access_token が、取得できないというのは、Instagram にリダイレクトされた後、callback の URL に戻ってきているのでしょうか?
----
gem 'instagram' ということなので、ruby の ライブラリと判断して、[facebookarchive/instagram-ruby-gem](https://github.com/facebookarchive/instagram-ruby-gem) のサンプルが、ほぼそのまま動きそうな感じだったので、 CALLBACK_URL / client_id / client_secret あたりを変更して、実行してみた感じでは、問題なく access_token が、取得できています。
Sandbox Mode で使えない機能はダメですが、自分の画像は表示できました。
Sandbox Mode で使えない機能はダメですが、自分の画像は表示できました。
----
(2017.12.08 20:50追記)
質問に記載されている URL のサンプルがうまく動かなかったので、修正しようかと思ったのですが、書き直す方が早そうだったので、最低限の確認できるだけの内容で書き直してます。
rails 5.0.1 で動作確認しました。
index で、@a_token を使っていますが、アクセストークンを確認のために view に表示したいだけなので、確認が済んだら消してOKです。
1.Rails プロジェクトを作成
```
rails new app1
```
2.Gemfiles の最後にに以下を追加
```
gem 'instagram'
```
3.ライブラリのインストール
```
bundle install --path vendor/bundle/
```
4.Instagram の Client_id / client_secret を設定
config/initializers/instagram.rb
```
require "instagram"
Instagram.configure do |config|
 config.client_id = "INSTAGRAM_CLIENT_ID"
 config.client_secret = "INSTAGRAM_CLIENT_SECRET"
end
```
5.Home Controller を作成
```
rails g controller Home index
```
6.app/controllers/home_controller.rb を編集
```
class HomeController < ApplicationController
 require "instagram"
 # Callback URL (環境に合わせて変える)
 CALLBACK_URL = "http://example.com:3000/auth/instagram/callback"
 def index
   if session.key? :access_token
     @a_token = session[:access_token]
   end
 end
 # トークン発行URLへのリダイレクト
 def token
   redirect_to Instagram.authorize_url(:redirect_uri => CALLBACK_URL)
 end
 # access_tokenを取得 (コールバック)
 def get_token
   response = Instagram.get_access_token(params[:code], :redirect_uri => CALLBACK_URL)
   session[:access_token] = response.access_token
   redirect_to "/"
 end
 
 # メディアの表示
 def user_recent_media
   client = Instagram.client(:access_token => session[:access_token])
   @medias = client.user_recent_media
 end
end
```
7.ビューの作成
app/views/home/index.html.erb
```
<p><%= link_to "instagramにサインイン", "/auth/instagram" %></p>
<p><%= link_to "User Recent Media", "/user_recent_media" %> - ユーザーのメディアを表示</p>
<% if @a_token.present? %>
 <p>Instagram Access Token : <%= @a_token %> </p>
<% end %>
```
app/views/home/user_recent_media.html.erb
```
<p><%= link_to "Home", "/" %></p>
<% if @medias.present? %>
 <% @medias.each do |media| %>
   <%= link_to media.link, :target => "_blank" do %>
     <%= image_tag(media.images.low_resolution.url) %>
   <% end %>
 <% end %>
<% end %>
```
8.ルート定義
config/routes.rb
```
Rails.application.routes.draw do
 root 'home#index'
 get "/auth/instagram"         => "home#token"
 get "/auth/instagram/callback" => "home#get_token"
 get "/user_recent_media"      => "home#user_recent_media"
end
```
9.実行
```
bundle exec rails s
```
webブラウザで、RailsアプリのURL( http://example.com:3000/ )に接続すると 一番上に「instagramにサインイン」のリンクがあると思うので、クリックすると Instagram の画面になって、アプリへの許可画面になるので、許可をしてください。
callback に戻って、最下行に 取得できたアクセストークンが、「Instagram Access Token : xxxxxxxxx」と表示されると思います。
「User Recent Media」のリンクをクリックすると ユーザーの画像を表示できると思います。(エラーチェックとかしていないので、Instagram にサインインしていない状態で、User Recent Media をクリックするとエラー画面になります。)
1 修正

CHERRY

CHERRY score 20031

2017/12/08 12:17  投稿

具体的に どのようなソースコードをお使いかわからないのですが、access_token が、取得できないというのは、Instagram にリダイレクトされた後、callback の URL に戻ってきているのでしょうか?
----  
[facebookarchive/instagram-ruby-gem](https://github.com/facebookarchive/instagram-ruby-gem) のサンプルがほぼそのまま動きそうだったので、 CALLBACK_URL / client_id / client_secret あたりを変更して、実行してみた感じでは、問題なく access_token が、取得できています。
gem 'instagram' ということなので、ruby の ライブラリと判断して、[facebookarchive/instagram-ruby-gem](https://github.com/facebookarchive/instagram-ruby-gem) のサンプルが、ほぼそのまま動きそうな感じだったので、 CALLBACK_URL / client_id / client_secret あたりを変更して、実行してみた感じでは、問題なく access_token が、取得できています。
Sandbox Mode で使えない機能はダメですが、自分の画像は表示できました。
Sandbox Mode で使えない機能はダメですが、自分の画像は表示できました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る