自分だけのするめぼっとを作ろう!
元イベント:http://partake.in/events/3fcea6d7-0bab-4597-82db-86439aadb1b9
この記事はCompetitive Programming Advent Calendar Div2012の 5 日目の記事です
去年に続いてなんか自分がつくったものを書きます!
とりあえず今回はするめぼっとについてかきます!
これ作ったの 2010 年 の 5 月ぐらいなんだなぁ(しみじみ)
するめぼっととは
するめがあったー (tc_srm_jp_bot) on Twitter
https://twitter.com/tc_srm_jp_bot
詳しくは書きのサイトを!
tc_srm_jp_bot - nise_nabeのサイト
https://sites.google.com/site/nisenabe/tc_srm_jp_bot
必要なもの!
git だ!
java だ!
ant だ!
appengine で動かす準備をしよう!
Google App Engine で動かしてます!
作成当時タダで使えて 1 分毎に更新処理ができるみたいな感じだったような.
今でも 1 分毎の cron が動かせるようなところってそんなにないような [要出典]
Downloads - Google App Engine — Google Developers
https://developers.google.com/appengine/downloads?hl=ja
とりあえずダウンロードして置いときます!
/tmp とかでいいんじゃね.(win は知らない)
$ cd /tmp $ wget http://googleappengine.googlecode.com/files/appengine-java-sdk-1.7.3.zip $ unzip appengine-java-sdk-1.7.3.zip
するめぼっとを動かす準備をしよう!
ソースを取得してきます!
$ cd /tmp $ git clone https://github.com/nise-nabe/SRMNotifier.git $ cd SRMNotifier $ cp src/twitter4j.properties.sample src/twitter4j.properties $ cp war/WEB-INF/appengine-web.xml.sample war/WEB-INF/appengine-web.xml $ cp build.properties.sample build.properties
ビルドの準備をしよう!
ダウンロードしてきた appengine のバスを指定します!
$ vim build.properties sdk.dir=/tmp/appengine-java-sdk-1.7.3
ついったーの API を使う準備をしよう!
詳しいことはいろんなところに譲る!
My applications | Twitter Developers
https://dev.twitter.com/apps
なんか consumer key とかいろいろ取ってきます(割愛)
$ cp src/twitter4j.properties.sample src/twitter4j.properties $ vim src/twitter4j.properties oauth.consumerKey=hoge oauth.consumerSecret=hoge oauth.accessToken=hoge oauth.accessTokenSecret=hoge
app-engine を使う準備をしよう!
アプリケーションを作ります!(実際に作ったのは数年前なので今ので動くのかは確認してない)
Create an Application
https://appengine.google.com/start/createapp
ここの Application Identifier を下記ファイルの
version はテキトーでいいです.
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>hogehoge</application> <version>7</version> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties> <threadsafe>true</threadsafe> </appengine-web-app>
念のためテストを動かそう!
パーサのテストを書いてます!本物のページをそのまま保存してるファイルを使っています!
$ ant test
ローカルで動かそう!
$ ant runserver
データベースを更新する!
http://localhost:8080/updater
アクセスした瞬間に通知する必要がある時通知する!(SRM やってない時間だと何もしないと思う)
http://localhost:8080/notifier
本番環境にデプロイしよう!
メモ · nise-nabe/SRMNotifier Wiki
https://github.com/nise-nabe/SRMNotifier/wiki/%E3%83%A1%E3%83%A2
ここの手順のアップデートのようにしましょう!
$ appcfg.sh update war
なにかがおかしい!?
なんとか頑張ってください!
自分で作る!
日本語以外で通知する!
$ vim src/notifier/SRMNotifierServlet.java 27 private static final String[] msgs = { "開始24時間前です", "開始12時間前です", 28 "登録を開始しました", "開始1時間前です", "開始30分前です", "開始15分前です", "開始5分前です", 29 "Coding Phase を開始しました", "Coding Phase を終了しました", 30 "Challenge Phase を開始しました", "終了しました" };
通知時間を変更する!
$ vim src/notifier/SRMNotifierServlet.java 31 private static final long[] dates = { -toLong(24, 60), -toLong(12, 60), 32 -toLong(3, 60), -toLong(1, 60), -toLong(1, 30), -toLong(1, 15), 33 -toLong(1, 5), 0, toLong(1, 75), toLong(1, 80), toLong(1, 95) };
通知する時間を日本以外にする! Locale.JAPAN を別のやつにしてフォーマット書き換えよう!
$ vim src/notifier/parser/SRMCalendarParser.java 29 format = new SimpleDateFormat("yyyy年MM月dd日(E) HH時mm分", Locale.JAPAN);
余談
作った時は「あるだろう」と思って探したらなかったのでとりあえず作った感じ.
最初の方は SRM のほうが不安定で実施時間と全然違ったり(今でもたまにそうか)ひやひやしてたけどまあ自分用だしいいやと割り切った.
あとたまに Google App Engine のほうが落ちたりしてたので(こちらは開催時間外だったのでよかったような)
するめというのはりんごさんがするめするめ言ってた時期に作ったからだった気がする
アプリ名とか名前とか統一感がないのはわざとです(キリッ
画像は手書きです
蛇足
ホントはいろんなところからかき集めてきた情報を使ったカレンダーを出すつもりで実装してたけど公開まで間に合わなかったのでごめんなさい
この記事はバタバタ書いた.
米画面はイメージです
Twitpic - Share photos and videos on Twitter
https://twitpic.com/aw71vs/full