2013-11-25 18 views
5

Heloo、Instagramリアルタイム更新タグ - 空のデータを取得する理由は何ですか?

私は1つのプロジェクトに取り組んでおり、特定のタグについてInstagramからのリアルタイム更新が必要です。

これは、サブスクリプションの

<?php 
    $client_id = 'MOJID'; 
    $client_secret = 'MOJIDSECRET'; 
    $redirect_uri = 'http://example.net/instagram/callback.php'; 
    $apiData = array(
     'client_id' => $client_id, 
     'client_secret' => $client_secret, 
     'redirect_uri' => $redirect_uri, 
     'aspect' => "media", 
     'object' => "tag", 
     'object_id' => "winter", 
     'callback_url' => $redirect_uri 
    ); 

    $apiHost = 'https://api.instagram.com/v1/subscriptions/'; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $apiHost); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($apiData)); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json')); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $jsonData = curl_exec($ch); 
    curl_close($ch); 
    var_dump($jsonData); 
?> 

されて出力される作成のための私のコードです:

[meta] => stdClass Object 
     (
      [code] => 200 
     ) 

    [data] => stdClass Object 
     (
      [object] => tag 
      [object_id] => winter 
      [aspect] => media 
      [callback_url] => http://example.net/instagram/callback.php 
      [type] => subscription 
      [id] => 3932963 
     ) 

) 

これはcallback.phpのコードです:

<?php 
    if (isset ($_GET['hub_challenge'])){ 
     echo $_GET['hub_challenge']; 
    } 
    else{ 
     $myString = file_get_contents('php://input'); 
     $ALL = $myString."\r\n"; 
     file_put_contents('activity.log', $ALL, FILE_APPEND | LOCK_EX); 
    } 
?> 

そして活動から行を.logは:

[{"changed_aspect": "media"、 "object": "tag"、 "object_id": "winter"、 "time":1385411793、 "subscription_id":3932963、 "data":{}}]

私は正しいsubscription_idを取得していますが、データは空です。 また、Accesログは次のようになります。

54.209.52.224 - [25/Nov/2013:20:59:20 +0100] "POST /instagram/callback.php HTTP/1.0" 200 231 " - " "Python -httplib2/0.7.4(gzip) "

これは状態コード200ですが、もう一度データが空です。 Instagramはコールバックファイルに「着信」していますが、データは空です。

私は間違っていますか?

答えて

12

Instagram Realtime APIサブスクリプションでは、サブスクリプションされたオブジェクトの更新があったときに通知され、更新の内容は通知されません。通知を受け取ったら、API(場合によってはhttps://api.instagram.com/v1/tags/winter/media/recent)に電話をかけて、新しいコンテンツの内容を確認する必要があります。

変更の量に応じて、これらのコールを特定の時間間隔でバッチすることをお勧めしますが、以下は適切なスタートです。おそらく、まだ検索していないアイテムだけを検索したいと思うでしょう。

<?php 
if (isset ($_GET['hub_challenge'])){ 
    echo $_GET['hub_challenge']; 
} 
else{ 
    $myString = file_get_contents('php://input'); 
    $sub_update = json_decode($myString); 

    $access_token = '{ previously saved, get this from DB or flatfile }'; 

    foreach($sub_update as $k => $v) // can be multiple updates per call 
    { 
     $recent_data = file_get_contents('https://api.instagram.com/v1/tags/'.$sub_update->object_id.'/media/recent?access_token='.$access_token); 
     file_put_contents('activity.log', serialize($recent_data->data), FILE_APPEND | LOCK_EX); 
    } 

} 
?> 
+0

大変ありがとうございます! – consigliere

+0

@cdbconceptsこれは、ユーザーを購読している場合、ユーザーのIDを取得して確認するのではなく、すべてのユーザーに更新を確認する必要があるかどうかです。私は現在、私はJSONを取得することはできません問題を持っているPHP配列にIDを内部で参照してください:http://stackoverflow.com/questions/29783318/getting-instagram-subscription-json-data-from-post- in-php/29875769#29875769 –

1

認証されたユーザーからの更新があると言うと、$ _POSTが表示されます。問題が153件あります。ユーザーが更新を受けているかどうかを確認する唯一の方法は、最新のものを取得することです。

また、自分自身でIGに写真を投稿することもできます。 $ _POSTが受信され、ユーザーのループがポーリングされますが、$ _POSTトリガーがリアルタイムAPIから到着すると同時に最新の項目がAPIに表示されません。

関連する問題