Hatena::ブログ(Diary)

風柳メモ このページをアンテナに追加 RSSフィード Twitter

2010-01-15

『GAE-Cron』のソース&サービス登録サイト公開

GAE-Cronがなぜか好評みたいで、おかわりぶんもなくなったみたいなので、

GAE-Cron Club GAE-Cron Club - プロバイダ一覧

ゼットンでも倒せそうな勢いのやっつけ仕事なので、いろいろ不具合はあるかと思いますが、ご容赦を。

更新履歴


GAE-Cronアップロード(デプロイ)手順

Google App Engineへの登録がまだの方は、先に

Google App Engineへの登録と開発環境のセットアップ(Python編)

の記事を参照して、登録を済ませておいてください。

また、新規にアプリケーションを作成する前提で説明してあります。

Google App Engine上のWebアプリケーションは、通常、
http://<appid>.appspot.com/
がトップページになりますが、このappidの部分(アプリケーションID)はユーザが決める必要が有ります。

既存のアプリケーションに相乗りさせる場合は、GAE-Cronのソースアーカイブ内にある、READMEを参照して下さい。

■ アプリケーション名の決定

Google App EngineのApplications Overviewページ

https://appengine.google.com/

へ行き(必要に応じてGoogleアカウントでのログインすること)、[Create an Application]ボタンを押すと、

f:id:furyu-tei:20100115232825p:image

の画面が出てくるので、

  1. アプリケーションID:Application Identifier(appidとも。デフォルトでは<appid>.appspot.comがドメイン名)
  2. タイトル:Application Title(英文しか受け付けない模様)

を決定し、[Save]。

appidは他のアプリケーションのものと重なるものは使用不可(<appid>.appspot.comがWeb上で一意である必要があるため、早い者勝ち)。使用できるかどうかは[Check Availability]ボタンで確認可能。

■ GAE-Cronのダウンロードと設定ファイル(app.yaml)の修正

GAE-Cronのソースアーカイブ(ZIPファイル)

http://furyu-tei.sakura.ne.jp/archives/gaecron.zip

をダウンロードし、適当なフォルダに展開。

この例では、C:\GAE というフォルダを作り、その下に展開して C:\GAE\gaecron というフォルダができたものとして説明しています。自分で実際に展開したフォルダ名に適宜読み替えて下さい。

テキストエディタで app.yaml を開き、

application: gaecron

の行の"gaecron"を、自分で登録したアプリケーションID(appid)に書き換え。

■ GAE-Cronのアップロード(デプロイ)

SDKのランチャを起動し(Windows XPのデフォルトではC:\Program Files\Google\google_appengine\launcher\GoogleAppEngineLauncher.exeにある。デスクトップ上のショートカットがあれば、これをダブルクリック)、

f:id:furyu-tei:20100115232819p:image

[File]メニューから[Add Existing Application... Ctrl+Shift+N]を選択すると

f:id:furyu-tei:20100204065640p:image

のようなダイアログが出てくるので、 Application PATH にフォルダ名(例ではC:\GAE\gaecron)を入れて[Add]し、その後、[Deploy]アイコンを押して出てくる

f:id:furyu-tei:20100115232807p:image

のようなダイアログに、登録時に使用したGoogleアカウント及びパスワードを入れて(見切れているが)[OK]ボタンを押してアップロード(デプロイ)する。

f:id:furyu-tei:20100115232801p:image

最終的に、上記のように表示されたら、デプロイ完了。

■ 動作確認

