2008年4月29日火曜日

Google App Engine / 管理コンソール



Docs > The Dev Web Server
以下の URL で開発環境の Development Console にアクセスし、datastore の内容を確認することができる。
http://localhost:8080/_ah/admin

http://localhost:8080/_ah/admin/datastore?kind=Greeting

このプログラムのソース
c:/Program Files/Google/google_appengine/google/appengine/ext/admin/__init__.py

2008年4月26日土曜日

Google App Engine / django template カスタムタグ


  django のテンプレートをカスタマイズすることができた。
  (django template にカスタム filter を追加することができた)




-- templatefilters.py
#!-*- coding:utf-8 -*-

# import the webapp module
from google.appengine.ext import webapp
import datetime


# get registry, we need it to register our filter later.
register = webapp.template.create_template_register()

def truncate(value,maxsize,stopper = '...'):
""" truncates a string to a given maximum
size and appends the stopper if needed """
stoplen = len(stopper)
if len(value) > maxsize and maxsize > stoplen:
return value[:(maxsize-stoplen)] + stopper
else:
return value[:maxsize]

def timeJST (value):
# return value - datetime.timedelta(hours=18)
return value + datetime.timedelta(hours=9)
# SDK102 にしたら動作がかわった???

register.filter(truncate)
register.filter(timeJST)

-- index.html
{{ greeting.date|timeJST|date:"Y/m/d H:i:s" }}

-- helloworld.py
webapp.template.register_template_library( 'templatefilters')

参照元

2008年4月25日金曜日

Google App Engine / flickr API 表示サイズ


http://www.flickr.com/services/api/  で検索結果の画像の表示のサイズの変更について、テストした結果をメモしておく。
テンプレートの変更による。 ( 送信するパラメータは変更なし)
検索キーワードは "Michaelangelo Moses" を設定







/sizes/
_m.jpg




























/sizes/
.jpg

  • 拡張子なし。
  • これが一番大きな検索結果が表示された。




















/sizes/l/
_b.jpg



  • _b.jpg だと一部の画像が表示されない
  • UNAVAILABLE の表示であっても、クリックした先の flickr のサイトの画像は表示される。


















/sizes/sq/
_s.jpg

















/sizes/t/
_t.jpg
















/sizes/o/
_o.jpg



  • UNAVAILABLE の表示
  • クリック : flickr のサイトのオリジナルサイズの画像が表示される。




















2008年4月24日木曜日

Google App Engine / url fetch API



 先日のサンプルプログラムはあきらめ URL Fetch API用の別の以下のプログラム

 のサンプルは動作させることができた。


http://localhost:8080/flickr/

Flickr の API Key も http://www.flickr.com/services/から取得
いろいろな API http://www.flickr.com/services/api/ が用意
されている。

プロジェクトフォルダ以下のファイルリスト
│  app.yaml
│ flickr.html
│ flickr.py
│ index.yaml
│ webSimple.py
│ webSimple.pyc

└─elementtree
ElementInclude.py
ElementPath.py
ElementPath.pyc
ElementTree.py
ElementTree.pyc
HTMLTreeBuilder.py
SgmlopXMLTreeBuilder.py
SimpleXMLTreeBuilder.py
SimpleXMLTreeBuilder.pyc
SimpleXMLWriter.py
TidyHTMLTreeBuilder.py
TidyTools.py
XMLTreeBuilder.py
__init__.py
__init__.pyc

--
SDK102 にしたところ、下記のエラーで動作しなくなる

'photos' : res.parse_xml().find("photos").getchildren(),
AttributeError: 'NoneType' object has no attribute 'getchildren'

2008年4月23日水曜日

Google App Engine Google Data Python Library


Getting Started with the Google Data Python Library

http://code.google.com/support/bin/answer.py?answer=75582

これはきちんと理解しておかないと、いろいろなエラーに時間をとられる。


C:\work\gdata.py-1.0.12.1>c:\python25\python ./setup.py install

-- gdata_test.py を変更

# from xml.etree import ElementTree
from xml.etree import ElementTree, SimpleXMLTreeBuilder
ElementTree.XMLTreeBuilder = SimpleXMLTreeBuilder.TreeBuilder
except ImportError:
# from elementtree import ElementTree
from xml.etree import ElementTre


C:\work\gdata.py-1.0.12.1>c:\python25\python ./tests/run_data_tests.py
Running all tests in module gdata_test...............
----------------------------------------------------------------------
Ran 15 tests in 0.031s
OK


サンプルプログラム muvmuv を下記からダウロ
ードして実行してみたのだが
http://code.google.com/support/bin/answer.py?answer=75582

起動
C:\google>dev_appserver.py muvmuv/
これはOK

実行
http://localhost:8080/build
しかし、これが NG

原因検索
http://groups.google.com/group/google-appengine/browse_thread/thread/b7399a91c9525c97

