Это мой первый вопрос, поэтому я хочу извиниться, если я делаю это неправильно.
Описание
Я занимаюсь разработкой мобильного приложения на 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
Вопросы
Что-то не так в коде? Процесс аутентификации неверен и необходимо включить все 4 поля (ConsumerKey, ConsumerSecret, OAuthToken, AccessToken)для чего я пытаюсь достичь? (пожалуйста, обратите внимание, что соединение успешноl как список твитов возвращен правильно, за исключением медиа-сущностей).
Может быть, я что-то упустил, а твиты должны быть созданы определенным образом?(Кстати, я просмотрел твиты из учетной записи на странице твиттера, и все они содержат мультимедиа)
В разделе сущностей будет содержаться медиа-массив, содержащий один медиа-объект, если какой-либо медиа-объект был«прикреплен» к твиту
Обходной путь для использования TweetMode.Extendend?Если да, то как можно разрешить указанное выше исключение?
Заранее благодарим всех, кто взглянет на этот вопрос.