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

2010年7月25日日曜日

google app engine Images Python API  画像ファイルを読んで画像を表示させる

google app engineのImages APIを使おうと思って普通に一日ハマってたので防備録。
まず、画像ファイルを読み込むっていうサンプルが見つからなかった。
データストアのBlobProperty使うっていうのは割と見つかるんだけど。

以下はimageディレクトリにある画像ファイルhoge.pngを読み込んでImagesオブジェクト作り表示させる簡単なサンプル。
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.api import images
import os


class MainHandler(webapp.RequestHandler):
  def get(self):
    imgdir = os.path.join(os.path.dirname(__file__), 'image')

    fp = open(imgdir + '/hoge.png','rb')
    data = fp.read()
    fp.close()
    img = images.resize(data, 32, 32)

    self.response.headers['Content-Type'] = "image/png"
    self.response.out.write(img)


  def main():
    application = webapp.WSGIApplication([
    ('/', MainHandler)
    ],
    debug=True)
    wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
  main()
■ポイント1:読み込む画像が入ったディレクトリは静的ディレクトリにしない
上のサンプルではimageディレクトリにあるhoge.pngを読み込んでます。静的ディレクトリに指定されたものはスクリプトファイルから読めませんのでapp.yamlにはimageディレクトリをstaticで登録しちゃいけません。
以下の例ではimg_staticを静的ディレクトリに指定してますのでこの中のファイルは読むことができません。
application: hogehoge
version: 1
runtime: python
api_version: 1

handlers:
- url: /img_static
  static_dir: img_static

- url: .*
  script: main.py
■ポイント2:コンストラクタを使わない。
なんかうまくいかないので。どうやったらいいのかな?できると思うんだけど。
img = images.Image(data)

■参考にしたサイト
http://d.hatena.ne.jp/kwatch/20100415/1271285578#

2010年1月20日水曜日

簡易WebアプリケーションサーバとしてGoogle App Engine SDKを使う

Webアプリケーションを作る
Webアプリケーションを作りたい、もしくは作る必要ができた時どうするでしょうか?
ApacheなどのWebサーバとPHPを用意して、場合によってはTomcatなどのアプリケーションサーバをインストールしてアプリケーションを配備する。あとDBサーバも欲しいからMySQLもインストールする。。。などなど。結構な下準備をする必要があります。
もちろんそういった環境があらかじめ整ってるかもしれません。でも、ちょっとしたWebアプリのアイディアが浮かんだ。たまたまネットブックを持っていたのでちょっと試しに作ってみよう。なんていうシチュエーションの場合はどうでしょうか?
まずはApacheを入れて、なんていうのはじれったいですよね。

Goolge App Eninge SDKを活用する
そこでGoogle App Engine(以下、GAE) SDKの登場です。やや、話が飛躍している感じはしますが続けます。 GAE SDKには以下のような特徴があります。
  • GAE SDKはインストーラが付いていて簡単インストールできます。
    (Python 2.5.xをあらかじめインストールしておく必要がありますが、Pythonもインストーラで簡単にインストールできます。)
  • SDKにはWebサーバがついています。(デプロイしたあとにhttp://localhost:8080/でWebアプリにアクセスできます。)
  • 作ったアプリケーションはコマンド1つで簡単にデプロイできます。
  • GAEのDBであるDatastoreもローカルでシミュレートしている。
あとはWebアプリのコードを書くだけ、という環境がPythonとSDKのインストールだけで用意されます。インストールにかかる時間はそれぞれ数十秒です。
あとは自分のアイディアを形にするだけです。

GAE自体の特徴や活用方法はいろんなところで見かけるけれどSDKに注目したエントリは無いような気がするので書いてみました。僕はPython版しか使ったことがないのでPython版を。また、SDKのバージョンは1.3.0でWindows版を前提にして書いています。

2010年1月8日金曜日

Python - ホスト名を得る方法

import socket
host = socket.gethostname()
print host