TwitterStreamでつぶやきを収集するとつぶやき内のURLがへんになってしまう

1,054 views
Skip to first unread message

ulzii nomingerel

unread,
Mar 7, 2012, 11:59:08 PM3/7/12
to twitt...@googlegroups.com
こんにちは。
ulziiと申します。

現在twitter4jのストリーミングのfilter()を使用して、
指定してユーザのつぶやきをリアルタイムで収集しています。
機能は正常に動いていますが、ユーザがURLを含めたつぶやきをすると
URLの部分がへんに変わっています。その時は例外は起きていません。
(※でも、WEB上(twitter.com)では正常に表示されています。)

例えば)ユーザがhttp://google.comとつぶやいた時に、ストリーミングAPI
でとれたテキストは
http://t.co/BasgikzDとなっています。

開発環境:
twitter4j-core-android-2.2.5.jar
twitter4j-stream-android-2.2.5.jar
android 2.2 API 8
JDK:1.6.0.22
Eclipse SDK:Version: 3.6.2

ソースコード:
myUserStreamAdapter = new MyUserStreamAdapter();

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey("");
builder.setOAuthConsumerSecret("");
builder.setOAuthAccessToken("");
builder.setOAuthAccessTokenSecret("");
Configuration conf = builder.build();
TwitterStreamFactory twitStreamFactory = new TwitterStreamFactory(conf);
TwitterStream twitStream = twitStreamFactory.getInstance();
twitStream.addListener(myUserStreamAdapter);
long[] listOfUserId = {1L};
FilterQuery filterQuery = new FilterQuery();
filterQuery.follow(listOfUserId);
twitStream.filter(filterQuery);

....

class MyUserStreamAdapter extends UserStreamAdapter {

@Override
public void onStatus(Status status) {
super.onStatus(status);
Log.v("onStatus", status.getText());
}
@Override
public void onException(Exception e) {
e.printStackTrace();
}
}


この問題をどう言う風に解決するかを教えて頂きないでしょうか。


以上です。

Yusuke Yamamoto

unread,
Mar 8, 2012, 12:14:38 AM3/8/12
to twitt...@googlegroups.com
こんにちは。山本です。

URLがt.coで短縮されることを指しておりますでしょうか?
でしたらこれは仕様です。
https://dev.twitter.com/docs/tco-url-wrapper

ストリーミングAPI、REST APIに関わらず短縮されます。
表示用のURLは status.getURLEntities().getExpandedURL() で取得できます。
# 実際のリンク先は t.co をそのまま使ってください

以上よろしくお願い致します。

> --
> Twitter4J の最新情報をフォロー: http://twitter.com/t4j_news
> 現在のバージョン - 安定: 2.2.5, 開発中: 2.2.6-SNAPSHOT
> http://twitter4j.org/jira/secure/IssueNavigator.jspa?requestId=10030
> バグトラッキング: http://twitter4j.org/jira/browse/TFJ
>
> このメールは次の Google グループの参加者に送られています: Twitter4J J
> このグループにメールで投稿: twitt...@googlegroups.com
> このグループから退会する: http://groups.google.com/group/twitter4j-j?hl=ja

ulzii nomingerel

unread,
Mar 8, 2012, 1:15:37 AM3/8/12
to twitt...@googlegroups.com
山本さん

急速なお返事有難うございます。

下記は納得しました。status.getURLEntities()[x].getExpandedURL() で元の
URLを取得できました。
でも、ぶやき中からURLsのみをとってしまいますね。
例えば)
◆ユーザが以下をつぶやいた。
「私は http://google.com, http://twitter.com が好きです。」

◆自分のアプリ上に表示されるテキスト
「私は http://t.co/BasgikzD, http://t.co/FrtgikzD が好きです。」

◆status.getURLEntities()[X].getExpandedURL() で取得するテキスト(URL
以外のつぶやきはとれない)
status.getURLEntities()[0].getExpandedURL() :http://google.com
status.getURLEntities()[1].getExpandedURL() :http://twitter.com

◆【やりたいこと】以下のように表示したい
「私は http://google.com, http://twitter.com が好きです。」

ユーザが打ったテキストをそのまま表示するのにするものでしょうか。

tweetのテキストを引数で渡すとURLの部分をparseして、それ以外テキストはそ
のまま返してくれる関数がありませんか。

Yusuke Yamamoto

unread,
Mar 8, 2012, 1:19:00 AM3/8/12
to twitt...@googlegroups.com
> tweetのテキストを引数で渡すとURLの部分をparseして、それ以外テキストはそ
> のまま返してくれる関数がありませんか。
やりましょう!(急速にはできませんが)
http://jira.twitter4j.org/browse/TFJ-654

ulzii nomingerel

unread,
Mar 8, 2012, 2:32:09 AM3/8/12
to twitt...@googlegroups.com
山本さん

そういう関数はないということでしょうか。

御協力ありがとうございました。

Mocel

unread,
Mar 8, 2012, 9:00:01 PM3/8/12
to twitt...@googlegroups.com
こんにちは。

「表示用」という意味なら URLEntity#getDisplayURL() のほうになるのではないでしょうか。
getExpandedURL() は「短縮前の URL」が得られるメソッドで、その以外の目的はないような。


> ※でも、WEB上(twitter.com)では正常に表示されています。

Twitter の Web サイトでは「一定の文字列長を越えた URL は省略されて短くなる」という仕様がありますので、「Web 上では正常に表示されてる」ということもありえないと思います。
この省略された URL(短縮ではない)が取得できるメソッドが getDisplayURL() です。
まとめると以下のようになります。

URLEntity#getURL() : 短縮された URL (http://t.co/...) を指す URL オブジェクト
URLEntity#getDisplayURL()  : 省略された URL(example.com) の String オブジェクト
URLEntity#getExpandedURL() : 元の URL(http://example.com/) を指す URL オブジェクト

注意点としては、t.co 短縮 URL が導入される以前のツイートでは getDisplayURL() や getExpandedURL() が null になっている場合があります。
昔のツイートが RT されて最新のものに混ざることで今でもじゅうぶんに起こりうる問題ですので、URL を含むツイートでこれらのメソッドが常に使えると思い込まないよう気を付けてください。


2012年3月8日木曜日14時14分38秒 UTC+9 山本裕介:

ulzii nomingerel

unread,
Mar 13, 2012, 1:21:58 AM3/13/12
to twitt...@googlegroups.com
Mocelさん

こんにちは。

最近忙しくてすみませんでした。

お返事は本当にありがとうございました。
勉強になりました。
t.co 短縮 URLから元のURLを取得し表示したいが、
今回時間がないため、そのまま使うことにしました。

後で余裕がある時にリトレイして見ようと思います。

以上です。

> 例えば)ユーザがhttp://google.comと つぶやいた時に、ストリーミングAPI

Reply all
Reply to author
Forward
0 new messages