2005-06-03

Series 60 用 Python のサンプル weather_maps.py

Nokia の携帯電話 702NK 上で動く Python には、簡単ながらもなかなかなサンプルがついています。weather_maps.py はアメリカの天気予報画像をダウンロードするサンプルです。コードがあまりにも簡単で驚き。




# Copyright (c) 2004 Nokia
# Programming example -- see license agreement for additional rights
# Simple GUI example
#
# commented by Toru Furukawa

import socket

import urllib



import e32

import appuifw



# List of triplets "Name", "URL", "extension"

choices=[(u"US Graphical Forecast", "http://weather.gov/forecasts/graphical/images/thumbnail/Thumbnail_Wx4_conus.png", "png"),

(u"US Radar Image", "http://weather.gov/mdl/radar/rcm1pix_b.gif", "gif"),

(u"US Satellite Image", "http://weather.gov/satellite_images/national.jpg", "jpg") ]

tempfile_without_extension = "c:\\weather"



# リファレンスより...

# The appuifw module offers an interface to Series 60 UI application

# framework. The services of this interface may only be used in the

# context of the main thread (the initial thread of a UI application

# script).

old_title = appuifw.app.title

appuifw.app.title = u"Weather forecast"



L = [ x[0] for x in choices ]



# popup_menu はポップアップメニューのダイアログを表示して、

# 選択したインデックスを返す。

# 第1引数は選択肢のリスト。各要素は文字列、または文字列のタプル。

# ユーザが選択しなければ None を返す。

index = appuifw.popup_menu(L, u"Select picture")



if index is not None:

# ダウンロードする URL と、その画像の拡張子を取り出す

url = choices[index][1]

ext = choices[index][2]

tempfile = tempfile_without_extension + "." + ext



try:

print "Retrieving information..."

# urllib が入ってる!

urllib.urlretrieve(url, tempfile)



# e32 モジュールは Symbian OS 関係のユーティリティ。UI は含まれない。

# Ao_lock は、UI イベントをブロックしないで動くようにするのに使う。

# Ao_lock.wait() で待ち状態に入る。

# Ao_lock.signal() で待ち状態から抜け出す。

lock=e32.Ao_lock()



# appuifw.Content_handler は、MIME タイプに応じて、ファイルを処理する。

# 引数には処理終了時に呼び出すコールバックを指定する。

# ここでは画像表示が終わると、lock の待ち状態を解除する。

content_handler = appuifw.Content_handler(lock.signal)

content_handler.open(tempfile)

# Wait for the user to exit the image viewer.

lock.wait()

print "Image viewer finished."

except IOError:

print "Could not fetch the image."

except:

print "Could not open data received."



appuifw.app.title = old_title