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.log.TwitterLogManager;
22 import twitter4j.Annotations;
23 import twitter4j.DirectMessage;
24 import twitter4j.GeoLocation;
25 import twitter4j.HashtagEntity;
27 import twitter4j.PagableResponseList;
28 import twitter4j.Paging;
29 import twitter4j.Place;
30 import twitter4j.Query;
31 import twitter4j.QueryResult;
32 import twitter4j.RateLimitStatus;
33 import twitter4j.ResponseList;
34 import twitter4j.Status;
35 import twitter4j.StatusUpdate;
36 import twitter4j.Tweet;
37 import twitter4j.Twitter;
38 import twitter4j.TwitterException;
39 import twitter4j.TwitterFactory;
40 import twitter4j.URLEntity;
41 import twitter4j.User;
42 import twitter4j.UserList;
43 import twitter4j.UserMentionEntity;
44 import twitter4j.conf.Configuration;
45 import twitter4j.conf.ConfigurationBuilder;
46 import twitter4j.auth.*;
48 public class TweetManager {
51 * DirectMessageのユーザ情報等からステータスを生成
56 private class DirectMessageUserStatus implements Status {
61 private static final long serialVersionUID = 1L;
62 // 受信したdirectMessageの情報
63 private DirectMessage message = null;
65 private User user = null;
67 public DirectMessageUserStatus(DirectMessage directMessage, User user) {
68 this.message = directMessage;
73 public String[] getContributors() {
78 public Date getCreatedAt() {
79 return message.getCreatedAt();
83 public GeoLocation getGeoLocation() {
93 public String getInReplyToScreenName() {
94 return ((SimpleUser) user).getStatusInReplyToScreenName();
98 public long getInReplyToStatusId() {
99 return ((SimpleUser) user).getStatusInReplyToUserId();
103 public long getInReplyToUserId() {
108 public Place getPlace() {
113 public RateLimitStatus getRateLimitStatus() {
114 return user.getRateLimitStatus();
118 public Status getRetweetedStatus() {
123 public String getSource() {
128 public String getText() {
129 return message.getText();
133 public User getUser() {
138 public boolean isFavorited() {
139 return ((SimpleUser) user).isStatusFavorited();
143 public boolean isRetweet() {
148 public boolean isTruncated() {
152 public int compareTo(Status t) {
153 throw new UnsupportedOperationException("Not supported yet.");
157 public Annotations getAnnotations() {
158 // TODO 自動生成されたメソッド・スタブ
163 public HashtagEntity[] getHashtagEntities() {
164 // TODO 自動生成されたメソッド・スタブ
169 public long getRetweetCount() {
170 // TODO 自動生成されたメソッド・スタブ
175 public URLEntity[] getURLEntities() {
176 // TODO 自動生成されたメソッド・スタブ
181 public UserMentionEntity[] getUserMentionEntities() {
182 // TODO 自動生成されたメソッド・スタブ
187 public boolean isRetweetedByMe() {
188 // TODO 自動生成されたメソッド・スタブ
193 private Twitter twitter = null;
194 // クライアントのConsumer Key
195 private static final String CONSUMER_KEY = "tbo5erit2M2ZzN6n8tEYcA";
196 // クライアントのConsumer Secret 外部に漏れてはいけない
197 private static final String CONSUMER_SECRET = "tODurbdySLYU1pKjtB3MQTDRBGy562dHzVf7d62mm8";
199 private String accessToken = "";
200 // secretToken 外部に漏れてはいけない
201 private String secretToken = "";
203 private static final String PROPERTIES_DIRECTORY = TweetConfiguration.PROPERTIES_DIRECTORY;
205 private static final String TWEET_INFO_FILENAME = TweetConfiguration.TWEET_INFO_FILENAME;
207 private static final String ACCOUNT_INFORMATION_FILENAME = TweetConfiguration.ACCOUNT_INFORMATION_FILENAME;
209 private final int MAX_TWEET_NUM = 99;
211 private long sinceTweetID = 0;
212 // 前回取得したmentionのtweetID
213 private long sinceMentionID = 0;
214 // 前回取得したsendDirectMessageの情報
215 private long sinceSendDirectMessageID = 0;
216 // 前回取得したdirectMessageの情報
217 private long sinceDirectMessageID = 0;
219 private Properties property = null;
221 private Properties accountProperty = null;
223 private TwitterLogManager logManager = null;
225 //following IDリスト keyはユーザ名, valueはユーザがfollowingしているid
226 private Map<String, List<Long>> followingUserIDList = new HashMap<String, List<Long>>();
228 public TweetManager() {
229 logManager = new TwitterLogManager();
235 * @throws IOException
236 * @throws FileNotFoundException
238 public void loadProperties() throws FileNotFoundException, IOException {
239 if (property == null) {
240 this.property = new Properties();
242 property.load(new FileInputStream("./" + PROPERTIES_DIRECTORY + "/"
243 + TWEET_INFO_FILENAME));
245 String sti = this.property.getProperty("sinceTweetID");
247 * String smi = this.property.getProperty("sinceMentionID"); String
248 * ssdmi = this.property.getProperty("sinceSendDirectMessageID"); String
249 * sdmi = this.property.getProperty("sinceDirectMessageID");
253 this.sinceTweetID = Long.parseLong(sti);
255 * this.sinceMentionID = Long.parseLong(smi);
256 * this.sinceSendDirectMessageID = Long.parseLong(ssdmi);
257 * this.sinceDirectMessageID = Long.parseLong(sdmi);
259 } catch (NumberFormatException e) {
267 * @throws IOException
269 public void saveProperties() throws IOException {
271 File logDir = new File("./" + PROPERTIES_DIRECTORY);
272 if (!logDir.exists()) {
273 // ディレクトリが存在しないので作成する
274 if (logDir.mkdir() == false) {
275 throw new IOException(PROPERTIES_DIRECTORY
276 + "ディレクトリを作成できませんでした.");
279 if (property == null) {
280 this.property = new Properties();
283 this.property.setProperty("sinceTweetID", sinceTweetID + "");
285 * this.property.setProperty("sinceMentionID", sinceMentionID + "");
286 * this.property.setProperty("sinceSendDirectMessageID",
287 * sinceSendDirectMessageID + "");
288 * this.property.setProperty("sinceDirectMessageID",
289 * sinceDirectMessageID + "");
292 property.store(new FileOutputStream("./" + PROPERTIES_DIRECTORY + "/"
293 + TWEET_INFO_FILENAME), null);
299 * @throws FileNotFoundException
300 * @throws IOException
302 public void loadAccountProperties() throws FileNotFoundException,
304 if (accountProperty == null) {
305 this.accountProperty = new Properties();
307 accountProperty.load(new FileInputStream("./" + PROPERTIES_DIRECTORY
308 + "/" + ACCOUNT_INFORMATION_FILENAME));
310 this.accessToken = this.accountProperty.getProperty("accessToken");
311 this.secretToken = this.accountProperty.getProperty("secretToken");
317 * @throws IOException
319 public void saveAccountProperties() throws IOException {
321 File logDir = new File("./" + PROPERTIES_DIRECTORY);
322 if (!logDir.exists()) {
323 // ディレクトリが存在しないので作成する
324 if (logDir.mkdir() == false) {
325 throw new IOException(PROPERTIES_DIRECTORY
326 + "ディレクトリを作成できませんでした.");
329 if (accountProperty == null) {
330 this.accountProperty = new Properties();
333 this.accountProperty.setProperty("accessToken", this.accessToken);
334 this.accountProperty.setProperty("secretToken", this.secretToken);
336 accountProperty.store(new FileOutputStream("./" + PROPERTIES_DIRECTORY
337 + "/" + ACCOUNT_INFORMATION_FILENAME), null);
345 * @throws TwitterException
347 public List<Status> getDirectMessages(int num) throws TwitterException {
348 List<DirectMessage> directMessages = twitter
349 .getDirectMessages(new Paging(1, num));
351 List<Status> messageList = new ArrayList<Status>();
353 if (directMessages != null && directMessages.size() > 0) {
355 this.sinceDirectMessageID = directMessages.get(0).getId();
356 // 一番新しいtweetを一番したに持ってくる
357 for (DirectMessage message : directMessages) {
358 User user = message.getSender();
359 DirectMessageUserStatus status = new DirectMessageUserStatus(
361 messageList.add(0, status);
367 } catch (IOException e) {
378 * @throws TwitterException
380 public List<Status> getSendDirectMessages(int num) throws TwitterException {
381 List<DirectMessage> directMessages = twitter
382 .getSentDirectMessages(new Paging(1, num));
384 List<Status> messageList = new ArrayList<Status>();
385 if (directMessages != null && directMessages.size() > 0) {
387 this.sinceSendDirectMessageID = directMessages.get(0).getId();
388 // 一番新しいtweetを一番したに持ってくる
389 for (DirectMessage message : directMessages) {
390 User user = message.getRecipient();
391 DirectMessageUserStatus status = new DirectMessageUserStatus(
393 messageList.add(0, status);
398 } catch (IOException e) {
409 * @throws TwitterException
411 public List<Status> getMentions(int num) throws TwitterException {
412 List<Status> statuses = twitter.getMentions(new Paging(1, num));
414 List<Status> tweetList = new ArrayList<Status>();
415 if (statuses != null && statuses.size() > 0) {
417 this.sinceMentionID = statuses.get(0).getId();
418 // 一番新しいtweetを一番したに持ってくる
419 // for (Status status : statuses) {
420 // tweetList.add(0, status);
422 Collections.reverse(statuses);
423 tweetList.addAll(statuses);
427 } catch (IOException e) {
434 * まだ取得していないDirectMessageを取得
437 * @throws TwitterException
439 public List<Status> getNewDirectMessages() throws TwitterException {
440 if (this.sinceDirectMessageID == 0) {
441 return getDirectMessages(MAX_TWEET_NUM);
443 List<DirectMessage> directMessages = twitter
444 .getDirectMessages(new Paging(sinceDirectMessageID));
445 // もし20件データ取得したらもっとデータがある可能性がある
446 if (directMessages.size() >= 20) {
447 List<DirectMessage> ndata = twitter.getDirectMessages(new Paging(1,
449 ndata = ndata.subList(21, ndata.size());
450 for (DirectMessage s : ndata) {
451 // すでに取得したことのあるデータだったとき
452 if (s.getId() <= sinceDirectMessageID) {
455 directMessages.add(s);
459 List<Status> messageList = new ArrayList<Status>();
460 if (directMessages != null && directMessages.size() > 0) {
462 this.sinceDirectMessageID = directMessages.get(0).getId();
463 // 一番新しいtweetを一番したに持ってくる
464 for (DirectMessage message : directMessages) {
465 Status status = message.getSender().getStatus();
466 messageList.add(0, status);
471 } catch (IOException e) {
478 * まだ取得していないSendDirectMessageを取得
481 * @throws TwitterException
483 public List<Status> getNewSendDirectMessages() throws TwitterException {
484 if (this.sinceSendDirectMessageID == 0) {
485 return getSendDirectMessages(MAX_TWEET_NUM);
487 List<DirectMessage> directMessages = twitter
488 .getDirectMessages(new Paging(sinceSendDirectMessageID));
489 // もし20件データ取得したらもっとデータがある可能性がある
490 if (directMessages.size() >= 20) {
491 List<DirectMessage> ndata = twitter
492 .getSentDirectMessages(new Paging(1, MAX_TWEET_NUM));
493 ndata = ndata.subList(21, ndata.size());
494 for (DirectMessage s : ndata) {
495 // すでに取得したことのあるデータだったとき
496 if (s.getId() <= sinceSendDirectMessageID) {
499 directMessages.add(s);
503 List<Status> messageList = new ArrayList<Status>();
504 if (directMessages != null && directMessages.size() > 0) {
506 this.sinceSendDirectMessageID = directMessages.get(0).getId();
507 // 一番新しいtweetを一番したに持ってくる
508 for (DirectMessage message : directMessages) {
509 Status status = message.getRecipient().getStatus();
510 messageList.add(0, status);
515 } catch (IOException e) {
522 * まだ取得していないMention情報を取得
525 * @throws TwitterException
527 public List<Status> getNewMentionData() throws TwitterException {
529 if (sinceMentionID == 0) {
530 return getMentions(MAX_TWEET_NUM);
532 // getFriendsTimelineではRetweetは表示されないので注意
533 List<Status> statuses = twitter.getMentions(new Paging(sinceMentionID));
534 // もし20件データ取得したらもっとデータがある可能性がある
535 if (statuses.size() >= 20) {
536 List<Status> ndata = twitter.getMentions(new Paging(1,
538 ndata = ndata.subList(21, ndata.size());
539 for (Status s : ndata) {
540 // すでに取得したことのあるデータだったとき
541 if (s.getId() <= sinceMentionID) {
549 List<Status> tweetList = new ArrayList<Status>();
550 if (statuses != null && statuses.size() > 0) {
552 sinceMentionID = statuses.get(0).getId();
554 // 一番新しいtweetを一番したに持ってくる
556 * for (Status status : statuses) { tweetList.add(0, status); }
558 Collections.reverse(statuses);
559 tweetList.addAll(statuses);
563 } catch (IOException e) {
570 * まだ取得していないtweet情報を取得
573 * @throws TwitterException
575 public List<Status> getNewTimelineData() throws TwitterException {
577 if (sinceTweetID == 0) {
578 return getTimeline(MAX_TWEET_NUM);
580 // getFriendsTimelineではRetweetは表示されないので注意
581 List<Status> statuses = twitter
582 .getHomeTimeline(new Paging(sinceTweetID));
583 // もし20件データ取得したらもっとデータがある可能性がある
584 if (statuses.size() >= 20) {
585 List<Status> ndata = twitter.getHomeTimeline(new Paging(1,
587 ndata = ndata.subList(21, ndata.size());
588 for (Status s : ndata) {
589 // すでに取得したことのあるデータだったとき
590 if (s.getId() <= sinceTweetID) {
597 List<Status> tweetList = new ArrayList<Status>();
598 if (statuses != null && statuses.size() > 0) {
600 sinceTweetID = statuses.get(0).getId();
602 // 一番新しいtweetを一番したに持ってくる
604 * for (Status status : statuses) { tweetList.add(0, status); }
606 Collections.reverse(statuses);
607 tweetList.addAll(statuses);
612 * for (Status s : tweetList) { logManager.add(s); }
614 logManager.add(tweetList);
615 } catch (IOException e) {
621 } catch (IOException e) {
628 * タイムラインを取得 一番新しいツイートは要素の一番下に追加
633 * @throws TwitterException
635 public List<Status> getTimeline(int num) throws TwitterException {
636 // getFriendsTimelineではRetweetは表示されないので注意
637 List<Status> statuses = twitter.getHomeTimeline(new Paging(1, num));
639 List<Status> tweetList = new ArrayList<Status>();
640 if (statuses != null && statuses.size() > 0) {
642 sinceTweetID = statuses.get(0).getId();
644 // 一番新しいtweetを一番したに持ってくる
645 // for (Status status : statuses) {
646 // tweetList.add(0, status);
648 Collections.reverse(statuses);
649 tweetList.addAll(statuses);
653 // for (Status s : tweetList) {
654 // logManager.add(s);
656 logManager.add(tweetList);
657 } catch (IOException e) {
662 } catch (IOException e) {
675 public List<Status> getNewSearchResult(long sinceID, String searchWord) {
678 return getSearchResult(MAX_TWEET_NUM, searchWord);
681 // TODO:同じようなコードを二回書いてる.ここは修正の必要があるかも
683 Query query = new Query(searchWord);
685 query.setRpp(this.MAX_TWEET_NUM);
689 query.setSinceId(sinceID);
691 QueryResult queryResult = null;
693 queryResult = twitter.search(query);
694 } catch (TwitterException ex) {
695 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
696 "Twitter searchに失敗しました", ex);
697 ex.printStackTrace();
700 List<Status> tweetList = new ArrayList<Status>();
702 if (queryResult != null) {
703 for (Tweet tweet : queryResult.getTweets()) {
705 SimpleUser user = new SimpleUser();
707 user.setName(tweet.getFromUser());
708 user.setScreenName(tweet.getFromUser());
710 user.setId(tweet.getFromUserId());
714 .setProfileImageURL(new URL(tweet
715 .getProfileImageUrl()));
716 } catch (MalformedURLException ex) {
717 Logger.getLogger(TweetManager.class.getName()).log(
718 Level.SEVERE, null, ex);
721 SimpleStatus status = new SimpleStatus();
722 status.setCreatedAt(tweet.getCreatedAt());
723 status.setId(tweet.getId());
724 status.setSource(tweet.getSource());
725 status.setText(tweet.getText());
726 status.setUser(user);
729 tweetList.add(status);
732 // リスト逆転 一番あたらしいtweetを一番下に
733 Collections.reverse(tweetList);
747 public List<Status> getSearchResult(int num, String searchWord) {
748 Query query = new Query(searchWord);
754 QueryResult queryResult = null;
756 queryResult = twitter.search(query);
757 } catch (TwitterException ex) {
758 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
759 "Twitter searchに失敗しました", ex);
760 ex.printStackTrace();
763 List<Status> tweetList = new ArrayList<Status>();
765 if (queryResult != null) {
766 for (Tweet tweet : queryResult.getTweets()) {
768 SimpleUser user = new SimpleUser();
770 user.setName(tweet.getFromUser());
771 user.setScreenName(tweet.getFromUser());
773 user.setId(tweet.getFromUserId());
777 .setProfileImageURL(new URL(tweet
778 .getProfileImageUrl()));
779 } catch (MalformedURLException ex) {
780 Logger.getLogger(TweetManager.class.getName()).log(
781 Level.SEVERE, null, ex);
784 SimpleStatus status = new SimpleStatus();
785 status.setCreatedAt(tweet.getCreatedAt());
786 status.setId(tweet.getId());
787 status.setSource(tweet.getSource());
788 status.setText(tweet.getText());
789 status.setUser(user);
792 tweetList.add(status);
796 // リスト逆転 一番あたらしいtweetを一番下に
797 Collections.reverse(tweetList);
806 * nullの場合,自分自身のお気に入りを取得
808 public List<Status> getFavoritesTweet(String screenName)
809 throws TwitterException {
810 // getFriendsTimelineではRetweetは表示されないので注意
811 List<Status> statuses = null;
812 if (screenName == null) {
814 statuses = twitter.getFavorites();
816 statuses = twitter.getFavorites(screenName);
818 // リスト逆転 一番あたらしいtweetを一番下に
819 Collections.reverse(statuses);
829 * @throws TwitterException
831 public List<Status> getUserTimeline(int num, long userID)
832 throws TwitterException {
833 List<Status> statuses = twitter.getUserTimeline(userID, new Paging(1,
837 if (statuses != null && statuses.size() > 0) {
838 Collections.reverse(statuses);
850 * @throws TwitterException
852 public List<Status> getUserTimeline(int num, String screenName)
853 throws TwitterException {
854 List<Status> statuses = twitter.getUserTimeline(screenName, new Paging(1,
858 if (statuses != null && statuses.size() > 0) {
859 Collections.reverse(statuses);
867 * 指定したユーザが保持しているリスト一覧を取得
869 * @param userScreenName
872 public List<UserList> getUserLists(String userScreenName) {
873 List<UserList> userlist = new ArrayList<UserList>();
878 PagableResponseList<UserList> list = this.twitter.getUserLists(
879 userScreenName, cursor);
880 userlist.addAll(list);
882 if (list.hasNext()) {
884 cursor = list.getNextCursor();
889 } catch (TwitterException ex) {
890 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
897 * 指定したユーザをフォローしているリストを返す
899 * @param userScreenName
902 public List<UserList> getUserListSubscriptions(String userScreenName) {
903 List<UserList> userlist = new ArrayList<UserList>();
908 PagableResponseList<UserList> list = this.twitter
909 .getUserListSubscriptions(userScreenName, cursor);
910 userlist.addAll(list);
912 if (list.hasNext()) {
914 cursor = list.getNextCursor();
919 } catch (TwitterException ex) {
920 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
927 * 指定したユーザが追加されているリストを返す
929 * @param userScreenName
932 public List<UserList> getUserListMemberships(String userScreenName) {
933 List<UserList> userlist = new ArrayList<UserList>();
938 PagableResponseList<UserList> list = this.twitter
939 .getUserListMemberships(userScreenName, cursor);
940 userlist.addAll(list);
942 if (list.hasNext()) {
944 cursor = list.getNextCursor();
949 } catch (TwitterException ex) {
950 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
959 * @param userScreenName
966 * @throws TwitterException
968 public List<Status> getUserListStatuses(String userScreenName, int listID,
970 List<Status> tweetList = null;
972 tweetList = this.twitter.getUserListStatuses(userScreenName,
973 listID, new Paging(1, num));
974 } catch (TwitterException ex) {
975 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
979 if (tweetList != null && tweetList.size() > 0) {
980 Collections.reverse(tweetList);
988 * @param userScreenName
995 public List<Status> getNewUserListStatuses(String userScreenName,
996 int listID, long sinceID) {
998 return getUserListStatuses(userScreenName, listID, MAX_TWEET_NUM);
1000 List<Status> tweetList = null;
1002 tweetList = this.twitter.getUserListStatuses(userScreenName,
1003 listID, new Paging(sinceID));
1004 } catch (TwitterException ex) {
1005 Logger.getLogger(TweetManager.class.getName()).log(Level.SEVERE,
1009 if (tweetList != null && tweetList.size() > 0) {
1010 Collections.reverse(tweetList);
1021 * @throws TwitterException
1023 public List<Status> getNewUserTimeline(long userID, long sinceID)
1024 throws TwitterException {
1027 return getUserTimeline(MAX_TWEET_NUM, userID);
1030 List<Status> statuses = twitter.getUserTimeline(userID, new Paging(
1034 if (statuses != null && statuses.size() > 0) {
1035 Collections.reverse(statuses);
1047 * @throws TwitterException
1049 public List<Status> getNewUserTimeline(String screenName, long sinceID)
1050 throws TwitterException {
1053 return getUserTimeline(MAX_TWEET_NUM, screenName);
1056 List<Status> statuses = twitter.getUserTimeline(screenName, new Paging(
1060 if (statuses != null && statuses.size() > 0) {
1061 Collections.reverse(statuses);
1070 public void loginTwitter() throws FileNotFoundException, IOException {
1071 twitter = new TwitterFactory().getInstance();
1073 loadAccountProperties();
1075 twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
1076 // ここにユーザのアクセストークンを入れる
1077 AccessToken ac = new AccessToken(accessToken, secretToken);
1078 twitter.setOAuthAccessToken(ac);
1082 } catch (FileNotFoundException e) {
1083 e.printStackTrace();
1084 } catch (IOException e) {
1085 e.printStackTrace();
1090 * Configurationを生成する
1094 private Configuration getTwitterConfiguration() {
1095 ConfigurationBuilder confbuilder = new ConfigurationBuilder();
1096 confbuilder.setOAuthConsumerKey(CONSUMER_KEY);
1097 confbuilder.setOAuthConsumerSecret(CONSUMER_SECRET);
1098 return confbuilder.build();
1102 * 初回時アクセストークンを取得する際に利用する
1106 * @throws TwitterException
1108 public void getAccessToken(String username, String password)
1109 throws TwitterException {
1110 // consumer key secretを設定
1111 Configuration conf = this.getTwitterConfiguration();
1112 twitter = new TwitterFactory(conf).getInstance();
1114 AccessToken oAuthAccessToken = twitter.getOAuthAccessToken(username,
1116 this.accessToken = oAuthAccessToken.getToken();
1117 this.secretToken = oAuthAccessToken.getTokenSecret();
1120 // 取得したOAuthのトークンを保存
1121 saveAccountProperties();
1122 } catch (IOException ex) {
1123 ex.printStackTrace();
1131 * @throws TwitterException
1133 public void tweet(String message) throws TwitterException {
1134 twitter4j.Status status;
1135 status = twitter.updateStatus(message);
1142 * @param replyToStatusID
1143 * @throws TwitterException
1145 public void replyTweet(String message, long replyToStatusID) throws TwitterException {
1146 twitter4j.Status status;
1147 // status = twitter.updateStatus(message, replyToStatusID);
1148 StatusUpdate updateMsg = new StatusUpdate(message);
1149 updateMsg.setInReplyToStatusId(replyToStatusID);
1150 status = twitter.updateStatus(updateMsg);
1158 * @throws TwitterException
1160 public void sendDirectMessage(String screenName, String text)
1161 throws TwitterException {
1162 twitter.sendDirectMessage(screenName, text);
1166 * 指定したステータスIDの発言をRetweet
1169 * @throws TwitterException
1171 public void retweet(long statusID) throws TwitterException {
1172 twitter.retweetStatus(statusID);
1179 * @throws TwitterException
1181 public void createFavorite(long statusID) throws TwitterException {
1182 twitter.createFavorite(statusID);
1186 * 指定した発言のお気に入りを取り下げる
1190 public void destroyFavorite(long statusID) throws TwitterException {
1191 twitter.destroyFavorite(statusID);
1198 * @throws TwitterException
1200 public RateLimitStatus getRateLimitStatus() throws TwitterException {
1201 return twitter.getRateLimitStatus();
1209 public String getScreenName() {
1211 if (twitter != null) {
1212 return twitter.getScreenName();
1214 } catch (TwitterException e) {
1221 * 指定したユーザのfollowingユーザ一覧の詳細情報を取得
1222 * @param screenName 取得したいユーザ
1223 * @param page ページ1あたり100件の情報を取得
1226 public List<User> getFollowingUser(String screenName, int page) {
1227 if( !this.followingUserIDList.containsKey(screenName) ) {
1228 //まだscreenNameがfollowingしているユーザ情報を取得していない
1229 List<Long> following = this.getFollowingUserID(screenName);
1230 this.followingUserIDList.put(screenName, following);
1232 //followingユーザ一覧id取得
1233 List<Long> getFollowingUserIds = null;
1234 List<Long> followingList = this.followingUserIDList.get(screenName);
1235 if( followingList != null && followingList.size() > 0 ) {
1236 getFollowingUserIds = followingList.subList(page * 100, page * 100 + 99);
1240 List<User> result = new ArrayList<User>();
1242 int getDataSize = getFollowingUserIds.size();
1243 if( getDataSize > 0 ) {
1244 long[] ids = new long[ getDataSize ];
1245 for( int i=0; i < ids.length; i++) {
1246 ids[i] = getFollowingUserIds.get( i );
1251 ResponseList<User> users = twitter.lookupUsers( ids );
1252 for(User u : users) {
1255 } catch (TwitterException e) {
1256 e.printStackTrace();
1269 public List<Long> getFollowingUserID(String screenName) {
1272 long[] friendIds = null;
1274 List<Long> result = new ArrayList<Long>();
1279 ids = twitter.getFriendsIDs( screenName, cursor );
1280 //screenNameのフレンドid一覧を取得
1281 friendIds = ids.getIDs();
1282 if( friendIds.length > 0 ) {
1283 for(long id : friendIds ) {
1288 cursor = ids.getNextCursor();
1289 }while( cursor != 0 );
1291 }catch(TwitterException e) {
1292 e.printStackTrace();