ラベル Google App Engine の投稿を表示しています。 すべての投稿を表示
ラベル Google App Engine の投稿を表示しています。 すべての投稿を表示

2010/04/24

メモ: Google App Engine 開発に Python 対話モードを用いる

こんにちは。

Google App Engine でプログラム作る時に、これまではインタープリタとしての Python を活用していませんでした。これでは効率悪いなー、と言ってもまあそれ以上に毎回思い出したり調べたりするのに時間がかかっていたのですが。

今回 Python を対話モードで使ってみました。あまり試行錯誤は書かず、うまくいく方法のメモだけ残したいと思います。

必要なモジュールをインポートする


ここは対話モードでなくても行っているのでわざわざ書くこともないけれども。
>>> date = datetime.datetime.now()
Traceback (most recent call last):
File "", line 1, in
NameError: name 'datetime' is not defined

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2010, 4, 24, 11, 13, 23, 621482)

Googleのモジュールはこれでは見つからないので、利用可能にしなければならない。

モジュールのありかをPYTHONPATHで指定する


参考: A-LIAISON BLOG Mac OS X LeopardでPYTHONPATHとPYTHONSTARTUPを設定してみました

import する場所を PYTHONPATH 環境変数で教える。ターミナルで、Pythonに入る前に行う。
export PYTHONPATH=${PYTHONPATH}:
/usr/local/google_appengine:/usr/local/google_appengine/lib/antlr3:
/usr/local/google_appengine/lib/django:/usr/local/google_appengine/lib/webob:
/usr/local/google_appengine/lib/yaml/lib
(改行なし)

ところが今回行うAPI結果取得ではこれでは十分でなかった。

APIを用いた検索結果取得


APIを用いた検索結果取得
>>> import urllib
>>> from google.appengine.api import urlfetch
>>> url = "http://search.twitter.com/search.atom?q=" + urllib.quote(keyword) + "&locale=ja&rpp=30"
>>> urlfetch(url)
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/google_appengine/google/appengine/api/urlfetch.py", line 238, in fetch
rpc = create_rpc(deadline=deadline)
File "/usr/local/google_appengine/google/appengine/api/urlfetch.py", line 200, in create_rpc
return apiproxy_stub_map.UserRPC('urlfetch', deadline, callback)
File "/usr/local/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 345, in __init__
self.__rpc = CreateRPC(service)
File "/usr/local/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 54, in CreateRPC
assert stub, 'No api proxy found for service "%s"' % service
AssertionError: No api proxy found for service "urlfetch"

解決策は下記に書いてありました。

メモなのですよGoogle App Engine の urlfetch を試してみた
>>> from google.appengine.api import apiproxy_stub_map
>>> from google.appengine.api import urlfetch_stub
>>> apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap()
>>> apiproxy_stub_map.apiproxy.RegisterStub('urlfetch', urlfetch_stub.URLFetchServiceStub())
>>> urlfetch.fetch(url)

後はDOMの操作。

DOMの操作


まずは検索結果をパースして要素を得る。
>>> import xml.dom.minidom
>>> result = urlfetch.fetch(url)
>>> top = xml.dom.minidom.parseString(result.content)
>>> entries = top.getElementsByTagName('entry')
>>> entry = entries[0]
>>> name = entry.getElementsByTagName('name')[0].firstChild.data

今回知りたかったことは、属性の取得方法。

参考: Dive Into Python 9.6. Accessing element attributes
>>> link = entry.getElementsByTagName('link')[0]
>>> attributes = link.attributes
>>> attributes

>>> attributes.keys()
[u'href', u'type', u'rel']
>>> link=attributes["href"]
>>> link.name
u'href'
>>> link.value
u'http://twitter.com/username/statuses/nnnnnn'
以上、できました。

2009/01/13

Yahoo!日本語係り受け解析を使ってみた

こんばんは。私インターネットのヤホーというサイトで調べていたら、グーグルといういろいろなサービスを提供しているサイトを見つけてしまいました。

今日は休みだったので、こんなのを作ってみました (解析部分は昨年末からできていたのですがずっとほっておいていました)。

Google App Engineから、
Yahoo!の日本語係り受け解析を呼び出し、その係り受け関係を
Google Visualization APIのひとつ組織図の形式で表示します。

入り口はここ: Yahoo Analysis Test [追記:サービス停止しました]

日本語の文を下記にテキストエリアに入れて、"Analyze"ボタンを押します。


下記のようなツリー形式で表示されます。


係り側は出現順に左から右に配置できれば良かったのですが、まだ詳しい使い方を理解していないので、ご勘弁を。

表示に関しては、Ortho というライブラリがもっと良さそうなのですが、ちょっとGoogleのよりもハードルが高そうなのでこれはあとの課題にしたいと思います。

それからほとんどテストしていませんので、へんなメッセージが一面に出たら何を入れてそうなったか教えて下さい。

参考:
CodeZine (2008/08/21) Yahoo!、「日本語係り受け解析Webサービス」のAPIを公開
たつをの ChangeLog (2008/08/21) ヤフーの日本語係り受け解析APIとサンプルプログラム「なんちゃって文章要約」

2008/12/14

今度はGoogle App Engineを...

... 使ってみた。話題のクラウド・コンピューティング、ってクラウドの無駄遣いですけど。

Exbloggers' Recommendations  [追記:ターミネートさせました。]

お互いに読んで欲しい記事を推薦し合う、昔のエキブロ新聞みたいなものをイメージしてみました。

まだ満足のいくものではないですけど、もっと改良してから... なんて考えててもいつになるか分らないので、一応動くようになったところで公開しちゃいましょう。

改良すべきところをあげておきます。

・記事へのリンクの部分はURLがそのまま出ていますが、本当は記事のタイトルをいれるつもりでした。HTMLのパージングが上手くいっていなくて、抽出してきたものになにか変な文字コードが入っているようです。

・間違えた場合に修正する方法をまだ作っていません。これはすぐにいるだろうな。

・今最新の10件だけしか表示できないのですが、ページ切り替えも必要になるでしょう。

・ログインを別途行う必要があるのですが、Google Friend Connectのサインインと連動させるようにしたい。

・デザインがしょぼい。これはセンスの問題もあるので、時間をかけても良くなるものじゃないですね。