package com.yuji.tdb; import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import twitter4j.Query; import twitter4j.QueryResult; import twitter4j.Status; import twitter4j.Tweet; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.auth.AccessToken; import twitter4j.auth.OAuthAuthorization; import twitter4j.auth.RequestToken; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; import com.yuji.tdb.common.CommonUtil; @SuppressWarnings("serial") public class TrainDelayBotServlet extends HttpServlet { private static RequestToken requestToken = null; private static AccessToken accessToken = null; private static String consumerKey = null; private static String consumerSecret = null; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println(" traindelaybot Hello, world"); String consumerKey = req.getParameter("key"); String consumerSecret = req.getParameter("secret"); String result = req.getParameter("result"); if (!CommonUtil.isNull(consumerKey) && !CommonUtil.isNull(consumerSecret)) { setOAuthAuthorization(req, resp, consumerKey, consumerSecret); return; } else if (!CommonUtil.isNull(result)) { resultOAuthAuthorization(req, resp); return; } main(); } private void setOAuthAuthorization(HttpServletRequest req, HttpServletResponse resp, String consumerKey, String consumerSecret) { try { ConfigurationBuilder confBuilder = new ConfigurationBuilder(); confBuilder.setDebugEnabled(true); confBuilder.setOAuthConsumerKey(consumerKey); confBuilder.setOAuthConsumerSecret(consumerSecret); // Configuration conf = ConfigurationContext.getInstance(); Configuration conf = confBuilder.build(); OAuthAuthorization oauth = new OAuthAuthorization(conf); // Twitterの認証画面からの戻り先を指定します。 // AccessTokenコントローラを指定します。 String callbackURL = "http://localhost:8888/traindelaybot?result=yes"; // RequestToken requestToken = // oauth.getOAuthRequestToken(callbackURL); requestToken = oauth.getOAuthRequestToken(callbackURL); // RequestTokenをセッションに保存しておきます。 // sessionScope("RequestToken", requestToken); // Twitterの認証画面へリダイレクトします。 TrainDelayBotServlet.consumerKey = consumerKey; TrainDelayBotServlet.consumerSecret = consumerSecret; resp.sendRedirect(requestToken.getAuthenticationURL()); } catch (TwitterException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void resultOAuthAuthorization() { try { // Twitter twitter = new TwitterFactory().getInstance(); if (requestToken == null || CommonUtil.isNull(consumerKey) || CommonUtil.isNull(consumerSecret)) { return; } // String tokenKey = requestToken.getToken(); // String tokenSecret = requestToken.getTokenSecret(); ConfigurationBuilder confBuilder = new ConfigurationBuilder(); confBuilder.setDebugEnabled(true).setOAuthConsumerKey(consumerKey) .setOAuthConsumerSecret(consumerSecret); TwitterFactory factory = new TwitterFactory(confBuilder.build()); Twitter twitter = factory.getInstance(); accessToken = twitter.getOAuthAccessToken(requestToken); } catch (TwitterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void main() { String text = "京浜東北"; try { Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); String message = "テスト " + date.toString(); // AccessToken accessToken = new AccessToken(tokenKey, tokenSecret); // Twitter twitter = factory.getInstance(); Status status = twitter.updateStatus(message); // Twitter twitter = new TwitterFactory().getInstance(); QueryResult result = twitter.search(new Query(text)); List tweets = result.getTweets(); for (Tweet tweet : tweets) { System.out.println("@" + tweet.getFromUser() + " - " + tweet.getText()); } } catch (TwitterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }