画像などのURLはツイートの文字数に含まれなくなった

2016年5月に予告されていた。

Twitterは140文字のテキストだけのサービスとして始まり、その後、写真や動画、ハッシュタグ、Vineなども使えるサービスに進化してきました。ここ数ヶ月には、投票機能や、GIF検索、タイムライン上でのPeriscopeの視聴などもできるようにしました。

昔に比べるとツイートでいろいろなことができるようになってはきましたが、さらにもう少し便利にしたいと思います。そこで、これから数ヶ月の間に、140文字の数え方に少し変更を加えます。返信ツイートの@ユーザー名や、写真や動画、GIFや投票などの添付物は140文字に含まれないようになります。

今後の予定:140文字をより活用できるように | Twitter Blogs

2016年9月20日に、日本語版Twitter公式アカウント @TwitterJP からお知らせ。

今年5月にお知らせしたように、写真や動画、GIFや投票などの添付物は140文字に含まれなくなりました。今起きていることを140文字でもっと伝えることができます。

TwitterJPさんのツイート

Twitter API をいままで通り使うと140文字までしか取得できない問題

Twitter API をコールしてツイート情報を取得すると、140文字より長いテキストでは、140文字になるようにカットされてしまう。テキストの末尾に「…」が付いて、その後にツイートのURLが付加される。

対応策としては、

リクエストするエンドポイントにtweet_mode=extendedを追加するといいらしい.

140文字以上のツイートを取得する - Qiita

詳細は公式ドキュメントの Upcoming changes to Tweets | Twitter Developers に書いてある(英語)。

あるいは Twitter / Upcoming changes to Tweets の日本語訳 - Qiita がわかりやすい。

Java のライブラリ Twitter4J の対応状況

残念ながら Twitter4J ではまだ対応されていない (現在の最新版は 4.0.5)。

しかし、対応したパッチを提供してくれている人がいる → Support extended tweets by takke · Pull Request #247 · yusuke/twitter4j · GitHub

なので、今回はこの Support extended tweets 版を使ってみる。

Twitter4J の Support extended tweets 版をビルドする

今回の環境: Linux (Debian jessie) + OpenJDK 7 + Apache Maven 3

OpenJDK 7 のインストール (JREだとビルドできないので注意)。


# aptitude install openjdk-7-jdk

Apache Maven のインストール。


# aptitude install maven

ソースコード (GitHub - takke/twitter4j at support_extended_tweets) を git コマンドでダウンロードする。

お目当てのコードは support_extended_tweets ブランチにある。


$ git clone https://github.com/takke/twitter4j.git

$ cd twitter4j/

$ git checkout -b support_extended_tweets origin/support_extended_tweets

Maven でビルドして JAR ファイルを生成する。


$ cd twitter4j-core

$ mvn clean package -Dmaven.test.skip=true

$ ls target/ | grep core
twitter4j-core-4.0.5-javadoc.jar
twitter4j-core-4.0.5-sources.jar
twitter4j-core-4.0.5.jar

Support extended tweets 版を使ったサンプルコード

Support extended tweets 版では、 ConfigurationBase クラスに setTweetModeExtended メソッドが追加されている。

ツイート140文字以上を取得するには、この setTweetModeExtended メソッドの引数に true をセットする。内部的には Twitter API に tweet_mode=extended が指定されたことになる。

140文字以上のツイート本文を取得するには、いままで通り Status クラスの getText メソッドをコールすれば良い (Twitter API では text ではなく full_text というキーに変更されているが、Twiiter4J の Support extended tweets 版ではいままで通り getText メソッドで取得できるようになっている)。

以下、サンプルコード。


import java.util.Date;
 
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.conf.ConfigurationBuilder;
 
public class TwitterSample {
 
  public static void main(String[] args) throws Exception {
 
    // OAuth 情報
    String consumerKey = "xxxxxxxxxx";
    String consumerSecret = "xxxxxxxxxx";
    String accessToken = "00000-xxxx";
    String accessTokenSecret = "xxxxxxxxxx";
 
    // Twitter オブジェクトを取得
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
      .setOAuthConsumerKey(consumerKey)
      .setOAuthConsumerSecret(consumerSecret)
      .setOAuthAccessToken(accessToken)
      .setOAuthAccessTokenSecret(accessTokenSecret)
      .setTweetModeExtended(true); // tweet_mode=extended
    TwitterFactory factory = new TwitterFactory(cb.build());
    AccessToken token = new AccessToken(accessToken, accessTokenSecret);
    Twitter twitter = factory.getInstance(token);
 
    // ツイートを取得
    ResponseList<Status> statusList = twitter.getUserTimeline();
    for(Status s: statusList){
      long id = s.getId();
      Date created = s.getCreatedAt();
      String text = s.getText();
      System.out.println(id);
      System.out.println(created.toString());
      System.out.println(text);
      System.out.println();
    }
  }
}

twitter4j-core-4.0.5.jar ファイルをクラスパスに通して、サンプルコードを実行すると、ちゃんと画像付きツイートの140文字以上のテキストを取得できた。


779324429461401600
Fri Sep 23 23:19:57 JST 2016
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず abcdefghijklmnopqrstuvwxyz 123456789 https://t.co/UH6n0I4R9o

779324366752329729
Fri Sep 23 23:19:42 JST 2016
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず abcdefghijklmnopqrstuvwxyz 123456789

元のツイートはこんな感じ。

Twitter4J でツイート文字列140文字以上に対応する (tweet_mode=extended)

setTweetModeExtended に true を指定しないと、テキストが140文字になるようにカットされる。

末尾に「…」が付いて、その後にツイートのURLが付く。この例では https://twitter.com/i/web/status/779324429461401600 というツイートの URL が https://t.co/ImuQlrEQTm という短縮URLになって付加される。


779324429461401600
Fri Sep 23 23:19:57 JST 2016
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず abcdefghijk… https://t.co/ImuQlrEQTm

779324366752329729
Fri Sep 23 23:19:42 JST 2016
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず abcdefghijklmnopqrstuvwxyz 123456789

はやく tweet_mode=extended 対応コードが Twitter4J 本家に取り込まれますように (-人-) ナムー

tags: java twitter twitter4j webapi

Posted by NI-Lab. (@nilab)