1 package com.yuji.tdb;
\r
3 import java.io.IOException;
\r
4 import java.util.ArrayList;
\r
5 import java.util.Calendar;
\r
6 import java.util.Date;
\r
7 import java.util.List;
\r
9 import javax.servlet.http.HttpServlet;
\r
10 import javax.servlet.http.HttpServletRequest;
\r
11 import javax.servlet.http.HttpServletResponse;
\r
13 import twitter4j.Query;
\r
14 import twitter4j.QueryResult;
\r
15 import twitter4j.Status;
\r
16 import twitter4j.Tweet;
\r
17 import twitter4j.Twitter;
\r
18 import twitter4j.TwitterException;
\r
19 import twitter4j.TwitterFactory;
\r
20 import twitter4j.auth.AccessToken;
\r
21 import twitter4j.auth.OAuthAuthorization;
\r
22 import twitter4j.auth.RequestToken;
\r
23 import twitter4j.conf.Configuration;
\r
24 import twitter4j.conf.ConfigurationBuilder;
\r
26 import com.yuji.tdb.common.CommonUtil;
\r
28 @SuppressWarnings("serial")
\r
29 public class TrainDelayBotServlet extends HttpServlet {
\r
30 private static RequestToken requestToken = null;
\r
31 private static AccessToken accessToken = null;
\r
32 private static String consumerKey = null;
\r
33 private static String consumerSecret = null;
\r
35 public void doGet(HttpServletRequest req, HttpServletResponse resp)
\r
36 throws IOException {
\r
37 resp.setContentType("text/plain");
\r
38 resp.getWriter().println(" traindelaybot Hello, world");
\r
40 String consumerKey = req.getParameter("key");
\r
41 String consumerSecret = req.getParameter("secret");
\r
42 String result = req.getParameter("result");
\r
43 if (!CommonUtil.isNull(consumerKey)
\r
44 && !CommonUtil.isNull(consumerSecret)) {
\r
45 setOAuthAuthorization(req, resp, consumerKey, consumerSecret);
\r
47 } else if (!CommonUtil.isNull(result)) {
\r
48 resultOAuthAuthorization();
\r
55 private void setOAuthAuthorization(HttpServletRequest req,
\r
56 HttpServletResponse resp, String consumerKey, String consumerSecret) {
\r
58 ConfigurationBuilder confBuilder = new ConfigurationBuilder();
\r
60 confBuilder.setDebugEnabled(true);
\r
61 confBuilder.setOAuthConsumerKey(consumerKey);
\r
62 confBuilder.setOAuthConsumerSecret(consumerSecret);
\r
63 Configuration conf = confBuilder.build();
\r
65 String url = req.getRequestURL().toString();
\r
67 OAuthAuthorization oauth = new OAuthAuthorization(conf);
\r
68 // Twitter
\82Ì
\94F
\8fØ
\89æ
\96Ê
\82©
\82ç
\82Ì
\96ß
\82è
\90æ
\82ð
\8ew
\92è
\82µ
\82Ü
\82·
\81B
\r
69 // AccessToken
\83R
\83\93\83g
\83\8d\81[
\83\89\82ð
\8ew
\92è
\82µ
\82Ü
\82·
\81B
\r
70 String callbackURL = url + "?result=yes";
\r
71 // RequestToken requestToken =
\r
72 // oauth.getOAuthRequestToken(callbackURL);
\r
73 requestToken = oauth.getOAuthRequestToken(callbackURL);
\r
74 // RequestToken
\82ð
\83Z
\83b
\83V
\83\87\83\93\82É
\95Û
\91¶
\82µ
\82Ä
\82¨
\82«
\82Ü
\82·
\81B
\r
75 // sessionScope("RequestToken", requestToken);
\r
76 // Twitter
\82Ì
\94F
\8fØ
\89æ
\96Ê
\82Ö
\83\8a\83_
\83C
\83\8c\83N
\83g
\82µ
\82Ü
\82·
\81B
\r
78 TrainDelayBotServlet.consumerKey = consumerKey;
\r
79 TrainDelayBotServlet.consumerSecret = consumerSecret;
\r
81 resp.sendRedirect(requestToken.getAuthenticationURL());
\r
82 } catch (TwitterException e) {
\r
83 // TODO Auto-generated catch block
\r
84 e.printStackTrace();
\r
85 } catch (IOException e) {
\r
86 // TODO Auto-generated catch block
\r
87 e.printStackTrace();
\r
91 private void resultOAuthAuthorization() {
\r
93 // Twitter twitter = new TwitterFactory().getInstance();
\r
94 if (requestToken == null || CommonUtil.isNull(consumerKey)
\r
95 || CommonUtil.isNull(consumerSecret)) {
\r
98 // String tokenKey = requestToken.getToken();
\r
99 // String tokenSecret = requestToken.getTokenSecret();
\r
101 ConfigurationBuilder confBuilder = new ConfigurationBuilder();
\r
102 confBuilder.setDebugEnabled(true).setOAuthConsumerKey(consumerKey)
\r
103 .setOAuthConsumerSecret(consumerSecret);
\r
104 TwitterFactory factory = new TwitterFactory(confBuilder.build());
\r
105 Twitter twitter = factory.getInstance();
\r
107 accessToken = twitter.getOAuthAccessToken(requestToken);
\r
108 } catch (TwitterException e) {
\r
109 // TODO Auto-generated catch block
\r
110 e.printStackTrace();
\r
114 private void main() {
\r
116 String text = "
\8b\9e\95l
\93\8c\96k";
\r
119 ConfigurationBuilder confBuilder = new ConfigurationBuilder();
\r
120 confBuilder.setDebugEnabled(true).setOAuthConsumerKey(consumerKey)
\r
121 .setOAuthConsumerSecret(consumerSecret);
\r
122 TwitterFactory factory = new TwitterFactory(confBuilder.build());
\r
123 Twitter twitter = factory.getInstance(accessToken);
\r
125 Calendar cal = Calendar.getInstance();
\r
126 Date date = cal.getTime();
\r
127 long cur = date.getTime();
\r
129 Query query = new Query();
\r
130 query.setRpp(100); // TODO
\r
131 query.setQuery(text);
\r
132 QueryResult result = twitter.search(query);
\r
133 List<Tweet> tweets = result.getTweets();
\r
135 String sample = "<none>";
\r
136 for (Tweet tweet : tweets) {
\r
137 Date at = tweet.getCreatedAt();
\r
138 long t = at.getTime();
\r
139 String message = tweet.getText();
\r
141 if (t < cur - 30 * 60 * 1000){
\r
144 if (!filter(message)) {
\r
145 //
\92x
\89\84\88È
\8aO
\82Ì
\8f\91\82«
\8d\9e\82Ý
\r
148 if (sample == null){
\r
151 System.out.println("@" + tweet.getFromUser() + " - "
\r
152 + tweet.getText() + at);
\r
155 String message = "";
\r
157 message = "
\92x
\89\84\82È
\82µ " + date.toString();
\r
160 sample = CommonUtil.replaceString(sample, "@", "(a)");
\r
161 message = sample + " " + date.toString() + "count=" + count;
\r
163 Status status = twitter.updateStatus(message);
\r
164 } catch (TwitterException e) {
\r
165 // TODO Auto-generated catch block
\r
166 e.printStackTrace();
\r
170 private List<String> keywords = null;
\r
172 private boolean filter(String text) {
\r
173 if (keywords == null) {
\r
174 keywords = new ArrayList<String>();
\r
175 keywords.add("
\92x
\89\84");
\r
176 keywords.add("
\92x
\82ê");
\r
177 keywords.add("
\90U
\82è
\91Ö
\82¦");
\r
178 keywords.add("
\92â");
\r
181 for (String keyword : keywords) {
\r
182 if (text.indexOf(keyword) >= 0) {
\r