Web上の管理画面(https://appengine.google.com/)にて、デプロイしたアプリケーション名(IDとタイトル)が表示されていることと(図のApplicationとTitleは例、実際は自分で登録したときのものが表示される)、

f:id:furyu-tei:20100204071356p:image

そのアプリのリンク→「Cron Jobs」リンクを辿って、

f:id:furyu-tei:20100204071354p:image

f:id:furyu-tei:20110514164240p:image

のように /gaetimer/timercycle/check_timer/gaetimer/restore の二つが登録されていることを確認。

また、実際にブラウザで http://<appid>.appspot.com/ にアクセスしてみて(<appid>は自分で登録したアプリケーションID)、GAE-Cronのトップページ

f:id:furyu-tei:20100204072748p:image

が表示され、ログインや設定などができるかどうかを確認。

GAE-Cron Clubへの登録

自分だけで使うのも悪いとはいいませんが(笑)、どうせなら公開して、皆で共有できるようにしましょう。

というわけで、

GAE-Cron Club GAE-Cron Club - プロバイダ一覧

へ行って、自分のアプリを登録したアカウントでログインし、自分のGAE-CronのトップページのURLを登録して下さい。ご協力お願いいたします。

登録した人と提供した人が同じかどうか調べるためにちょっと変なことをやっているので、登録するとメールが行くと思いますが、気にしないで下さい(苦笑)。

talkative programmertalkative programmer 2010/01/17 20:54 ソースを公開されたんですね。素晴らしすぎます! しかも「GAE-Cron Club」まで出来上がっている(笑)。
http://gaecronclub.appspot.com/
改めて、感謝です!

7c7c 2010/01/21 04:14 今までelipseを使ってGAEでcron使ってましたが更新が面倒で悩んでました…
試しに自分用に使わせてもらいました!
便利ですね!有難う御座います。
コードで503が頻繁に出てアクセス失敗してるのはやはりGAE特性なんでしょうね…。
様子見て安定してたら自分も公開させてもらいます><

furyu-teifuryu-tei 2010/02/04 09:28 7c さん、反応が遅れましたが、
| コードで503が頻繁に出て
GAE-Cronの管理画面上で、最終起動の結果で503が表示されている場合は、叩く相手側の問題ですので、一応念のため(503=Service Temporarily Unavailable:一時的に利用できなくなっている)。

なお、GAE-Cronの方はリトライ等の仕組みは入れていないので、エラーを返されると次のタイミングまで叩きに行きません。

中古CDざうるす中古CDざうるす 2010/02/09 14:41 @cdzauruskaitoriのbotに使わせていただきました。GAE-Cron Clubに登録しましたよ〜

sorewitchsorewitch 2010/03/05 19:45 ソースを利用させて頂きました。非常に助かりました。
また、GAE-CronClubにも登録させていただきましたー

タゲリタゲリ 2010/03/06 14:59 GAE-Cronを設置しようと頑張っているのですが、紹介通りにしてもうまく設置出来ません。physonはリンクされているところではどこがDLの場所か分からなかったので、日本ユーザーの会からPython 2.5.2の標準インストーラーをDLして
インストールして、ランチャーもGoogleAppEngine_1.3.1.msiをDLしてインストールしました。
gaecronも設定通りに登録したアプリケーションIDを入力してデプロイしているのですが
GAEのページに行くとデプロイされていませんということになってます。
エラー文を見るとhttp://pypi.python.org/pypi/ssl からsslモジュールをインストールしてください
とあったのでDLしたのですが何も起こりません。

これ以上は何をしたら良いのかお手上げ状態です。
書き忘れてましたが、OSはWindowsXP sp3です。
何か解決策がありましたら、アドバイスお願いします

タゲリタゲリ 2010/03/09 16:55 すみません。あちこち調べてなんとか自己解決しました。
長文失礼しました。

S・KS・K 2010/03/11 05:41 デブロイすると下記の様にERRになってしまうのですが
2010-03-11 05:36:05 Running command: "['C:\\Python26\\pythonw.exe', 'C:\\Program Files\\Google\\google_appengine\\appcfg.py', '--no_cookies', u'--email=info@mens-office.com', '--passin', 'update', 'C:\\Users\\Owner\\Downloads\\gaecron\\gaecron']"
Password for info@mens-office.com: C:\Program Files\Google\google_appengine\appcfg.py:41: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
os.path.join(DIR_PATH, 'lib', 'antlr3'),
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_login.py:33: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Application: mensoffice; version: 1.
Server: appengine.google.com.
Scanning files on local disk.
Initiating update.
Error 403: --- begin server output ---
You do not have permission to modify this app (app_id=u'mensoffice').
--- end server output ---
2010-03-11 05:36:13 (Process exited with code 1)

You can close this window now.
何か不足してるものがあるのでしょうか?
ご指導頂けると非常にありがたくお願い申し上げます。

S・KS・K 2010/03/11 06:02 すいません 何か解決したみたいでした。ただ説明図であるアプリの下の部分には表示がされてないので何とも言えないのですが
http://1.latest.mens-office.appspot.com/様に一様出来ましたので ご報告致します。まだ 当方のBOTを動かしてないので
受け入れ態勢は、少々お待ちいただきたいと思っております。
また phさんのBOTも正常に動いてない模様なので 解決することを祈っておりますが URL指定で風柳様の方で設定を行っているのですが ともあれ 今後ともご指導頂けると嬉しく思っております。 あそれとPython2.6.4をインストールするよう促されてしまったのでそれでインストールしましたがOK見たいでした。ちなみにOS Vistaです

はねはね 2010/03/15 15:32 こちらの記述どおりにやってみたのですが、デプロイすると

2010-03-15 15:28:56 Running command: "None"

と表示されてしまいます……。
何が何やらまったく分からず、解決に必要な情報が何かもわかりません;どなたかご指導いただけないでしょうか?

S・KS・K 2010/03/17 13:48 当サーバーをご利用して頂いてる皆様へ 今回CPU使用量が時間帯によりDownしておりますので Cron時間を10分に変更させて頂いております。また1分で設定されてる皆様は、自分で独自のサーバーを立て頂けると他の共有している方に迷惑が掛らないと思いますので宜しくお願い申し上げます。尚再度時間設定を変更された場合は他の皆様に迷惑が掛るので削除させて頂きます。

S・KS・K 2010/03/18 03:36 本日2名の方削除致しました。他の方の迷惑となるので1分で設定されていた方自分でアカントお取り下さい。またERRが出るようなことがあれば共有してる意味がないので 外させて頂く事も御座います。皆さんできちんと他の方の事も考えうまく利用して欲しいと考えております。たまたま 当サーバーでの皆さんの設定が重なってる部分も多々ありましたが共有する部分に置いて1.2分の設定は控えて頂き他の方の迷惑にならないように使用して欲しいと感じております。宜しくお願い致します。

タゲタゲ 2010/03/20 09:23 >>はねさん
OSは何かによると思いますが、WindowsならPythonインストールして
パス設定してあげないと動きません。WindowsでもWindows7はどうなのかまでは分かりませんが…

詳しくはPython パス GAE等でググって下さい

タゲタゲ 2010/03/20 15:26 >>S・Kさん
そのアナウンスはここでしても登録している人が見て無い可能性が高い上に
スレ違いな気がします

ILPILP 2010/03/27 21:38 ソースの方、使用させていただきました、ありがとうございます。
早速GAE-CronClubにも登録させて頂きました。

もももも 2010/03/30 11:57 お世話になっております。
こちらの解説はとても易しく初心者の私にもためになります。

モジュールを入れたり色々と頑張ったのですが、デプロイすると
Error 404: --- begin server output ---
This application does not exist
となってしまいます。
こちらの手順を一つ一つなぞってやっているのですが。
もし、詳しい方がいらしたら解決のヒントになる頁などをお教えいただければ幸いです。
どうぞよろしくお願い申し上げます。

春野春野 2010/04/02 14:30 GAE-Cronの設定までたどりつくことはできたのですが、code 403ではねられっぱなしです。
設定に入れたURLをコピペしてブラウザで直接叩くと、ちゃんと通ります。
原因等わかる方いらっしゃいましたら、ご教授よろしくお願い致します。

774774 2010/04/03 11:06 >>ももさん
パスが間違っているかPythonのパスが通ってないか…
上でも言ってるけどWindowsの場合はpythonインストールするだけでは
使えません。MacでもOSX以外はそのままで使えないようです。
詳しくはWindows(またはMac) Python パス GAE などでググって下さい

>>春野さん
普通のインターネットエラーと同じなので、エラー 403でググって下さい
お使いの鯖仕様かエイプリルフールやイースターイベントでtwitter混雑に巻き込まれている可能性が高いです

774774 2010/04/03 12:50 >>ももさん
あと、忘れてましたが、http://<appid>.appspot.com/の
アプリケーションID;<appid>部分に_や-など含まれてると失敗しやすいです
gae-cronとかgae_cronとかにしているならgaecronにした方が無難

はるのはるの 2010/04/04 04:20 >774さん
私もいろいろググってみて、エイプリルフール混雑かな、というより、そうであって欲しいと願っていたのですが、残念ながら違ったようです。つい今しがたも、やはり403でした。
PHPを置いているレンタル鯖がGAEを弾いている可能性が高そうですね……。
774さん、ご教示ありがとうございました!

ちなみに、レンタル鯖は西院ネットワークスです。

春野春野 2010/04/04 04:23 自分の名前間違えました、上のは正しく春野のレスです。お目汚し申し訳ありません。

氷上氷上 2010/04/04 23:55 大変便利なツール、ありがとうございました!
Eclipsでやろうとしてたんですが、どうにもうまく動かずこちらにたどり着きました。
のちのちの管理もしやすそうで大変助かりました!

せっかく設置したので、GAE-Cron Clubにも参加させていただきました。

tomoaki96tomoaki96 2010/04/13 14:53 こんにちは、お世話になっています。
ソースをお借りし、設置が完了しました。
外出時なども携帯からでも操作できそうなので、大変
便利なものを有難うございます。
せっかくですのでGAE-cronClubに登録しようと思いまして
自分の設置した際に使用したアカウントでClubにログイン、
設置したcronプロバイダの登録を行っているのですが、
状態が「確認中」→「無効」となってしまいプロバイダに
反映されません。なお、この際自分のアドレスから
題名:GAE-Cron Request Token
{"url": "http:\/\/gaecronclub.appspot.com\/receive_report",
"nonce": "XXXXXXXXXX(数字の羅列", "id": "XXXXXXX"}
といったメールが届いています。
同じGmailアドレスで別のcron領域を登録しましたが、
こちらも無効となってしまいました。
GAE-cronソースは最新版:version 0.01bです。
CSSとtemplateは弄りましたが、全く弄ってない方のcronも
無効になるので「おやや??」と言う状態です。
お手すきの際にご確認頂けたら幸いです。(HOMEボタンにappのリンク貼りました)

海龍海龍 2010/04/17 10:43 初めまして。GAE-Cronいつも利用させて頂いております。
分かりやすい導入解説とソースのおかげで、素人の私でも無事設定することができました。
自分のBOT以外でCronを利用しないのは勿体無いと思い、GAE-cronClubに登録しようと何度も試みたのですが
tomoaki96さん同様、無効となってしまい反映されません。

設定人数の兼ね合いなのかと思い、いろいろと件数や人数を変更してみてもダメでした。
もし解決策等がありましたら、どうぞ御指導お願い致します。

774774 2010/04/18 13:39 登録出来ないのは風柳さんの手動許可みたいなものが必要だからかなと思ってます

登録反映された方とされてない方の差は、風柳さんがネットに上がっていた日が
確認された日と見かけなくなった日とほぼかぶりますし

ということで、自分のところで募集しますノシ

774774 2010/04/18 13:42 途中送信してしまいました
>登録した人と提供した人が同じかどうか調べるためにちょっと変なことをやっているので、
>登録するとメールが行くと思いますが、気にしないで下さい(苦笑)。

とあるので風柳さんの手動許可みたいなのがあるのかなと…
違っていたらすいません。でも、最近見かけませんね

furyu-teifuryu-tei 2010/04/29 03:49 諸般の事情によりコメントにお返事等できないまま放置してしまい、申し訳ありません(といいつつ、まだ…)。
774さん他、フォロー頂いた方、有り難うございました。

とりあえず、GAE-Cron Clubに登録出来なくなっていた件は、なおした…つもりです。
※登録許可は一応自動で行なっているのですが、(恐らく)GAE側の仕様変更で正常に動作しなくなっていた模様。

http://d.hatena.ne.jp/furyu-tei/20100429/1272480142
うまく登録出来なかった方は、再度お試し願えますでしょうか。宜しくお願いします。

rere 2010/06/17 12:54 初めまして。
ソースをお借りしています。
先日GAE-Cronを設置してみたのですが、Google API EngineのCurrent Loadで/check_timerのAvg CPUが910 (152)となっており、警告マークが出ているのですがこれは問題ないのものなのでしょうか?
エラーは
/check_timer 200 1835ms 1059cpu_ms 106api_cpu_ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
と出ています。
何分設置するのが初めてでまだ右も左も分からない状態ですが、よろしくお願いします。

furyu-teifuryu-tei 2010/06/21 08:58 re さん、どうもです。

記事:http://d.hatena.ne.jp/furyu-tei/20100620/gaecron
でも少し触れているのですが、呼び出される頻度の比較的低いものの Avg CPUが高いのは、それ程気にすることはないです。
該当のものだとcron+内部処理により1時間に10回程度の呼び出し頻度であり、またクライアント側が自由に呼び出せる類のものでもありませんので。

Avg CPUやログで警告等が出たりするのは『頻繁に呼び出されるようだとCPUリソースを消費しつくしてOver Quotaになるよ』くらいの意味に取ってよいと思います。

もちろん、1分に数十回コールされるなどの、頻度の高い処理(GAE-Cronの例では/gaetimer/timercycle)のAvg CPUが高いと Over Quotaに近づきますので、なるべく低く抑えるように工夫する必要が有ります。

トロロトロロ 2010/07/17 02:01 こちらのサイトに書いてある通りに進めてデプロイするところまで来たのですがそこで詰まってしまいました。
デプロイを押してもサイトに載っているような表示ではなく「Running command: "None"」となります。
同じ状態になった方の質問を見ると回答にWindowsの場合Pythonにパス設定する必要があり、詳しくはググるように書いてあったので探してみたのですが自己解決できませんでした。

ここでも困っているのですがその後一度閉じたGoogle App Engine Launcherが起動しなくなってしまいました。

see the logfile 'C;\program
Files|Google\Google_appengine\launcher\GoogleAppEngineLauncher.exe.l
og'for details

上のエラーが出て起動することができません。
こちらも自己解決できないかと探してみたら何かの要因でパスが指定されてなくてなかったり#http://code.google.com/appengineと[0]の間がブランクになっていてそれを消せば直るという解決法を見つけたのですが
ファイルの中を見るとパスどころか「path= name= port=」の部分すらなく[0]から下は白紙の状態でした。ブランクになっている部分もありませんでした。

cron設定するためにダウンロードした物を全て削除・アンインストールして最初から順番にやり直してみても同じ表示が出て起動できません。
OSはWindowsVista
Python-2.5.5を使っています。

どうすれば解決出来ますでしょうか。
知識がが浅すぎて申し訳ないです。

privatejohnprivatejohn 2010/07/21 09:45 preferencesのpython pathに、"C:\Python25\python.exe"を追加してみてください。Pythonが正常にインストールできていればデプロイできます。google appが起動できない問題に関してはわかりませんが、自分と同じ壁にぶち当たっていたようだったので取り急ぎ。

TakumibooTakumiboo 2010/07/28 01:11 追加しました。
が、すでにあと15人分…。
このために作成したアカウントなのであと9個作れますが、
作ったほうがいいのかな?w

kanamin9kanamin9 2010/08/01 07:22 はじめまして。
ソースをお借りしました。以前から、こちらのサイトを見ては大変便利なツールで良いなぁと思い、自分でも導入したいと思っておりました。分かりやすい設置方法の案内とツールを公開してくださったfuryu-tei様には感謝の念でいっぱいであります。
落ち着き次第、せっかく設置しましたのでGAE-CronClubにも登録させていただきます。
ありがとうございます。

七誌七誌 2010/08/07 12:40 Takumibooさん作ってくれるとありがたいです!
私もちょっと今は悪戦苦闘してますが、先は見えそうなので必死に作れるよう頑張ってますゆえ!!

あずあず 2010/08/25 18:26 管理人様初めまして。ソースをお借りし設置いたしました。
後日登録のほうもしたいと思います。ありがとうございました。

また私もトロロ様と同じくデプロイの際、「Running command: "None"」の表記がのみで正しく作動せず、かなり手間取ってしまいました。
私の場合、
http://www.pythonweb.jp/install/install/
を参考にPythonをDL、インストールし、
http://www.pythonweb.jp/install/setup/index1.html
に書いてある通りに設定、そして
ランチャーの上メニューEditからPreferences...を選び、
一番上のPython Pathに、上でインストールしたPythonファイルの中身の「pythonw.exe」を指定しますと上手く作動しました。
(また上記のサイトでは2.6での説明ですが最新版に2.7があったのでそっちを使いました)

当方はGAEに限らず、このようなツールを作れることを今日はじめて知ったような者ですので、本当にこれで正しいかと言われればちょっと自信がないのですが
確かに正常に作動し、設置することが出来ましたので
同じような場所で詰んでいるという方は試してみてはいかがでしょうか!

ゆんゆん 2010/08/26 20:13 はじめまして、ソースお借りしています。
説明にそってやっていたのですが、私もトロロさん同様、Google Appの起動エラーに陥りました。
表記も同様で、

see the logfile 'C;\program 〜

のエラー警告が。
ログを調べてみたところ、正常値と違う状態(簡単にいえば書きこみのエラー)になってしまっていました。
その場合は白紙に戻す、つまり【ユーザーフォルダ→Googleフォルダ→google_appengine_projects】を開き、

# Gogle App Engine Launcher Project File
# http://code.google.com/appengine

だけを残し、以下を(たぶん[0]とあるはず)削除してしまえば良いようです。
それで再起動できましたので、同じ状況になってしまった方は一度試してみると良いかと。
長文失礼いたしました〜

alg-ljalg-lj 2011/02/17 02:36 ソースをお借りして、GAE-Cron Clubに登録いたしました。
大変良いものをありがとうございます。

yamayama 2011/05/14 22:18 はじめまして。ソースをお借りしました。
大変良いものをありがとうございます。
先日1号機をGAE-Cron Clubに登録させていただいたところ残数がゼロとなったので、本日2号機を登録致しましたが、無効になってしまいます。
自分のbotでは動作するので問題は無いと思うのですが・・・。更新を試みても無効のままです。問題を見つけられず困っています。

furyu-teifuryu-tei 2011/05/14 23:57 yamaさん

調査してみて、原因らしきものを見つけたので、先程GAE-Cron Clubの処理を修正しました。
お手数ですが、今一度お試し願えますか?

furyu-teifuryu-tei 2011/05/15 21:09 yama さん

すみません、GAE-Cron Club側の処理を修正するだけでは不十分でした。

お手数ですが、可能でしたら、お手元のGAE-Cronのソース中、gaecron.pyの1314行目にある、
app_id = os.environ.get('APPLICATION_ID',u'')
というのを
app_id = re.sub(u'^.+?~',r'',os.environ.get('APPLICATION_ID',u'')) # remove 's~' prefix
に変更してからDeployし、お試し下さい。

yamayama 2011/05/15 21:09 furyu-tei 様
ありがとうございます。残念ながら、先ほど再度試みましたが無効のままです。2号機を設置するにあたり変更したのはアプリケーションの名前だけ(当然ですが)で、自分のbotは動作します。
何かこちらで解決のために行えることはありますでしょうか。

furyu-teifuryu-tei 2011/05/15 21:16 yama さん
すみません、当方が直前に書き込みましたコメント
http://d.hatena.ne.jp/furyu-tei/20100115/gaecronclub#c1305461341
を参考にして、再度試していただけると幸いです。

yamayama 2011/05/15 21:52 furyu-tei 様
すみません、上のレスは入れ違いで書いてしまいました。
ソースの変更を試して見ます。ご親切にありがとうございます。

yamayama 2011/05/15 22:09 furyu-tei 様
http://d.hatena.ne.jp/furyu-tei/20100115/gaecronclub#c1305461341
の記事のとおり修正したところ、GAE-Cron Clubの登録が有効になりました。ありがとうございます

YYYY 2011/05/19 02:01 初めまして。ソースをお借りしました。大変ありがとうございました!
GAEの管理画面からCron jobsを開いたのですが、/gaetimer/timercycleは通常起動しているのですが/gaetimer/restoreのほうが起動していないと赤字で表示されます。どうしたらいいかわかりませんお教えいただけないでしょうか。

furyu-teifuryu-tei 2011/05/19 06:11 YY さん、赤字のメッセージはどんな感じでした?
every 30 minutes (UTC)
2???/??/?? ??:??:?? on time Hasn't been run
のような感じであれば、まだ起動していない、というだけです。
/gaetimer/restoreは30分に1回の起動で、Deployした直後はまだ起動していないということです。
30分経過すると、表示が変化するのではないかと思います。ご確認下さい。

名無し名無し 2012/01/14 02:47 GAE-Cron clubに登録されている「yamaさん」のプロバイダをお借りしています。
自身で作ろうにもGAEから全くメールが返って来ず、諦めかけていました。
この場を借りてお礼を言わせて下さい。ありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証