質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1526閲覧

InstagramのAccess_tokenを取得する

odawarakouta

総合スコア7

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/12/07 16:26

編集2017/12/08 04:23

お手数かけますが、開発の手助けよろしくお願い致します。

## 開発環境
ruby 2.4.0
rails 5.0.1

実現したいこと

access_tokenを取得したい

現状

instagramのapiを使用しています。
sandboxuserで申請を出そうと実装しています。
client_idとclient_secret_idは取得できています。
callbackのurlにはしっかりとaccess_tokenが取得できています。
しかし、それの値がどこに格納されているかわからず、またどのように取得できるのかわからないです

ソースコード
require "instagram" CALLBACK_URL = "http://localhost:3000/api/instagram/callback" Instagram.configure do |config| config.client_id = "xxxxxxxxxxxxxxxx" config.client_secret ="xxxxxxxxxxxxxxx" end
class Api::InstagramsController < ApplicationController def get_json_test auth = request.env["omniauth.auth"] p auth binding.pry #access_tokenが取得できているかデバッグしています end end

#####確認方法

Instagram.client_id => "xxxxxxxxxxxxxxxxxxxx"

access_tokenだけがnilになります。

#####エラーメッセージ

Instagram.access_token => nil

###試したこと
gem 'instagram'を使用して記事通りに記述
request.env["omniauth.auth"] => nil

参考記事(https://reviewlog.info/rails-instagram-api/)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

具体的に どのようなソースコードをお使いかわからないのですが、access_token が、取得できないというのは、Instagram にリダイレクトされた後、callback の URL に戻ってきているのでしょうか?


gem 'instagram' ということなので、ruby の ライブラリと判断して、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.Gemfile の最後にに以下を追加

gem 'instagram'

3.Gemのインストール

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 をクリックするとエラー画面になります。)

投稿2017/12/08 03:15

編集2017/12/08 11:57
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odawarakouta

2017/12/08 04:04

ご回答ありがとうございます。 callbackのurlにはしっかりと帰ってきています。 access_tokenがパラメーターとして返ってくると思っているのですが、Instagram.access_tokenがnilと出力されています。 callbackのurlにはしっかりとaccess_tokenが存在しているのでどこかに存在はしていると思うのですが、どこに格納されているのかがわかりません。 お手数おかけしますが、ご教授お願い致します。
CHERRY

2017/12/08 04:07

お使いのソースコードを質問を編集して、記載していただけないでしょうか。
odawarakouta

2017/12/08 04:24

何度も有難うございます。 修正いたしましたので確認よろしくお願いいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問