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

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

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

Instagram APIは、写真共有SNSであるInstagramの投稿写真をWebサイトに掲載するためのAPIです。取得することでWebサイトと連携し、自動的に投稿写真を表示することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

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

Q&A

解決済

1回答

2067閲覧

oembedを使用して、instagramの動画を表示したい

katsuki3110

総合スコア1

Instagram API

Instagram APIは、写真共有SNSであるInstagramの投稿写真をWebサイトに掲載するためのAPIです。取得することでWebサイトと連携し、自動的に投稿写真を表示することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

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

0グッド

0クリップ

投稿2020/07/29 02:15

編集2020/07/29 02:16

前提・実現したいこと

railsにてinstagramの動画リンクから動画を引用し、表示する機能を実装中です。
その際に、 apiで情報を取得しているのですが、
うまくリクエストされず、JSON.parse(response)で、エラーが発生します。

お手数ですが、お答えいただけると幸いです。

該当のエラー

*** JSON::ParserError Exception: 784: unexpected token at ''

該当のソースコード

ruby

1def set_json 2 self.t_json = response_json 3end 4 5 def response_json 6 require 'net/http' 7 url = "http://api.instagram.com/oembed?url=https://www.instagram.com/p/#{link}/" 8 end 9 uri = URI.parse(url) 10 response = Net::HTTP.get(uri) 11 JSON.parse(response) 12 end

※"{link}"というのは、instagramのパラメータです。↓

<例>
https://www.instagram.com/p/CCdu44CBOxb/?utm_source=ig_web_copy_link
⇒ {link} : CCdu44CBOxb

試したこと

response = Net::HTTP.get_response(uri)にて試したところ、
"301 Moved Permanently"が表示されました。

調べるとサイトが引越した?とのことですが、
指定しているURLが違うのでしょうか?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

The HyperText Transfer Protocol (HTTP) の 301 Moved Permanently リダイレクトステータスコードは、リクエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示します。

レスポンスが「301 Moved Permanently」ということはリダイレクトが必要になるかと思います。
Locationに示されるURLへ移動したということなので、再度そのURLを指定すればよろしいかと思います。

以下、参考になりそうなURL

投稿2020/07/29 09:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

katsuki3110

2020/07/29 10:51 編集

ご回答ありがとうございます。 実際にURLを取得しようと試みたのですが、301エラーが解消されませんでした。。 *********** redirect_url = Net::HTTP.get_response(uri)['location'] ⇒"https://api.instagram.com/oembed?url=https://www.instagram.com/p/CDErnphlHxD/" response = Net::HTTP.get_response(URI.parse(redirect_url)) ⇒#<Net::HTTPMovedPermanently 301 Moved Permanently readbody=true> *********** もう一度、このresponseに対して、['location']を行ったのですが、 次は302のエラーが出てしまいました。。 何が原因なのでしょうか?
退会済みユーザー

退会済みユーザー

2020/07/29 11:21 編集

302も同じくリダイレクトですね、['location']を再度指定する必要があると思われます。 参考URLとして示した「stackoverflow」のほうでは、「200 OK」が返るまで、「3xx」であれば再帰的にリダイレクトを行うような形になっております。 以下のようにリファレンスマニュアルにも記載がありました。 - library net/http (「リダイレクトに対応する」の項目) https://docs.ruby-lang.org/ja/latest/library/net=2fhttp.html ブラウザで記載のURLを開いたときにjson自体は表示されるため、正しくレスポンスを処理できれば取得は行えるようになると思います。
katsuki3110

2020/07/29 11:31

何回か['location']を行った結果、うまく行きました!! すごいです!ありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問