OSDN Git Service

33aafc744085e1fa7916b8b15478196afc1bb7cb
[nt-manager/nt-manager.git] / src / twitter / manage / TweetUserStream.java
1 package twitter.manage;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.logging.Logger;\r
5 \r
6 import twitter.action.streaming.TweetStreamingListener;\r
7 import twitter4j.ConnectionLifeCycleListener;\r
8 import twitter4j.DirectMessage;\r
9 import twitter4j.Status;\r
10 import twitter4j.TwitterStream;\r
11 import twitter4j.TwitterStreamFactory;\r
12 import twitter4j.User;\r
13 import twitter4j.UserStreamAdapter;\r
14 import twitter4j.auth.AccessToken;\r
15 \r
16 /**\r
17  * ユーザにかかわるツイートを取得\r
18  * @author nishio\r
19  *\r
20  */\r
21 public class TweetUserStream extends UserStreamAdapter{\r
22         //streaming\r
23         private TwitterStream twitterStream = null;\r
24         //timeline監視listener\r
25         private TweetStreamingListener timelineListener = null;\r
26         //mention監視\r
27         private TweetStreamingListener mentionListener = null;\r
28         //direct message監視\r
29         private TweetStreamingListener directMessageListener = null;\r
30         //mention通知\r
31         private TweetNotifyManager mentionNotifyManager = null;\r
32         //directmessage通知\r
33         private TweetNotifyManager directMessageNotifyManager = null;\r
34         //fav通知を行うかどうか\r
35         private TweetFavNotifyManager favNotifyManager = null;\r
36         //ログインユーザ名\r
37         private String loginUsername = null;\r
38         //tweet manager\r
39         private TweetManager tweetManager = null;\r
40 \r
41         /**\r
42          *\r
43          * @param consumerKey\r
44          * @param consumerSecret\r
45          * @param ac アクセストークン\r
46          * @param tweetManager\r
47          */\r
48         public TweetUserStream(String consumerKey, String consumerSecret, AccessToken ac, TweetManager tweetManager) {\r
49                 this.tweetManager = tweetManager;\r
50                 this.twitterStream = new TwitterStreamFactory().getInstance();\r
51                 this.twitterStream.setOAuthConsumer(consumerKey, consumerSecret);\r
52                 this.twitterStream.setOAuthAccessToken(ac);\r
53                 this.twitterStream.addListener(this);\r
54         }\r
55 \r
56         /**\r
57          * streaming開始\r
58          */\r
59         public void start() {\r
60             this.twitterStream.user();\r
61         }\r
62 \r
63         /**\r
64          * streaming停止\r
65          */\r
66         public void stop() {\r
67             this.twitterStream.cleanUp();\r
68         }\r
69 \r
70         /**\r
71          * コネクションが接続されたときに呼び出される\r
72          * @param listener\r
73          */\r
74         public void addConnectionLifeCycleListener(ConnectionLifeCycleListener listener) {\r
75             this.twitterStream.addConnectionLifeCycleListener(listener);\r
76         }\r
77 \r
78         /**\r
79          * タイムライン監視\r
80          * @param timelineListener\r
81          */\r
82         public void setTimelineListener(TweetStreamingListener timelineListener) {\r
83                 this.timelineListener = timelineListener;\r
84         }\r
85 \r
86         /**\r
87          * メンション監視\r
88          * @param mentionListener\r
89          */\r
90         public void setMentionListener(TweetStreamingListener mentionListener) {\r
91                 this.mentionListener = mentionListener;\r
92                 loginUsername = tweetManager.getLoginUserScreenName();\r
93         }\r
94 \r
95         /**\r
96          * mention通知バー\r
97          * @param notifyManager nullならmentionでは通知しない\r
98          */\r
99         public void setMentionNotifyManager(TweetNotifyManager notifyManager) {\r
100                 this.mentionNotifyManager = notifyManager;\r
101         }\r
102 \r
103         /**\r
104          * お気に入り登録通知\r
105          */\r
106         public void setFavNotifyManager(TweetFavNotifyManager notifyManager) {\r
107             this.favNotifyManager = notifyManager;\r
108         }\r
109 \r
110         /**\r
111          * direct message通知バー\r
112          * @param notifyManager\r
113          */\r
114         public void setDirectMessageNotifyManager(TweetNotifyManager notifyManager) {\r
115                 this.directMessageNotifyManager = notifyManager;\r
116         }\r
117 \r
118         /**\r
119          * ダイレクトメッセージ監視\r
120          * @param directMessageListener\r
121          */\r
122         public void setDirectMessageListener(TweetStreamingListener directMessageListener) {\r
123                 this.directMessageListener = directMessageListener;\r
124         }\r
125 \r
126 \r
127         @Override\r
128         public void onStatus(Status status) {\r
129                 /*if( status.isRetweetedByMe() ) {\r
130                         System.out.println( status.getUser().getScreenName() + " Retweet my message");\r
131                 }\r
132                 System.out.println("@" + status.getUser().getScreenName() + " - "\r
133                                 + status.getText());*/\r
134 \r
135                 //タイムライン監視\r
136                 if( this.timelineListener != null ) {\r
137                         this.timelineListener.update(status);\r
138                         this.tweetManager.setSinceTweetID(status.getId());\r
139                 }\r
140                 //mention監視\r
141                 if( this.mentionListener != null ) {\r
142                         if( loginUsername != null && status.getText().contains( loginUsername ) && !status.isRetweet() ) {\r
143                                 this.mentionListener.update(status);\r
144                                 this.tweetManager.setSinceMentionID(status.getId());\r
145                                 //mentionのバルーン通知\r
146                                 if( mentionNotifyManager != null ) {\r
147                                         mentionNotifyManager.showNotifyMessage( status );\r
148                                 }\r
149                         }\r
150                 }\r
151         }\r
152 \r
153         @Override\r
154         public void onException(Exception ex) {\r
155                 ex.printStackTrace();\r
156         }\r
157 \r
158         /**\r
159          * ダイレクトメッセージの通知\r
160          * @param directmessage\r
161          */\r
162         @Override\r
163         public void onDirectMessage(DirectMessage directmessage) {\r
164                 if( this.directMessageListener != null ) {\r
165                         User user = directmessage.getSender();\r
166                         DirectMessageUserStatus status = new DirectMessageUserStatus(\r
167                                         directmessage, user);\r
168                         this.directMessageListener.update(status);\r
169                         if( directMessageNotifyManager != null ) {\r
170                                 directMessageNotifyManager.showNotifyMessage(status);\r
171                         }\r
172                 }\r
173         }\r
174 \r
175         /**\r
176          * お気に入り登録通知\r
177          * @param source\r
178          * @param target\r
179          * @param favoritedStatus\r
180          */\r
181         @Override\r
182         public void onFavorite(User source, User target, Status favoritedStatus) {\r
183             if( favNotifyManager != null ) {\r
184                 if( target.getScreenName().equals(this.loginUsername) ) {\r
185                         favNotifyManager.showNotifyMessage(source, target, favoritedStatus);\r
186                 }\r
187             }\r
188         }\r
189 \r
190         @Override\r
191         public void onFriendList(long[] friendIds) {\r
192                 /*String tempString = "FriendIds(Up to 2000): \n";\r
193                 int max = 2000;\r
194                 int count = friendIds.length;\r
195 \r
196                 if (count > 0) {\r
197                         if (count < max) {\r
198                                 max = count;\r
199                         }\r
200 \r
201                         for (int i = 0; i < max; i++) {\r
202                                 tempString += friendIds[i] + " ";\r
203                         }\r
204                         System.out.println(tempString);\r
205                 }*/\r
206         }\r
207 }\r