Spring-Social-Twitter hasMedia возвращает false, хотя к нему прикреплена картинка - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать приложение для твиттера, которое ищет твиты и загружает прикрепленные файлы. Но что меня удивляет, так это: некоторые твиты, которые , очевидно, имеют прикрепленное изображение, не имеют изображения, прикрепленного в соответствии с API Twitter .
tweet.hasMedia(). false и tweet.entities.media - это null.

Вот вывод из моего отладчика в IDEA:

IDEA output tweet with allegedly no media

Твит Я говорю об этом: Tweet 1230401137754484737 от @ Wahlrecht_de . Когда вы нажимаете на картинку, открывается твит 1230401137754484737 , где вы можете увидеть картинку из твита, которая предположительно не имеет медиа .

Как получится ? Это какая-то скрытая функция или недостаток в spring-social-twitter-API?

Я пробовал другие твиты, и там hasMedia() возвращается, как и ожидалось true. Например Tweet 1230756978533650432 от @ Marvin400 и многие другие. В этом случае выходные данные отладчика ясно показывают, что есть подключенный носитель:

IDEA debugger output for tweet with media

Одна вещь, которую я узнал, что этот специальный твит имеет «источник» «веб-клиента 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 со встроенным СМИ: Tweet with allegedly no media Screenshot

Twe et, когда вы нажимаете на встроенный носитель: Tweet with allegedly no media Screenshot (clicked on image)

Любая помощь приветствуется.

...