刷新后获取推文时出错

时间:2011-09-29 12:45:19

标签: php twitter

首先,如果这是有史以来最基本的问题,我想道歉!我对PHP不太好,但我正在学习。

我找不到解决方案,甚至无法理解为什么它一直出错。我想知道为什么发生这种情况

我正试图从Twitter帐户获取最新的两条推文。我不想使用我不理解的大量(现有的,我知道的)类或代码。所以我自己尝试了以下内容:

 $timeline = "http://twitter.com/statuses/user_timeline.xml?screen_name=Mau_ries";
    $data = file_get_contents($timeline);
    $tweets = new SimpleXMLElement($data);

    $i = 0;
    foreach($tweets as $tweet){
        echo($tweet->text." - ".$tweet->created_at);
        if (++$i == 2) break;
    }

当我第一次运行此代码时,我从我的推文中获得了文本,但是当我刷新页面时,我有时会收到以下错误:

警告: file_get_contents(http://twitter.com/statuses/user_timeline.xml?screen_name=Mau_ries)[function.file-get-contents]:无法打开流:HTTP请求失败!第88行的 / path / to / file 中的HTTP / 1.0 400错误请求

致命错误: /public/sites/www.singledays.nl/tmp/index中带有消息'字符串无法解析为XML'的未捕获异常'异常'。 php:89 Stack trace:#0 /public/sites/www.singledays.nl/tmp/index.php(89):SimpleXMLElement-> __ construct('')#1 {main}抛出 / path /到第89行的/ file

第88行& 89是这些:

$data = file_get_contents($timeline);
$tweets = new SimpleXMLElement($data);

真的很奇怪。有时它会起作用,有时候不起作用。

有人知道这个问题和/或解决方案吗?为什么错误似乎是随机发生的(尽管它现在已经错误了一段时间了)?

谢谢!

1 个答案:

答案 0 :(得分:0)

$timeline = "http://twitter.com/statuses/user_timeline.xml?screen_name=Mau_ries";
$data = @file_get_contents($timeline);

if($data){
    $fh = fopen("cache/".sha1($timeline),"w");
    fwrite($fh, $data);
    fclose($fh);
}else{
    $fh = @fopen("cache/".sha1($timeline),"r");
    $data = "";
    while(!feof($fh)){ $data = fread($fh, 1024); }
    fclose($fh);
}

if(!$data) die("could not open url or find a cache of url locally");

$tweets = new SimpleXMLElement($data);

$i = 0;
foreach($tweets as $tweet){
    echo($tweet->text." - ".$tweet->created_at);
    if (++$i == 2) break;
}

每个人都说调试你应该真的将结果缓存到文件中,如果无法下载,那么使用缓存,上面的代码将为你做。