web-dev-qa-db-ja.com

150以上のInstagramコメントを取得する

問題

メディアに150を超えるコメントがある場合でも、特定の Instagram メディアのすべてのコメントを表示できるようにしたいと思います。現在のところ、Instagramサイトのメディアに関する最新の20以上のコメントを表示することは不可能と思われます。 Instagram API Console または Instagram API Libraries 、最新の150件のコメントが返されます。ページネーションや追加コメントの表示オプションはありません。

私が試したこと

もちろん、最初に、提供されているコンソールと自分の環境の両方で、文書化された メディアコメントクエリ を試しました。どちらの場合も、最大150件のコメントが返されました。困惑して、私はより多くの情報をオンラインで探し始めました。

Instagram APIドキュメント を十分に読み、 Instagram APIコンソール でさまざまなエンドポイントをテストし、Instagramタグで Instagram API Googleグループ Instagramのいくつかのトピックに関する質問です。文書化されていないものが試される可能性があるのではないかと考えました。

ユーザーの最近のメディアエンドポイント ドキュメントには、max_idおよびmax_timestampのパラメーターが含まれています。これにより、上記のmax_idまたはmax_timestamp。各コメントにはcreated_timeおよびid属性が付属しているため、さまざまなコメントIDに対してmax_idおよびmax_timestampのパラメーターを追加しようとしました。コメントをページングしようとするタイムスタンプ。私の試みはどれもうまくいきませんでした。

誰か別の提案がない限り、私は今停滞しています。

具体例

Instagram API Console を使用して、 this photo のすべてのコメントを取得するために、次の手順を実行しました。

  1. OAuth2トークンに対して自分自身を認証しました
  2. coltonlhaynesのユーザー検索クエリを実行して、ユーザーid: 9610843を取得します
  3. ユーザーIDのユーザー最新メディアクエリを実行しました:9610843最新メディアを取得します
  4. 最新のメディアに関する情報を収集(上記のリンクされた写真)
    • メディアid: 698057751201132903_9610843
    • コメントcount: 1375
  5. メディアIDのメディアコメントクエリを実行しました:698057751201132903_9610843最新のコメントを取得します
  6. 最も最近のコメントに関する情報を収集しました
    • created time: 1397460230
    • コメントid: 698269477955776593
  7. メディアIDのメディアコメントクエリを実行しました:698057751201132903_9610843以下の追加クエリパラメータ文字列を使用して、コメントをページングしようとしましたが、ステップ#6 と同じ結果を受け取りました。
    • ?max_timestamp=1397460230
    • ?max_id=698269477955776593
    • ?max_timestamp=1397460230&max_id=698269477955776593
    • ?max_id=698269477955776593&max_timestamp=1397460230

ご注意ください

私の知る限り、この問題の解決策はありませんが、Instagram開発チーム 述べている 彼らはもはやGoogleグループを監視せず、代わりにStackOverflowを監視するので、私はこれをここに置きます。

69
Ally

わかりました、これは非常に「ハッキング」なソリューションになるでしょう、そして私は現在(自宅にADSLがないため)これを自分で行うように設定されていませんが、この問題にどのようにアプローチするかについてステップバイステップのガイドを提供できます。

まず、 "Charles Web Debuging Proxy" というツールが必要になります

チャールズで「SSLデバッグ」を有効にする方法に関するチュートリアルがサイトにあります(モバイルデバイスに新しい「ルート証明書」をインストールし、チャールズによって署名されたhttpsトランザクションが実際に署名されていると思わせるにはinstagram.comによる)

ここで、すべてのリクエストを上記のプロキシ(ローカルwi-fiネットワークにインストールする必要があります)を経由するようにモバイルデバイスを設定します。

https://www.google.com に移動し、charlesがリクエストとレスポンスの両方を記録していることを確認します。

これがすべて正しくセットアップされると、instagramアプリ自体がコメントページを生成するために使用するAPI呼び出しを確認できます。

9
Damian Nikodem

ここでの一般的な答えは、「no、それは通常のエンドポイントでは不可能です」です。

Instagramが更新されました Rate Limits (後2015年11月17日)。 Instagramプラットフォームのすべてのレート制限は、アクセストークンごとに個別に、1時間のスライド式ウィンドウで制御されます。ライブアプリには、サンドボックスモードのアプリよりも高いレート制限があります。

グローバルコンテキストにおける次の制限を示すもの:

グローバルレート制限

グローバルレート制限は、特定のエンドポイントに関係なく、1時間のスライディングウィンドウでアクセストークンごとにアプリによって行われるすべてのAPI呼び出しを含めて適用されます。レート制限は、無効または不正なリクエストにも適用されます。

  • サンドボックスレート制限:500 /時間
  • ライブレート制限:5000 /時間

さらに、コメントエンドポイントの個別の制限:

エンドポイント固有のレート制限

公開に使用されるエンドポイント(POSTまたはDELETE)には、エンドポイントごとに適用されるレート制限があります。 OAuthクライアントによってこれらのエンドポイントに対して行われた呼び出しも、上記のグローバルレート制限にカウントされます。

  • サンドボックス/ media/media-id /comments:30 /時間
  • Live/ media/media-id /comments:60 /時間

アプリがこれらのレート制限のいずれかを超えた場合、429 (Too Many Requests)のHTTP応答コードで応答を受け取ります。

Instagramプラットフォームがaccess token基礎として、複数のアクセストークンを使用したマルチスレッドを使用すると、より大きな制限を達成できます。ただし、注意点があります。1。コンテキストが異なるため、すべてが複数のアクセストークンから並列化できるわけではありません。 2. プラットフォームポリシー および [〜#〜] tos [〜#〜] と矛盾する場合があります

2
Farside

これはまったく「ハック」ではありません。

Instagramは、ここですべてのコメントを受け取ることができるリンクを提供しているため、 https://instagram.com/developer/endpoints/comments/

あなたがしなければならないのは、Instagramがあなたに与えているリンクをループすることです。私はこのようにしました。この方法でApiを使用しています。

  public function getUserMediaComments($id, $limit = 0) {
    return $this->_makeCall('media/'.$id.'/comments', true, array('count' => $limit));
  }

$ idは画像のmedia_idです。ピクチャIDを使用してその関数をforeachする場合、すべてのコメントを受け取ります。

この方法を知ったとき、それほど難しくはありませんでした。

それをforeachingしながら、このようにすることもできます。 :

$comments = json_decode(file_get_contents('https://api.instagram.com/v1/' . 'media/'. $image->id . '/comments?access_token='. $data->access_token));

両方とも、画像のコメントの配列を返します。