2

我最近编写了一个小脚本来获取我的 Twitter 提要并将其缓存以保存 HTTP 请求。如果没有 WordPress,它就可以很好地工作,只要我将它添加到 WordPress,一切都会出错,这是有道理的,因为 file_get_contents 在 WordPress 中不能特别正确地工作。我尝试使用:wp_remote_get(),但我只是收到以下错误:

Fatal error: Cannot use object of type WP_Error as array in

这是这一行:

$tweets = json_decode($contents['body']);

无需添加到 WordPress 的代码:(效果很好)

$file = "tweets.txt";
if (@file_exists($file) and @filemtime($file)>=strtotime("-10 minutes")) {
    $tweets = json_decode(file_get_contents($file));
} else {
    $tweets = file_get_contents("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=jack&include_rts=true");
    $fh = fopen($file, 'w');
    fwrite($fh, $tweets);
    fclose($fh);
    $tweets = json_decode($tweets);
}
$i = 0;
foreach($tweets as $tweet) {
    $tweetText = preg_replace('#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#','<a href="$1">$1</a>', $tweet->text);
    $tweetText = preg_replace('/(^|\s)@([a-z0-9_]+)/i','$1<a href="http://www.twitter.com/$2">@$2</a>', $tweetText);
    $tweetText .= " - " . date('G:i F jS',strtotime($tweet->created_at));
    echo '<p>'.$tweetText.'</p>';
    ++$i;
    if ($i==3) {break;}
}   

添加到 WordPress 时的代码:

$file = "tweets.txt";
if (@file_exists($file) and @filemtime($file)>=strtotime("-10 minutes")) {
    $contents = wp_remote_get($file);
    $tweets = json_decode($contents['body']);
} else {
    $tweets = wp_remote_get("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=jack&include_rts=true");
    $fh = fopen($file, 'w');
    fwrite($fh, $tweets);
    fclose($fh);
    $tweets = json_decode($contents['body']);
}
$i = 0;
foreach($tweets as $tweet) {
    $tweetText = preg_replace('#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#','<a href="$1">$1</a>', $tweet->text);
    $tweetText = preg_replace('/(^|\s)@([a-z0-9_]+)/i','$1<a href="http://www.twitter.com/$2">@$2</a>', $tweetText);
    $tweetText .= " - " . date('G:i F jS',strtotime($tweet->created_at));
    echo '<p>'.$tweetText.'</p>';
    ++$i;
    if ($i==3) {break;}
}   

我对使用像 JSON 这样的 HTTP 请求很陌生。如果我遗漏了任何内容和/或这将成为一个非常简单的解决方案,我很抱歉。谢谢。

4

1 回答 1

1

从 codex 它说wp_remote_get()返回结果作为一个数组

http://codex.wordpress.org/Function_API/wp_remote_get

正如您在这个答案中看到的 - json_decode to array,您需要指定json_decode()它是一个数组而不是一个对象。

所以我认为应该是;

$tweets = json_decode($contents['body'], true);
于 2012-09-09T22:24:09.623 回答