jquery.tweet.js插件不起作用,如何显示推文

时间:2013-06-13 09:58:07

标签: jquery html css twitter

我在我的网站上使用此插件显示推文,但即使是插件网站也有问题:

http://coda.co.za/content/projects/jquery.twitter/

代码:

<div class="columns">
   <pre class="code">
                    jQuery(function($){
                      $("#twitter").tweet({
                        join_text: "auto",
                        username: "Jquery",
                        avatar_size: 48,
                        count: 4,
                        auto_join_text_default: "",
                        auto_join_text_ed: "",
                        auto_join_text_ing: "",
                        auto_join_text_reply: "",
                        auto_join_text_url: "",
                        loading_text: "loading tweets..."
                      });
                    });
        </pre>
  <div id="twitter"></div>

每个第三方插件(我认为)都不再有用了。我也见过:

http://tweet.seaofclouds.com/

那么,替代会是什么?

如果您访问过上面的链接,您可能已经了解,问题出在哪里。

6 个答案:

答案 0 :(得分:7)

由于Twitter已从未经过身份验证的1.0 API更改为OAuth 1.1,因此如果您要使用该插件,则必须通过PHP代理API请求。

这是代理请求的PHP。在您的网站中以twitter-proxy.php创建此页面,并更新 oauth_access_token oauth_access_token_secret consumer_key consumer_secret <的值/ strong>和 screen_name 反映您自己的Twitter帐户。

如果您需要创建应用程序以获取这些值,请访问https://dev.twitter.com/apps

<?php
/* Twitter Proxy for updated OAuth */
$config = array(
    //Twitter OAuth config
    'oauth_access_token' => 'get from twitter',
    'oauth_access_token_secret' => 'get from twitter',
    'consumer_key' => 'get from twitter',
    'consumer_secret' => 'get from twitter',
    'base_url' => 'https://api.twitter.com/1.1/',
    //Request specific user
    'screen_name' => 'your_twitter_screenname',
    'count' => 3
);

$twitter_request = 'statuses/user_timeline.json?screen_name='.$config['screen_name'].'&count='.$config['count'];

// Parse $twitter_request into URL parameters
$url_part = parse_url($twitter_request);

/* url_arguments=
* Array
* (
*    [screen_name] => lcherone
*    [count] => 3
* )
*/
parse_str($url_part['query'], $url_arguments);

$base_url = $config['base_url'].$url_part['path'];
$full_url = $config['base_url'].$twitter_request;

// Set up the OAuth authorization array
$oauth = array(
'oauth_consumer_key' => $config['consumer_key'],
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $config['oauth_access_token'],
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);

// Build vectors for request
$composite_request = _BaseString($base_url, 'GET', array_merge($oauth, $url_arguments));
$composite_key     = rawurlencode($config['consumer_secret']).'&'.rawurlencode($config['oauth_access_token_secret']);
$oauth_signature   = base64_encode(hash_hmac('sha1', $composite_request, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;

// Make cURL Request
$options = array(
CURLOPT_HTTPHEADER => array(_AuthorizationHeader($oauth),'Expect:'),
CURLOPT_HEADER => false,
CURLOPT_URL => $full_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false
);

$feed = curl_init();
curl_setopt_array($feed, $options);
$result = curl_exec($feed);
$info = curl_getinfo($feed);
curl_close($feed);

// Send suitable headers to the end user.
if(isset($info['content_type']) && isset($info['size_download'])){
    header('Content-Type: '.$info['content_type']);
    header('Content-Length: '.$info['size_download']);
}
exit($result);

function _BaseString($base_url, $method, $values) {
    $ret = array();
    ksort($values);
    foreach($values as $key=>$value)
    $ret[] = $key."=".rawurlencode($value);
    return $method."&".rawurlencode($base_url).'&'.rawurlencode(implode('&', $ret));
}

function _AuthorizationHeader($oauth) {
    $ret = 'Authorization: OAuth ';
    $values = array();
    foreach($oauth as $key=>$value)
    $values[] = $key.'="'.rawurlencode($value).'"';
    $ret .= implode(', ', $values);
    return $ret;
}
?>

现在使用以下功能替换build_api_url文件中的现有jquery.tweets.js功能,确保替换yoursite.com

function build_api_url() {
      var proto = ('https:' == document.location.protocol ? 'https:' : 'http:');
      var count = (s.fetch === null) ? s.count : s.fetch;
      var common_params = '&callback=?';
      if (s.list) {
        return 'http://yoursite.com/twitter-proxy.php?url='+s.username[0]+"/lists/"+s.list+"/statuses.json?page="+s.page+"&per_page="+count+common_params;
      } else if (s.favorites) {
        return 'http://yoursite.com/twitter-proxy.php?url=favorites.json?screen_name='+s.username[0]+"&page="+s.page+"&count="+count+common_params;
      } else if (s.query === null && s.username.length == 1) {
        return 'http://yoursite.com/twitter-proxy.php?url='+encodeURIComponent('statuses/user_timeline.json?screen_name='+s.username[0]+'&count='+count+common_params);
      } else {
        var query = (s.query || 'from:'+s.username.join(' OR from:'));
        return 'http://yoursite.com/twitter-proxy.php?url=/search.json?&q='+encodeURIComponent(query)+'&rpp='+count+'&page='+s.page+common_params;
      }
}

更新2014-12-17 :截至2014-02-27,Twitter requires the use of SSL to connect to its API servers。我已更新代码以反映这一点。

答案 1 :(得分:3)

您可以在2013年6月11日退休时使用Twitter 1.0 API。

如果您尝试申请1.0 API,可以查看问题的原因,如下所示:

https://api.twitter.com/1/statuses/user_timeline.json?screen_name=omgmog

{
    "errors": [
        {
            "message": "The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.",
            "code": 68
        }
    ]
}

现在将推文发送到您网站的唯一方法是:

  • 使用他们在https://twitter.com/settings/widgets
  • 处提供的Twitter小部件
  • 设置一些服务器端脚本以从1.1 API获取推文,然后修改jquery.tweet.js插件以使用它。

您可以在此处详细了解1.1 API:https://dev.twitter.com/docs/api/1.1/overview

真的很烦人,我现在有很多需要迁移的网站

答案 2 :(得分:2)

基本上,从Twitter返回的消息如下:

{"errors": [{"message": "The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.", "code": 68}]}

你需要使用为v1.1编写的插件,在新版本中他们添加了安全层,因此你需要获得授权才能通过API获取推文,这里有一些对你有帮助的链接< / p>

http://www.webdevdoor.com/php/authenticating-twitter-feed-timeline-oauth/ http://www.fullondesign.co.uk/coding/2516-how-use-twitter-oauth-1-1-javascriptjquery.htm

答案 3 :(得分:2)

请参阅:https://dev.twitter.com/discussions/10193https://github.com/StanScates/Tweet.js-Mod获取twitter api 1.1兼容性问题的解决方案

答案 4 :(得分:0)

您可以使用此版本的jQuery.tweet.js代替。 https://github.com/StanScates/Tweet.js-Mod 来自https://github.com/seaofclouds/tweet/issues/264

的更多信息

答案 5 :(得分:0)

如果您不想使用PHP,而只想使用Javascript,则可以使用www.tweetjs.com上的Javascript库“ TweetJS”

您可以使用此库检索和显示推文,但不能发布推文,因为这需要验证。这是一个有关如何显示时间轴上的推文(到控制台)的示例:

TweetJs.ListTweetsOnUserTimeline("PetrucciMusic",
function (data) {
    console.log(data);
});