IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fopen() foireux sur Twitter


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut fopen() foireux sur Twitter
    Salut à tous,

    J'aimerais créer moi même mon widget Twitter personnalisé afin que les visiteurs de mon site puissent voir les récents "tweets".

    J'utilise un fichier php qui va chercher le XML correspondant à mon compte Twitter. Voici le code de ce fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $filename = 'http://www.twitter.com/statuses/user_timeline.xml?screen_name=noobzance';
     
    $handle = fopen($filename, 'r');
     
    $contents = stream_get_contents($handle);
     
    fclose($handle);
     
    echo $contents;
     
    ?>
    Ceci est injecté dans un textarea d'un swf. Donc les "tweets" sont affichés en temps réèls quand on va sur la page de mon site.

    J'ai correctement mis un crossdomain.xml à la racine de mon site donc pas de problème de ce côté.

    Le soucis c'est que le fichier xml de Twitter n'est pas lu. J'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: fopen(http://www.twitter.com/statuses/user_timeline.xml?screen_name=noobzance) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /homez.184/noobzance/www/twitFeed.php on line 5
     
    Warning: stream_get_contents() expects parameter 1 to be resource, boolean given in /homez.184/noobzance/www/twitFeed.php on line 7
     
    Warning: fclose(): supplied argument is not a valid stream resource in /homez.184/noobzance/www/twitFeed.php on line 9
    J'ai essayé avec des @fopen() à la place des fopen(), mais l'erreur numéro 2 reste et persiste.
    J'ai d'abord pensé que le site Twitter était blacklisté sur le serveur de mon mutualisé, mais non. Sinon j'aurais un "Connexion time out" et ici j'ai un "Bad request".

    J'ai aussi essayé avec d'autres url et ca fonctionne sans problème. Le fichier qui doit être lu se trouve ici http://www.twitter.com/statuses/user...name=noobzance et je pense que c'est là que ca coince. Car quand je mets simplement http://www.twitter.com ca fonctionne. Une fois que je rajoute /statuses plus rien ne fonctionne.

    Le plus drôle et le plus énervant, c'est que une fois sur 20, le fichier est lu alors que je n'effectue aucune manipulation ! C'est à n'y rien comprendre.

    Si vous avez des idées, je suis preneur à 200%

    Merci de m'avoir lu

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Pour moi comme ça ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
        header('Content-Type: text/plain') ;
        $file = 'http://www.twitter.com/statuses/user_timeline.xml?screen_name=xyz' ;
        $xml = file_get_contents($file) ;
        print_r($xml) ;
    ?>

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse,

    J'ai appliqué ton code et j'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <br />
    <b>Warning</b>:  file_get_contents(http://www.twitter.com/statuses/user_timeline.xml?screen_name=noobzance) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
     in <b>/homez.184/noobzance/www/twitFeed.php</b> on line <b>4</b><br />
    En gros, le code html de la même erreur...

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Bizarre, on va faire du plus bas niveau...
    Que donne le script suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
        header('Content-Type: text/plain') ;
     
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) ;
        socket_connect($socket, 'www.twitter.com', 80) ;
     
        $request = "GET /statuses/user_timeline.xml?screen_name=xyz HTTP/1.1\r\n"
                 . "Host: www.twitter.com\r\n"
                 . "Connection: close\r\n"
                 . "\r\n" ;
     
        socket_write($socket, $request) ;
     
        while ( $chunk = socket_read($socket, 256) ) {
            echo $chunk ;
        }
    ?>
    Perso j'obtiens cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    HTTP/1.1 200 OK
    Date: Sat, 23 May 2009 17:05:21 GMT
    Server: hi
    Last-Modified: Sat, 23 May 2009 17:05:21 GMT
    Status: 200 OK
    X-RateLimit-Limit: 100
    ETag: "ca8ad6f00b908ea485d3a18fb0796904"
    X-RateLimit-Remaining: 81
    Pragma: no-cache
    Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
    Content-Type: application/xml; charset=utf-8
    X-RateLimit-Reset: 1243101810
    Content-Length: 1699
    Expires: Tue, 31 Mar 1981 05:00:00 GMT
    X-Revision: 1d14cd9cee1141fa2d765094a0fc7137b23e3e51
    X-Transaction: 1243098321-88009-637
    Set-Cookie: _twitter_sess=BAh7BzoHaWQiJWU1YzFmZDQ5NzFlMTc5OWZiYzE5ZjQ1N2QxMTkxYjZlIgpm%250AbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAG%250AOgpAdXNlZHsA--0c596fb61d0ab0269d3ef9e63fad34cae84c5965; domain=.twitter.com; path=/
    Vary: Accept-Encoding
    Connection: close
     
    <?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array">
    <status>
      <created_at>Mon May 18 22:15:20 +0000 2009</created_at>
      <id>1840600112</id>
      <text>Suivez maintenant xyz Créations sur Twitter !</text>
      <source>web</source>
      <truncated>false</truncated>
      <in_reply_to_status_id></in_reply_to_status_id>
      <in_reply_to_user_id></in_reply_to_user_id>
      <favorited>false</favorited>
      <in_reply_to_screen_name></in_reply_to_screen_name>
      <user>
        <id>36045257</id>
        <name>xyz</name>
        <screen_name>xyz</screen_name>
        <location>Belgium</location>
        <description></description>
        <profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/218137129/Untitled-1_normal.jpg</profile_image_url>
        <url>http://www.xyz.be</url>
        <protected>false</protected>
        <followers_count>1</followers_count>
        <profile_background_color>1A1B1F</profile_background_color>
        <profile_text_color>666666</profile_text_color>
        <profile_link_color>2FC2EF</profile_link_color>
        <profile_sidebar_fill_color>252429</profile_sidebar_fill_color>
        <profile_sidebar_border_color>181A1E</profile_sidebar_border_color>
        <friends_count>0</friends_count>
        <created_at>Tue Apr 28 11:49:18 +0000 2009</created_at>
        <favourites_count>0</favourites_count>
        <utc_offset>3600</utc_offset>
        <time_zone>Brussels</time_zone>
        <profile_background_image_url>http://static.twitter.com/images/themes/theme9/bg.gif</profile_background_image_url>
        <profile_background_tile>false</profile_background_tile>
        <statuses_count>1</statuses_count>
        <notifications></notifications>
        <following></following>
      </user>
    </status>
    </statuses>
    ... et jamais de bad request ou autre retour négatif malgré de multiples essais répétés.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Je viens de tester, j'ai le même résultat que toi cette fois-ci.

    Et je te remercie de m'aider

    EDIT : Je viens d'actualiser et j'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    HTTP/1.1 400 Bad Request
    Date: Sat, 23 May 2009 17:52:49 GMT
    Server: hi
    Status: 400 Bad Request
    X-RateLimit-Limit: 100
    X-RateLimit-Remaining: 0
    Cache-Control: no-cache, max-age=1800
    Content-Type: application/xml; charset=utf-8
    X-RateLimit-Reset: 1243104413
    Content-Length: 216
    Set-Cookie: _twitter_sess=BAh7BzoHaWQiJWViODgxMTJhYTBlNjA5ZDA1M2QzNmZhZTU3ODdhN2VjIgpm%250AbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAG%250AOgpAdXNlZHsA--1365c8262b7d007253b58d80a397d45fc28dd77c; domain=.twitter.com; path=/
    Expires: Sat, 23 May 2009 18:22:49 GMT
    Vary: Accept-Encoding
    Connection: close
     
    <?xml version="1.0" encoding="UTF-8"?>
    <hash>
      <request>/statuses/user_timeline.xml?screen_name=noobzance</request>
      <error>Rate limit exceeded. Clients may not make more than 100 requests per hour.</error>
    </hash>

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Voilà, tu as la réponse ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <error>Rate limit exceeded.
    Clients may not make more than 100 requests per hour.</error>

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Ce qui est curieux c'est que je n'envoie aucune requête excepté 10 ou 20 tests par heure une fois de temps en temps sur la journée... Et parfois à 3 ou 4 heures d'intervalle ça ne fonctionne toujours pas.

    Je pense que je vais m'adresser directement aux administrateur de Twitter, mais je doute qu'ils me répondront...

    Merci pour ton aide

    EDIT : pour preuve : l'exemple de mon précédent post a comme heure : 18:22:49 GMT. Je viens d'actualiser j'ai la même erreur pour 19:53:33 GMT.

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Je viens de faire des tests avec Wamp en localhost.

    Et effectivement, ça fonctionne sans aucun problème ! Jusqu'au 101ème refresh de la page.

    Donc en local pas de problème.
    Le problème doit peut-être venir de mon hébergeur (OVH).

    Une idée du pourquoi il pourrait y avoir 100 requêtes en quelques secondes depuis mon hébergeur?

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Tu n'es peut-être pas le seul du serveur mutualisé à faire ce genre d'opérations.
    D'où le dépassement de quota rapide.

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    J'avais pas pensé à ça...

Discussions similaires

  1. fopen plante sur le serveur et pas en local
    Par franzarelli dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2008, 13h49
  2. Réponses: 10
    Dernier message: 01/01/2008, 19h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo