1 package twitter.manage;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.net.MalformedURLException;
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.Collections;
13 import java.util.Date;
14 import java.util.HashMap;
15 import java.util.List;
17 import java.util.Properties;
18 import java.util.logging.Level;
19 import java.util.logging.Logger;
21 import twitter.gui.action.TweetMainAction;
22 import twitter4j.Annotations;
23 import twitter4j.DirectMessage;
24 import twitter4j.GeoLocation;
25 import twitter4j.HashtagEntity;
27 import twitter4j.MediaEntity;
28 import twitter4j.PagableResponseList;
29 import twitter4j.Paging;
30 import twitter4j.Place;
31 import twitter4j.Query;
32 import twitter4j.QueryResult;
33 import twitter4j.RateLimitStatus;
34 import twitter4j.ResponseList;
35 import twitter4j.Status;
36 import twitter4j.StatusUpdate;
37 import twitter4j.Tweet;
38 import twitter4j.Twitter;
39 import twitter4j.TwitterException;
40 import twitter4j.TwitterFactory;
41 import twitter4j.TwitterStream;
42 import twitter4j.TwitterStreamFactory;
43 import twitter4j.URLEntity;
44 import twitter4j.User;
45 import twitter4j.UserList;
46 import twitter4j.UserMentionEntity;
47 import twitter4j.conf.Configuration;
48 import twitter4j.conf.ConfigurationBuilder;
49 import twitter4j.auth.*;
51 public class TweetManager {
53 private Twitter twitter = null;
55 private TweetUserStreamManager streamManager = null;
56 // クライアントのConsumer Key
57 private static final String CONSUMER_KEY = "tbo5erit2M2ZzN6n8tEYcA";
58 // クライアントのConsumer Secret 外部に漏れてはいけない
59 private static final String CONSUMER_SECRET = "tODurbdySLYU1pKjtB3MQTDRBGy562dHzVf7d62mm8";
61 private String accessToken = null;// "";
62 // secretToken 外部に漏れてはいけない
63 private String secretToken = null;// "";
65 private static final String PROPERTIES_DIRECTORY = TweetConfiguration.PROPERTIES_DIRECTORY;
67 private static final String TWEET_INFO_FILENAME = TweetConfiguration.TWEET_INFO_FILENAME;
69 private static final String ACCOUNT_INFORMATION_FILENAME = TweetConfiguration.ACCOUNT_INFORMATION_FILENAME;
71 private final int MAX_TWEET_NUM = 200;
73 private long sinceTweetID = 0;
74 // 前回取得したmentionのtweetID
75 private long sinceMentionID = 0;
76 // 前回取得したsendDirectMessageの情報
77 private long sinceSendDirectMessageID = 0;
78 // 前回取得したdirectMessageの情報
79 private long sinceDirectMessageID = 0;
81 private Properties property = null;
83 private Properties accountProperty = null;
85 // following IDリスト keyはユーザ名, valueはユーザがfollowingしているid
86 private Map<String, List<Long>> followingUserIDList = new HashMap<String, List<Long>>();
88 private Map<String, List<Long>> followerUserIDList = new HashMap<String, List<Long>>();
90 public TweetManager() {
97 * @throws FileNotFoundException
99 public void loadProperties() throws FileNotFoundException, IOException {
100 if (property == null) {
101 this.property = new Properties();
103 property.load(new FileInputStream("./" + PROPERTIES_DIRECTORY + "/"
104 + TWEET_INFO_FILENAME));
106 String sti = this.property.getProperty("sinceTweetID");
108 * String smi = this.property.getProperty("sinceMentionID"); String
109 * ssdmi = this.property.getProperty("sinceSendDirectMessageID"); String
110 * sdmi = this.property.getProperty("sinceDirectMessageID");
114 this.sinceTweetID = Long.parseLong(sti);
116 * this.sinceMentionID = Long.parseLong(smi);
117 * this.sinceSendDirectMessageID = Long.parseLong(ssdmi);
118 * this.sinceDirectMessageID = Long.parseLong(sdmi);
120 } catch (NumberFormatException e) {
128 * @throws IOException
130 public void saveProperties() throws IOException {
132 File logDir = new File("./" + PROPERTIES_DIRECTORY);
133 if (!logDir.exists()) {
134 // ディレクトリが存在しないので作成する
135 if (logDir.mkdir() == false) {
136 throw new IOException(PROPERTIES_DIRECTORY
137 + "ディレクトリを作成できませんでした.");
140 if (property == null) {
141 this.property = new Properties();
144 this.property.setProperty("sinceTweetID", sinceTweetID + "");
146 * this.property.setProperty("sinceMentionID", sinceMentionID + "");
147 * this.property.setProperty("sinceSendDirectMessageID",
148 * sinceSendDirectMessageID + "");
149 * this.property.setProperty("sinceDirectMessageID",
150 * sinceDirectMessageID + "");
153 property.store(new FileOutputStream("./" + PROPERTIES_DIRECTORY + "/"
154 + TWEET_INFO_FILENAME), null);
160 * @throws FileNotFoundException
161 * @throws IOException
163 public void loadAccountProperties() throws FileNotFoundException,
165 if (accountProperty == null) {
166 this.accountProperty = new Properties();
168 accountProperty.load(new FileInputStream("./" + PROPERTIES_DIRECTORY
169 + "/" + ACCOUNT_INFORMATION_FILENAME));
171 this.accessToken = this.accountProperty.getProperty("accessToken");
172 this.secretToken = this.accountProperty.getProperty("secretToken");
178 * @throws IOException
180 public void saveAccountProperties() throws IOException {
182 File logDir = new File("./" + PROPERTIES_DIRECTORY);
183 if (!logDir.exists()) {
184 // ディレクトリが存在しないので作成する
185 if (logDir.mkdir() == false) {
186 throw new IOException(PROPERTIES_DIRECTORY
187 + "ディレクトリを作成できませんでした.");
190 if (accountProperty == null) {
191 this.accountProperty = new Properties();
194 this.accountProperty.setProperty("accessToken", this.accessToken);
195 this.accountProperty.setProperty("secretToken", this.secretToken);
197 accountProperty.store(new FileOutputStream("./" + PROPERTIES_DIRECTORY
198 + "/" + ACCOUNT_INFORMATION_FILENAME), null);
206 * @throws TwitterException
208 public List<Status> getDirectMessages(int num) throws TwitterException {
209 List<DirectMessage> directMessages = twitter
210 .getDirectMessages(new Paging(1, num));
212 List<Status> messageList = new ArrayList<Status>();
214 if (directMessages != null && directMessages.size() > 0) {
216 this.sinceDirectMessageID = directMessages.get(0).getId();
217 // 一番新しいtweetを一番したに持ってくる
218 for (DirectMessage message : directMessages) {
219 User user = message.getSender();
220 DirectMessageUserStatus status = new DirectMessageUserStatus(
222 messageList.add(0, status);
228 } catch (IOException e) {
239 * @throws TwitterException
241 public List<Status> getSendDirectMessages(int num) throws TwitterException {
242 List<DirectMessage> directMessages = twitter
243 .getSentDirectMessages(new Paging(1, num));
245 List<Status> messageList = new ArrayList<Status>();
246 if (directMessages != null && directMessages.size() > 0) {
248 this.sinceSendDirectMessageID = directMessages.get(0).getId();
249 // 一番新しいtweetを一番したに持ってくる
250 for (DirectMessage message : directMessages) {
251 User user = message.getRecipient();
252 DirectMessageUserStatus status = new DirectMessageUserStatus(
254 messageList.add(0, status);
259 } catch (IOException e) {
270 * @throws TwitterException
272 public List<Status> getMentions(int num) throws TwitterException {
273 List<Status> statuses = twitter.getMentions(new Paging(1, num));
275 List<Status> tweetList = new ArrayList<Status>();
276 if (statuses != null && statuses.size() > 0) {
278 this.sinceMentionID = statuses.get(0).getId();
279 // 一番新しいtweetを一番したに持ってくる
280 // for (Status status : statuses) {
281 // tweetList.add(0, status);
283 Collections.reverse(statuses);
284 tweetList.addAll(statuses);
288 } catch (IOException e) {
295 * まだ取得していないDirectMessageを取得
298 * @throws TwitterException
300 public List<Status> getNewDirectMessages() throws TwitterException {
301 if (this.sinceDirectMessageID == 0) {
302 return getDirectMessages(MAX_TWEET_NUM);
304 List<DirectMessage> directMessages = twitter
305 .getDirectMessages(new Paging(sinceDirectMessageID));
306 // もし20件データ取得したらもっとデータがある可能性がある
307 if (directMessages.size() >= 20) {
308 List<DirectMessage> ndata = twitter.getDirectMessages(new Paging(1,
310 ndata = ndata.subList(21, ndata.size());
311 for (DirectMessage s : ndata) {
312 // すでに取得したことのあるデータだったとき
313 if (s.getId() <= sinceDirectMessageID) {
316 directMessages.add(s);
320 List<Status> messageList = new ArrayList<Status>();
321 if (directMessages != null && directMessages.size() > 0) {
323 this.sinceDirectMessageID = directMessages.get(0).getId();
324 // 一番新しいtweetを一番したに持ってくる
325 for (DirectMessage message : directMessages) {
326 Status status = message.getSender().getStatus();
327 messageList.add(0, status);
332 } catch (IOException e) {
339 * まだ取得していないSendDirectMessageを取得
342 * @throws TwitterException
344 public List<Status> getNewSendDirectMessages() throws TwitterException {
345 if (this.sinceSendDirectMessageID == 0) {
346 return getSendDirectMessages(MAX_TWEET_NUM);
348 List<DirectMessage> directMessages = twitter
349 .getDirectMessages(new Paging(sinceSendDirectMessageID));
350 // もし20件データ取得したらもっとデータがある可能性がある
351 if (directMessages.size() >= 20) {
352 List<DirectMessage> ndata = twitter
353 .getSentDirectMessages(new Paging(1, MAX_TWEET_NUM));
354 ndata = ndata.subList(21, ndata.size());
355 for (DirectMessage s : ndata) {
356 // すでに取得したことのあるデータだったとき
357 if (s.getId() <= sinceSendDirectMessageID) {
360 directMessages.add(s);
364 List<Status> messageList = new ArrayList<Status>();
365 if (directMessages != null && directMessages.size() > 0) {
367 this.sinceSendDirectMessageID = directMessages.get(0).getId();
368 // 一番新しいtweetを一番したに持ってくる
369 for (DirectMessage message : directMessages) {
370 Status status = message.getRecipient().getStatus();
371 messageList.add(0, status);
376 } catch (IOException e) {
383 * まだ取得していないMention情報を取得
386 * @throws TwitterException
388 public List<Status> getNewMentionData() throws TwitterException {
390 if (sinceMentionID == 0) {
391 return getMentions(MAX_TWEET_NUM);
393 // getFriendsTimelineではRetweetは表示されないので注意
394 List<Status> statuses = twitter.getMentions(new Paging(sinceMentionID));
395 // もし20件データ取得したらもっとデータがある可能性がある
396 if (statuses.size() >= 20) {
397 List<Status> ndata = twitter.getMentions(new Paging(1,
399 ndata = ndata.subList(21, ndata.size());
400 for (Status s : ndata) {
401 // すでに取得したことのあるデータだったとき
402 if (s.getId() <= sinceMentionID) {
410 List<Status> tweetList = new ArrayList<Status>();
411 if (statuses != null && statuses.size() > 0) {
413 sinceMentionID = statuses.get(0).getId();
415 // 一番新しいtweetを一番したに持ってくる
417 * for (Status status : statuses) { tweetList.add(0, status); }
419 Collections.reverse(statuses);
420 tweetList.addAll(statuses);
424 } catch (IOException e) {
431 * まだ取得していないtweet情報を取得
434 * @throws TwitterException
436 public List<Status> getNewTimelineData() throws TwitterException {
438 if (sinceTweetID == 0) {
439 return getTimeline(MAX_TWEET_NUM);
441 // getFriendsTimelineではRetweetは表示されないので注意
442 List<Status> statuses = twitter
443 .getHomeTimeline(new Paging(sinceTweetID));
444 // もし20件データ取得したらもっとデータがある可能性がある
445 if (statuses.size() >= 20) {
446 List<Status> ndata = twitter.getHomeTimeline(new Paging(1,
448 ndata = ndata.subList(21, ndata.size());
449 for (Status s : ndata) {
450 // すでに取得したことのあるデータだったとき
451 if (s.getId() <= sinceTweetID) {
458 List<Status> tweetList = new ArrayList<Status>();
459 if (statuses != null && statuses.size() > 0) {
461 sinceTweetID = statuses.get(0).getId();
463 // 一番新しいtweetを一番したに持ってくる
465 * for (Status status : statuses) { tweetList.add(0, status); }
467 Collections.reverse(statuses);
468 tweetList.addAll(statuses);
473 } catch (IOException e) {
480 * タイムラインを取得 一番新しいツイートは要素の一番下に追加
485 * @throws TwitterException
487 public List<Status> getTimeline(int num) throws TwitterException {
488 // getFriendsTimelineではRetweetは表示されないので注意
489 List<Status> statuses = twitter.getHomeTimeline(new Paging(1, num));
491 List<Status> tweetList = new ArrayList<Status>();
492 if (statuses != null && statuses.size() > 0) {
494 sinceTweetID = statuses.get(0).getId();
496 // 一番新しいtweetを一番したに持ってくる
497 // for (Status status : statuses) {
498 // tweetList.add(0, status);
500 Collections.reverse(statuses);
501 tweetList.addAll(statuses);
505 } catch (IOException e) {
518 public List<Status> getNewSearchResult(long sinceID, String searchWord) {
521 return getSearchResult(MAX_TWEET_NUM, searchWord);
524 // TODO:同じようなコードを二回書いてる.ここは修正の必要があるかも
526 Query query = new Query(searchWord);
528 query.setRpp(this.MAX_TWEET_NUM);
532 query.setSinceId(sinceID);
534 QueryResult queryResult = null;
536 queryResult = twitter.search(query);
537 } catch (TwitterException ex) {
538 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
539 "Twitter searchに失敗しました", ex);
540 ex.printStackTrace();
543 List<Status> tweetList = new ArrayList<Status>();
545 if (queryResult != null) {
546 for (Tweet tweet : queryResult.getTweets()) {
548 SimpleUser user = new SimpleUser();
550 user.setName(tweet.getFromUser());
551 user.setScreenName(tweet.getFromUser());
553 user.setId(tweet.getFromUserId());
556 user.setProfileImageURL(new URL(tweet.getProfileImageUrl()));
557 } catch (MalformedURLException ex) {
558 Logger.getLogger(TweetManager.class.getName()).log(
559 Level.SEVERE, null, ex);
562 SimpleStatus status = new SimpleStatus();
563 status.setCreatedAt(tweet.getCreatedAt());
564 status.setId(tweet.getId());
565 status.setSource(tweet.getSource());
566 status.setText(tweet.getText());
567 status.setUser(user);
570 tweetList.add(status);
573 // リスト逆転 一番あたらしいtweetを一番下に
574 Collections.reverse(tweetList);
588 public List<Status> getSearchResult(int num, String searchWord) {
589 Query query = new Query(searchWord);
595 QueryResult queryResult = null;
597 queryResult = twitter.search(query);
598 } catch (TwitterException ex) {
599 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
600 "Twitter searchに失敗しました", ex);
601 ex.printStackTrace();
604 List<Status> tweetList = new ArrayList<Status>();
606 if (queryResult != null) {
607 for (Tweet tweet : queryResult.getTweets()) {
609 SimpleUser user = new SimpleUser();
611 user.setName(tweet.getFromUser());
612 user.setScreenName(tweet.getFromUser());
614 user.setId(tweet.getFromUserId());
617 user.setProfileImageURL(new URL(tweet.getProfileImageUrl()));
618 } catch (MalformedURLException ex) {
619 Logger.getLogger(TweetManager.class.getName()).log(
620 Level.SEVERE, null, ex);
623 SimpleStatus status = new SimpleStatus();
624 status.setCreatedAt(tweet.getCreatedAt());
625 status.setId(tweet.getId());
626 status.setSource(tweet.getSource());
627 status.setText(tweet.getText());
628 status.setUser(user);
631 tweetList.add(status);
635 // リスト逆転 一番あたらしいtweetを一番下に
636 Collections.reverse(tweetList);
645 * nullの場合,自分自身のお気に入りを取得
647 public List<Status> getFavoritesTweet(String screenName)
648 throws TwitterException {
649 // getFriendsTimelineではRetweetは表示されないので注意
650 List<Status> statuses = null;
651 if (screenName == null) {
653 statuses = twitter.getFavorites();
655 statuses = twitter.getFavorites(screenName);
657 // リスト逆転 一番あたらしいtweetを一番下に
658 Collections.reverse(statuses);
668 * @throws TwitterException
670 public List<Status> getUserTimeline(int num, long userID)
671 throws TwitterException {
672 List<Status> statuses = twitter.getUserTimeline(userID, new Paging(1,
676 if (statuses != null && statuses.size() > 0) {
677 Collections.reverse(statuses);
689 * @throws TwitterException
691 public List<Status> getUserTimeline(int num, String screenName)
692 throws TwitterException {
693 List<Status> statuses = twitter.getUserTimeline(screenName, new Paging(
697 if (statuses != null && statuses.size() > 0) {
698 Collections.reverse(statuses);
705 * 指定したユーザが保持しているリスト一覧を取得
707 * @param userScreenName
710 public List<UserList> getUserLists(String userScreenName) {
711 List<UserList> userlist = new ArrayList<UserList>();
716 PagableResponseList<UserList> list = this.twitter.getUserLists(
717 userScreenName, cursor);
718 userlist.addAll(list);
720 if (list.hasNext()) {
722 cursor = list.getNextCursor();
727 } catch (TwitterException ex) {
728 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
735 * 指定したユーザをフォローしているリストを返す
737 * @param userScreenName
740 public List<UserList> getUserListSubscriptions(String userScreenName) {
741 List<UserList> userlist = new ArrayList<UserList>();
746 PagableResponseList<UserList> list = this.twitter
747 .getUserListSubscriptions(userScreenName, cursor);
748 userlist.addAll(list);
750 if (list.hasNext()) {
752 cursor = list.getNextCursor();
757 } catch (TwitterException ex) {
758 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
765 * 指定したユーザが追加されているリストを返す
767 * @param userScreenName
770 public List<UserList> getUserListMemberships(String userScreenName) {
771 List<UserList> userlist = new ArrayList<UserList>();
776 PagableResponseList<UserList> list = this.twitter
777 .getUserListMemberships(userScreenName, cursor);
778 userlist.addAll(list);
780 if (list.hasNext()) {
782 cursor = list.getNextCursor();
787 } catch (TwitterException ex) {
788 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
797 * @param userScreenName
804 * @throws TwitterException
806 public List<Status> getUserListStatuses(String userScreenName, int listID,
808 List<Status> tweetList = null;
810 tweetList = this.twitter.getUserListStatuses(userScreenName,
811 listID, new Paging(1, num));
812 } catch (TwitterException ex) {
813 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
817 if (tweetList != null && tweetList.size() > 0) {
818 Collections.reverse(tweetList);
826 * @param userScreenName
833 public List<Status> getNewUserListStatuses(String userScreenName,
834 int listID, long sinceID) {
836 return getUserListStatuses(userScreenName, listID, MAX_TWEET_NUM);
838 List<Status> tweetList = null;
840 tweetList = this.twitter.getUserListStatuses(userScreenName,
841 listID, new Paging(sinceID));
842 } catch (TwitterException ex) {
843 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
847 if (tweetList != null && tweetList.size() > 0) {
848 Collections.reverse(tweetList);
859 * @throws TwitterException
861 public List<Status> getNewUserTimeline(long userID, long sinceID)
862 throws TwitterException {
865 return getUserTimeline(MAX_TWEET_NUM, userID);
868 List<Status> statuses = twitter.getUserTimeline(userID, new Paging(
872 if (statuses != null && statuses.size() > 0) {
873 Collections.reverse(statuses);
885 * @throws TwitterException
887 public List<Status> getNewUserTimeline(String screenName, long sinceID)
888 throws TwitterException {
891 return getUserTimeline(MAX_TWEET_NUM, screenName);
894 List<Status> statuses = twitter.getUserTimeline(screenName, new Paging(
898 if (statuses != null && statuses.size() > 0) {
899 Collections.reverse(statuses);
908 public void loginTwitter() throws FileNotFoundException, IOException {
910 loadAccountProperties();
912 if (this.accessToken == null || this.secretToken == null
913 || this.accessToken.length() < 2
914 || this.secretToken.length() < 2) {
915 throw new IOException("Access Token and Secret cannot read");
918 twitter = new TwitterFactory().getInstance();
920 twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
921 // ここにユーザのアクセストークンを入れる
922 AccessToken ac = new AccessToken(accessToken, secretToken);
923 twitter.setOAuthAccessToken(ac);
926 streamManager = new TweetUserStreamManager(CONSUMER_KEY,
927 CONSUMER_SECRET, ac, this);
931 * try { loadProperties(); } catch (FileNotFoundException e) {
932 * e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
941 private Configuration getTwitterConfiguration() {
942 ConfigurationBuilder confbuilder = new ConfigurationBuilder();
943 confbuilder.setOAuthConsumerKey(CONSUMER_KEY);
944 confbuilder.setOAuthConsumerSecret(CONSUMER_SECRET);
945 return confbuilder.build();
949 * 初回時アクセストークンを取得する際に利用する
953 * @throws TwitterException
955 public void getAccessToken(String username, String password)
956 throws TwitterException {
957 // consumer key secretを設定
958 Configuration conf = this.getTwitterConfiguration();
959 twitter = new TwitterFactory(conf).getInstance();
961 AccessToken oAuthAccessToken = twitter.getOAuthAccessToken(username,
963 this.accessToken = oAuthAccessToken.getToken();
964 this.secretToken = oAuthAccessToken.getTokenSecret();
968 saveAccountProperties();
969 } catch (IOException ex) {
970 ex.printStackTrace();
978 * @throws TwitterException
980 public void tweet(String message) throws TwitterException {
981 twitter4j.Status status;
982 status = twitter.updateStatus(message);
989 * @param replyToStatusID
990 * @throws TwitterException
992 public void replyTweet(String message, long replyToStatusID)
993 throws TwitterException {
994 twitter4j.Status status;
995 // status = twitter.updateStatus(message, replyToStatusID);
996 StatusUpdate updateMsg = new StatusUpdate(message);
997 updateMsg.setInReplyToStatusId(replyToStatusID);
998 status = twitter.updateStatus(updateMsg);
1006 * @throws TwitterException
1008 public void sendDirectMessage(String screenName, String text)
1009 throws TwitterException {
1010 twitter.sendDirectMessage(screenName, text);
1014 * 指定したステータスIDの発言をRetweet
1017 * @throws TwitterException
1019 public void retweet(long statusID) throws TwitterException {
1020 twitter.retweetStatus(statusID);
1027 * @throws TwitterException
1029 public void createFavorite(long statusID) throws TwitterException {
1030 twitter.createFavorite(statusID);
1034 * 指定した発言のお気に入りを取り下げる
1038 public void destroyFavorite(long statusID) throws TwitterException {
1039 twitter.destroyFavorite(statusID);
1046 * @throws TwitterException
1048 public RateLimitStatus getRateLimitStatus() throws TwitterException {
1049 return twitter.getRateLimitStatus();
1057 public String getScreenName() {
1059 if (twitter != null) {
1060 return twitter.getScreenName();
1062 } catch (TwitterException e) {
1069 * 指定したユーザのfollowingユーザ一覧の詳細情報を取得
1077 public List<User> getFollowingUser(String screenName, int page) {
1078 if (!this.followingUserIDList.containsKey(screenName)) {
1079 // まだscreenNameがfollowingしているユーザ情報を取得していない
1080 List<Long> following = this.getFollowingUserID(screenName);
1081 this.followingUserIDList.put(screenName, following);
1083 // followingユーザ一覧id取得
1084 List<Long> getFollowingUserIds = null;
1085 List<Long> followingList = this.followingUserIDList.get(screenName);
1086 if (followingList != null && followingList.size() > 0) {
1088 if (followingList.size() < page * 100) {
1091 int to = page * 100 + 99;
1092 if (followingList.size() < to) {
1093 to = to - (to - followingList.size());
1095 getFollowingUserIds = followingList.subList(page * 100, to);
1099 List<User> result = new ArrayList<User>();
1101 int getDataSize = getFollowingUserIds.size();
1102 if (getDataSize > 0) {
1103 long[] ids = new long[getDataSize];
1104 for (int i = 0; i < ids.length; i++) {
1105 ids[i] = getFollowingUserIds.get(i);
1110 ResponseList<User> users = twitter.lookupUsers(ids);
1111 for (User u : users) {
1114 } catch (TwitterException e) {
1115 e.printStackTrace();
1123 * 指定したユーザのfollowerユーザ一覧の詳細情報を取得
1131 public List<User> getFollowerUser(String screenName, int page) {
1132 if (!this.followerUserIDList.containsKey(screenName)) {
1133 // まだscreenNameがfollowingしているユーザ情報を取得していない
1134 List<Long> follower = this.getFollowerUserID(screenName);
1135 this.followerUserIDList.put(screenName, follower);
1137 // followingユーザ一覧id取得
1138 List<Long> getFollowerUserIds = null;
1139 List<Long> followerList = this.followerUserIDList.get(screenName);
1140 if (followerList != null && followerList.size() > 0) {
1142 if (followerList.size() < page * 100) {
1145 int to = page * 100 + 99;
1146 if (followerList.size() < to) {
1147 to = to - (to - followerList.size());
1149 getFollowerUserIds = followerList.subList(page * 100, to);
1153 List<User> result = new ArrayList<User>();
1155 int getDataSize = getFollowerUserIds.size();
1156 if (getDataSize > 0) {
1157 long[] ids = new long[getDataSize];
1158 for (int i = 0; i < ids.length; i++) {
1159 ids[i] = getFollowerUserIds.get(i);
1164 ResponseList<User> users = twitter.lookupUsers(ids);
1165 for (User u : users) {
1168 } catch (TwitterException e) {
1169 e.printStackTrace();
1182 public List<Long> getFollowingUserID(String screenName) {
1185 long[] friendIds = null;
1187 List<Long> result = new ArrayList<Long>();
1192 ids = twitter.getFriendsIDs(screenName, cursor);
1193 // screenNameのフレンドid一覧を取得
1194 friendIds = ids.getIDs();
1195 if (friendIds.length > 0) {
1196 for (long id : friendIds) {
1201 cursor = ids.getNextCursor();
1202 } while (cursor != 0);
1204 } catch (TwitterException e) {
1205 e.printStackTrace();
1211 * Friendのfollewer ID一覧を取得する
1216 public List<Long> getFollowerUserID(String screenName) {
1219 long[] friendIds = null;
1221 List<Long> result = new ArrayList<Long>();
1226 ids = twitter.getFollowersIDs(screenName, cursor);
1227 // screenNameのフレンドid一覧を取得
1228 friendIds = ids.getIDs();
1229 if (friendIds.length > 0) {
1230 for (long id : friendIds) {
1235 cursor = ids.getNextCursor();
1236 } while (cursor != 0);
1238 } catch (TwitterException e) {
1239 e.printStackTrace();
1245 * streamManagerを取得します。
1246 * @return streamManager
1248 public TweetUserStreamManager getStreamManager() {
1249 return streamManager;
1253 * sinceTweetIDを取得します。
1255 * @return sinceTweetID
1257 public long getSinceTweetID() {
1258 return sinceTweetID;
1262 * sinceTweetIDを設定します。
1264 * @param sinceTweetID
1267 public void setSinceTweetID(long sinceTweetID) {
1268 this.sinceTweetID = sinceTweetID;
1272 * sinceMentionIDを取得します。
1274 * @return sinceMentionID
1276 public long getSinceMentionID() {
1277 return sinceMentionID;
1281 * sinceMentionIDを設定します。
1283 * @param sinceMentionID
1286 public void setSinceMentionID(long sinceMentionID) {
1287 this.sinceMentionID = sinceMentionID;
1291 * sinceSendDirectMessageIDを取得します。
1293 * @return sinceSendDirectMessageID
1295 public long getSinceSendDirectMessageID() {
1296 return sinceSendDirectMessageID;
1300 * sinceSendDirectMessageIDを設定します。
1302 * @param sinceSendDirectMessageID
1303 * sinceSendDirectMessageID
1305 public void setSinceSendDirectMessageID(long sinceSendDirectMessageID) {
1306 this.sinceSendDirectMessageID = sinceSendDirectMessageID;
1310 * sinceDirectMessageIDを取得します。
1312 * @return sinceDirectMessageID
1314 public long getSinceDirectMessageID() {
1315 return sinceDirectMessageID;
1319 * sinceDirectMessageIDを設定します。
1321 * @param sinceDirectMessageID
1322 * sinceDirectMessageID
1324 public void setSinceDirectMessageID(long sinceDirectMessageID) {
1325 this.sinceDirectMessageID = sinceDirectMessageID;
1330 * @return 取得失敗時は0を返す
1332 public long getLoginUserID() {
1335 id = this.twitter.getId();
1336 } catch (IllegalStateException e) {
1337 e.printStackTrace();
1338 } catch (TwitterException e) {
1339 e.printStackTrace();
1348 public String getLoginUserScreenName() {
1349 String username = null;
1351 username = this.twitter.getScreenName();
1352 } catch (IllegalStateException e) {
1353 e.printStackTrace();
1354 } catch (TwitterException e) {
1355 e.printStackTrace();
1361 * 指定したユーザ名からユーザidを取得する
1363 * @return 取得に失敗した場合は0を返す, 成功した場合はユーザidを返す
1365 public long getUserID(String screenName) {
1368 User u = this.twitter.showUser(screenName);
1372 } catch (TwitterException e) {
1373 e.printStackTrace();