C # LinqToTwitter - пустые медиа-объекты возвращаются для большинства твитов - PullRequest
0 голосов
/ 06 июня 2018

Это мой первый вопрос, поэтому я хочу извиниться, если я делаю это неправильно.

Описание

Я занимаюсь разработкой мобильного приложения на C # с использованием VisualStudio для Mac, и уже установил пакет nuget LinqToTwitter (версия 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

Что было опробовано

Я довольно долго искал решение этой проблемы, но, к сожалению, яне смог найти ни одного подходящего.

В документации по твиттеру я нашел следующее об объекте Media:

Раздел entity будет содержать медиа-массив, содержащий один медиа-объект, если таковой имеется.медиа-объект был «прикреплен» к твиту.Если нативные носители не были подключены, в сущностях не будет массива.По следующим причинам раздел extended_entities должен использоваться для обработки собственных носителей Tweet: + Тип носителя всегда будет указывать «фото» даже в случае прикрепления видео и GIF к Tweet.+ Даже если можно прикрепить до четырех фотографий, только первая из них будет указана в разделе объектов.(https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/entities-object.html)

Итак, сначала я посмотрел внутри расширенных сущностей, но результат был тот же (они были пустыми).

Просмотр других постов с похожими проблемамиЯ обнаружил следующее:

Попробуйте добавить параметр tweet_mode = extended в вызов 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

Вопросы

  1. Что-то не так в коде? Процесс аутентификации неверен и необходимо включить все 4 поля (ConsumerKey, ConsumerSecret, OAuthToken, AccessToken)для чего я пытаюсь достичь? (пожалуйста, обратите внимание, что соединение успешноl как список твитов возвращен правильно, за исключением медиа-сущностей).

  2. Может быть, я что-то упустил, а твиты должны быть созданы определенным образом?(Кстати, я просмотрел твиты из учетной записи на странице твиттера, и все они содержат мультимедиа)

    В разделе сущностей будет содержаться медиа-массив, содержащий один медиа-объект, если какой-либо медиа-объект был«прикреплен» к твиту

  3. Обходной путь для использования TweetMode.Extendend?Если да, то как можно разрешить указанное выше исключение?

Заранее благодарим всех, кто взглянет на этот вопрос.

1 Ответ

0 голосов
/ 17 июля 2018

Наконец, после долгого времени борьбы с этой проблемой, ответ был найден с помощью Джо Майо (GitHub) .Решение:

  1. Обновите nuget до версии 5.0.0-beta3 .
  2. Обновите все зависимости из nuget (как указывает ссылка на вышеуказанную версию).
  3. Добавьте следующие свойства в запрос твита:

    tweet.TweetMode == TweetMode.Extended

    tweet.IncludeEntities == true

После этого медиа-объекты возвращаются успешно;Включение доступа к подключенным твитам.

Для получения дополнительной информации о том, что было опробовано, перейдите по этой ссылке.Там объясняется решение, предложенное Джо Майо (GitHub) .Спасибо всем, кто нашел время, чтобы рассмотреть и помочь с этой проблемой.

...