首页 文章

C#LinqToTwitter - 为大多数推文返回空媒体实体

提问于
浏览
1

这是我的第一个问题,所以如果我没有正确地做,我想道歉 .

Description

我正在使用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();

Problem

拨打此电话后,我会收到一条返回的推文列表 . 所有这些都与所需的帐户相关联,并包含我将在应用程序中使用的几乎所有必要信息 . 尝试访问MediaEntities时会出现此问题;从返回的30条推文中,只有2条包含信息,其中大多数是空的;这就是这条线的原因:

MediaUrl = tweet?.Entities?.MediaEntities?.FirstOrDefault()?.MediaUrl

What's been tried

我一直在寻找这个问题的解决方案,但不幸的是我找不到合适的解决方案 .

在twitter文档中,我发现了以下有关Media对象的信息:

如果任何媒体对象已“附加”到推文,则实体部分将包含包含单个媒体对象的媒体数组 . 如果未附加本机媒体,则实体中将不存在媒体阵列 . 出于以下原因,应使用extended_entities部分来处理Tweet本机媒体:即使在视频和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

但后来我得到了一个我无法解决的例外:

Captured Exception

我的猜测是它与LinqToTwitter的问题有关(但不能保证这一点) .

最后,我尝试在查询中包含一些其他行(但没有解决问题):

&& tweet.IncludeEntities == true
&& tweet.IncludeRetweets == true

Questions

  • 代码中有问题吗?身份验证过程是否错误,是否需要包含所有4个字段(ConsumerKey,ConsumerSecret,OAuthToken,AccessToken)以实现我想要实现的目标? (请注意,连接成功,因为在不包含媒体实体的情况下正确返回了推文列表) .

  • 也许我错过了什么,推文应该以特定的方式创建? (顺便说一下,我在twitter页面中查看了来自帐户的推文,它们都包含媒体)

如果任何媒体对象已“附加”到推文,则实体部分将包含包含单个媒体对象的媒体数组

  • 是使用TweetMode.Extendend的变通方法吗?如果是这样,如何解决上面显示的异常?

在此先感谢所有想要了解这个问题的人 .

1 回答

  • 0

    最后经过很多时间在这个问题上挣扎,答案是在Joe Mayo (GitHub)的帮助下找到的 . 解决方案是:

    • 将nuget更新为5.0.0-beta3版本 .

    • 从nuget更新所有dependencies(如上面的版本链接所示) .

    • 将以下属性添加到推文查询中:

    tweet.TweetMode == TweetMode.Extended

    tweet.IncludeEntities == true

    在此之后,媒体实体成功返回;允许访问推文的附加媒体 .

    有关尝试内容的详细信息,请按照this链接进行操作 . 在那里,解释了Joe Mayo (GitHub)建议的解决方案 . 感谢所有花时间审阅并帮助解决此问题的人 .

相关问题