http://ko-lab.net/雑記/google-app-engineのcronでbotを自動実行させる方法/
これじゃわからない人が結構いたみたいなので、Googleの別アカウントがある状態から書いてみるよ。
画像追加する気力はなくなりました…
※「GAE課金される!何それ怖い!」という方向け
・GAEは一定以上のリソース食いつくすと課金しなければ動かせない
・食いつくした後はあとで請求というヤクザ課金ではなくて、こちら側が課金のアクションを起こさない限り動かせなくなるだけです。
・けれど、そこまでひどいスクリプト書いていなければ無料の範囲内でおさまります
・echoやprint、var_dumpやprint_rで出力する部分を削ればなんとかなります。
・1分だと早すぎるので2分5分くらいが丁度いいのではないでしょうか
・軽いかどうかはわかりませんし、動くかどうかもわかりませんが、oAuth使えるPHPスクリプト公開してるんで使ってみたい人は使ってみてくださいね
http://ko-lab.net/雑記/phpで簡単に?oauthでtwitterapiにアクセスしてbotなど作れる関/
参考
http://d.hatena.ne.jp/deeeki/20091201/gae_register_account
http://d.hatena.ne.jp/deeeki/20091202/gae_cron_deploy
書いた人@kotobuki_t
1.Googleのアカウントにログイン
2.http://code.google.com/intl/ja/appengine/の、右上にあるスタートガイド内の登録をクリック
3.Welcome to Google App Engine と出てくるのでCreate an Applicationをクリック
4.Verify Your Account by SMS と出てきます。携帯が必要になります。用意してください
Country and Carrier: を設定しましょう。
左のボックスをJapanにすると、右側のボックスが変わって日本の携帯キャリアが選べるようになります。iPhoneもイーモバイルもウィルコムもあります
自身の携帯キャリアを選んでください。
Username: を設定しましょう。
Username: はメールアドレスの@の前の部分、つまり、
kotobukilabsample@docomo.ne.jp
であれば
kotobukilabsample
がUsername:となります。打ち間違いなどないよう気をつけてください。
Sendをクリック。
メールが送られてきたらAccount codeを入力してください。
Sendをクリック。
ちなみにこの時点で別のアカウントでメールアドレスの認証をしていた自分は弾かれてしまいましたorz
というわけで、続きは登録のやり方を紹介しているサイトを見ながらの作業となります。
5.Create an Application と出るので埋めていきましょう。
Application Identifier: は、アプリケーションのIDを設定します。
「bot」とか「cron」とか直接的な名前だと後々BAN対象になるかもしれないので、適当なIDにしましょう。
例:
mycharasukisuki
Application Title: は、アプリケーションのタイトルを設定します。
これもまた適当な名前にしましょう。
一番下の I accept these terms. にチェックを入れてSave
6.Application Registered Successfully と出てくるはずなので登録は終了。
7.開発に必要なEclipseをダウンロードします。
http://mergedoc.sourceforge.jp/
今回はEclipse 3.5 Galileo Pleiades All in One と書いてあるボタンをクリックしてください。
次のページに移ると、なにやらずらずら並んでいますが、必要なのは、
Full All in One (JRE あり) の Java (左から3つ目の青いDownloadボタン)をクリックしてください。ダウンロードします。
むちゃくちゃでかいです(;´Д`) 600MB弱あります。気長に待ちましょう。
ダウンロードし終わったら、作業しやすいフォルダに解凍しましょう。
まさかのzip使えないとか言う方に
http://www.vector.co.jp/soft/win95/util/se169348.html
8.いろいろ設定するためにeclipseを起動します。
解凍したフォルダ内のeclipse内のeclipse.exeを起動します。
起動が長い(;´Д`)
初回起動にはワークスペース・ランチャーが出てきて、作業するフォルダを設定しなくてはなりません。
面倒くさい人は書いてあるチェック入れてOK。
設定したい人は設定してチェック入れてOK。
やったー起動したよー\(^o^)/
と浮かれてる場合じゃないので、メニューバーのヘルプ内の新規ソフトウェアのインストール…をクリック。
なんか出てきたのでサイトの追加をクリックして、
名前は適当に、ロケーションはhttp://dl.google.com/eclipse/plugin/3.5に設定してください。
作業対象を上で設定したものに変えて、すべてにチェックを入れて 次へ
なんか計算していますので待ちます。
インストール詳細が出るので 次へ
ライセンスのレビューが出るので、使用条件の条項に同意しますにチェックを入れて 完了
何やらインストールが始まります……
Security Warningが出たら、迷わず OKを押しましょう。
再起動しろと言ってくるので再起動しましょう。
なにやらアイコンが増えていたらeclipseの設定完了です。
9.いよいよ、cronの設定をします。
まず、青いgのアイコンをクリックしましょう。
なにやら出てくるので、
プロジェクト名に英数で適当な名前。
パッケージ名にも同じ名前。
GoogleWebツールキットを使用 のチェックを外しましょう。
で完了を押します。
今回は、
プロジェクト名:crontwit
パッケージ名:crontwit
で作業していきます。
左側のプロジェクト・エクスプローラに何か出てきましたね。
まずは、プロジェクト・エクスプローラ上でcrontwit → src → crontwit → CrontwitServlet.java
を開きます。
で、以下をコピペします。
なお、http://your.bot.url/は、動かすBOTのURLに書き換えてください。package crontwit; import java.net.MalformedURLException; import java.net.URL; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import javax.servlet.http.*; @SuppressWarnings("serial") public class CrontwitServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); try { URL url = new URL("http://your.bot.url/");//ここを書き変える BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String line; while ((line = reader.readLine()) != null) { resp.getWriter().println(line); } reader.close(); } catch (MalformedURLException e) { resp.getWriter().println("URL faild : " + e); } catch (IOException e) { resp.getWriter().println("URL faild : " + e); } } }
コピペしたら上書き保存をしましょう。URL url = new URL("http://your.bot.url/");//ここを書き変える
ファイル → 保管でできます。
次に、プロジェクト・エクスプローラ上でcrontwit → war → WEB-INF 上で右クリックして、
新規 → ファイルをクリックしてください。
ファイル名にcron.xmlと打って 完了
cron.xmlが開きますが、編集しにくいので閉じましょう。
プロジェクト・エクスプローラ上でcron.xmlを右クリックし、
アプリケーションから開く → テキスト・エディター
で、編集できるようになります。
そして、以下コピペします。
<cronentries> <cron> <url>/crontwit</url> <description>cronttwit the run every 2 minutes</description> <schedule>every 2 minutes</schedule> <timezone>Asia/Tokyo</timezone> </cron> </cronentries>
ところで、
<schedule>every 2 minutes</schedule>
の数字を変えると、1分でも10分でも動きます。
最低1分で、1分単位です。
他にもこんな感じで設定できるみたいです。
every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday of month 09:00
1st monday of sep,oct,nov 17:00
詳しくは http://code.google.com/intl/ja/appengine/docs/java/config/cron.html
保存は忘れないでください。
ここまでで、cronの設定は終わりです。次からcronを実行できるようにする作業です。
10.cronを実行できるようにデプロイします。
デプロイというのは、要はアップロードして使えるようにすることです。
まずは飛行機のエンジンみたいなアイコンをクリックしましょう。 何も設定していない場合、
crontwit does not have an application ID. Click the project settings link below to set it.
と出てくるので、App Engine project settingをクリックします。
プロパティ画面が出てくるので、アプリケーションIDにGAEに登録した際に設定したApplication IdentifierのIDを入力します。
今回はcrontwitとします。 OKします。
ちゃんと設定できていれば
Enter your Google account email address
と表示されます。 Eメールとパスワードに、Googleのアカウントを入力します。
Ready to deploy application ‘crontwit’, version 1
と表示されるはず(’ ‘ の中身が違うかもしれない)なので、 配置 一番下のコンソール画面が動きだします。 最終的に、一番下が
Deployment completed successfully
となったら完了です!これですべての工程は終了です!お疲れ様でした!
11.動いているかの確認。
https://appengine.google.com/ にアクセスして、
該当のアプリケーションをクリックして、
左のメニューのCron jobsをクリックして、
Success
になってたら動いてます。
12.おまけ
1アプリケーションでいくつかのcronが動かせます。
やり方としては、 パッケージ下にクラスを作る。
名前を入力しないと完了できない。
名前の最初の文字は大文字でなければならない(例:Crontwit2Servlet
つくったらCrontwitServlet.javaの内容をコピペして、
CrontwitServletとなっている部分をクラスの名前(例:Crontwit2Servlet)に直す。(エディタが指摘してくれるから探すのは楽なはず
web.xmlを開いて以下のように書き換えて適当な箇所に追加する
<servlet> <servlet-name>Crontwit2</servlet-name> <servlet-class>crontwit.Crontwit2Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Crontwit2</servlet-name> <url-pattern>/crontwit2</url-pattern> </servlet-mapping>
cron.xmlを開いて<cronentries>内に以下のように追記する
<cron> <url>/crontwit2</url> <description>crontwit2 the run every 2 minutes</description> <schedule>every 2 minutes</schedule> <timezone>Asia/Tokyo</timezone> </cron>
デプロイする。
お疲れ様でした。
多分こんな方法で増やしていくとできると思います。
なにかあったらコメント欄か@kotobuki_tへ
2010/5/12 水曜日 @ 18:25:44.
9.で書かれた通りにコピペしたのですが、10行目で
public 型 CrontwitServlet はそれ独自のファイル内に定義されなければなりません
と警告され、動作しません
どのようにすれば良いのでしょうか