使用 TweetSharp API 获取推文时出错
Error while fetching tweets using TweetSharp API
我正在尝试使用 TweetSharp API
从特定标签中获取所有推文。我为此使用以下代码
public ActionResult AddTwitterDataTop(TwitterData objTwitterData)
{
try
{
var service = new TwitterService(ConsumerKey, ConsumerSecret);
service.AuthenticateWith(AccessToken, AccessTokenSecret);
var tweets = service.Search(new SearchOptions { Q = "#MisuseOfRapeLaw", Count = 100, Resulttype = TwitterSearchResultType.Recent });
IEnumerable<TwitterStatus> status = tweets.Statuses;
foreach (var item in status)
{
var qry = (from s in ObjEdbContext.ObjTwitterDatas where s.Text == item.Text && s.ScreenName == item.User.ScreenName select s).FirstOrDefault();
if (qry != null) continue;
objTwitterData.ScreenName = item.User.ScreenName;
objTwitterData.UserName = item.User.Name;
objTwitterData.Text = item.Text;
objTwitterData.RetweetCount = item.RetweetCount;
objTwitterData.FavouritesCount = item.User.FavouritesCount;
objTwitterData.ProfileImageUrl = item.User.ProfileImageUrl;
objTwitterData.TimeStam = item.CreatedDate;
objTwitterData.RetweetUrlId = "https://twitter.com/intent/retweet?tweet_id=" + item.Id;
objTwitterData.ReplyaUrlId = "https://twitter.com/intent/tweet?in_reply_to=" + item.Id;
objTwitterData.FavoriteUrlId = "https://twitter.com/intent/favorite?tweet_id=" + item.Id;
objTwitterData.IsValid = "Pending";
ObjEdbContext.ObjTwitterDatas.Add(objTwitterData);
ObjEdbContext.SaveChanges();
ModelState.Clear();
}
}
catch (Exception e)
{
ViewBag.ErrorMessage = "Some exception occured" + e;
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
有时它工作正常,有时在这一行之后给出以下异常
var tweets = service.Search(new SearchOptions { Q = "#MisuseOfRapeLaw", Count = 100, Resulttype = TwitterSearchResultType.Recent });
JSON integer 2265545852 is too large or small for an Int32. Path 'statuses[19].in_reply_to_user_id', line 1, position 60279.
如果我将计数更改为 18 而不是 100,它会正常工作。
上面的代码returns 只有 100 个推文和转推文混合的数据。
有什么办法可以实现这些
- 获取所有推文(推文和转推文的混合)而不是 100。
- 使用过滤器仅获取推文(无转推)。
SO 中有很多与此问题类似的问答,但其中 none 确实帮助了我。
当前发布到 Nuget 的 TweetSharp 版本不支持很多东西(用户等)的长整数 ID。如果您的搜索结果 return 来自具有大 ID 的用户的推文,它将失败并出现此错误。
TweetSharp 的 nuget 存储库中的源代码确实包含对此的修复,因此如果您能够自己获取和构建代码并引用您构建的二进制文件,问题应该会消失。
如果您不想那样做,您需要使用 TweetSharp 的分支之一(不再维护原来的 TweetSharp)。 Nuget TweetMoaSharp(我目前主要维护)或 TweetSharp-Alternate 上有一些替代包。或者,您可以更改为完全不同的库,例如 LinqToTwitter。
我正在尝试使用 TweetSharp API
从特定标签中获取所有推文。我为此使用以下代码
public ActionResult AddTwitterDataTop(TwitterData objTwitterData)
{
try
{
var service = new TwitterService(ConsumerKey, ConsumerSecret);
service.AuthenticateWith(AccessToken, AccessTokenSecret);
var tweets = service.Search(new SearchOptions { Q = "#MisuseOfRapeLaw", Count = 100, Resulttype = TwitterSearchResultType.Recent });
IEnumerable<TwitterStatus> status = tweets.Statuses;
foreach (var item in status)
{
var qry = (from s in ObjEdbContext.ObjTwitterDatas where s.Text == item.Text && s.ScreenName == item.User.ScreenName select s).FirstOrDefault();
if (qry != null) continue;
objTwitterData.ScreenName = item.User.ScreenName;
objTwitterData.UserName = item.User.Name;
objTwitterData.Text = item.Text;
objTwitterData.RetweetCount = item.RetweetCount;
objTwitterData.FavouritesCount = item.User.FavouritesCount;
objTwitterData.ProfileImageUrl = item.User.ProfileImageUrl;
objTwitterData.TimeStam = item.CreatedDate;
objTwitterData.RetweetUrlId = "https://twitter.com/intent/retweet?tweet_id=" + item.Id;
objTwitterData.ReplyaUrlId = "https://twitter.com/intent/tweet?in_reply_to=" + item.Id;
objTwitterData.FavoriteUrlId = "https://twitter.com/intent/favorite?tweet_id=" + item.Id;
objTwitterData.IsValid = "Pending";
ObjEdbContext.ObjTwitterDatas.Add(objTwitterData);
ObjEdbContext.SaveChanges();
ModelState.Clear();
}
}
catch (Exception e)
{
ViewBag.ErrorMessage = "Some exception occured" + e;
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
有时它工作正常,有时在这一行之后给出以下异常
var tweets = service.Search(new SearchOptions { Q = "#MisuseOfRapeLaw", Count = 100, Resulttype = TwitterSearchResultType.Recent });
JSON integer 2265545852 is too large or small for an Int32. Path 'statuses[19].in_reply_to_user_id', line 1, position 60279.
如果我将计数更改为 18 而不是 100,它会正常工作。
上面的代码returns 只有 100 个推文和转推文混合的数据。 有什么办法可以实现这些
- 获取所有推文(推文和转推文的混合)而不是 100。
- 使用过滤器仅获取推文(无转推)。
SO 中有很多与此问题类似的问答,但其中 none 确实帮助了我。
当前发布到 Nuget 的 TweetSharp 版本不支持很多东西(用户等)的长整数 ID。如果您的搜索结果 return 来自具有大 ID 的用户的推文,它将失败并出现此错误。
TweetSharp 的 nuget 存储库中的源代码确实包含对此的修复,因此如果您能够自己获取和构建代码并引用您构建的二进制文件,问题应该会消失。
如果您不想那样做,您需要使用 TweetSharp 的分支之一(不再维护原来的 TweetSharp)。 Nuget TweetMoaSharp(我目前主要维护)或 TweetSharp-Alternate 上有一些替代包。或者,您可以更改为完全不同的库,例如 LinqToTwitter。