From 55ca621e4d0b27a1f4d3ec0e55bf11d2d82e507c Mon Sep 17 00:00:00 2001 From: spark_xp Date: Fri, 26 Aug 2011 18:36:35 +0000 Subject: [PATCH] =?utf8?q?=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=9F=E3=83=A6?= =?utf8?q?=E3=83=BC=E3=82=B6=E3=81=AE=E6=83=85=E5=A0=B1=E5=8F=96=E5=BE=97?= =?utf8?q?=E3=81=ABStreaming=20API=E3=82=92=E5=88=A9=E7=94=A8=E3=81=99?= =?utf8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=20#26115?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.sourceforge.jp/svnroot/nt-manager/NishioTweetManager/trunk@177 d8c9ecd3-d47d-4367-8645-de82c00e513f --- src/twitter/action/TweetUserTimelineGetter.java | 16 +++++-- src/twitter/manage/TweetManager.java | 18 ++++++++ src/twitter/manage/TweetSearchStream.java | 55 ++++++++++++++++++++++++- src/twitter/manage/TweetUserStreamManager.java | 26 ++++++++++++ 4 files changed, 111 insertions(+), 4 deletions(-) diff --git a/src/twitter/action/TweetUserTimelineGetter.java b/src/twitter/action/TweetUserTimelineGetter.java index a422bb9..f3d9f58 100644 --- a/src/twitter/action/TweetUserTimelineGetter.java +++ b/src/twitter/action/TweetUserTimelineGetter.java @@ -24,6 +24,8 @@ public class TweetUserTimelineGetter implements TweetGetter{ private TweetManager tweetManager; //検索したいユーザ private String screenName; + //検索したいユーザid(streaming api利用時) + private long userid = 0; //sinceid private long sinceID; @@ -67,6 +69,12 @@ public class TweetUserTimelineGetter implements TweetGetter{ */ @Override public List getNewTweetData() { + //streaming利用時のsinceidを取得 + long streamingSinceID = tweetManager.getStreamManager().getUserLastUpdateID(userid); + if( streamingSinceID > 0 ) { + sinceID = streamingSinceID; + } + List status = null; try { status = tweetManager.getNewUserTimeline(screenName, sinceID); @@ -85,15 +93,17 @@ public class TweetUserTimelineGetter implements TweetGetter{ @Override public void setUpdateListener(TweetStreamingListener listener) { - // TODO 自動生成されたメソッド・スタブ - + this.userid = tweetManager.getUserID(this.screenName); + if( this.userid != 0 && listener != null ) { + tweetManager.getStreamManager().setUserListener(userid, listener); + } } /** * streaming api有効時のアップデートを受け取るlistenerを削除 */ public void stopUpdateListener() { - //TODO + tweetManager.getStreamManager().stopUserListener(userid); } } \ No newline at end of file diff --git a/src/twitter/manage/TweetManager.java b/src/twitter/manage/TweetManager.java index 3be0aac..57d52fb 100644 --- a/src/twitter/manage/TweetManager.java +++ b/src/twitter/manage/TweetManager.java @@ -1357,4 +1357,22 @@ public class TweetManager { return username; } + /** + * 指定したユーザ名からユーザidを取得する + * @param screenName + * @return 取得に失敗した場合は0を返す, 成功した場合はユーザidを返す + */ + public long getUserID(String screenName) { + long id = 0; + try { + User u = this.twitter.showUser(screenName); + if( u != null ) { + id = u.getId(); + } + } catch (TwitterException e) { + e.printStackTrace(); + } + return id; + } + } diff --git a/src/twitter/manage/TweetSearchStream.java b/src/twitter/manage/TweetSearchStream.java index 1a4286c..c843110 100644 --- a/src/twitter/manage/TweetSearchStream.java +++ b/src/twitter/manage/TweetSearchStream.java @@ -69,6 +69,7 @@ public class TweetSearchStream extends StatusAdapter implements Runnable{ /** * 指定した単語を検索対象に加える * @param word + * @param listener */ public void addSearchWord(String word, TweetStreamingListener listener) { listeners.put(word, listener); @@ -84,14 +85,39 @@ public class TweetSearchStream extends StatusAdapter implements Runnable{ updateFilter(); } - public void addUserSearch(Long userid, TweetStreamingListener listener) { + /** + * 指定したユーザを検索対象に加える + * @param userid + * @param listener + */ + public void addSearchUser(Long userid, TweetStreamingListener listener) { + userListener.put(userid, listener); + updateFilter(); + } + /** + * 指定したユーザを検索対象から外す + * @param userid + */ + public void removeSearchUser(Long userid) { + userListener.remove(userid); + updateFilter(); } /** * filterの更新 */ private void updateFilter() { + //指定したユーザの情報を取得するようにする + Long[] users = userListener.keySet().toArray(new Long[0]); + if( users != null ) { + long[] usersLong = new long[users.length]; + for(int i=0; i < users.length; i++) { + usersLong[i] = users[i]; + } + filter.follow(usersLong); + } + //指定したワードの情報を取得するようにする String[] words = listeners.keySet().toArray(new String[0]); filter.track(words); try { @@ -110,6 +136,7 @@ public class TweetSearchStream extends StatusAdapter implements Runnable{ */ @Override public void onStatus(Status status) { + //検索ワード情報振り分け Set keys = listeners.keySet(); synchronized (listeners) { for(String word : keys) { @@ -121,6 +148,19 @@ public class TweetSearchStream extends StatusAdapter implements Runnable{ } } } + + //ユーザ情報振り分け + Set userKeys = userListener.keySet(); + synchronized(userListener) { + for(long id : userKeys) { + if( status.getUser().getId() == id ) { + TweetStreamingListener listener = userListener.get(id); + listener.update(status); + //最終更新id + userLastUpdate.put(id, status.getId()); + } + } + } } /** @@ -137,6 +177,19 @@ public class TweetSearchStream extends StatusAdapter implements Runnable{ } /** + * ユーザの最終更新ステータスidの取得 + * @param userid + * @return + */ + public long getUserLastUpdateID(long userid) { + Long id = userLastUpdate.get(userid); + if( id == null ) { + return 0; + } + return id; + } + + /** * */ @Override diff --git a/src/twitter/manage/TweetUserStreamManager.java b/src/twitter/manage/TweetUserStreamManager.java index fc1e221..9d7ba9b 100644 --- a/src/twitter/manage/TweetUserStreamManager.java +++ b/src/twitter/manage/TweetUserStreamManager.java @@ -103,6 +103,23 @@ public class TweetUserStreamManager extends UserStreamAdapter { } /** + * 指定したユーザを監視するリスナー + * @param userid + * @param listener + */ + public void setUserListener(long userid, TweetStreamingListener listener) { + searchStream.addSearchUser(userid, listener); + } + + /** + * 指定したユーザを監視するリスナーを停止 + * @param userid + */ + public void stopUserListener(long userid) { + searchStream.removeSearchUser(userid); + } + + /** * 指定したワードの最終更新status IDを取得 * @param word * @return @@ -110,4 +127,13 @@ public class TweetUserStreamManager extends UserStreamAdapter { public long getSearchLastUpdateID(String word) { return searchStream.getLastUpdateID(word); } + + /** + * 指定したユーザの最終更新status idを取得 + * @param userid + * @return + */ + public long getUserLastUpdateID(long userid) { + return searchStream.getUserLastUpdateID(userid); + } } -- 2.11.0