2013-11-25 13 views
5

Heloo,Instagram Aggiornamenti in tempo reale tag - ottenere dati vuoti, perché?

Sto lavorando su un progetto e ho bisogno di aggiornamenti in tempo reale da parte di Instagram per determinati tag.

Questo è il mio codice per Creazione di una sottoscrizione

<?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); 
?> 

e l'uscita è:

[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 
     ) 

) 

Questo è il codice per 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); 
    } 
?> 

e una linea da un'attività .log is:

[{"changed_aspect": "media", "oggetto": "tag", "object_id": "inverno", "ora": 1385411793, "subscription_id": 3932963, "data": {}}]

Sto ottenendo il subscription_id giusto ma i dati sono vuoti. Anche il registro di accesso è simile a:

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) "

E questo è buono, codice di stato 200 ma ancora una volta i dati sono vuoti. Instagram sta 'entrando' nel mio file di callback ma i dati sono vuoti.

Cosa sto sbagliando?

risposta

12

L'abbonamento Instagram in tempo reale di Instagram ti consente di sapere solo quando è stato aggiornato un oggetto iscritto, non l'aggiornamento. Una volta ricevuta una notifica, spetta a te effettuare una chiamata all'API (nel tuo caso probabilmente https://api.instagram.com/v1/tags/winter/media/recent) e vedere quale è il nuovo contenuto.

A seconda del volume delle modifiche, è probabile che si desideri eseguire il batch di queste chiamate a determinati intervalli di tempo, ma quanto riportato di seguito dovrebbe essere un buon inizio. Probabilmente vorrai anche recuperare solo gli oggetti che non hai ancora recuperato.

<?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

grazie mille amico! – consigliere

+0

@cdbconcepts Significa che se si effettua la sottoscrizione agli utenti è necessario controllare ogni utente per un aggiornamento piuttosto che ottenere l'id dell'utente per l'aggiornamento e controllarli. Al momento ho il problema che non riesco a ottenere il JSON restituito con l'id all'interno di un array PHP vedere: http://stackoverflow.com/questions/29783318/getting-instagram-subscription-json-data-from-post- in-php/29875769 # 29875769 –

1

ottengo il $ _POST dire che c'è un aggiornamento da uno dei utenti autenticati, problema è che ci sono 153 di loro sottoscritto il feed. L'unico modo per controllare se un utente ha un aggiornamento è quello di ottenere il loro ultimo.

Posso anche pubblicare una foto su IG me stesso. $ _POST viene ricevuto attivando il ciclo di utenti che vengono interrogati, ma il nuovo elemento non viene visualizzato nell'API contemporaneamente al trigger $ _POST proveniente dall'API in tempo reale.

Problemi correlati