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
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
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
\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
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
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
\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
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
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
}\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