我需要实现Twitter API应用程序专用身份验证,我已经搜索了linq2twitter oauth示例和stackoverflow问题,但我没有找到任何有用的信息.
是否可以使用linq2twitter实现这种授权以及如何实现?
我已将旧的HttpHandler(.ashx)TwitterFeed代码移植到WebAPI应用程序.代码的核心使用了出色的Linq2Twitter软件包(https://linqtotwitter.codeplex.com/).部分端口涉及将此组件从版本2升级到版本3,现在提供了许多异步方法调用 - 这对我来说是新的.这是基本的控制器:
public async Task<IEnumerable<Status>>
GetTweets(int count, bool includeRetweets, bool excludeReplies)
{
var auth = new SingleUserAuthorizer
{
CredentialStore = new SingleUserInMemoryCredentialStore
{
ConsumerKey = ConfigurationManager.AppSettings["twitterConsumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["twitterConsumerKeySecret"],
AccessToken = ConfigurationManager.AppSettings["twitterAccessToken"],
AccessTokenSecret = ConfigurationManager.AppSettings["twitterAccessTokenSecret"]
}
};
var ctx = new TwitterContext(auth);
var tweets =
await
(from tweet in ctx.Status
where (
(tweet.Type == StatusType.Home)
&& (tweet.ExcludeReplies == excludeReplies)
&& (tweet.IncludeMyRetweet == includeRetweets)
&& (tweet.Count == count)
)
select tweet)
.ToListAsync();
return tweets;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但之前,我已经缓存了结果,以避免"过度调用"Twitter API.在这里,我遇到了一个问题(更多的是与我对异步协议的理解不比我怀疑的其他问题).
概括地说,我想要做的是首先检查缓存,如果数据不存在,则重新水化缓存并将数据返回给调用者(网页).这是我对代码的尝试 …
好吧,我最近升级到V3,但它打破了很多东西
我该如何解决这些问题?
1号 :
这不再适用于Credentials和InMemoryCredentials这样的定义
var auth = new SingleUserAuthorizer
{
Credentials = new InMemoryCredentials
{
ConsumerKey = srtwitterConsumerKey,
ConsumerSecret = srtwitterConsumerSecret,
OAuthToken = srtwitterOAuthToken,
AccessToken = srtwitterAccessToken
}
};
Run Code Online (Sandbox Code Playgroud)
2号:没有GetFileBytes的定义了
var mediaItems =
new List<Media>
{
new Media
{
Data = Utilities.GetFileBytes(srImageUrl),
FileName = srTweet.Split(' ')[0]+".jpg",
ContentType = MediaContentType.Jpeg
}
};
Run Code Online (Sandbox Code Playgroud)
3号:没有TweetWithMedia的定义
var tweet = twitterContext.TweetWithMedia(srTweet, false, mediaItems);
Run Code Online (Sandbox Code Playgroud)
4号:没有UpdateStatus的定义
var tweet = twitterContext.UpdateStatus(srTweet);
Run Code Online (Sandbox Code Playgroud)
5号:没有CreateFavorite的定义
var vrResult = twitterContext.CreateFavorite(srRetweetId);
Run Code Online (Sandbox Code Playgroud)
我找不到V3的任何例子
它总是说,twitterCtx
但你怎么twitterCtx
在第一位?
我试图让所有推文(计数总推文数)属于主题标签.我的功能在这里,如何使用maxID和sinceID获取所有推文.什么是"计数"而不是"计数"?我不知道.
if (maxid != null)
{
var searchResponse =
await
(from search in ctx.Search
where search.Type == SearchType.Search &&
search.Query == "#karne" &&
search.Count == Convert.ToInt32(count)
select search)
.SingleOrDefaultAsync();
maxid = Convert.ToString(searchResponse.SearchMetaData.MaxID);
foreach (var tweet in searchResponse.Statuses)
{
try
{
ResultSearch.Add(new KeyValuePair<String, String>(tweet.ID.ToString(), tweet.Text));
tweetcount++;
}
catch {}
}
while (maxid != null && tweetcount < Convert.ToInt32(count))
{
maxid = Convert.ToString(searchResponse.SearchMetaData.MaxID);
searchResponse =
await
(from search in ctx.Search
where search.Type == SearchType.Search &&
search.Query == "#karne" &&
search.Count == Convert.ToInt32(count) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试检索过去2个月内的用户推文.但是,LINQ to Twitter将您可以检索的推文数限制为200.有没有办法检索更多?
Twitter api允许分页,如:
http://api.twitter.com/1/statuses/user_timeline.json?id=username8&count=200&page=2
Run Code Online (Sandbox Code Playgroud)
我在LINQ to Twitter库中找不到任何similair.
我尝试了以下,但它不起作用:
var statusTweets = (from tweet in twitterCtx.Status
where tweet.Type == StatusType.User &&
tweet.Count == 200 &&
tweet.ScreenName == "username"
select tweet).Skip(200);
Run Code Online (Sandbox Code Playgroud) 我试图异步下载一些推特信息,它阻止了UI线程.我正在使用LinqToTwitter(http://linqtotwitter.codeplex.com/)下载信息.
这是对任务的调用
PublicTweetListBox.ItemsSource = await getTweets(twitterCtx);
Run Code Online (Sandbox Code Playgroud)
这是任务本身
async Task<List<TweetViewModel>> getTweets(TwitterContext twitterCtx)
{
var tweetList = await Task.FromResult<List<TweetViewModel>>(
(from tweet in twitterCtx.Status
where tweet.Type == StatusType.User
&& tweet.ScreenName == UserName.Text
select new TweetViewModel
{
Name = tweet.User.Name,
Tweet = tweet.Text,
ImageUrl = tweet.User.ProfileImageUrl
})
.ToList());
return tweetList;
}
Run Code Online (Sandbox Code Playgroud)
我在等待下载列表的方式做错了,TweetViewModel是自定义类型,如果有帮助的话.
我的LinqToTwitter类不能排除转推.
var srch = (from search in twitterCtx.Search where search.Type == SearchType.Search && search.Query == term && search.Count == 100 select search).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
没有选择search.IncludeRetweets==false
.
我怎么能用它进行搜索?我应该尝试另一堂课吗?
如果它很明显我很抱歉但我找不到答案.我想发布一个状态.我能找到的就是这两行.我无法弄清楚如何登录.我不在乎它是用户/密码还是使用API密钥.
var twitterCtx = new TwitterContext();
var tweet = twitterCtx.UpdateStatus(@"test text");
Run Code Online (Sandbox Code Playgroud)
我这样做是一个控制台应用程序.
我如何从公共时间表中至少获得3200条最新推文?这是我目前所做的,但它只返回我最新的200条推文.
void GetUserTimeLine(TwitterContext ctx){
var statusTweets =
from tweet in twitterCtx.Status
where tweet.Type == StatusType.User &&
tweet.Count == 3200 &&
tweet.ScreenName == "abc"
select tweet;
//PrintTweetsResults(statusTweets);
foreach (var tweet in statusTweets)
{
Console.WriteLine(
"(" + tweet.StatusID + ")" +
"[" + tweet.User.ID + "]" +
tweet.User.Name + ", " +
tweet.Text + ", " +
tweet.CreatedAt);
}
// DEFINE FILE PATH NAME
string dwnloadFilePath = @"C:\temp\Tweet.log";
// CREATE AN EMPTY TEXT FILE
FileStream fs1 = null;
if (!File.Exists(dwnloadFilePath))
{
using …
Run Code Online (Sandbox Code Playgroud)