• R/O
  • SSH
  • HTTPS

nt-manager: Commit


Commit MetaInfo

Revision177 (tree)
Time2011-08-27 03:36:35
Authorspark_xp

Log Message

指定したユーザの情報取得にStreaming APIを利用するようにした #26115

Change Summary

Incremental Difference

--- NishioTweetManager/trunk/src/twitter/manage/TweetManager.java (revision 176)
+++ NishioTweetManager/trunk/src/twitter/manage/TweetManager.java (revision 177)
@@ -1357,4 +1357,22 @@
13571357 return username;
13581358 }
13591359
1360+ /**
1361+ * 指定したユーザ名からユーザidを取得する
1362+ * @param screenName
1363+ * @return 取得に失敗した場合は0を返す, 成功した場合はユーザidを返す
1364+ */
1365+ public long getUserID(String screenName) {
1366+ long id = 0;
1367+ try {
1368+ User u = this.twitter.showUser(screenName);
1369+ if( u != null ) {
1370+ id = u.getId();
1371+ }
1372+ } catch (TwitterException e) {
1373+ e.printStackTrace();
1374+ }
1375+ return id;
1376+ }
1377+
13601378 }
--- NishioTweetManager/trunk/src/twitter/manage/TweetSearchStream.java (revision 176)
+++ NishioTweetManager/trunk/src/twitter/manage/TweetSearchStream.java (revision 177)
@@ -69,6 +69,7 @@
6969 /**
7070 * 指定した単語を検索対象に加える
7171 * @param word
72+ * @param listener
7273 */
7374 public void addSearchWord(String word, TweetStreamingListener listener) {
7475 listeners.put(word, listener);
@@ -84,8 +85,23 @@
8485 updateFilter();
8586 }
8687
87- public void addUserSearch(Long userid, TweetStreamingListener listener) {
88+ /**
89+ * 指定したユーザを検索対象に加える
90+ * @param userid
91+ * @param listener
92+ */
93+ public void addSearchUser(Long userid, TweetStreamingListener listener) {
94+ userListener.put(userid, listener);
95+ updateFilter();
96+ }
8897
98+ /**
99+ * 指定したユーザを検索対象から外す
100+ * @param userid
101+ */
102+ public void removeSearchUser(Long userid) {
103+ userListener.remove(userid);
104+ updateFilter();
89105 }
90106
91107 /**
@@ -92,6 +108,16 @@
92108 * filterの更新
93109 */
94110 private void updateFilter() {
111+ //指定したユーザの情報を取得するようにする
112+ Long[] users = userListener.keySet().toArray(new Long[0]);
113+ if( users != null ) {
114+ long[] usersLong = new long[users.length];
115+ for(int i=0; i < users.length; i++) {
116+ usersLong[i] = users[i];
117+ }
118+ filter.follow(usersLong);
119+ }
120+ //指定したワードの情報を取得するようにする
95121 String[] words = listeners.keySet().toArray(new String[0]);
96122 filter.track(words);
97123 try {
@@ -110,6 +136,7 @@
110136 */
111137 @Override
112138 public void onStatus(Status status) {
139+ //検索ワード情報振り分け
113140 Set<String> keys = listeners.keySet();
114141 synchronized (listeners) {
115142 for(String word : keys) {
@@ -121,6 +148,19 @@
121148 }
122149 }
123150 }
151+
152+ //ユーザ情報振り分け
153+ Set<Long> userKeys = userListener.keySet();
154+ synchronized(userListener) {
155+ for(long id : userKeys) {
156+ if( status.getUser().getId() == id ) {
157+ TweetStreamingListener listener = userListener.get(id);
158+ listener.update(status);
159+ //最終更新id
160+ userLastUpdate.put(id, status.getId());
161+ }
162+ }
163+ }
124164 }
125165
126166 /**
@@ -137,6 +177,19 @@
137177 }
138178
139179 /**
180+ * ユーザの最終更新ステータスidの取得
181+ * @param userid
182+ * @return
183+ */
184+ public long getUserLastUpdateID(long userid) {
185+ Long id = userLastUpdate.get(userid);
186+ if( id == null ) {
187+ return 0;
188+ }
189+ return id;
190+ }
191+
192+ /**
140193 *
141194 */
142195 @Override
--- NishioTweetManager/trunk/src/twitter/manage/TweetUserStreamManager.java (revision 176)
+++ NishioTweetManager/trunk/src/twitter/manage/TweetUserStreamManager.java (revision 177)
@@ -103,6 +103,23 @@
103103 }
104104
105105 /**
106+ * 指定したユーザを監視するリスナー
107+ * @param userid
108+ * @param listener
109+ */
110+ public void setUserListener(long userid, TweetStreamingListener listener) {
111+ searchStream.addSearchUser(userid, listener);
112+ }
113+
114+ /**
115+ * 指定したユーザを監視するリスナーを停止
116+ * @param userid
117+ */
118+ public void stopUserListener(long userid) {
119+ searchStream.removeSearchUser(userid);
120+ }
121+
122+ /**
106123 * 指定したワードの最終更新status IDを取得
107124 * @param word
108125 * @return
@@ -110,4 +127,13 @@
110127 public long getSearchLastUpdateID(String word) {
111128 return searchStream.getLastUpdateID(word);
112129 }
130+
131+ /**
132+ * 指定したユーザの最終更新status idを取得
133+ * @param userid
134+ * @return
135+ */
136+ public long getUserLastUpdateID(long userid) {
137+ return searchStream.getUserLastUpdateID(userid);
138+ }
113139 }
--- NishioTweetManager/trunk/src/twitter/action/TweetUserTimelineGetter.java (revision 176)
+++ NishioTweetManager/trunk/src/twitter/action/TweetUserTimelineGetter.java (revision 177)
@@ -24,6 +24,8 @@
2424 private TweetManager tweetManager;
2525 //検索したいユーザ
2626 private String screenName;
27+ //検索したいユーザid(streaming api利用時)
28+ private long userid = 0;
2729 //sinceid
2830 private long sinceID;
2931
@@ -67,6 +69,12 @@
6769 */
6870 @Override
6971 public List<Status> getNewTweetData() {
72+ //streaming利用時のsinceidを取得
73+ long streamingSinceID = tweetManager.getStreamManager().getUserLastUpdateID(userid);
74+ if( streamingSinceID > 0 ) {
75+ sinceID = streamingSinceID;
76+ }
77+
7078 List<Status> status = null;
7179 try {
7280 status = tweetManager.getNewUserTimeline(screenName, sinceID);
@@ -85,8 +93,10 @@
8593
8694 @Override
8795 public void setUpdateListener(TweetStreamingListener listener) {
88- // TODO 自動生成されたメソッド・スタブ
89-
96+ this.userid = tweetManager.getUserID(this.screenName);
97+ if( this.userid != 0 && listener != null ) {
98+ tweetManager.getStreamManager().setUserListener(userid, listener);
99+ }
90100 }
91101
92102 /**
@@ -93,7 +103,7 @@
93103 * streaming api有効時のアップデートを受け取るlistenerを削除
94104 */
95105 public void stopUpdateListener() {
96- //TODO
106+ tweetManager.getStreamManager().stopUserListener(userid);
97107 }
98108
99109 }
\ No newline at end of file
Show on old repository browser