Я пытаюсь создать приложение для твиттера, которое ищет твиты и загружает прикрепленные файлы. Но что меня удивляет, так это: некоторые твиты, которые , очевидно, имеют прикрепленное изображение, не имеют изображения, прикрепленного в соответствии с API Twitter .
tweet.hasMedia()
. false
и tweet.entities.media
- это null
.
Вот вывод из моего отладчика в IDEA:
Твит Я говорю об этом: Tweet 1230401137754484737 от @ Wahlrecht_de . Когда вы нажимаете на картинку, открывается твит 1230401137754484737 , где вы можете увидеть картинку из твита, которая предположительно не имеет медиа .
Как получится ? Это какая-то скрытая функция или недостаток в spring-social-twitter-API?
Я пробовал другие твиты, и там hasMedia()
возвращается, как и ожидалось true
. Например Tweet 1230756978533650432 от @ Marvin400 и многие другие. В этом случае выходные данные отладчика ясно показывают, что есть подключенный носитель:
Одна вещь, которую я узнал, что этот специальный твит имеет «источник» «веб-клиента Twitter» (см. Выходные данные отладчика), в то время как найденные мною твиты unproblemati c имели такой источник, как «Twitter для iPhone», «Plume», ...
Может ли это быть как-то связано с этим?
Я использую
- org.springframework.social: spring-social-config: jar: 1.1.4.RELEASE
- org.springframework.social: spring-social-twitter: jar: 1.1.2.RELEASE
- org.springframework.social: spring-social-core: jar: 1.1.4.RELEASE
- org.springframework.social: spring-social-web: jar: 1.1.4.RELEASE
Вот мой упрощенный код:
TwitterTemplateFactory. java :
@Component
public class TwitterTemplateFactory {
@Value("${twitter.consumerKey}")
private String consumerKey = null;
@Value("${twitter.consumerSecret}")
private String consumerSecret = null;
@Value("${twitter.accessToken}")
private String accessToken = null;
@Value("${twitter.accessTokenSecret}")
private String accessTokenSecret = null;
public TimelineOperations timelineOperations() {
return complexTemplate().timelineOperations();
}
public SearchOperations searchOperations() {
return simpleTemplate().searchOperations();
}
private TwitterTemplate simpleTemplate() {
return new TwitterTemplate(consumerKey, consumerSecret);
}
private TwitterTemplate complexTemplate() {
return new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
}
}
MyScheduler. java
@Component
public class MyScheduler {
@Autowired
private TwitterTemplateFactory twitterTemplateFactory;
@Scheduled(fixedDelay=600000L) // invoke every 10 minutes
public void runScheduledTask() {
String query = "from:Wahlrecht_de since:2020-02-20 -filter:retweets";
List<Tweet> tweets = templateFactory.searchOperations().search(new SearchParameters(query)).getTweets();
tweets.stream()
.filter(Tweet::hasMedia) // this does not work - tweet.hasMedia is false :-O!
.forEach( tweet -> { ... } ); // forEach will not be entered because hasMedia is false!
}
}
Скриншоты :
Tweet со встроенным СМИ:
Twe et, когда вы нажимаете на встроенный носитель:
Любая помощь приветствуется.