LoginSignup
5
7

More than 5 years have passed since last update.

Twitter4JのExtendedMediaEntity廃止について

Last updated at Posted at 2016-09-28

概要

Twitter4JのExtendedMediaEntityとは、extended_entities.mediaを表現するオブジェクトで、これが2016年9月現在、Twitterの度重なる仕様変更でいろんな面で問題になっているので、問題点を整理し、解決策をまとめておく。

問題点

TwitterのGIF動画・複数画像対応時に Tweet の JSON (Twitter4JのStatusオブジェクト) に extended_entities.media が追加された際に、新たに EntendedMediaEntity を追加した(Multiple image support by takke · Pull Request #156 · yusuke/twitter4j)。

その後のTwitterの仕様変更により、この構成が破綻しつつある。

  1. [2016年3月] DirectMessageの動画対応時に(extended_entities.media ではなく)entities.mediavideo_info が追加された
  2. [2016年9月] 140文字拡張対応で、Streamingの140文字超ツイートに extended_tweet が追加されたが、GIF動画・動画・複数画像は (extended_tweet.extended_entities ではなく) extended_tweet.entities に載るようになった

以下、それぞれ詳しくみていく。

問題点1. DMの動画対応時に entities.mediavideo_info が追加された

video_info は現時点で ExtendedMediaEntity がパースする実装になっているため DM の動画対応ができない。

そこで、support "video_info" for direct messages by takke · Pull Request #234 · yusuke/twitter4j のPRで video_info があれば ExtendedMediaEntity オブジェクトを作成するようにしているが、これはいささか奇妙な実装で、アプリ側で動画を判定する際に instanceof ExtendedMediaEntity をチェックする必要があるなど、非常に使いづらい。

問題点2. Streamingの140文字超ツイートに extended_tweet.extended_entities が含まれない

Streamingの140文字超ツイートには互換性を考慮して extended_tweet が追加されたが、GIF動画・動画・複数画像は extended_tweet.extended_entities ではなく extended_tweet.entities に載るようになった。

互換性の観点から Support extended tweets by takke · Pull Request #247 · yusuke/twitter4j の PR では extended_tweet.full_textextended_tweet.entitiesStatus.text などにマージする形にしたが、media については MediaEntity としてマージされるようになった。

従って、下記2点の問題が生まれた。

解決策

2つの PR に分けて行う。

現状、support "video_info" for direct messages by takke · Pull Request #234 · yusuke/twitter4j のPRで DirectMessage の video_info 対応を行っていますが、これを破棄し、下記の2段階で修正を行う。

  1. MediaEntityExtendedMediaEntity 相当にする
  2. ExtendedMediaEntity を廃止する
    • extended_entities.mediaentities.media すなわち MediaEntity に merge する
    • 問題点2(A) が解決する
    • PR #250 で修正した。
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7