OSDN Git Service

aaa
[traindelaybot/source.git] / workspace / .metadata / .plugins / org.eclipse.core.resources / .history / a4 / 90e96797ea6d001110a188bae663c898
1 package com.yuji.tdb.twitter;\r
2 \r
3 import java.text.DateFormat;\r
4 import java.text.SimpleDateFormat;\r
5 import java.util.ArrayList;\r
6 import java.util.Calendar;\r
7 import java.util.Date;\r
8 import java.util.List;\r
9 import java.util.TimeZone;\r
10 import java.util.logging.Logger;\r
11 \r
12 import twitter4j.Query;\r
13 import twitter4j.QueryResult;\r
14 import twitter4j.Status;\r
15 import twitter4j.Tweet;\r
16 import twitter4j.Twitter;\r
17 import twitter4j.TwitterException;\r
18 import twitter4j.TwitterFactory;\r
19 import twitter4j.auth.AccessToken;\r
20 import twitter4j.conf.ConfigurationBuilder;\r
21 \r
22 import com.yuji.tdb.common.CommonUtil;\r
23 import com.yuji.tdb.db.Train;\r
24 import com.yuji.tdb.db.TrainDao;\r
25 import com.yuji.tdb.utility.StringUtility;\r
26 \r
27 public class TwitterUtil {\r
28         private static final Logger log = Logger\r
29                         .getLogger(TwitterUtil.class.getName());\r
30         private static TwitterUtil instance = null;\r
31         private static Object obj = new Object();\r
32         //private DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
33         private DateFormat df = new SimpleDateFormat("HH:mm");\r
34 \r
35         public static TwitterUtil getInstance() {\r
36                 if (instance == null) {\r
37                         synchronized (obj) {\r
38                                 if (instance == null) {\r
39                                         instance = new TwitterUtil();\r
40                                 }\r
41                         }\r
42                 }\r
43                 return instance;\r
44         }\r
45 \r
46         private TwitterUtil() {\r
47                 df.setTimeZone(TimeZone.getTimeZone("JST")); \r
48         }\r
49 \r
50         public void main(String consumerKey, String consumerSecret, AccessToken accessToken) {\r
51                 try {\r
52                         ConfigurationBuilder confBuilder = new ConfigurationBuilder();\r
53                         confBuilder.setDebugEnabled(true).setOAuthConsumerKey(consumerKey)\r
54                                         .setOAuthConsumerSecret(consumerSecret);\r
55                         TwitterFactory factory = new TwitterFactory(confBuilder.build());\r
56                         Twitter twitter = factory.getInstance(accessToken);\r
57 \r
58                         List<Train> list = getTrainList();\r
59                         for (Train train : list){\r
60                                 twite(twitter, train);\r
61                         }\r
62                 } catch (TwitterException e) {\r
63                         // TODO Auto-generated catch block\r
64                         e.printStackTrace();\r
65                         log.severe(e.toString());\r
66                 }\r
67         }\r
68 \r
69         private void twite(Twitter twitter, Train train) throws TwitterException {\r
70                 Query query = new Query();\r
71                 //query.setRpp(1000); // TODO\r
72                 query.setQuery(train.getSearchWord());\r
73                 QueryResult result = twitter.search(query);\r
74                 List<Tweet> tweets = result.getTweets();\r
75                 \r
76                 Calendar cal = Calendar.getInstance();\r
77                 Date date = cal.getTime();\r
78                 long cur = date.getTime();\r
79 \r
80                 int count = 0;\r
81                 int hit = 0;\r
82                 int mhit = 0;\r
83                 \r
84                 int index;\r
85                 int mindex = 0;\r
86                 int size = tweets.size();\r
87                 for (index = 0; index < size; index++) {\r
88                         Tweet tweet = tweets.get(index);\r
89                         \r
90                         Date at = tweet.getCreatedAt();\r
91                         long t = at.getTime();\r
92                         \r
93                         String message = tweet.getText();\r
94                         \r
95                         if (t < cur - 30 * 60 * 1000){\r
96                                 System.out.println("\81~" + tweet.getFromUser() + " - "\r
97                                                 + tweet.getText() + at);\r
98                                 continue;\r
99                         }\r
100                         hit = filter(message);\r
101                         if (hit <= 0) {\r
102                                 System.out.println("\81¢" + tweet.getFromUser() + " - "\r
103                                                 + tweet.getText() + at);\r
104                                 // \92x\89\84\88È\8aO\82Ì\8f\91\82«\8d\9e\82Ý\r
105                                 continue;\r
106                         }\r
107                         if (hit > mhit){\r
108                                 hit = mhit;\r
109                                 mindex = index;\r
110                         }\r
111 \r
112                         System.out.println("@" + tweet.getFromUser() + " - "\r
113                                         + tweet.getText() + at);\r
114                         count++;\r
115                 }\r
116 \r
117                 String message = "[" + train.getName() + "] ";\r
118                 if (count < train.getCount()){\r
119                         message += " " + df.format(date) + " \92x\89\84\82È\82µ"; \r
120                 }\r
121                 else {\r
122                         int N = 100;\r
123                         \r
124                         String sample = tweets.get(mindex).getText();\r
125                         sample = CommonUtil.replaceString(sample, "@", "(a)");\r
126                         sample = StringUtility.parseSubstring(sample, N);\r
127                         message += " " + df.format(date) + sample + " count=" + count;                                                  \r
128                 }\r
129                 System.out.println(message); //TODO\r
130                 Status status = twitter.updateStatus(message); //TODO\r
131         }\r
132         \r
133         private List<Train> getTrainList(){\r
134                 TrainDao dao = TrainDao.getInstance();\r
135                 List<Train> list = dao.search();\r
136                 if (list.size() <= 0){\r
137                         Train train;\r
138                         \r
139                         train = new Train("\8b\9e\95l\93\8c\96k\90ü", "\8b\9e\95l\93\8c\96k", 5);\r
140                         dao.put(train);\r
141                         train = new Train("\93\8c\8aC\93¹\90ü", "\93\8c\8aC\93¹", 5);\r
142                         dao.put(train);\r
143                         train = new Train("\8b\9e\95l\8b}\8ds\90ü", "\8b\9e\8b}", 5);\r
144                         dao.put(train);\r
145                         list = dao.search();\r
146                 }\r
147                 return list;\r
148         }\r
149         \r
150         private static List<String> keywords = null;\r
151 \r
152         public int filter(String text) {\r
153                 if (keywords == null) {\r
154                         keywords = new ArrayList<String>();\r
155                         keywords.add("\92x\89\84");\r
156                         keywords.add("\92x\82ê");\r
157                         keywords.add("\90U\82è\91Ö\82¦");\r
158                         keywords.add("\90U\91Ö");\r
159                         keywords.add("\92â\8e~");\r
160                         keywords.add("\8e\96\8cÌ");\r
161                 }\r
162 \r
163                 int count = 0;\r
164                 for (String keyword : keywords) {\r
165                         if (text.indexOf(keyword) >= 0) {\r
166                                 count++;\r
167                         }\r
168                 }\r
169                 return count;\r
170         }\r
171 }\r