这是我的第一个问题,所以如果我没有正确地做这件事,我想道歉。
描述
我正在使用Visual Studio for Mac开发一个C#移动应用程序,并且已经安装了LinqToTwitter nuget包(版本4.2.1)。我需要从帐户中检索所有推文(我已经拥有凭据)。我正在使用的代码如下:
var auth = new ApplicationOnlyAuthorizer()
{
CredentialStore = new InMemoryCredentialStore {
ConsumerKey = socialMedia.twt_consumer_key,
ConsumerSecret = socialMedia.twt_consumer_secret
}
};
await auth.AuthorizeAsync();
var ctx = new TwitterContext(auth);
var tweets =
await
(from tweet in ctx.Status
where tweet.Type == StatusType.User &&
tweet.ScreenName == socialMedia.twt_screen_name &&
tweet.Count == 30
select tweet)
.ToListAsync();
List<Tweet> list = (from tweet in tweets
select new Tweet
{
StatusID = tweet.StatusID,
ScreenName = tweet.User.ScreenNameResponse,
Text = tweet.Text,
ImageUrl = tweet.User.ProfileImageUrl,
MediaUrl = tweet?.Entities?.MediaEntities?.FirstOrDefault()?.MediaUrl
})
.ToList();
问题
拨打此电话后,我会收到返回的推文列表。所有这些都与所需的帐户相关联,并包含我将在应用程序中使用的几乎所有必要信息。尝试访问MediaEntities时会出现此问题;从返回的30条推文中,只有2条包含信息,其中大多数是空的;这就是这条线的原因:
MediaUrl = tweet?.Entities?.MediaEntities?.FirstOrDefault()?.MediaUrl
已尝试的内容
我一直在寻找这个问题的解决方案,但不幸的是我找不到合适的解决方案。
在Twitter文档中,我找到了关于Media对象的以下内容:
实体部分将包含媒体数组 包含单个媒体对象(如果有任何媒体对象) '附加'到推文。如果没有附加本地媒体,那里 将不是实体中的媒体数组。由于以下原因 extended_entities部分应该用于处理Tweet native 媒体: +即使在视频和GIF附加到Tweet的情况下,媒体类型也将始终显示“照片”。 +即使最多可以附加四张照片,也只会在实体部分列出第一张照片。 (https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/entities-object.html)
所以我最初做的是查看扩展实体,但结果是相同的(它们是空的)。
查看其他类似问题的帖子,我发现了以下内容:
尝试将tweet_mode =扩展参数添加到API调用中。 (https://twittercommunity.com/t/media-entities-not-showing-on-most-returned-tweets/77375)
所以我在查询中添加了以下代码:
&& tweet.TweetMode == TweetMode.Extended
但后来我得到了一个我无法解决的例外:
我的猜测是它与LinqToTwitter的问题有关(但不能保证这一点)。
最后我尝试在查询中包含一些其他行(没有解决问题):
&& tweet.IncludeEntities == true
&& tweet.IncludeRetweets == true
问题
代码中有问题吗?身份验证过程是否错误,是否需要包含所有4个字段(ConsumerKey,ConsumerSecret,OAuthToken,AccessToken)以实现我想要实现的目标? (请注意,连接成功,因为排除媒体实体后正确返回推文列表)。
也许我错过了一些内容,推文应该以特定的方式创建? (顺便说一下,我在推特页面上查看了帐户中的推文,它们都包含媒体)
实体部分将包含一个包含单个的媒体数组 媒体对象,如果任何媒体对象已“附加”到推文
使用TweetMode.Extendend的解决方法是什么?如果是这样,如何解决上面显示的异常?
提前感谢所有想要研究这个问题的人。
答案 0 :(得分:0)
最后,经过大量时间解决此问题,在Joe Mayo (GitHub)的帮助下找到了答案。解决方案是:
在推文查询中添加以下属性:
tweet.TweetMode == TweetMode.Extended
tweet.IncludeEntities == true
此后,媒体实体成功返回;启用对推文附加媒体的访问。
有关尝试过的内容的更多信息,请访问this链接。在那里,说明了Joe Mayo (GitHub)建议的解决方案。感谢所有抽出宝贵时间审查并帮助解决此问题的人。