【问题标题】:TweetInvi does not retrieve tweet's pictureTweetInvi 不检索推文的图片
【发布时间】:2021-08-03 04:51:25
【问题描述】:

我正在使用以下代码阅读推文,它工作正常,但媒体对象总是为空,即使推文有图片,但如果推文有视频而不是图片,它工作正常!

            var stream = userClient.Streams.CreateFilteredStream();
            stream.TweetMode = Tweetinvi.TweetMode.Extended;
            var twitterUser = await userClient.Users.GetUserAsync(username);
            stream.AddFollow(twitterUser);
            stream.MatchingTweetReceived += (sender, eventReceived) =>
            {
                
                if(!eventReceived.Tweet.Retweeted)
                    Console.WriteLine(eventReceived.Tweet);
            };

            await stream.StartMatchingAllConditionsAsync();

我正在调试每条推文,并验证每条推文中都有一张图片。

【问题讨论】:

  • 什么是适合您的媒体对象? 0 项?我可以毫无问题地让它工作,唯一的区别是我使用了stream.AddTrack(string)
  • @TimothyG。推文有图片时为空,如果推文有视频则可以正常工作

标签: c# twitter tweetinvi


【解决方案1】:

ITweetMedia 成员是List<IMediaEntity>。此列表可能为空。使用下面的代码,我能够接收到他们的 Media 成员包含 IMediaEntity 对象的推文:

static async Task Main(string[] args)
{
    Task task = Task.Run(() => BeginTweetStream());
    await task;
}

public static async Task BeginTweetStream()
{
    string userName = "SomeName";
    int i = 0;
    TwitterClient userClient = new TwitterClient("string", "string", "string", "string"); //where the strings are credentials
    var stream = userClient.Streams.CreateFilteredStream();
    stream.TweetMode = Tweetinvi.TweetMode.Extended;
    var twitterUser = await userClient.Users.GetUserAsync(userName);
    stream.AddTrack("SomeTrack");
    stream.MatchingTweetReceived += (sender, eventReceived) =>
    {
        if (eventReceived.Tweet.Media != null && eventReceived.Tweet.Media.Any() && !eventReceived.Tweet.Retweeted)
        {
            Console.WriteLine($"Tweet with {eventReceived.Tweet.Media.Count()} media found!");

            foreach (Tweetinvi.Models.Entities.IMediaEntity media in eventReceived.Tweet.Media)
            {
                Console.WriteLine($"Media type: {media.MediaType} Link: {media.URL}");
            }

            ++i;
        }

        if (i == 99) //stop after 100 tweets with media
        {
            stream.Stop();
            Console.WriteLine("Complete! Press any key to exit.");
            Console.Read(); 
        }
    };

    await stream.StartMatchingAllConditionsAsync();
}

控制台输出:

您可以查看IMediaEntity.MediaType 会员,了解它是什么类型的媒体。我还没有找到可以设置什么值的文档,但到目前为止,我已经看到了:

  • photo
  • video
  • animated_gif

请注意,IMediaEntity 对象的 URL 成员是指向推文本身的链接。如果您关注图片本身,MediaURLMediaURLHttps 将包含仅指向图片的链接(对于视频和动画 GIF,这些成员是指向缩略图的链接)。

【讨论】:

  • 我完全使用了您的代码,但我使用“Khaberni”作为 AddTrack 而不是“SomeTrack” 我收到了推文,但没有他们的图片!
  • @Cassini 我很茫然。所以你没有在IMediaEntity.MedialURL 中获得任何链接?
  • 不,我没有得到任何链接。
  • @Cassini 你能发布你的空媒体对象和推文对象的截图吗?
  • 我在问题中添加了屏幕截图。
猜你喜欢
  • 2017-10-03
  • 2017-06-05
  • 2020-12-09
  • 2018-01-03
  • 2021-03-11
  • 1970-01-01
  • 2018-04-30
  • 2014-09-08
相关资源
最近更新 更多