2011-04-30 41 views
3

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

我正在考虑什么跨浏览器的数据持久性选项,我用JavaScript和我能想到的最好的是饼干。

将ajax结果存储在cookie中(设置过期日期,我不经常更新我的twitter/Flickr)。成为基于JavaScript的Twitter和Flickr api电话的最佳解决方案?

感谢

回答

1

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

以下是使用瞬态和简码存储用户最近推文的示例。下面的代码来自Aaron Jorbin Twitter瞬变插件

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');