Javascript 在不进行身份验证的情况下将Twitter提要获取为JSON

Javascript 在不进行身份验证的情况下将Twitter提要获取为JSON,javascript,twitter,Javascript,Twitter,几年前,我写了一个小JavaScript,它抓取了一条用户(我的)最近的推文,然后解析出来显示,包括链接、日期等 它使用这个json调用来检索推文,但它不再工作 http://twitter.com/statuses/user_timeline/radfan.json 它现在返回错误: {"errors":[{"message":"Sorry, that page does not exist","code":34}]} 我已经考虑过使用api版本(代码如下),但这需要进行身份验证,我宁愿避

几年前,我写了一个小JavaScript,它抓取了一条用户(我的)最近的推文,然后解析出来显示,包括链接、日期等

它使用这个json调用来检索推文,但它不再工作

http://twitter.com/statuses/user_timeline/radfan.json
它现在返回错误:

{"errors":[{"message":"Sorry, that page does not exist","code":34}]}
我已经考虑过使用api版本(代码如下),但这需要进行身份验证,我宁愿避免这样做,因为这只是为了在我的网站上显示我的最新推文,而我的个人资料页上无论如何都是公开的:

http://api.twitter.com/1/statuses/radfan.json
我没有跟上Twitter API的变化,因为我不再真正使用它了,有没有办法解决这个问题,还是不再可能了?

正如您在中所看到的,使用REST API来实现这一点。幸运的是,我们可以使用(不使用OAuth)和
from:[用户名]
操作符

例如:
将为您提供一个JSON对象,其中包含该用户的tweet,其中


将为您提供最后一条推文。

您可以使用twitter api v1获取推文,而无需使用OAuth。例如:link将@jack最近的100条tweet链接


时间线文档是。

以前,搜索API是唯一不需要某种形式的OAuth的Twitter API。现在它确实需要auth

Twitter的搜索API是从第三方收购的——他们很少支持它,而且似乎不知道它的存在。除此之外,有效负载还有许多限制,包括但不限于在返回的JSONXML文件中大大减少的key:value

当我听到这件事时,我很震惊。我花了很长时间研究如何使用最少的代码来完成一个简单的GET请求(比如显示时间线)

我决定选择OAuth路径,以确保相关的有效负载。要做到这一点,您需要一种服务器端语言JavaScript对最终用户可见,因此在.js文件中包含必要的键和秘密是个坏主意

我不想使用大的库,所以我的答案是PHP和@Rivers'answer的帮助。下面由@lackovic10给出的答案描述了如何在身份验证中包含查询

我希望这有助于其他人节省时间思考如何使用Twitter的API来满足新的OAuth要求。

方法“获取状态/用户时间线”需要用户身份验证,就像您在官方文档中看到的那样:

您可以使用不需要身份验证的搜索方法“GET search”

您有一个从这里开始的代码:

函数搜索Twitter(查询){
$.ajax({
网址:'http://search.twitter.com/search.json?'+jQuery.param(查询),
数据类型:“jsonp”,
成功:功能(数据){
var tweets=$(“#tweets”);
html(“”);
对于(数据中的res['results']){
追加(“”+data['results'][res]['from_user']+'写:'+data['results'][res]['text']+'


'); } } }); } $(文档).ready(函数(){ $(“#提交”)。单击(函数(){ 变量参数={ q:$('#query').val(), rpp:5 }; //警报(jQuery.param(params)); 搜索推特(params); }); })
如果您仍在寻找JSON中未经验证的推文,这应该可以: 这里有一个快速黑客(实际上是一个黑客,应该谨慎使用,因为它不是未来的证明),它用来抓取twitter站点上的最新推文

它的工作原理是使用anyorigin(使用它需要付费)来获取HTML。然后,它使用jquery解析HTML以提取出相关的tweet

移动站点上的tweet使用了一个div和class.tweet文本,所以这非常简单

相关代码如下所示:

$.getJSON('http://anyorigin.com/get?url=mobile.twitter.com/JonOlick&callback=?', function(data){

  // Remap ... utf8 encoding to ascii. 
  var bar = data.contents;
  bar = bar.replace(/…/g, '...');

  var el = $( '<div></div>' );
  el.html(bar);

  // Change all links to point back at twitter
  $('.twitter-atreply', el).each(function(i){
    $(this).attr('href', "https://twitter.com" + $(this).attr('href'))
  });

  // For all tweets
  $('.tweet-text', el).each(function(i){
    // We only care about the first 4 tweets
    if(i < 4) {
      var foo = $(this).html();
      $('#test').html($('#test').html() + "<div class=ProfileTweet><div class=ProfileTweet-contents>" + foo + "</div></div><br>");
    }
  });

});
$.getJSON('http://anyorigin.com/get?url=mobile.twitter.com/JonOlick&callback=?,函数(数据){
//重新映射…utf8编码到ascii。
var bar=data.contents;
bar=bar.替换(/g,“…”);
变量el=$('');
el.html(bar);
//更改所有链接以指向twitter
$('.twitter atreply',el).每个(函数(i){
$(this.attr('href',”https://twitter.com“+$(this.attr('href'))
});
//所有推文
$('.tweet text',el).每个(函数(i){
//我们只关心前4条推文
if(i<4){
var foo=$(this.html();
$('#test').html($('#test').html()+“+foo+”
”; } }); });
您无需登录即可通过高级搜索访问和浏览Twitter:

获取请求

执行基本搜索请求时,您会得到:

https://twitter.com/search?q=Babylon%205&src=typd
  • q(我们的查询编码)
  • src(假定为查询的源,即键入的)
默认情况下,Twitter返回前25个结果,但如果你点击
all
您可以获得实时推文:

https://twitter.com/search?f=realtime&q=Babylon%205&src=typd
JSON内容

通过AJAX在页面上加载更多推文:

https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd&include_available_features=1&include_entities=1&last_note_ts=85&max_position=TWEET-553069642609344512-553159310448918528-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
使用
max_position
请求下一条推文

以下json数组返回刮取内容所需的所有内容:

https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd
  • 有更多项目(bool)
  • 项目(html)
  • 最大位置(键)
  • 刷新光标(键)
DOM元素

下面是一个可以用来提取的
DOM元素的列表

作者在推特上写下了自己的名字

div.original-tweet[data-tweet-id]   
作者姓名

div.original-tweet[data-name]
div.original-tweet[data-user-id]    
作者的用户ID

div.original-tweet[data-name]
div.original-tweet[data-user-id]    
邮戳

span._timestamp[data-time]  
邮件的时间戳(毫秒)

span._timestamp[data-time-ms]
推文

p.tweet-text
 
转发次数

span.ProfileTweet-action–retweet > span.ProfileTweet-actionCount[data-tweet-stat-count] 
Favo的数量

span.ProfileTweet-action–favorite > span.ProfileTweet-actionCount[data-tweet-stat-count]    
资源


您可以使用Twitter API包装器,例如它提供了一组有限的Twitter API功能
TweetJs.ListTweetsOnUserTimeline("PetrucciMusic",
function (data) {
    console.log(data);
});