画像などの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
元のツイートはこんな感じ。
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 本家に取り込まれますように (-人-) ナムー
-
ref.
- Upcoming changes to Tweets | Twitter Developers
- Twitter4J - A Java library for the Twitter API
- Support extended tweets by takke · Pull Request #247 · yusuke/twitter4j · GitHub
tags: java twitter twitter4j webapi
Posted by NI-Lab. (@nilab)