警告がでるようになったようだが、今のところ特に問題なし。
http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes
http://code.google.com/appengine/downloads.html
WARNING 2008-05-29 05:45:27,265 dev_appserver.py]
Could not initialize images API;
you are likely missing the Python "PIL" module. ImportError: No module named PIL
2008年5月29日木曜日
2008年5月28日水曜日
SearchableModel が__searchable_text_indexを生成
http://groups.google.com/group/google-appengine/browse_thread/thread/f64eacbd31629668
We've included a short-term full text search library in the
google.appengine.ext.search module. It's limited, so we don't discuss
it much in the documentation. We expect to provide a more robust, full
featured solution eventually.
http://groups.google.com/group/google-appengine/browse_thread/thread/4b912691a00eea59
Having created a SearchableModel entity, updating it doesn't seem to
update the full text index - Is that expected behaviour?
searchtext = db.TextProperty()
.
.
.
We've included a short-term full text search library in the
google.appengine.ext.search module. It's limited, so we don't discuss
it much in the documentation. We expect to provide a more robust, full
featured solution eventually.
http://groups.google.com/group/google-appengine/browse_thread/thread/4b912691a00eea59
Having created a SearchableModel entity, updating it doesn't seem to
update the full text index - Is that expected behaviour?
A little unit test to explain what I mean:
import sys, os, time
sys.path.append('/usr/local/google_appengine')
sys.path.append('/usr/local/google_appengine/lib/yaml/lib')
import unittest
from google.appengine.api import apiproxy_stub_map
from google.appengine.api import datastore_file_stub
from google.appengine.api import mail_stub
from google.appengine.api import urlfetch_stub
from google.appengine.api import user_service_stub
from google.appengine.ext import db, search
APP_ID = u'test'
AUTH_DOMAIN = 'gmail.com'
LOGGED_IN_USER = 't...@example.com'
searchtext = db.TextProperty()
.
.
.
Bulk Loader
http://code.google.com/appengine/articles/bulkload.html
1. c:\google\bulkload フォルダを作成し、ここに以下のファイルを作成。
myloader.py
people.csv
2. c:/Program Files/Google/google_appengine/google/appengine/tools/bulkload_client.py
を c:\google\buloload に copy
3. c:\google> dev_appserver.py books/ 作成済みのプログラムを起動
起動まえに 以下のファイルに /load を追加
--- c:\google\books\app.yaml
- url: /
script: books.py
- url: /load
script: myloader.py
login: admin
実行
C:\google\bulkload>bulkload_client.py --filename people.csv
--kind Person
--url http://localhost:8080/load
3. ImportError: No module named google.appengine.ext.bulkload がでるので
3.1 C:\Program Files\Google\google_appengine\google\appengine\ext\bulkload\constants.py
を c:\google\buloload に copyし
3.2 -- c:\google\buloload\bulkload_client.py を一部改訂 --
try:
from google.appengine.ext.bulkload import constants
except:
import constants
3.3 再度実行したが login error となるので books/app.yaml を修正*1
C:\google\bulkload>bulkload_client.py --filename people.csv
--kind Person
--url http://localhost:8080/load
INFO 2008-05-28 21:37:29,276 bulkload_client.py]
Starting import; maximum 10 entities per post
INFO 2008-05-28 21:37:29,276 bulkload_client.py]
Importing 3 entities in 75 bytes
ERROR 2008-05-28 21:37:29,292 bulkload_client.py]
An error occurred while importing: Received code 302:
Requires login ERROR
2008-05-28 21:37:29,292 bulkload_client.py]
Import failed
Success
C:\google\bulkload>
bulkload_client.py --filename people.csv --kind Person --url http://localhost:8080/load
INFO 2008-05-28 21:37:48,947 bulkload_client.py] Starting import;
maximum 10 entities per post
INFO 2008-05-28 21:37:48,947 bulkload_client.py] Importing 3 entities in 75 bytes
INFO 2008-05-28 21:37:54,119 bulkload_client.py] Import succcessful
---
*1 bulkload.py は http で post しているので 安易に app.yaml の
admin 部分のコメントアウトは危険。
元のアプリケーションに
'login_url': users.CreateLoginURL(self.request.uri),
を追加して、ログインしておく。
2008年5月27日火曜日
注意メモ
db.StringProperty(multiline=True) のデータを
\n で split して処理するようなケースは注意
\n に限らず split する際は注意
for u in url.split('\n'):
この Propety のデータが表示されなくなる? 落とし穴がある様子。
どこかがわるいのか、なんらかの不具合のからみか?
回避策:
dev_appserver.py により再起動することで表示されるようになる。
Google にはサーバーの運用の実績はあるけれども、ユーザーの開発をサポートした実績は
まだあまりなく、したがって、こうした環境下でのデータの信頼性についても、実績はまだない。
また Gql の where 句の条件に <,> <=. >= などは one property per query
ないので、最小値、最大値なども求めるのも、自分で処理しなければならない。
このあたりはやはり RDBMS の歴史と実績を感じる。
\n で split して処理するようなケースは注意
\n に限らず split する際は注意
for u in url.split('\n'):
この Propety のデータが表示されなくなる? 落とし穴がある様子。
どこかがわるいのか、なんらかの不具合のからみか?
回避策:
dev_appserver.py により再起動することで表示されるようになる。
Google にはサーバーの運用の実績はあるけれども、ユーザーの開発をサポートした実績は
まだあまりなく、したがって、こうした環境下でのデータの信頼性についても、実績はまだない。
また Gql の where 句の条件に <,> <=. >= などは one property per query
BadFilterError: BadFilterError:工夫すればなんとかなることだけれども。 あと select max(XX) などというのも、まだ(?)
invalid filter: Only one property per query may have inequality filters
(<=, >=, <, >)..
しか使えないというのも気がつかなかった。
( 同じ Property には複数回つかえる
○ date >:1 and date < :2
× date >:1 and date2 < :2
ないので、最小値、最大値なども求めるのも、自分で処理しなければならない。
このあたりはやはり RDBMS の歴史と実績を感じる。
2008年5月24日土曜日
elementtree.ElementTree
http://python.matrix.jp/modules/ElementTree.html
from google.appengine.api import urlfetch
from elementtree.ElementTree import *
url="http://api.flickr.com/services/rest/"
url += "?method=flickr.photos.search&text=test"
url += "&api_key=XXX"
url += "&per_page=3"
result = urlfetch.fetch(url)
#print result.content
tree = ElementTree(fromstring(result.content))
for item in tree.findall('.//photos'):
print item[0].get('id')
print item[0].get('title')
for d in item:
print d.get('title')
There's no need to install anything, ElementTree is included in
Python 2.5
http://docs.python.org/lib/module-xml.etree.ElementTree.html
flickr.photos.search (Google App Engine)
from google.appengine.api import urlfetch
from xml.dom import minidom
url="http://api.flickr.com/services/rest/?method=flickr.photos.search&text=test&api_key=XXX"
result = urlfetch.fetch(url)
dom = minidom.parseString(result.content)
photos = []
for node in dom.getElementsByTagName('photo'):
photos.append({
'server': node.getAttribute('server'),
'id': node.getAttribute('id'),
'secret': node.getAttribute('secret'),
'owner': node.getAttribute('owner'),
'title': node.getAttribute('title')
})
# print node.getAttribute('id'), \
# node.getAttribute('title')
----------------------------
[ templates]
{% for e in photos %}
<a href="http://www.flickr.com/photos/{{ e.owner }}/{{ e.id }}/sizes/" >
<img src="http://static.flickr.com/{{ e.server }}/{{ e.id }}_{{ e.secret }}_s.jpg"
title="{{ e.title }}" border=0 /></a>
{% endfor %}
getElementsByTagName
<?xml version="1.0" encoding="utf-8" ?> <rsp stat="ok"> <method>flickr.test.echo</method> <name>value</name> <api_key>7c7ac3c40f14a809XXXX</api_key> </rsp> | から valueを取り出す。 |
from google.appengine.api import urlfetch
from xml.dom import minidom
url="http://api.flickr.com/services/rest/?method=flickr.test.echo&name=value&api_key=XXX"
result = urlfetch.fetch(url)
print "---result"
print result
print "---result.content"
print result.content
dom = minidom.parseString(result.content)
r =dom.getElementsByTagName('name')[0].firstChild.data
print "---dom.getElementsByTagName"
print r
<?xml version="1.0" encoding="utf-8" ?> <rsp stat="fail"> <err code="100" msg="Invalid API Key (Key not found)" /> &l | からfail を取り出すにはdom.getElementsByTagName('rsp')[0].getAttribute('stat') |
登録:
投稿 (Atom)
Swift UI チュートリアル Loading watchOS が終わらない?
Loading watchOS が終わらない? ディスク容量の残量が少ないので不要なシュミレーターを削除したとこころ watchOSのものが全部なくなってしまっていた。 WatchOS を削除して再度インストールしても復活せず。 Create a new simulator で ...
-
1. get_or_insert 自体がトランザクションなのでこれを含めたトランザクションを 作成しようとするとエラーとなる。 File "C:\Program Files\Google\google_appengine\google\appengine\api\...
-
新しいXcodeが使いたかったので MacOS15(Sequoia) にアップグレードしたところ、やはりApacheでPHPが動かなくなっていた。 結論としては brew, openssl, php, httpd を全て再度インストールしたところ動くようになった。 以下、作業ロ...
-
Apache が動かなくなった (MacOS 13.6.7) /var/log/apache2/access_log も error_log も出力されなくなっている $ sudo apachectl start すると以下のようなエラーとなった。 Load failed: ...