Récupération du dernier tweet, comportement instable

Eléphanteau du PHP | 10 Messages

14 juil. 2010, 12:23

Bonjour,

MàJ. (18/07/2010 à 1:07) le script refuse toujours de fonctionner sur mon mutualisé OVH (alors qu'il fonctionne parfaitement en local).
On est là : Détails du code et du problème (plus bas dans ce thread).

Toute aide est la bienvenue ;)
Modifié en dernier par m4cbeth le 18 juil. 2010, 01:08, modifié 5 fois.

ViPHP
ViPHP | 5462 Messages

15 juil. 2010, 00:42

pourquoi ne pas utiliser simpleXML ?

Eléphanteau du PHP | 10 Messages

15 juil. 2010, 13:20

Bonjour stealth35 et merci pour ta réponse,

Mes besoins sont moindre ici et j'ai d'autre script qui "parsent" le xml de la même qui fonctionnent très bien. C'est la première fois que je rencontre ce problème et je ne parviens vraiment pas à en déterminer l'origine. :(

ViPHP
ViPHP | 5462 Messages

15 juil. 2010, 13:24

Bonjour stealth35 et merci pour ta réponse,

Mes besoins sont moindre ici et j'ai d'autre script qui "parsent" le xml de la même qui fonctionnent très bien. C'est la première fois que je rencontre ce problème et je ne parviens vraiment pas à en déterminer l'origine. :(
justement si ils sont moindre autant utilisé simpleXML ton code sera réduis a 2 lignes, je comprend pas non plus pourquoi tu utilise curl ? un simple file_get_content fera la même chose :wink:

Eléphanteau du PHP | 10 Messages

17 juil. 2010, 17:03

Salut,
voilà le nouveau code qui utilise simple xml comme tu le suggérais, plus simple en effet :)

Problème : ça fonctionne très bien en local, plus du tout en ligne :(
<?php

$dir      = 'tw_cache/';
$fileName = 'latest.php';
$latest   = $dir . $fileName;

$update     = @filemtime($latest);
$udpateFreq = $update + 600; // en secondes

$target  = 'http://twitter.com/statuses/user_timeline/783214.rss'; // source

$res = @simplexml_load_file($target);

if ((file_exists($latest)) && (time() < $udpateFreq)) // si le cache existe et n'est pas périmé
{
   $fileContent = fopen($latest, 'r');
   $latestTweet = fgets($fileContent);
   fclose($fileContent);
	
   echo $latestTweet;
}
elseif ($res) // sinon, si tweeter est up
{
   $tweet = str_replace('twitter: ', '', $res->channel->item[0]->title);
   $tweet = preg_replace('# ((?:https?|ftp)://\S+?)(?=[[:punct:]]?(?:\s|\Z)|\Z)#', ' <a href="$1">$1</a>', $tweet); // replacing url by link
	
   $link  = $res->channel->item[0]->link;
   $date  = date('d/m/Y à H:i', strtotime($res->channel->item[0]->pubDate));
	
   $latestTweet = '<div id="latesttweet"><p>' . $tweet . '<br/>Posté le <a href="' . $link . '"><span class="date">' . $date . '</span></a></p></div>';
   echo $latestTweet;
	
   // si le repertoire de cache n'existe pas, on le cree
   if (!is_dir($dir)) { mkdir($dir, 0705); }

   // creation du fichier cache
   $fileContent = fopen($latest, 'w+');
   fputs($fileContent, $latestTweet);
   fclose($fileContent);
}
else {
   echo '<div id="latesttweet"><p>Tweet ! Tweet !</p></div>';
}

?>
Et les erreurs que j'obtiens :
Warning: simplexml_load_file(http://twitter.com/statuses/user_timeline/783214.rss) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /homez.42/username/www/includes/latest-tweet.php on line 12

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://twitter.com/statuses/user_timeline/783214.rss" in /homez.42/username/www/includes/latest-tweet.php on line 12

ViPHP
ViPHP | 5462 Messages

17 juil. 2010, 19:10

faut mettre la directive allow_url_fopen sur On

Eléphanteau du PHP | 10 Messages

17 juil. 2010, 19:25

Salut et à nouveau, merci pour ta réponse.

Je suis chez OVH (en mutu) et je n'ai pas accès à php.ini, j'ai donc tapé un "SetEnv ALLOW_URL_FOPEN 1" dans un .htaccess mais le problème persiste :(

ViPHP
ViPHP | 5462 Messages

17 juil. 2010, 19:27

Salut et à nouveau, merci pour ta réponse.

Je suis chez OVH (en mutu) et je n'ai pas accès à php.ini, j'ai donc tapé un "SetEnv ALLOW_URL_FOPEN 1" dans un .htaccess mais le problème persiste :(
normalement un php_flag suffis dans ton .htaccess

Code : Tout sélectionner

php_flag allow_url_fopen 1

Eléphanteau du PHP | 10 Messages

17 juil. 2010, 20:08

L'ajout du flag fait quant à lui complètement planter l'hosting "(500) Internal Server Error".

ViPHP
ViPHP | 5462 Messages

17 juil. 2010, 20:12

L'ajout du flag fait quant à lui complètement plante l'hosting "(500) Internal Server Error".
essaye avec un ini_set, t'as quelle version de php ?

Eléphanteau du PHP | 10 Messages

17 juil. 2010, 21:10

> essaye avec un ini_set

sous la forme ini_set('allow_url_fopen', 1) ?

> t'as quelle version de php ?

PHP Version 5.2.13 et d'après phpinfo(), allow_url_fopen est "On" que ce soit pour la valeur locale ou maître

Image

ViPHP
ViPHP | 5462 Messages

17 juil. 2010, 21:21

le serveur n'apprécie pas, ca qui est normale tu dois normalement utilisé l'API twitter qui est fais officiellement pour, tu peux toujours faire la bidouille du cURL et faire simplexml_load_string, mais je te le conseil pas :wink:

Eléphanteau du PHP | 10 Messages

17 juil. 2010, 21:37

C'est la raison pour laquelle j'utilisais cURL au départ, pour pouvoir modifier le referer et l'user agent ;-)
Par contre je ne comprends pas pourquoi, dès lors qu'ils appliquent un filtrage, ça fonctionne en local (que ce soit via curl avec un faux referer ou directement simplexml_load_file).

ViPHP
ViPHP | 5462 Messages

17 juil. 2010, 21:45

après vérification il attend une requête en utf-8 :wink:

Eléphanteau du PHP | 10 Messages

17 juil. 2010, 22:25

Tout est envoyé en utf8 normalement (fichier encodé en utf8, charset en utf8 aussi pour le document) :(