如何使用新的Twitter API v1.1拉入用户的tweet ?
本文关键字:用户 tweet 1拉 API 何使用 Twitter v1 | 更新日期: 2023-09-27 18:09:47
所以我目前使用这个来从一个用户拉入一定数量的tweet:
public void GetTweets(string username, int tweetCount)
{
var url = string.Format(
"http://api.twitter.com/1/statuses/user_timeline.xml?screen_name={0}&count={1}",
username, tweetCount);
XDocument xml = XDocument.Load(url);
// parse xml
}
在新的API版本中,这将不再被允许,我将不得不使用JSON发送一个GET请求:https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
我迷路的地方是需要用OAuth进行身份验证。我需要一个Twitter账号吗?我已经寻找了一个例子或教程做这件事与。net和还没有能够找到任何东西,只是链接回到twitter开发页面v1.1
有人能给我指路吗?
您确实需要一个Twitter帐户,并且您需要获得一个"消费者密钥"answers"消费者秘密"。你可以在https://dev.twitter.com/apps上创建一个App。
这是IHttpHandler中的一个方法,一旦你有了这些,你就可以适应它。它为客户端脚本提供了与https://api.twitter.com/1/statuses/user_timeline.json端点相同的功能。它会在身份验证后请求1.1版本的数据,所以它只适用于你的应用。
对于比获取tweet更复杂的事情,应该使用正确的OAuth握手-尝试使用TweetSharp库:https://github.com/danielcrenna/tweetsharp
下面的代码遵循https://dev.twitter.com/docs/auth/application-only-auth上描述的过程,但它不执行这里描述的所有SSL检查—https://dev.twitter.com/docs/security/using-ssl。
public void ProcessRequest(HttpContext context)
{
// get these from somewhere nice and secure...
var key = ConfigurationManager.AppSettings["twitterConsumerKey"];
var secret = ConfigurationManager.AppSettings["twitterConsumerSecret"];
var server = HttpContext.Current.Server;
var bearerToken = server.UrlEncode(key) + ":" + server.UrlEncode(secret);
var b64Bearer = Convert.ToBase64String(Encoding.Default.GetBytes(bearerToken));
using (var wc = new WebClient())
{
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
wc.Headers.Add("Authorization", "Basic " + b64Bearer);
var tokenPayload = wc.UploadString("https://api.twitter.com/oauth2/token", "grant_type=client_credentials");
var rgx = new Regex("'"access_token'"''s*:''s*'"([^'"]*)'"");
// you can store this accessToken and just do the next bit if you want
var accessToken = rgx.Match(tokenPayload).Groups[1].Value;
wc.Headers.Clear();
wc.Headers.Add("Authorization", "Bearer " + accessToken);
const string url = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=YourTwitterHandle&count=4";
// ...or you could pass through the query string and use this handler as if it was the old user_timeline.json
// but only with YOUR Twitter account
var tweets = wc.DownloadString(url);
//do something sensible for caching here:
context.Response.AppendHeader("Cache-Control", "public, s-maxage=300, max-age=300");
context.Response.AppendHeader("Last-Modified", DateTime.Now.ToString("r", DateTimeFormatInfo.InvariantInfo));
context.Response.AppendHeader("Expires", DateTime.Now.AddMinutes(5).ToString("r", DateTimeFormatInfo.InvariantInfo));
context.Response.ContentType = "text/plain";
context.Response.Write(tweets);
}
}
你可以:
- 存储为accessToken获取的值以供以后使用,不需要每次都获取。
- 通过查询字符串上的参数-我认为user_timeline。
- 设置缓存相关的HTTP报头,这是必要的,你缓存这个响应,以避免运行到请求限制
- 在服务器上反序列化JSON并对它做一些不同的事情。但如果你要这样做,也许可以直接使用TweetSharp。这实际上是为了向客户端脚本提供与API v1相同的JSON数据。
我需要一个Twitter帐户吗?
Twitter同时支持基于用户的身份验证和基于应用程序的身份验证,因此如果您不想使用Twitter用户帐户进行身份验证,则不必这样做。详细信息在这里:
https://dev.twitter.com/docs/auth/application-only-auth也就是说,我的建议是使用基于用户的身份验证。这是迄今为止最常用的Twitter身份验证方式,因此更容易找到相关文档和代码示例。下面是一些例子:
https://dev.twitter.com/docs/auth/oauth/single-user-with-examples