几年前我写了一个小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变化,是否有解决这个问题的方法还是不再可能?
答案 0 :(得分:13)
以前,搜索API 是唯一不需要某种形式的 OAuth 的Twitter API。现在它需要auth。
Twitter的搜索API 是从第三方收购中获得的 - 他们很少支持它,并且看起来甚至不存在它甚至存在。最重要的是,有效负载存在许多限制,包括但不限于 JSON 或 XML <中严重减少的键:值对的集合/ strong>你回来的文件。
当我听到这个消息时,我很震惊。我花了很长时间搞清楚如何使用最少量的代码来执行简单的 GET 请求(比如显示时间轴)。
我决定使用 OAuth 路由来确保相关的有效负载。您需要使用服务器端语言来执行此操作。最终用户可以看到 JavaScript ,因此在.js文件中包含必要的键和机密是个坏主意。
我不想使用大型库,所以我的答案是 PHP ,并且来自@Rivers的答案here。 @ lackovic10下面的答案描述了如何在您的身份验证中包含查询。
我希望这可以帮助其他人节省时间,考虑如何将Twitter的API与新的 OAuth 要求一起使用。
答案 1 :(得分:9)
您无需登录即可通过高级搜索访问和抓取Twitter:
获取请求
执行基本搜索请求时,您会收到:
https://twitter.com/search?q=Babylon%205&src=typd
默认情况下,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
DOM元素
以下是您可以用来提取的DOM elements
列表
作者推特处理
div.original-tweet[data-tweet-id]
作者姓名
div.original-tweet[data-name]
作者的用户ID
div.original-tweet[data-user-id]
帖子的时间戳
span._timestamp[data-time]
帖子的时间戳(ms)
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]
<强>资源强>
答案 2 :(得分:5)
如果您仍在寻找JSON中未经身份验证的推文,这应该可行: https://github.com/cosmocatalano/tweet-2-json
答案 3 :(得分:1)
正如您在the documentation中所看到的,使用REST API,您需要OAuth Tokens才能执行此操作。幸运的是,我们可以使用the Search(不使用OAuth)并使用from:[USERNAME]
运算符
<德尔>实施例:
http://search.twitter.com/search.json?q=from:marcofolio
将使用该用户的推文为您提供JSON对象,其中
object.results[0]
会给你最后一条推文。
答案 4 :(得分:0)
答案 5 :(得分:0)
这是一个快速破解(真的是一个黑客,应该谨慎使用,因为它不是未来的证据),它使用http://anyorigin.com来抓取Twitter网站的最新推文。
http://codepen.io/JonOlick/pen/XJaXBd
它通过使用anyorigin(你必须付钱才能使用它)来获取HTML。然后它使用jquery解析HTML以提取相关的推文。
移动网站上的推文使用带有.tweet-class类的div,所以这很简单。
相关代码如下所示:
$.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>");
}
});
});
答案 6 :(得分:0)
您可以使用Twitter API包装器,例如TweetJS.com,该包装器提供了一组有限的Twitter API功能,但不需要身份验证。叫这样;
TweetJs.ListTweetsOnUserTimeline("PetrucciMusic",
function (data) {
console.log(data);
});
答案 7 :(得分:-4)
方法“GET status / user_timeline”需要用户身份验证,就像您在官方文档中看到的那样:
您可以使用不需要身份验证的搜索方法“GET search”。
您有从此处开始的代码:http://jsfiddle.net/73L4c/6/
function searchTwitter(query) {
$.ajax({
url: 'http://search.twitter.com/search.json?' + jQuery.param(query),
dataType: 'jsonp',
success: function(data) {
var tweets = $('#tweets');
tweets.html('');
for (res in data['results']) {
tweets.append('<div>' + data['results'][res]['from_user'] + ' wrote: <p>' + data['results'][res]['text'] + '</p></div><br />');
}
}
});
}
$(document).ready(function() {
$('#submit').click(function() {
var params = {
q: $('#query').val(),
rpp: 5
};
// alert(jQuery.param(params));
searchTwitter(params);
});
})