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 {
54 * DirectMessageのユーザ情報等からステータスを生成
59 private class DirectMessageUserStatus implements Status {
64 private static final long serialVersionUID = 1L;
65 // 受信したdirectMessageの情報
66 private DirectMessage message = null;
68 private User user = null;
70 public DirectMessageUserStatus(DirectMessage directMessage, User user) {
71 this.message = directMessage;
76 public long[] getContributors() {
81 public Date getCreatedAt() {
82 return message.getCreatedAt();
86 public GeoLocation getGeoLocation() {
96 public String getInReplyToScreenName() {
97 return ((SimpleUser) user).getStatusInReplyToScreenName();
101 public long getInReplyToStatusId() {
102 return ((SimpleUser) user).getStatusInReplyToUserId();
106 public long getInReplyToUserId() {
111 public Place getPlace() {
116 public RateLimitStatus getRateLimitStatus() {
117 return user.getRateLimitStatus();
121 public Status getRetweetedStatus() {
126 public String getSource() {
131 public String getText() {
132 return message.getText();
136 public User getUser() {
141 public boolean isFavorited() {
142 return ((SimpleUser) user).isStatusFavorited();
146 public boolean isRetweet() {
151 public boolean isTruncated() {
155 public int compareTo(Status t) {
156 throw new UnsupportedOperationException("Not supported yet.");
160 public Annotations getAnnotations() {
161 // TODO 自動生成されたメソッド・スタブ
166 public HashtagEntity[] getHashtagEntities() {
167 // TODO 自動生成されたメソッド・スタブ
172 public long getRetweetCount() {
173 // TODO 自動生成されたメソッド・スタブ
178 public URLEntity[] getURLEntities() {
179 // TODO 自動生成されたメソッド・スタブ
184 public UserMentionEntity[] getUserMentionEntities() {
185 // TODO 自動生成されたメソッド・スタブ
190 public boolean isRetweetedByMe() {
191 // TODO 自動生成されたメソッド・スタブ
196 public int getAccessLevel() {
197 // TODO 自動生成されたメソッド・スタブ
202 public MediaEntity[] getMediaEntities() {
203 // TODO 自動生成されたメソッド・スタブ
208 private Twitter twitter = null;
210 private TweetUserStreamManager streamManager = null;
211 // クライアントのConsumer Key
212 private static final String CONSUMER_KEY = "tbo5erit2M2ZzN6n8tEYcA";
213 // クライアントのConsumer Secret 外部に漏れてはいけない
214 private static final String CONSUMER_SECRET = "tODurbdySLYU1pKjtB3MQTDRBGy562dHzVf7d62mm8";
216 private String accessToken = null;// "";
217 // secretToken 外部に漏れてはいけない
218 private String secretToken = null;// "";
220 private static final String PROPERTIES_DIRECTORY = TweetConfiguration.PROPERTIES_DIRECTORY;
222 private static final String TWEET_INFO_FILENAME = TweetConfiguration.TWEET_INFO_FILENAME;
224 private static final String ACCOUNT_INFORMATION_FILENAME = TweetConfiguration.ACCOUNT_INFORMATION_FILENAME;
226 private final int MAX_TWEET_NUM = 200;
228 private long sinceTweetID = 0;
229 // 前回取得したmentionのtweetID
230 private long sinceMentionID = 0;
231 // 前回取得したsendDirectMessageの情報
232 private long sinceSendDirectMessageID = 0;
233 // 前回取得したdirectMessageの情報
234 private long sinceDirectMessageID = 0;
236 private Properties property = null;
238 private Properties accountProperty = null;
240 // following IDリスト keyはユーザ名, valueはユーザがfollowingしているid
241 private Map<String, List<Long>> followingUserIDList = new HashMap<String, List<Long>>();
243 private Map<String, List<Long>> followerUserIDList = new HashMap<String, List<Long>>();
245 public TweetManager() {
251 * @throws IOException
252 * @throws FileNotFoundException
254 public void loadProperties() throws FileNotFoundException, IOException {
255 if (property == null) {
256 this.property = new Properties();
258 property.load(new FileInputStream("./" + PROPERTIES_DIRECTORY + "/"
259 + TWEET_INFO_FILENAME));
261 String sti = this.property.getProperty("sinceTweetID");
263 * String smi = this.property.getProperty("sinceMentionID"); String
264 * ssdmi = this.property.getProperty("sinceSendDirectMessageID"); String
265 * sdmi = this.property.getProperty("sinceDirectMessageID");
269 this.sinceTweetID = Long.parseLong(sti);
271 * this.sinceMentionID = Long.parseLong(smi);
272 * this.sinceSendDirectMessageID = Long.parseLong(ssdmi);
273 * this.sinceDirectMessageID = Long.parseLong(sdmi);
275 } catch (NumberFormatException e) {
283 * @throws IOException
285 public void saveProperties() throws IOException {
287 File logDir = new File("./" + PROPERTIES_DIRECTORY);
288 if (!logDir.exists()) {
289 // ディレクトリが存在しないので作成する
290 if (logDir.mkdir() == false) {
291 throw new IOException(PROPERTIES_DIRECTORY
292 + "ディレクトリを作成できませんでした.");
295 if (property == null) {
296 this.property = new Properties();
299 this.property.setProperty("sinceTweetID", sinceTweetID + "");
301 * this.property.setProperty("sinceMentionID", sinceMentionID + "");
302 * this.property.setProperty("sinceSendDirectMessageID",
303 * sinceSendDirectMessageID + "");
304 * this.property.setProperty("sinceDirectMessageID",
305 * sinceDirectMessageID + "");
308 property.store(new FileOutputStream("./" + PROPERTIES_DIRECTORY + "/"
309 + TWEET_INFO_FILENAME), null);
315 * @throws FileNotFoundException
316 * @throws IOException
318 public void loadAccountProperties() throws FileNotFoundException,
320 if (accountProperty == null) {
321 this.accountProperty = new Properties();
323 accountProperty.load(new FileInputStream("./" + PROPERTIES_DIRECTORY
324 + "/" + ACCOUNT_INFORMATION_FILENAME));
326 this.accessToken = this.accountProperty.getProperty("accessToken");
327 this.secretToken = this.accountProperty.getProperty("secretToken");
333 * @throws IOException
335 public void saveAccountProperties() throws IOException {
337 File logDir = new File("./" + PROPERTIES_DIRECTORY);
338 if (!logDir.exists()) {
339 // ディレクトリが存在しないので作成する
340 if (logDir.mkdir() == false) {
341 throw new IOException(PROPERTIES_DIRECTORY
342 + "ディレクトリを作成できませんでした.");
345 if (accountProperty == null) {
346 this.accountProperty = new Properties();
349 this.accountProperty.setProperty("accessToken", this.accessToken);
350 this.accountProperty.setProperty("secretToken", this.secretToken);
352 accountProperty.store(new FileOutputStream("./" + PROPERTIES_DIRECTORY
353 + "/" + ACCOUNT_INFORMATION_FILENAME), null);
361 * @throws TwitterException
363 public List<Status> getDirectMessages(int num) throws TwitterException {
364 List<DirectMessage> directMessages = twitter
365 .getDirectMessages(new Paging(1, num));
367 List<Status> messageList = new ArrayList<Status>();
369 if (directMessages != null && directMessages.size() > 0) {
371 this.sinceDirectMessageID = directMessages.get(0).getId();
372 // 一番新しいtweetを一番したに持ってくる
373 for (DirectMessage message : directMessages) {
374 User user = message.getSender();
375 DirectMessageUserStatus status = new DirectMessageUserStatus(
377 messageList.add(0, status);
383 } catch (IOException e) {
394 * @throws TwitterException
396 public List<Status> getSendDirectMessages(int num) throws TwitterException {
397 List<DirectMessage> directMessages = twitter
398 .getSentDirectMessages(new Paging(1, num));
400 List<Status> messageList = new ArrayList<Status>();
401 if (directMessages != null && directMessages.size() > 0) {
403 this.sinceSendDirectMessageID = directMessages.get(0).getId();
404 // 一番新しいtweetを一番したに持ってくる
405 for (DirectMessage message : directMessages) {
406 User user = message.getRecipient();
407 DirectMessageUserStatus status = new DirectMessageUserStatus(
409 messageList.add(0, status);
414 } catch (IOException e) {
425 * @throws TwitterException
427 public List<Status> getMentions(int num) throws TwitterException {
428 List<Status> statuses = twitter.getMentions(new Paging(1, num));
430 List<Status> tweetList = new ArrayList<Status>();
431 if (statuses != null && statuses.size() > 0) {
433 this.sinceMentionID = statuses.get(0).getId();
434 // 一番新しいtweetを一番したに持ってくる
435 // for (Status status : statuses) {
436 // tweetList.add(0, status);
438 Collections.reverse(statuses);
439 tweetList.addAll(statuses);
443 } catch (IOException e) {
450 * まだ取得していないDirectMessageを取得
453 * @throws TwitterException
455 public List<Status> getNewDirectMessages() throws TwitterException {
456 if (this.sinceDirectMessageID == 0) {
457 return getDirectMessages(MAX_TWEET_NUM);
459 List<DirectMessage> directMessages = twitter
460 .getDirectMessages(new Paging(sinceDirectMessageID));
461 // もし20件データ取得したらもっとデータがある可能性がある
462 if (directMessages.size() >= 20) {
463 List<DirectMessage> ndata = twitter.getDirectMessages(new Paging(1,
465 ndata = ndata.subList(21, ndata.size());
466 for (DirectMessage s : ndata) {
467 // すでに取得したことのあるデータだったとき
468 if (s.getId() <= sinceDirectMessageID) {
471 directMessages.add(s);
475 List<Status> messageList = new ArrayList<Status>();
476 if (directMessages != null && directMessages.size() > 0) {
478 this.sinceDirectMessageID = directMessages.get(0).getId();
479 // 一番新しいtweetを一番したに持ってくる
480 for (DirectMessage message : directMessages) {
481 Status status = message.getSender().getStatus();
482 messageList.add(0, status);
487 } catch (IOException e) {
494 * まだ取得していないSendDirectMessageを取得
497 * @throws TwitterException
499 public List<Status> getNewSendDirectMessages() throws TwitterException {
500 if (this.sinceSendDirectMessageID == 0) {
501 return getSendDirectMessages(MAX_TWEET_NUM);
503 List<DirectMessage> directMessages = twitter
504 .getDirectMessages(new Paging(sinceSendDirectMessageID));
505 // もし20件データ取得したらもっとデータがある可能性がある
506 if (directMessages.size() >= 20) {
507 List<DirectMessage> ndata = twitter
508 .getSentDirectMessages(new Paging(1, MAX_TWEET_NUM));
509 ndata = ndata.subList(21, ndata.size());
510 for (DirectMessage s : ndata) {
511 // すでに取得したことのあるデータだったとき
512 if (s.getId() <= sinceSendDirectMessageID) {
515 directMessages.add(s);
519 List<Status> messageList = new ArrayList<Status>();
520 if (directMessages != null && directMessages.size() > 0) {
522 this.sinceSendDirectMessageID = directMessages.get(0).getId();
523 // 一番新しいtweetを一番したに持ってくる
524 for (DirectMessage message : directMessages) {
525 Status status = message.getRecipient().getStatus();
526 messageList.add(0, status);
531 } catch (IOException e) {
538 * まだ取得していないMention情報を取得
541 * @throws TwitterException
543 public List<Status> getNewMentionData() throws TwitterException {
545 if (sinceMentionID == 0) {
546 return getMentions(MAX_TWEET_NUM);
548 // getFriendsTimelineではRetweetは表示されないので注意
549 List<Status> statuses = twitter.getMentions(new Paging(sinceMentionID));
550 // もし20件データ取得したらもっとデータがある可能性がある
551 if (statuses.size() >= 20) {
552 List<Status> ndata = twitter.getMentions(new Paging(1,
554 ndata = ndata.subList(21, ndata.size());
555 for (Status s : ndata) {
556 // すでに取得したことのあるデータだったとき
557 if (s.getId() <= sinceMentionID) {
565 List<Status> tweetList = new ArrayList<Status>();
566 if (statuses != null && statuses.size() > 0) {
568 sinceMentionID = statuses.get(0).getId();
570 // 一番新しいtweetを一番したに持ってくる
572 * for (Status status : statuses) { tweetList.add(0, status); }
574 Collections.reverse(statuses);
575 tweetList.addAll(statuses);
579 } catch (IOException e) {
586 * まだ取得していないtweet情報を取得
589 * @throws TwitterException
591 public List<Status> getNewTimelineData() throws TwitterException {
593 if (sinceTweetID == 0) {
594 return getTimeline(MAX_TWEET_NUM);
596 // getFriendsTimelineではRetweetは表示されないので注意
597 List<Status> statuses = twitter
598 .getHomeTimeline(new Paging(sinceTweetID));
599 // もし20件データ取得したらもっとデータがある可能性がある
600 if (statuses.size() >= 20) {
601 List<Status> ndata = twitter.getHomeTimeline(new Paging(1,
603 ndata = ndata.subList(21, ndata.size());
604 for (Status s : ndata) {
605 // すでに取得したことのあるデータだったとき
606 if (s.getId() <= sinceTweetID) {
613 List<Status> tweetList = new ArrayList<Status>();
614 if (statuses != null && statuses.size() > 0) {
616 sinceTweetID = statuses.get(0).getId();
618 // 一番新しいtweetを一番したに持ってくる
620 * for (Status status : statuses) { tweetList.add(0, status); }
622 Collections.reverse(statuses);
623 tweetList.addAll(statuses);
628 } catch (IOException e) {
635 * タイムラインを取得 一番新しいツイートは要素の一番下に追加
640 * @throws TwitterException
642 public List<Status> getTimeline(int num) throws TwitterException {
643 // getFriendsTimelineではRetweetは表示されないので注意
644 List<Status> statuses = twitter.getHomeTimeline(new Paging(1, num));
646 List<Status> tweetList = new ArrayList<Status>();
647 if (statuses != null && statuses.size() > 0) {
649 sinceTweetID = statuses.get(0).getId();
651 // 一番新しいtweetを一番したに持ってくる
652 // for (Status status : statuses) {
653 // tweetList.add(0, status);
655 Collections.reverse(statuses);
656 tweetList.addAll(statuses);
660 } catch (IOException e) {
673 public List<Status> getNewSearchResult(long sinceID, String searchWord) {
676 return getSearchResult(MAX_TWEET_NUM, searchWord);
679 // TODO:同じようなコードを二回書いてる.ここは修正の必要があるかも
681 Query query = new Query(searchWord);
683 query.setRpp(this.MAX_TWEET_NUM);
687 query.setSinceId(sinceID);
689 QueryResult queryResult = null;
691 queryResult = twitter.search(query);
692 } catch (TwitterException ex) {
693 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
694 "Twitter searchに失敗しました", ex);
695 ex.printStackTrace();
698 List<Status> tweetList = new ArrayList<Status>();
700 if (queryResult != null) {
701 for (Tweet tweet : queryResult.getTweets()) {
703 SimpleUser user = new SimpleUser();
705 user.setName(tweet.getFromUser());
706 user.setScreenName(tweet.getFromUser());
708 user.setId(tweet.getFromUserId());
711 user.setProfileImageURL(new URL(tweet.getProfileImageUrl()));
712 } catch (MalformedURLException ex) {
713 Logger.getLogger(TweetManager.class.getName()).log(
714 Level.SEVERE, null, ex);
717 SimpleStatus status = new SimpleStatus();
718 status.setCreatedAt(tweet.getCreatedAt());
719 status.setId(tweet.getId());
720 status.setSource(tweet.getSource());
721 status.setText(tweet.getText());
722 status.setUser(user);
725 tweetList.add(status);
728 // リスト逆転 一番あたらしいtweetを一番下に
729 Collections.reverse(tweetList);
743 public List<Status> getSearchResult(int num, String searchWord) {
744 Query query = new Query(searchWord);
750 QueryResult queryResult = null;
752 queryResult = twitter.search(query);
753 } catch (TwitterException ex) {
754 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
755 "Twitter searchに失敗しました", ex);
756 ex.printStackTrace();
759 List<Status> tweetList = new ArrayList<Status>();
761 if (queryResult != null) {
762 for (Tweet tweet : queryResult.getTweets()) {
764 SimpleUser user = new SimpleUser();
766 user.setName(tweet.getFromUser());
767 user.setScreenName(tweet.getFromUser());
769 user.setId(tweet.getFromUserId());
772 user.setProfileImageURL(new URL(tweet.getProfileImageUrl()));
773 } catch (MalformedURLException ex) {
774 Logger.getLogger(TweetManager.class.getName()).log(
775 Level.SEVERE, null, ex);
778 SimpleStatus status = new SimpleStatus();
779 status.setCreatedAt(tweet.getCreatedAt());
780 status.setId(tweet.getId());
781 status.setSource(tweet.getSource());
782 status.setText(tweet.getText());
783 status.setUser(user);
786 tweetList.add(status);
790 // リスト逆転 一番あたらしいtweetを一番下に
791 Collections.reverse(tweetList);
800 * nullの場合,自分自身のお気に入りを取得
802 public List<Status> getFavoritesTweet(String screenName)
803 throws TwitterException {
804 // getFriendsTimelineではRetweetは表示されないので注意
805 List<Status> statuses = null;
806 if (screenName == null) {
808 statuses = twitter.getFavorites();
810 statuses = twitter.getFavorites(screenName);
812 // リスト逆転 一番あたらしいtweetを一番下に
813 Collections.reverse(statuses);
823 * @throws TwitterException
825 public List<Status> getUserTimeline(int num, long userID)
826 throws TwitterException {
827 List<Status> statuses = twitter.getUserTimeline(userID, new Paging(1,
831 if (statuses != null && statuses.size() > 0) {
832 Collections.reverse(statuses);
844 * @throws TwitterException
846 public List<Status> getUserTimeline(int num, String screenName)
847 throws TwitterException {
848 List<Status> statuses = twitter.getUserTimeline(screenName, new Paging(
852 if (statuses != null && statuses.size() > 0) {
853 Collections.reverse(statuses);
860 * 指定したユーザが保持しているリスト一覧を取得
862 * @param userScreenName
865 public List<UserList> getUserLists(String userScreenName) {
866 List<UserList> userlist = new ArrayList<UserList>();
871 PagableResponseList<UserList> list = this.twitter.getUserLists(
872 userScreenName, cursor);
873 userlist.addAll(list);
875 if (list.hasNext()) {
877 cursor = list.getNextCursor();
882 } catch (TwitterException ex) {
883 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
890 * 指定したユーザをフォローしているリストを返す
892 * @param userScreenName
895 public List<UserList> getUserListSubscriptions(String userScreenName) {
896 List<UserList> userlist = new ArrayList<UserList>();
901 PagableResponseList<UserList> list = this.twitter
902 .getUserListSubscriptions(userScreenName, cursor);
903 userlist.addAll(list);
905 if (list.hasNext()) {
907 cursor = list.getNextCursor();
912 } catch (TwitterException ex) {
913 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
920 * 指定したユーザが追加されているリストを返す
922 * @param userScreenName
925 public List<UserList> getUserListMemberships(String userScreenName) {
926 List<UserList> userlist = new ArrayList<UserList>();
931 PagableResponseList<UserList> list = this.twitter
932 .getUserListMemberships(userScreenName, cursor);
933 userlist.addAll(list);
935 if (list.hasNext()) {
937 cursor = list.getNextCursor();
942 } catch (TwitterException ex) {
943 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
952 * @param userScreenName
959 * @throws TwitterException
961 public List<Status> getUserListStatuses(String userScreenName, int listID,
963 List<Status> tweetList = null;
965 tweetList = this.twitter.getUserListStatuses(userScreenName,
966 listID, new Paging(1, num));
967 } catch (TwitterException ex) {
968 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
972 if (tweetList != null && tweetList.size() > 0) {
973 Collections.reverse(tweetList);
981 * @param userScreenName
988 public List<Status> getNewUserListStatuses(String userScreenName,
989 int listID, long sinceID) {
991 return getUserListStatuses(userScreenName, listID, MAX_TWEET_NUM);
993 List<Status> tweetList = null;
995 tweetList = this.twitter.getUserListStatuses(userScreenName,
996 listID, new Paging(sinceID));
997 } catch (TwitterException ex) {
998 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
1002 if (tweetList != null && tweetList.size() > 0) {
1003 Collections.reverse(tweetList);
1014 * @throws TwitterException
1016 public List<Status> getNewUserTimeline(long userID, long sinceID)
1017 throws TwitterException {
1020 return getUserTimeline(MAX_TWEET_NUM, userID);
1023 List<Status> statuses = twitter.getUserTimeline(userID, new Paging(
1027 if (statuses != null && statuses.size() > 0) {
1028 Collections.reverse(statuses);
1040 * @throws TwitterException
1042 public List<Status> getNewUserTimeline(String screenName, long sinceID)
1043 throws TwitterException {
1046 return getUserTimeline(MAX_TWEET_NUM, screenName);
1049 List<Status> statuses = twitter.getUserTimeline(screenName, new Paging(
1053 if (statuses != null && statuses.size() > 0) {
1054 Collections.reverse(statuses);
1063 public void loginTwitter() throws FileNotFoundException, IOException {
1065 loadAccountProperties();
1067 if (this.accessToken == null || this.secretToken == null
1068 || this.accessToken.length() < 2
1069 || this.secretToken.length() < 2) {
1070 throw new IOException("Access Token and Secret cannot read");
1073 twitter = new TwitterFactory().getInstance();
1075 twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
1076 // ここにユーザのアクセストークンを入れる
1077 AccessToken ac = new AccessToken(accessToken, secretToken);
1078 twitter.setOAuthAccessToken(ac);
1081 streamManager = new TweetUserStreamManager(CONSUMER_KEY,
1082 CONSUMER_SECRET, ac);
1086 * try { loadProperties(); } catch (FileNotFoundException e) {
1087 * e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
1092 * Configurationを生成する
1096 private Configuration getTwitterConfiguration() {
1097 ConfigurationBuilder confbuilder = new ConfigurationBuilder();
1098 confbuilder.setOAuthConsumerKey(CONSUMER_KEY);
1099 confbuilder.setOAuthConsumerSecret(CONSUMER_SECRET);
1100 return confbuilder.build();
1104 * 初回時アクセストークンを取得する際に利用する
1108 * @throws TwitterException
1110 public void getAccessToken(String username, String password)
1111 throws TwitterException {
1112 // consumer key secretを設定
1113 Configuration conf = this.getTwitterConfiguration();
1114 twitter = new TwitterFactory(conf).getInstance();
1116 AccessToken oAuthAccessToken = twitter.getOAuthAccessToken(username,
1118 this.accessToken = oAuthAccessToken.getToken();
1119 this.secretToken = oAuthAccessToken.getTokenSecret();
1122 // 取得したOAuthのトークンを保存
1123 saveAccountProperties();
1124 } catch (IOException ex) {
1125 ex.printStackTrace();
1133 * @throws TwitterException
1135 public void tweet(String message) throws TwitterException {
1136 twitter4j.Status status;
1137 status = twitter.updateStatus(message);
1144 * @param replyToStatusID
1145 * @throws TwitterException
1147 public void replyTweet(String message, long replyToStatusID)
1148 throws TwitterException {
1149 twitter4j.Status status;
1150 // status = twitter.updateStatus(message, replyToStatusID);
1151 StatusUpdate updateMsg = new StatusUpdate(message);
1152 updateMsg.setInReplyToStatusId(replyToStatusID);
1153 status = twitter.updateStatus(updateMsg);
1161 * @throws TwitterException
1163 public void sendDirectMessage(String screenName, String text)
1164 throws TwitterException {
1165 twitter.sendDirectMessage(screenName, text);
1169 * 指定したステータスIDの発言をRetweet
1172 * @throws TwitterException
1174 public void retweet(long statusID) throws TwitterException {
1175 twitter.retweetStatus(statusID);
1182 * @throws TwitterException
1184 public void createFavorite(long statusID) throws TwitterException {
1185 twitter.createFavorite(statusID);
1189 * 指定した発言のお気に入りを取り下げる
1193 public void destroyFavorite(long statusID) throws TwitterException {
1194 twitter.destroyFavorite(statusID);
1201 * @throws TwitterException
1203 public RateLimitStatus getRateLimitStatus() throws TwitterException {
1204 return twitter.getRateLimitStatus();
1212 public String getScreenName() {
1214 if (twitter != null) {
1215 return twitter.getScreenName();
1217 } catch (TwitterException e) {
1224 * 指定したユーザのfollowingユーザ一覧の詳細情報を取得
1232 public List<User> getFollowingUser(String screenName, int page) {
1233 if (!this.followingUserIDList.containsKey(screenName)) {
1234 // まだscreenNameがfollowingしているユーザ情報を取得していない
1235 List<Long> following = this.getFollowingUserID(screenName);
1236 this.followingUserIDList.put(screenName, following);
1238 // followingユーザ一覧id取得
1239 List<Long> getFollowingUserIds = null;
1240 List<Long> followingList = this.followingUserIDList.get(screenName);
1241 if (followingList != null && followingList.size() > 0) {
1243 if (followingList.size() < page * 100) {
1246 int to = page * 100 + 99;
1247 if (followingList.size() < to) {
1248 to = to - (to - followingList.size());
1250 getFollowingUserIds = followingList.subList(page * 100, to);
1254 List<User> result = new ArrayList<User>();
1256 int getDataSize = getFollowingUserIds.size();
1257 if (getDataSize > 0) {
1258 long[] ids = new long[getDataSize];
1259 for (int i = 0; i < ids.length; i++) {
1260 ids[i] = getFollowingUserIds.get(i);
1265 ResponseList<User> users = twitter.lookupUsers(ids);
1266 for (User u : users) {
1269 } catch (TwitterException e) {
1270 e.printStackTrace();
1278 * 指定したユーザのfollowerユーザ一覧の詳細情報を取得
1286 public List<User> getFollowerUser(String screenName, int page) {
1287 if (!this.followerUserIDList.containsKey(screenName)) {
1288 // まだscreenNameがfollowingしているユーザ情報を取得していない
1289 List<Long> follower = this.getFollowerUserID(screenName);
1290 this.followerUserIDList.put(screenName, follower);
1292 // followingユーザ一覧id取得
1293 List<Long> getFollowerUserIds = null;
1294 List<Long> followerList = this.followerUserIDList.get(screenName);
1295 if (followerList != null && followerList.size() > 0) {
1297 if (followerList.size() < page * 100) {
1300 int to = page * 100 + 99;
1301 if (followerList.size() < to) {
1302 to = to - (to - followerList.size());
1304 getFollowerUserIds = followerList.subList(page * 100, to);
1308 List<User> result = new ArrayList<User>();
1310 int getDataSize = getFollowerUserIds.size();
1311 if (getDataSize > 0) {
1312 long[] ids = new long[getDataSize];
1313 for (int i = 0; i < ids.length; i++) {
1314 ids[i] = getFollowerUserIds.get(i);
1319 ResponseList<User> users = twitter.lookupUsers(ids);
1320 for (User u : users) {
1323 } catch (TwitterException e) {
1324 e.printStackTrace();
1337 public List<Long> getFollowingUserID(String screenName) {
1340 long[] friendIds = null;
1342 List<Long> result = new ArrayList<Long>();
1347 ids = twitter.getFriendsIDs(screenName, cursor);
1348 // screenNameのフレンドid一覧を取得
1349 friendIds = ids.getIDs();
1350 if (friendIds.length > 0) {
1351 for (long id : friendIds) {
1356 cursor = ids.getNextCursor();
1357 } while (cursor != 0);
1359 } catch (TwitterException e) {
1360 e.printStackTrace();
1366 * Friendのfollewer ID一覧を取得する
1371 public List<Long> getFollowerUserID(String screenName) {
1374 long[] friendIds = null;
1376 List<Long> result = new ArrayList<Long>();
1381 ids = twitter.getFollowersIDs(screenName, cursor);
1382 // screenNameのフレンドid一覧を取得
1383 friendIds = ids.getIDs();
1384 if (friendIds.length > 0) {
1385 for (long id : friendIds) {
1390 cursor = ids.getNextCursor();
1391 } while (cursor != 0);
1393 } catch (TwitterException e) {
1394 e.printStackTrace();
1400 * sinceTweetIDを取得します。
1402 * @return sinceTweetID
1404 public long getSinceTweetID() {
1405 return sinceTweetID;
1409 * sinceTweetIDを設定します。
1411 * @param sinceTweetID
1414 public void setSinceTweetID(long sinceTweetID) {
1415 this.sinceTweetID = sinceTweetID;
1419 * sinceMentionIDを取得します。
1421 * @return sinceMentionID
1423 public long getSinceMentionID() {
1424 return sinceMentionID;
1428 * sinceMentionIDを設定します。
1430 * @param sinceMentionID
1433 public void setSinceMentionID(long sinceMentionID) {
1434 this.sinceMentionID = sinceMentionID;
1438 * sinceSendDirectMessageIDを取得します。
1440 * @return sinceSendDirectMessageID
1442 public long getSinceSendDirectMessageID() {
1443 return sinceSendDirectMessageID;
1447 * sinceSendDirectMessageIDを設定します。
1449 * @param sinceSendDirectMessageID
1450 * sinceSendDirectMessageID
1452 public void setSinceSendDirectMessageID(long sinceSendDirectMessageID) {
1453 this.sinceSendDirectMessageID = sinceSendDirectMessageID;
1457 * sinceDirectMessageIDを取得します。
1459 * @return sinceDirectMessageID
1461 public long getSinceDirectMessageID() {
1462 return sinceDirectMessageID;
1466 * sinceDirectMessageIDを設定します。
1468 * @param sinceDirectMessageID
1469 * sinceDirectMessageID
1471 public void setSinceDirectMessageID(long sinceDirectMessageID) {
1472 this.sinceDirectMessageID = sinceDirectMessageID;