2010-10-30 4 views
1

Je reçois une erreur de ce script Twitter qui provoque le chargement du reste de la page. Je ne sais pas pourquoi tout à coup cela arrive, où il fonctionnait correctement depuis un certain temps.Pourquoi ce script de l'API Twitter échoue-t-il?

Le script ressemble à ceci, et il tire l'état actuel des utilisateurs:

<?php 
$response = new SimpleXMLElement('http://twitter.com/users/show/tuscaroratackle.xml',NULL,TRUE); 
echo $response->status->text.''; 
?> 

Voici un autre poste que je tentais de trouver la réponse à un autre bug qui m'a signalé cette erreur Twitter.

Vous pouvez le voir here dans le pied de page ou une capture d'écran de la sortie: http://cl.ly/33IZ.

+0

Je me suis développé en direct toute la journée (c'est-à-dire beaucoup de recharges) - cela pourrait-il avoir quelque chose à voir avec les limites de l'API? –

+0

Que se passe-t-il si vous ouvrez http://twitter.com/users/show/tuscaroratackle.xml dans votre navigateur? –

+1

oui. voir ma réponse ci-dessous. ;-) – Lee

Répondre

2

L'erreur correspondante (qui apparaît dans le bas de la page que vous avez lié à) est:

Warning: SimpleXMLElement::__construct(http://twitter.com/users/show/tuscaroratackle.xml) [simplexmlelement.--construct]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /home5/tuscaror/public_html/footer.php on line 47 

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: I/O warning : failed to load external entity "http://twitter.com/users/show/tuscaroratackle.xml" in /home5/tuscaror/public_html/footer.php on line 47 

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home5/tuscaror/public_html/footer.php:47 Stack trace: #0 /home5/tuscaror/public_html/footer.php(47): SimpleXMLElement->__construct('http://twitter....', 0, true) #1 /home5/tuscaror/public_html/index.php(119): include('/home5/tuscaror...') #2 {main} thrown in /home5/tuscaror/public_html/footer.php on line 47 

Le premier avertissement vous indique ce qui est arrivé: « requête HTTP échoué HTTP/1.1 400 Bad Request » . Par conséquent, pour une raison quelconque, votre serveur échoue lors de la demande HTTP à Twitter pour récupérer le document "http://twitter.com/users/show/tuscaroratackle.xml". Le code de retour est 400 Bad Request. J'ai juste essayé la même requête de mon navigateur Web, et cela a bien fonctionné, donc soit Twitter était temporairement "dehors pour déjeuner" (ce qui arrive de temps en temps), ou il y a quelque chose d'unique dans la configuration réseau de votre serveur . Ma première supposition serait que quelque part en amont de votre serveur, quelqu'un a installé un proxy HTTP qui est (pour une raison inconnue) bloquant votre demande.


Voici ce que twitter has to say about it:

400 Bad Request: The request was invalid. An accompanying error message 
will explain why. This is the status code will be returned during rate limiting. 

Here is twitter's page on Rate Limiting. Je soupçonne que c'est ton coupable. Si vous pensez autrement, alors vous pourriez essayer de récupérer le document sous forme de chaîne et de l'examiner avant vous essayez de l'analyser, ainsi vous pouvez voir ce que le message est.

C'est rapide et sale, mais ça va faire passer le message afin que vous puissiez voir ce qui se passe:

$str = file_get_contents('http://twitter.com/users/show/tuscaroratackle.xml'); 
echo $str; 

qui peut échouer à cause du code 400 de réponse. Si c'est le cas, vous devrez utiliser php curl pour obtenir le corps de la réponse non analysée.

bonne chance!

+0

Un grand merci pour une réponse très complète et réfléchie - j'apprécie vraiment que vous preniez le temps de tout expliquer. Cela peut être si frustrant quand vous essayez d'apprendre quelque chose de nouveau par essais et erreurs (ie moi avec PHP et script!). FYI - ça s'est passé par intermittence pour moi, donc je suppose que la limitation de la vitesse conviendrait certainement. J'ai également été informé que la mise en cache pourrait résoudre ce problème, mais en raison de mon niveau de compétence et de l'efficacité que je pourrais opter pour une solution plus simple en utilisant le widget javascript Twitter. Merci encore! –

+0

pas de problème! Heureux d'avoir pu aider. ... la mise en cache est vraiment facile. [Voici un exemple simple que je viens de trouver] (http://snipplr.com/view/13646/twitter-cache/).Vous pouvez facilement prendre ce code et changer 'file_get_contents' pour votre utilisation de' SimpleXMLElement'. Quelle que soit la direction que vous prenez - bonne chance avec elle! – Lee

Questions connexes