5

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

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/

那么,替代品会是什么呢?

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

4

6 回答 6

6

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

这是代理请求的PHP。在您的站点中创建此页面twitter-proxy.php,并更新oauth_access_tokenoauth_access_token_secretconsumer_keyconsumer_secretscreen_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 年 2 月 27 日起,Twitter 要求使用 SSL 连接到其 API 服务器。我已经更新了代码以反映这一点。

于 2013-06-13T10:13:14.820 回答
3

您不能再使用 Twitter 1.0API,因为他们已于 2013 年 6 月 11 日将其停用。

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

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
        }
    ]
}

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

您可以在此处阅读有关1.1API 的更多信息:https ://dev.twitter.com/docs/api/1.1/overview

真的很烦,我现在有一堆网站需要迁移

于 2013-06-13T10:13:03.447 回答
3

有关 twitter api 1.1 兼容性问题的解决方案,请参见:https ://dev.twitter.com/discussions/10193和https://github.com/StanScates/Tweet.js-Mod

于 2013-07-11T04:15:18.500 回答
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 获取推文,这里是对您有帮助的链接

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

于 2013-06-13T10:16:42.827 回答
1

如果您不想使用 PHP,而只想使用 Javascript,那么您可以使用来自 www.tweetjs.com 的 Javascript 库“TweetJS”

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

TweetJs.ListTweetsOnUserTimeline("PetrucciMusic",
function (data) {
    console.log(data);
});
于 2019-08-12T15:07:49.990 回答
0

你可以使用这个版本的 jQuery.tweet.js 来代替。 https://github.com/StanScates/Tweet.js-Mod 更多信息来自https://github.com/seaofclouds/tweet/issues/264

于 2013-06-27T06:23:19.927 回答