2010-11-05 7 views
0

Je travaille sur un module qui charge des données à partir de l'API REST user_timeline de Twitter. Une fois que j'ai décodé le JSON, je fais une instruction foreach dans mon PHP pour obtenir chacun des tweets retournés. Je rencontre actuellement un problème de recherche d'éléments dans la partie retweeted_status de la chaîne JSON. Le JSON Je vous appelle est:Vérification de la présence d'un élément dans une chaîne JSON décodée

"http://api.twitter.com/1/statuses/user_timeline.json?count=".$count."&include_rts=1&screen_name=".$uname."" 

retweeted_status n'est retournée si un tweet est un retweet. Ainsi, par exemple, si le tweet est un retweet, je veux retourner le texte original du tweet, pas le retweet. J'ai essayé ce code:

if(isset($t->retweeted_status->text)) { 
    $tweet = $t->retweeted_status->text; 
} else { 
    $tweet = $t->text; 
} 

En utilisant le code ci-dessus, lorsque retweeted_status est pas retourné, isset est toujours vrai pour tous les objets après la première fois que le isset est retourné vrai. Ce dont j'ai besoin est un conditionnel dans mon foreach qui vérifie correctement les éléments sous retweeted_status (puisque le point de données retweeté est désactivé depuis un certain temps) et réinitialise la vérification à false si retweeted_status n'est pas présent.

Des suggestions?

+0

Je ne comprends pas exactement ce que vous voulez faire, mais je pense que vous devriez regarder dans le sens de mettre un tableau ou booléen avant la boucle foreach et l'utiliser pour enregistrer le statut, mais si vous le faites plus clairement Je peux aider davantage – Thunderstriker

+0

Dans mon module, j'essaie d'extraire des informations de la partie retweeted_status de la chaîne JSON, si elle existe, et si ce n'est pas le cas, les informations sont renvoyées par une autre partie de la chaîne JSON. – Michael

Répondre

1

PHP a une excellente prise en charge JSON intégrée, il n'est donc pas nécessaire de parcourir manuellement la chaîne JSON pour savoir si l'objet qu'il représente a une propriété donnée. Il suffit de faire

$twitterObj = json_decode($responseTextFromTwitterAPI [, true ]); 

avec le second param = true si la chaîne JSON représente un tableau associatif, fausse si elle est une « simple » (indexé entier-) un. (Vous voulez vérifier les documents de Twitter pour savoir.) Ensuite, vos chèques devraient représenter quelque chose comme (je ne suis pas familier avec la spécification API de Twitter ...):

foreach ($twitterObj as $tweet) { 
    if (isset($tweet['retweeted_status'])) { 
     // Retweet 
    } else { 
     // Original 
    } 
    // Do stuff... 
} 

EDIT:

Cela fonctionne pour moi:

$obj = json_decode($jsonFromTwitter, true); 
foreach ($obj as $o) { 
if (isset($o['retweeted_status'])) { 
    echo $o['retweeted_status']['text']; 
} else { 
    echo $o['text]; 
} 

Vous devriez être en mesure d'obtenir où vous voulez à partir de là, non?

+0

J'ai ajouté le vrai param à mon json_decode, et quand je fais un var_dump pour isset ($ t-> retweeted_status), je reçois toujours des indices où il devrait être faux. Lorsque je fais la vérification comme isset ($ t ['retweeted_status']), je reçois l'erreur PHP "Impossible d'utiliser l'objet de type stdClass as array". – Michael

+0

Pouvez-vous poster le JSON? –

+0

"http://api.twitter.com/1/statuses/user_timeline.json?count=20&include_rts=1&screen_name=mbabker" A partir de ce moment, le 4ème objet est un retweet. – Michael

Questions connexes