jquery.tweet.js插件不工作,如何显示推文 [英] jquery.tweet.js plugin is not working, how to show tweets

查看:99
本文介绍了jquery.tweet.js插件不工作,如何显示推文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的网站上使用了这个插件来显示推文,但即使插件网站也有问题: co.za/content/projects/jquery.twitter/\">http://coda.co.za/content/projects/jquery.twitter/

代码:

 < div class =columns> 
< pre class =code>
jQuery(函数($){
$(#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/



那么,什么是替换?



如果您访问过上面的链接,您可能会理解,问题在哪里。

解决方案

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



以下是代理请求的PHP。在您的网站中创建此页面为 twitter-proxy.php ,然后更新 oauth_access_token oauth_access_token_secret consumer_key consumer_secret screen_name 以反映您自己的Twitter帐户。 访问 href =https://dev.twitter.com/apps =nofollow> https://dev.twitter.com/apps 如果你需要创建一个应用程序来获取这些值。

 <?php 
/ * Twitter代理更新OAuth * /
$ config = array(
// Twitter OAuth配置
'oauth_access_token'=>'从twitter获取',
'oauth_access_token_secret'=>'从twitter获取',
'consumer_key'=>' get twitter from',
'consumer_secret'=>'从twitter获取',
'base_url'=>'https://api.twitter.com/1.1/',
//请求特定用户
'screen_name'=>'你的_twitter_screenname',
'count'=> 3
);

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

//将$ twitter_request解析为URL参数
$ 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;

//设置OAuth授权数组
$ 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'
);
$ b $ //为请求创建向量
$ 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;

//创建cURL请求
$ 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);

//将适当的标题发送给最终用户。
if(isset($ info ['content_type'])&& isset($ info ['size_download'])){
header('Content-Type:'。$ info ['content_type ]);
header('Content-Length:'。$ info ['size_download']);
}
exit($ result);

函数_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));
}

函数_AuthorizationHeader($ oauth){
$ ret ='授权:OAuth';
$ values = array();
foreach($ oauth as $ key => $ value)
$ values [] = $ key。'=''。rawurlencode($ value)。''';
$ ret。= implode(',',$ values);
返回$ 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。 ?/ statuses.json页= 名单+ + + s.page与 & per_page = +数+ common_params;
} else if(s.favorites){
return'http://yoursite.com/twitter-proxy.php?url=favorites.json?screen_name='+s.username[0]+ &安培;页= + s.page + &安培;计数= +计数+ common_params;
} else if(s.query === null&& s.username.length == 1){
return'http://yoursite.com/twitter-proxy.php?url = '+ encodeURIComponent方法('?状态/ user_timeline.json SCREEN_NAME = '+ s.username [0] +' &安培;计数='+计数+ 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 strong>:截至2014年2月27日, Twitter要求使用SSL连接到其API服务器一>。我更新了代码以反映这一点。


I have used this plugin on my website to display tweets, but even the plugin site has the problem:

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

Code:

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

Every third party plug-in (I think) is not working any more. I have seen also:

http://tweet.seaofclouds.com/

So, what would be the replacement?

If you have visited the links above you might have understood, where is the problem.

解决方案

Since twitter has changed from non authenticated 1.0 API to OAuth 1.1, you now have to proxy the API request through PHP if you want to use that plugin.

Here's the PHP to proxy the request. Create this page as twitter-proxy.php in your site, and update the values of oauth_access_token, oauth_access_token_secret, consumer_key, consumer_secret and screen_name to reflect your own Twitter account.

Visit https://dev.twitter.com/apps if you need to create an application to get these values.

<?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;
}
?>

Now replace the existing build_api_url function in your jquery.tweets.js file with the function below, making sure you replace 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;
      }
}

Update 2014-12-17: As of 2014-02-27, Twitter requires the use of SSL to connect to its API servers. I have updated the code to reflect this.

这篇关于jquery.tweet.js插件不工作,如何显示推文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