1read 100read
2012年1月1期WebProg46: Google App Engine for Python 4アプ目 (633)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
・ 次のスレ
47: PerlでPostgreSQL (83)
48: これってKENTのCGIのパクリ? (134)
49: このCGIを作っちゃおう。 (52)
50: ●転送量削減について● (99)
Google App Engine for Python 4アプ目
1 :11/04/12 〜 最終レス :12/01/09 Google App Engine http://code.google.com/appengine/ ■過去スレ Google App Engine http://pc11.2ch.net/test/read.cgi/php/1207754942/ Google App Engine 2アプ目 http://pc11.2ch.net/test/read.cgi/php/1243654802/ Google AppEngine 3アプ目 http://hibari.2ch.net/test/read.cgi/php/1267057923/ ■リンク集 はてなブックマーク http://b.hatena.ne.jp/t/gae http://b.hatena.ne.jp/t/Google%20App%20Engine Delicious http://delicious.com/popular/gae http://delicious.com/popular/googleappengine ■参考サイト App Engine ギャラリー http://appgallery.appspot.com/ ドキュメント http://code.google.com/appengine/docs/python/overview.html
2 : 日本語書籍 Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ) http://www.amazon.co.jp/dp/4774139858/ Google App Engineプログラミング入門 http://www.amazon.co.jp/dp/4048676938/ Google App Engine 実践リファレンス http://www.amazon.co.jp/dp/4774141275/ 入門 Google App Engine for Java http://www.amazon.co.jpdp/479802452X/ 新人プログラマのためのGoogle App Engineクラウド・アプリケーション開発講座―JAVA PYTHON対応 http://www.amazon.co.jp/dp/4899772483/
3 : http://ow.ly/user/aoKaeru http://www.ustream.tv/channel/ 東京浅草放射線値-asakusa-tokyo http://twitter.com/aoKaeru/statuses/57484274865152000 http://www.houshasen-pref-ibaraki.jp/present/result01.html http://www.ustream.tv/channel/geiger-counter-tokyo http://www.ustream.tv/channel/ ガイガーカウンタ http://www.ustream.tv/channel/ 放射線レベル http://park18.wakwak.com/~weather/geiger_index.html http://www.atom.pref.kanagawa.jp/cgi-bin2/telemeter_map.cgi?Area=all&Type=WL http://geiger.maido3.com/
4 : 最近の人気エントリ Google APP Engine Python入門(2010年2月版) ttp://d.hatena.ne.jp/kagigotonet/20100209/1265726225 > Google APP Engineについては初期のころのまとめはあるのですが、Pythonですとリリースからそろそろ2年近くになり内容も大きく様変わりしています。 > 最速マスターシリーズでもGoogle APP Engineについてのまとめが無く、そろそろアップデートの必要があると思いまとめてみました。 > 基本的にwindows環境中心です。 Google App Engineを使って無料でサイトを立ち上げる方法 http://techblog.ecstudio.jp/tech-tips/freewebsite-with-google-app-engine.html > このGoogle App Engine(以下 GAE)、アプリケーション開発だけでしか使えないと思われがちなのですが、実は設定を工夫すれば通常のHTMLによるサイトを作って運用することも可能です。 > 多少初期設定の手順は複雑ですが、このスペックのサーバーを無料で使用出来ることを考えれば試してみる価値はあるのではないかと思います。 > Webサイトを立ち上げるまでの手順をまとめてみましたので、公開したいと思います。 【特集】Google App Engineで開発するためのフレームワーク × 16 + α http://coolcoding.com/2010/01/frameworks_for_gae/ > いざGAEで開発をはじめるとしても、素のままで書き始める必要はありません。 > すでに多様なフレームワークが提供されており、そうしたフレームワークを活用することでより素早くGAE上での開発ができるようになります。 > 今回はGAEで開発を行う際にチェックしたいフレームワークを紹介したいと思います。 Google App Engineで開発するスケールするアプリケーション(前編) http://codezine.jp/article/detail/4591 > 本稿の前編では、主にGoogle App Engineの概要と特徴、そしてWebシステムをスケールするための手法、考え方について説明します。 > 中編・後編では、Google App Engine上で動作する、twitterと連携したアプリケーションを紹介し、Google App Engine上でのアプリケーション構築方法について説明します。
5 : 続き 約半月で 4,000,000PV を華麗にさばく Google App Engine http://www.1x1.jp/blog/2010/02/gae_twirate_sppspot_com.html > このサイトはGoogle App Engine(GAE)+Pythonで構築しているのですが、このアクセス数ならではのGAE上で体験できたことをざざっと書いていきます。 第1回 Google App Engine上でLL+RDBアプリを作ろう http://www.atmarkit.co.jp/fcoding/articles/gaephp/01/gaephp01a.html > Web アプリケーション開発者にとって、魅力的な環境に映るGoogle App Engineだが、データの永続化などで落とし穴が存在する。 > これまでの開発手法を変えずに使えないだろうか(編集部) Life is beautiful: Google App Engine上のベスト・プラクティス、その1: Datastore http://satoshi.blogs.com/life/2010/02/app_engine.html > Google App Engine上でアプリを作りはじめて約二ヶ月。いろいろと分かって来たこともあるので、自分へのメモも含めてまとめてみる。 > まずは、Datastore の話から。 GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法 http://tech.kayac.com/archive/gae-jruby-twitter-bot.html > というわけで彼女を作ってみました。...まさに僕だけのボット彼女です。 > 今回はこれをGoogleAppEngine+JRubyで実装したので、環境をつくるところか実際に動かすところまで説明します。 Google App Engineで独自ドメインを使う http://www.1x1.jp/blog/2010/01/google_app_engine_my_domain.html > GAEに設置したアプリケーションはデフォルトでは、[アプリケーションID + .appspot.com]というドメインでアクセスすることができます。 > また、これとは別に独自ドメインをアプリケーションに割り当てることもできます。 > 独自ドメインを割り当てる方法は知っていないと嵌りやすいので手順を書いておきます。
6 : このスレッドは天才pンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
7 : ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ !! └─┘ !!
8 : その他 Python基礎文法最速マスター http://d.hatena.ne.jp/dplusplus/20100126#p1 > ↓に便乗してPython版も書いてみました。 appengine ja night #6 http://atnd.org/events/3228 > Google App Engine (Python/Java)の勉強会です。利用者同士で実践的ノウハウを共有しましょう! Python Hack-a-thon #4 http://atnd.org/events/2906 > 予定は未定です。日程も未定です。定員も未定です。 Python東海・Ruby東海 合同勉強会 http://atnd.org/events/3204 > PythonとRuby言語について理解を深めるのと同時にお互いの勉強会の交流のために合同勉強会を開催します。 ■推奨フレームワーク kay 圭 http://code.google.com/p/kay-framework/ 日本語ドキュメント http://kay-docs-jp.shehas.net/index.html あとKayにバンドルしているWerkzeugのデバッガはけっこう使いやすいですよ。使い方なんかはこのあたりを見てください http://kay-docs-jp.shehas.net/debugging.html Google App Engineプログラミング入門 (kay の解説本) http://www.amazon.co.jp/dp/4048676938
9 : kay使ってる人って、どれくらいいるんだろう
10 : >>1 乙
11 : Kayはfull stackなせいかゴテゴテしてる印象があるな。 あとドキュメントが少なめだから機能が把握しにくい。 シンプルがいい人はFlask + buildoutがオススメ。
12 : >>1 乙
13 : サーバー側コーディング不要のGoogle App Engine開発環境「jsonengine」(2/2):CodeZine http://codezine.jp/article/detail/5690?p=2 もうPythonのマイクロフレームワーク「Flask」でもApp EngineのTwitter Botは15行じゃ書けない - http://d.hatena.ne.jp/ambasa/20110317/p1 FlaskならApp EngineのTwitter Botが15行で書ける ? TRIVIAL TECHNOLOGIES 2.0 http://coreblog.org/ats/making-app-engine-twitter-bot-in-15-lines-by-using-Flask microneを使ったらApp EngineのTwitter botが14行で書けた |TRIVIAL TECHNOLOGIES on CLOUD http://coreblog.org/ats/writing-app-engine-twitter-bot-in-14-limes-with-aha-microne
14 : >>13 勉強になったわ ありがとう
15 : 「〇〇が簡単にできるフレームワーク」は〇〇しか簡単にできない
16 : だからこそ簡単なのです
17 : gaesynkit - Google App Engine Datastore/Client Storage Synchronization ttp://www.reddit.com/r/AppEngine/comments/gspqf/gaesynkit_google_app_engine_datastoreclient/
18 : なんでPython 2.5なんだよぉ 2.6に対応する予定はないの?
19 : 2.7なら
20 : Android の ASEをインストールし、Pythonの起動、.pyをバックグランドで実行するまでの操作を動画にしました。 Androidのバージョンは 2.2です。 WindowsSDKで実験しましたので、他の実機で動くかは保証できません。 (というより、実機が無いのでエミューレータw) 特に詳しい人じゃないので難しい質問には答えられません(キリッ Android ASE at Python. (from japan) http://www.youtube.com/watch?v=RHaMv5XfcDE
21 : スレチ
22 : また落ちてるよ なんだこれ
23 : 前スレは落ちたんじゃなくて埋まったよ
24 : Phthonはこちらでよろしいでしょうか? datastoreのmodelで質問です。 ユニークキーを提供するクラスメソッドを考えてるんですが put()をオーバーライドしてその仲でmydata.get_or_insert(key_name,ID=ID)で エンティティを作成してみました。 あとは自分自身をこのエンティティにコピーしないといけないと思うのですが、やり方がわかりません。 class mydata(db.Model): def put(self): tmp = self.get_or_sinsert(key_name=self.ID,ID=self.ID) tmp = self #こんなわけない・・・エンティティ要素だけコピー? tmp.put()
25 : あ、追加で質問です。上記の方法だとModelのPutが呼ばれないのではないかって気が付きました。 根本から考え直す必要がありますね・・・ヒントをお願いします。
26 : 質問です。 GAE+BeautifulSoup利用でスクレイピングしようとしています。 html_str = urlfetch.fetch(url).content bs = BeautifulSoup.BeautifulSoup(html_str) でcontent( http://may.2chan.net/b/res/47764907.htm など、主にふたば関連)を読んでもらう時に以下のエラーが出ます TypeError: expected string or buffer html_str = "<html><head></head><body>foo<b>hogehoge</b>bar</body></html>" のように自前で用意した文字列、別のURL( http://nekomimi.ws/~zankuro/ )をfetchした場合に正常に動作することを確認しています。 原因はHTMLソースにあるんでしょうか? エラーの説明と、もし分かれば解決策が欲しいです。
27 : contentがNoneになってないか? >>> from BeautifulSoup import BeautifulSoup >>> soup = BeautifulSoup(None) Traceback (most recent call last): ... File "Python27\lib\site-packages\BeautifulSoup.py", line 1915, in _detectEncoding '^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) TypeError: expected string or buffer
28 : >>24 putした際に返されるkeyを自身や誰かが保持するのでは駄目ですか? putした時点で勝手にユニークキーは一つできるし、mydata.key()で自由に参照できますが……
29 : >>27 contentがNoneかどうかはifで予め判断してます。以下ソース一部。 resultはURLかNoneを格納し、wget()はcontentかNoneを返します。 if result: self.response.headers['Content-Type'] = 'text/plain' html = self.wget(result) if html is None: return else: bs = BeautifulSoup.BeautifulSoup(html) a_tag = bs.find('a') a_tag.extract() self.response.out.write( str(bs) )
30 : >>29 ではlogging.info('%r', type(html))とかやって 実際に何が入っているか確認してみれば?
31 : >>28 ありがとうございます。 なるほど・・・・ 前処理の考え方を変えればそれでいい感じです。 自前のユニークキーにとらわれすぎていました。 ありがとうございました。
32 : 今デプロイできてます?
33 : また落ちてる ありえん
34 : お 治ったか >>23 馬鹿には無理
35 : 馬鹿がいるな
36 : 馬鹿しかいない
37 : >>30 infoにもちゃんと'str'って表示されてたのでやたら困惑しました。 で、結局俺のコードに間違いはない(キリッってことでSOUPのバージョンを変えたところ、なぜかすっきり動いてくれました。BeautifulSoup3.1.0から3.0.8へ。 あとは文字コードで何度かエラー出されたのを修正して今は欲しいテキスト吐いてくれてます。 3.1.0と3.0.8でなにか動作違うところがあって、そこに引っかかってたんだと思うけど…面倒なんで調べないです。
38 : インデントが構文に組み込まれている屑言語なんか 使うわけねーだろw
39 : Programing Google App Engine のp.99 http://j.mp/hNgd29 には、 - url: /static/images/.* script: $PYTHON_LIB/google/appengine/ext/zipserve こんな風に書いておくと/script/images.zipから読み込む的なことが書いてあるんだけど、 zipserveのソース http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/zipserve/__init__.py を見るとサブディレクトリから.zipを読み込むように書いていないっぽいんだけどどうなんでしょうか? エラーログを見ると/script/images/hogeリクエストに対して script.zipを読みに行ってCan't open script.zipっていうエラーで404を返してるみたい。
40 : その'/script'はどこから出てきたんだ?'/static'の間違い?
41 : >>40 そうだよ/staticの間違いだよ。悪かったな。
42 : 切れててワラタ 平身低頭の態度がmemcache並の寿命だな
43 : db.Modelのverbose_nameを取得するにはどうしたらいいでしょうか?
44 : Model.verbose_name
45 : ごめんなさい間違えました。 class A(db.Model) t = db. StringProperty(verbose_name="本文") このようなモデルクラスを定義した場合 a=A(t="これは本文") このようなエンティティから {本文,a.t} という辞書リストを得るのにどうしたらよいかということです。 最終的にJSONで出力したいと思っております。 よろしくお願いします。
46 : a.t.verbose_name
47 : あ、それでいけるんですか? コードスニペットに出てこないし、他に記述がみつからないので諦めてました。 明日テストしてみます。
48 : AttributeError: 'str' object has no attribute 'verbose_name' やはりダメです
49 : a.properties()['t'].verbose_name これだと取れるようです。コンソールだと文字化けするのでわかりませんけど。 というわけで、今度はプロパティ名を文字列で取得しなければならないです。 調べてみます。
50 : 失礼します。 use_library('django', '1.2')でdjangoを切り替えて使っています。 pydevからは from django.utils import simplejson するとエディタ上エラーになります。 でもコンソールから from django.utils import simplejson すると通ります。 このエディタのエラーが出ないようにする方法を御存知ありませんか?
51 : >>50 djangoのとは別にsimplejsonが入っているので import simplejsonでいける
52 : >>51 ありがとうございました!
53 : 今日から始めた初心者なんですが スタートガイドをコピペしてやったら複数行以上命令を書くと ずらずらっと長いのがでて最後に print "" print "Hello" ^ SyntaxError: invalid syntax ってでるんだけど何がだめなの? 環境がまずい?Mac snow leopard, python2.6.1です。
54 : >>53 駄目なのは思いやりが9割とバージョンが1割くらい
55 : 何行目が駄目って出てるはずだからそこをチェックする
56 : >スタートガイドをコピペしてやったら複数行以上命令を書くと 自分で打ち込め
57 : >>53 スタートガイドのどのコードなのかをURLで示してくれ。 じゃないとなんともいわれん
58 : 作者のソースコードが元から間違ってるのかも知れないし 本に印刷するときにミスプリしたのかも知れないし >>53 がコピペするときに変なコード(全角空白とかインデント崩れとか)になったのかも知れないし >>53 が正真正銘の馬鹿かも知れないし ただの釣りかも知れないし
59 : >>54-58 ありがとうございます。 ソースとエラーログをこっちにあげました。 http://www1.axfc.net/uploader/Sc/so/228516.zip スタートガイドはgoogle のです。 http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/helloworld.html ターミナルからpythonを実行させる時は問題なく出力されます。
60 : >>59 改行コードだね。¥nではなく¥rになってる。Macの古いエディタでも使ったのだろう。 perl -pi.bak -e 's/¥r/¥n/g' sandbox.py としたら直るかも。
61 : >60 サンクス! 改行コードがCRってのになってました。 LFに切り替えたら実行できました。
62 : しかし、「改行コード腐ってない?」ってサジェストしてくれるインタープリターやコン パイラって無いのかね。あった気もするが。
63 : 普通に実行する分については改行コードは意識しなくていいのに GAEでは改行コードが問題になるのはなんでですか?
64 : >>63 きみの手元でうまくいっているのは、たまたま君のマシンがMacだからじゃね? Googleの環境はLinuxだから、Mac上のPythonでは動いてLinux上のPythonでは動かないとか。 あてずっぽうだけど。
65 : GAEのOSってLinuxなの? まあ、他にない気もするが。
66 : >>64 そうなんすかね? ただGAEの鯖にあげずにローカルでやってたんですけどね。
67 : >>66 ローカルで実行するときとGAEでテストするときとで、同じpython使ってる? ローカルで実行する時は/opt/local/bin/pythonで、GAEのときは/usr/bin/pythonってことはない? 違ってたらごめん
68 : GAEの設定はブランクで動いてますね。 ターミナルで動かす時は python hoge.py か /usr/bin/python hoge.py でうごきます。 /opt/local/bin/python とか/usr/local/bin/python2.5 とかで叩いても No such file or directory って言われます。 GAEはどこのpython叩いてるんだろ...
69 : GAEは/usr/bin/env pythonでしょう
70 : results = db.GqlQuery("SELECT * FROM testdata") KindError: No implementation for kind 'testdata' って出ます。しかし、Datastore Viewerにはちゃんとtestdataがあります。 インデックスはindex.ymlで設定したものがまだDatastore Indexesには出てません。 これですかね? IndexErrorだった気がするんですが? 全件取得なのでインデックス関係ないと思うのですが・・・
71 : >>70 testdataがあっても、それが正しくモデルクラスとして定義されてなかったらエラーになるんじゃないかな
72 : >>71 ありがとうございます。 Datastore Viewerの中では SELECT * FROM testdata を実行することができ、データも表示されます。 db.GqlQueryを実行するクラス内ではクラスtestdataはインポートしていません。 ただし別のモジュールでは class testdata(db.Model): 定義してあります。 これはモデルクラスとしてとして定義されていない状態なのでしょうか?
73 : 同じモジュール内でモデルクラスを定義したら動作しました。 db.GqlQueryはモデルクラスと同じモジュール内に書かないとダメってことでしょうか?
74 : インポートすればいい。 from xxx import testdata みたいに。
75 : うまく行きました。 しかしモデルクラスは引数の文字列の中にしか出てこないのになぜクラス定義が必要なのかいまいちわかりません。 下位モジュールがどのように参照しているのかもわからない・・・。 第一引数がselfだからでしょうか? それにしてもpydevではunused import になるのもなんだかなー
76 : あ、ありがとうございました。感謝です。
77 : あれー、static_dirとして指定したパスにあるファイルをgetメソッドで取ろうとしたら、 Last-Modifiedヘッダがついてないんだけど、そんなもの? このヘッダがないから、毎回ダウンロードするはめになって、通信量がもったいないんだけど。
78 : >>77 これは昔からの仕様みたいだな。 ttp://code.google.com/p/googleappengine/issues/detail?id=368 ここを見る限り、2008年5月にissueが登録されて、2011年4月には「SDK1.4.3でも直ってないぞ」と言われてる。 うわ、GAEいけてねーな。タイムスタンプ考慮してくれないんだったら、static_dirの価値はあんまりないな。
79 : ETagは吐いてるっぽい
80 : Eclipse/pyでデプロイしてたら静的コンテンツ置いてるディレクトリに対して warning: Not importing directory '\workspace\app_name\src\stat': missing __init__.py なんて出たんだけど、__init__.pyってどんなディレクトリにも置かないといけないものなの?
81 : >>80 >warning: Not importing directory '¥workspace¥app_name¥src¥stat': missing __init__.py workspace¥app_name¥src が、Pythonの検索パス sys.path に含まれてて、 かつどっかで import stat とかやってるんだろ。 静的コンテンツを置くフォルダ名を変えてみるか、import statしている箇所を探してなんとかするか。
82 : 教えてください。 q = db.GqlQuery( "SELECT * FROM UserAgent Where Carrier='DoCoMo'" ) if q.count() >= 1 これ以外にデータがあるかどうかの判定はできませんか? この方法だとデータを一回ループするのに等しいと書いてあったので if q: これだとオブジェクトは帰ってきてるらしいのでいつでもTrueです。
83 : >>82 http://code.google.com/intl/ja/appengine/docs/python/datastore/gqlqueryclass.html if q.get():
84 : >>82 limitをつければいいんじゃないかな。 あとGoogle的には,キャリアごとにデータが存在するかどうかを表したモデルを用意するのが定石じゃないかな。 class CarrierName(Model): name = Property('String') だけのモデルを用意して、UserAgentエンティティを保存する時にCarrierNameも更新する。
85 : >>83 あ、なるほど、limi 1 って一個取得したらループ抜けてくれるんですね。なるほど! >>84 ありがとうございます。参考になりました。
86 : アプリケーションのルートディレクトリって、どうやって取得するんだっけ? 今は os.path.dirname(__file__) とかしてるんだけど、これだとファイルの位置を 変えるとうごかなくなるから、もっとうまい方法を知りたい。
87 : >>81 >静的コンテンツを置くフォルダ名を変えてみるか で対応した。解決したら原因別にどうでもいいや。
88 : 疑問をどうでもいいやで放置していく習慣をもったエンジニアは伸びないね。経験上。
89 : Pythonを流行らせたかったGoogleさんは出来ればPythonのバージョンの選択肢も増やして欲しかった
90 : >>89 増やさなくてもいいけど、最初から2.5じゃなくて2.6にしてほしかった。 AppEngine公開当時ですでに2.6はリリースされてたんだし。
91 : 2.xと3.xの選択肢を作ってもらいたい ていうかRubyもPHPも正式に対応してファイルの書き込みも出来るようにしてくれよ azureに負けちゃうよ
92 : >>91 azureの利点を詳しく
93 : wordpressが動くこと
94 : >>93 それはたしかに大きい! でもwordpressならazureじゃないほうがよくね?
95 : GAEは無料なのが良いんじゃないの?
96 : Visual studioで開発できるのはうらやましい
97 : PyDevがあるでしょ
98 : いやらしいようないやらしくない響き
99 : パイデブ
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
・ 次のスレ
47: PerlでPostgreSQL (83)
48: これってKENTのCGIのパクリ? (134)
49: このCGIを作っちゃおう。 (52)
50: ●転送量削減について● (99)