対策
http://effbot.org/downloads/ からelementtree-1.2.7-20070827-preview.win32.exe [52k]
を入れ、これを直接 project フォルダ以下に置いたが
C:\google\muvmuv\elementtree

結論としては windows SDK の不具合で fix 待ち 
http://code.google.com/p/googleappengine/issues/detail?id=222 this is a current issue with the Windows SDK.


--- その他 作業memo ---

Python版インストール(Windows) を参考に
PYTHONPATH=C:\Python25\Lib\site-packages を一応、設定

C:\google\muvmuv\ElementTree.py in ()
cannot import name SimpleXMLTreeBuilder

エラー例
Then I got "No module named expat: use SimpleXMLTreeBuilder instead".
'SimpleXMLTreeBuilder' is not defined

File "C:\google\muvmuv\main.py", line 235, in getMoviesFromRss
tree = ElementTree(fromstring(rss.content))
NameError: global name 'fromstring' is not define

Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 484, in __call__
handler.get(*groups)
File "C:\google\muvmuv\main.py", line 215, in get
movies = self.getMoviesFromRss(rss1, build_only)
File "C:\google\muvmuv\main.py", line 235, in getMoviesFromRss
tree = ElementTree(fromstring(rss.content))
File "C:\google\muvmuv\elementtree\ElementTree.py", line 1013, in XML
return api.fromstring(text)
File "C:\google\muvmuv\elementtree\ElementTree.py", line 181, in fromstring
parser = XMLTreeBuilder()
File "C:\google\muvmuv\elementtree\ElementTree.py", line 1171, in __init__
self._parser = parser = expat.ParserCreate(None, "}")
NameError: global name 'expat' is not defined

---
Please see http://code.google.com/p/googleappengine/issues/detail?id=222 this is a current issue with the Windows SDK.

expat.py は pyexpat.py を import
コマンドラインからはエラーは発生しない DLLs/pyexpat.pyd などがある。

C:\google>c:\python25\pythonPython 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] onwin32Type "help", "copyright", "credits" or "license" for more information.
>>> from pyexpat import *


SDK102 にしたら build できた


最初起動時に simplejsonエラーが発生したが
以前どうやら django 以下に試行錯誤で置いた
ファイルをプロジェクトフォルダに copy して対応。


exec module_code in script_module.__dict__ File "C:\google\muvmuv\main.py", line 8, in import simplejson ImportError: No module named simplejson

 画像をクリックすると
 以下のエラーが発生しているが、これは
 対応できそうである。











File "C:\google\muvmuv\main.py", line 43, in get
template_values = {'login': loign, 'logout': logout, 'user': user}
NameError: global name 'loign' is not defined


2008年4月19日土曜日

Google App Engine /GqlQuery object and JSON


how to convert GqlQuery object to JSON format



http://groups.google.com/group/google-appengine/browse_thread/thread/634e7b9a2e584dd3?hl=en

How to use simplejson with GqlQuary object for example how to convert
marker_list to JSON for format
marker_list = db.GqlQuery('SELECT * FROM Marker')

I think you should dump queryset or row to python data, then convert
them to json format, here is my testing code:

def dumprow(r):
import datetime
a = {}
for k in r.fields().keys():
v = getattr(r, k)
a['id'] = r.key().id()
a['key'] = str(r.key())
if isinstance(v, str):
a[k] = str(v)
elif isinstance(v, unicode):
a[k] = unicode(v)
elif isinstance(v, datetime.datetime):
a[k] = v.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(v, datetime.date):
a[k] = v.strftime('%Y-%m-%d')
elif isinstance(v, datetime.time):
a[k] = v.strftime('%H:%M:%S')
elif isinstance(v, (int, float, list)):
a[k] = v
else:
a[k] = str(v)

return a

def dumpquery(query):
s = []
for r in query:
s.append(dumprow(r))
return s

Google App Engine 1.0.1 / sampels



Google App Engine SDK のバージョンが 1.0.1 になっていたので Update。
  http://code.google.com/appengine/downloads.html
 (アプリケーションの削除により、一旦削除してから、再度インストール)

 
また、google-app-engine-samples に登録されているものを、いくつか動かしてみた。
まず、これらのソースをながめてみるのがいいようだ。
http://code.google.com/p/google-app-engine-samples/downloads/list

Google App Engine Helper for Django  というものもある。
http://googleappengine.blogspot.com/2008/04/google-app-engine-helper-for-django.html
http://code.google.com/p/google-app-engine-django/

Swift UI チュートリアル Loading watchOS が終わらない?

Loading watchOS が終わらない? ディスク容量の残量が少ないので不要なシュミレーターを削除したとこころ watchOSのものが全部なくなってしまっていた。 WatchOS を削除して再度インストールしても復活せず。 Create a new simulator で ...