包括每个页面加载的twitter / flickr api调用(WordPress)

时间:2011-04-30 00:26:50

标签: javascript wordpress api twitter flickr

我想使用JSONP请求在wordpress侧边栏或页脚中包含我最新的flickr照片和推特状态更新。问题当然是每个页面重新加载都会执行一个新的ajax调用,我相信Twitter api有使用限制。

我正在考虑使用javascript进行的跨浏览器数据持久性选项,我能想到的最好的是Cookie。

存储ajax会导致cookie(设置到期日到期,我不经常更新我的twitter / Flickr)。是基于javascript的Twitter和Flickr api电话的最佳解决方案吗?

由于

1 个答案:

答案 0 :(得分:1)

使用WordPress时,基于javascript的Twitter和Flickr api调用的最佳解决方案是使用WordPress Transient API。 Transient API是一种内置于WordPress的持久缓存方法,用于缓存频繁更改的项目。您可以设置缓存过期时间,如果返回false,WordPress将首先检查数据库是否为瞬态,它将使用json调用返回该项目。

以下是使用瞬态和短代码存储用户最新推文的示例。以下代码来自Aaron Jorbin Twitter Transients Plugin

function twitter_status($atts){
    extract(shortcode_atts(array(
    'screenname' => '',
    'count' => 1
    ), $atts));
    $transient = "$screenname"."_$count"."_twitter_status";
    $statuses =  get_transient($transient);
    if ($statuses == true  )
    {
        return $statuses;
    }
    elseif ($screenname != false)
    {
        $site = "http://twitter.com/statuses/user_timeline.json?screen_name=$screenname&count=$count";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, $site);
        $result = curl_exec($ch);
        $tweets = json_decode($result);
        ob_start();
        foreach ( (array) $tweets as $tweet){
            $tweetcontent = $tweet->text;
            $newcontent = preg_replace('%@([^\s]*)%', "<a href="http://twitter.com/\\1">@\\1</a>", $tweetcontent);
            echo "<div class="twitter_shortcode"><p>
            <img class="twitter_shortcode_image" src="&quot;.esc_url($tweet-&gt;user-&gt;profile_image_url).&quot;"><span class="twitter_shotcode_username"><a href="http://twitter.com/&quot;.$tweet-&gt;user-&gt;screen_name.&quot;">".$tweet-&gt;user-&gt;screen_name."</a>&nbsp;—&nbsp;</span>$newcontent</p>
            </div>";

        }
        $tweet_display = ob_get_clean();
        set_transient($transient, $tweet_display, 120);
        return $tweet_display;
    }
    else
    {
        return false;
    }
}

add_shortcode('twitter_status', 'twitter_status');