OSDN Git Service

Txxxxx
[traindelaybot/source.git] / workspace / TrainDelayBot / src / com / yuji / tdb / twitter / TwitterUtil.java
index 854280b..4454060 100644 (file)
@@ -5,7 +5,9 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
+import java.util.HashMap;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.TimeZone;\r
 import java.util.logging.Logger;\r
 \r
@@ -20,8 +22,10 @@ import twitter4j.auth.AccessToken;
 import twitter4j.conf.ConfigurationBuilder;\r
 \r
 import com.yuji.tdb.common.CommonUtil;\r
+import com.yuji.tdb.db.KeyValueDao;\r
 import com.yuji.tdb.db.Train;\r
 import com.yuji.tdb.db.TrainDao;\r
+import com.yuji.tdb.debug.Debug;\r
 import com.yuji.tdb.utility.StringUtility;\r
 \r
 public class TwitterUtil {\r
@@ -31,7 +35,11 @@ public class TwitterUtil {
        private static Object obj = new Object();\r
        //private DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
        private DateFormat df = new SimpleDateFormat("HH:mm");\r
-\r
+       private static List<String> keywords = null;\r
+       private long searchPeriod = 0;\r
+       private long twitPeriod = 0;\r
+       private Map<String, Long> twitTimeList = new HashMap<String, Long>();\r
+       \r
        public static TwitterUtil getInstance() {\r
                if (instance == null) {\r
                        synchronized (obj) {\r
@@ -57,6 +65,17 @@ public class TwitterUtil {
 \r
                        List<Train> list = getTrainList();\r
                        for (Train train : list){\r
+                               Calendar cal = Calendar.getInstance();\r
+                               Date date = cal.getTime();\r
+                               long cur = date.getTime();\r
+\r
+                               long id = train.getId();\r
+                               long t = getTwitTime(id);\r
+                               long period = getTwitPeriod();\r
+\r
+                               if (t > 0 && cur < t + period * 60 * 1000){\r
+                                       continue;\r
+                               }\r
                                twite(twitter, train);\r
                        }\r
                } catch (TwitterException e) {\r
@@ -70,7 +89,14 @@ public class TwitterUtil {
                Query query = new Query();\r
                //query.setRpp(1000); // TODO\r
                query.setQuery(train.getSearchWord());\r
-               QueryResult result = twitter.search(query);\r
+               QueryResult result = null;\r
+               try {\r
+                       result = twitter.search(query);\r
+               }\r
+               catch (TwitterException e){\r
+                       log.severe("" + Debug.getLineNo());\r
+                       throw e;\r
+               }\r
                List<Tweet> tweets = result.getTweets();\r
                \r
                Calendar cal = Calendar.getInstance();\r
@@ -80,6 +106,8 @@ public class TwitterUtil {
                int count = 0;\r
                int hit = 0;\r
                int mhit = 0;\r
+               long period = getSearchPeriod();\r
+               long id = train.getId();\r
                \r
                int index;\r
                int mindex = 0;\r
@@ -92,7 +120,7 @@ public class TwitterUtil {
                        \r
                        String message = tweet.getText();\r
                        \r
-                       if (t < cur - 5 * 60 * 1000){\r
+                       if (t < cur - period * 60 * 1000){\r
                                System.out.println("\81~" + tweet.getFromUser() + " - "\r
                                                + tweet.getText() + at);\r
                                continue;\r
@@ -122,12 +150,24 @@ public class TwitterUtil {
                        int N = 100;\r
                        \r
                        String sample = tweets.get(mindex).getText();\r
-                       sample = CommonUtil.replaceString(sample, "@", "(a)");\r
+                       //sample = CommonUtil.replaceString(sample, "@", "(a)");\r
                        sample = StringUtility.parseSubstring(sample, N);\r
                        message += df.format(date) + " " + sample + " count=" + count;                                                  \r
                }\r
                System.out.println(message); //TODO\r
-               Status status = twitter.updateStatus(message); //TODO\r
+               \r
+               Status status = null;\r
+               try {\r
+                       status = twitter.updateStatus(message); //TODO\r
+                       if (count < train.getCount()){\r
+                               setTwitTime(id, cur); // TODO \92x\89\84\82È\82µ\82Ì\8e\9e\82Ì\82Ý\r
+                       }\r
+               }\r
+               catch (TwitterException e){\r
+                       log.severe(Debug.getLineNo() + " " + message);\r
+                       log.severe(Debug.getLineNo() + " " + status);\r
+                       throw e;\r
+               }\r
        }\r
        \r
        private List<Train> getTrainList(){\r
@@ -147,8 +187,6 @@ public class TwitterUtil {
                return list;\r
        }\r
        \r
-       private static List<String> keywords = null;\r
-\r
        public int filter(String text) {\r
                if (keywords == null) {\r
                        keywords = new ArrayList<String>();\r
@@ -168,4 +206,37 @@ public class TwitterUtil {
                }\r
                return count;\r
        }\r
+       \r
+       public long getSearchPeriod(){\r
+               if (searchPeriod <= 0){\r
+                       KeyValueDao dao = KeyValueDao.getInstance();\r
+                       searchPeriod = dao.getInt(KeyValueDao.KEY_SEARCH_PERIOD, 5);\r
+               }\r
+               return searchPeriod;\r
+       }\r
+       \r
+       public long getTwitPeriod(){\r
+               if (twitPeriod <= 0){\r
+                       KeyValueDao dao = KeyValueDao.getInstance();\r
+                       twitPeriod = dao.getInt(KeyValueDao.KEY_TWIT_PERIOD, 60);\r
+               }\r
+               return twitPeriod;\r
+       }\r
+       \r
+       private long getTwitTime(long id){\r
+               String key = KeyValueDao.KEY_TWIT_TIME + id;\r
+               Long value = twitTimeList.get(key);\r
+               if (value == null){\r
+                       value = 0L;\r
+                       setTwitTime(id, value);\r
+               }\r
+               return value;\r
+       }\r
+       \r
+       private void setTwitTime(long id, long value){\r
+               String key = KeyValueDao.KEY_TWIT_TIME + id;\r
+               twitTimeList.put(key, value);\r
+               KeyValueDao dao = KeyValueDao.getInstance();\r
+               dao.put(key, String.valueOf(value));\r
+       }\r
 }\r