「プログラム」カテゴリーアーカイブ

matplotlibのインストール

matplotlibのサーバーへのインストールについて、よく紹介されている方法でやると、他にもいろんな物入れないといけなかったり、エラーが出たりで大変。ネットを見ていてもインストールに苦労している人が多い。私もさくらのVPSに入れようとして挫折。

でも、公式サイトのインストールの部分(http://matplotlib.sourceforge.net/users/installing.html)を見ると、EPDという物を使うと超簡単みたいなことが書いてある。で、さっそくインストールしてみたらあっさり成功。他にpythonを入れていたんだけど追加でインストールしてもちゃんとい動いた。いくつかエラーはでるけど、そのエラー表示で検索するとすべて解決方法は見つかるので、15分くらいで終わった。

一番引っかかったのが、最初にどうやってインストールするかで、なんとなくカンでやったら上手く行った。まず、wgetでダウンロード先のURLを入れて、サーバーにダウンロードする。SHファイルなので、shの後にファイル名を指定すると、インストールが自動で始まる。あとは画面の指示に従うだけ。

天気

天気情報を使いたかったので、グーグルの天気APIを使うGAE用のpythonクラスを作った。素人が作っているので適当。
海外のサイトでグーグルの社員さんが答えているのをみると、このAPIは公式APIではないので、自己責任で使ってみたいに書いてあった。

以下クラス。とりあえず近況の天気と、温度だけ取れるようにした。天気に関する英単語の日本語訳は自信ない。天気情況の単語は把握できた分は全部載せたけど、まだ他にもありそうな予感。キャッシュはmemcacheを使い15分間保存。
[python]
#coding: utf-8
from xml.etree.ElementTree import XML, ElementTree, Element
import urllib
import urllib2

from google.appengine.api import memcache

class Gweather:
def __init__(self, name):
self.cityname = name

def search_wether_ja(self):
wxml = self.get_greetings()
dom = wxml
dom = dom.getroot()
dom = dom.find(“weather/current_conditions/condition”)
dom = dom.get(“data”)
wether_list = {“Clear”:”晴れ”,”Sunny”:”晴れ”,”Overcast”:”くもり”,”Heavy Rain”:”大雨”,”Light rain”:”小雨”,”Rain Showers”:”にわか雨”,”Showers”:”にわか雨”,”Mostly_Sunny”:”ほぼ晴れ”,”Partly Cloudy”:”晴れときどき曇”,”Mostly Cloudy”:”ほぼ曇”,”Chance_of_Storm”:”嵐のおそれ”,”Rain”:”雨”,”Chance_of_Rain”:”雨のおそれ”,”Cloudy”:”くもり”,”Mist”:”霧”,”Storm”:”嵐”,”Thunderstorm”:”雷雨”,”Chance_of_Tstorm”:”雷雨のおそれ”,”Sleet”:”みぞれ”,”Snow”:”雪”,”Icy”:”氷”,”Dust”:”ダスト”,”Fog”:”霧”,”Smoke”:”スモーク”,”Haze”:”もや”,”Flurries”:”突風”}
weatherkey = wether_list.get(dom,””)
return weatherkey

def search_temp(self):
wxml = self.get_greetings()
dom = wxml
dom = dom.getroot()
dom = dom.find(“weather/current_conditions/temp_c”)
dom = dom.get(“data”)
return dom

def get_greetings(self):
greetings = memcache.get(self.cityname)
if greetings is not None:
return greetings
else:
greetings = self.render_greetings()
if not memcache.add(self.cityname, greetings, 900):
logging.error(“Memcache set failed.”)
return greetings

def render_greetings(self):
url2 = “http://www.google.com/ig/api?weather=”+self.cityname
xml = ElementTree(file=urllib2.urlopen(url2))
return xml

[/python]

以下、実際に使う場合。Gweather(“ここに地名を英語で入れる”)。以下はロンドンの場合。
[python]
from gweather import Gweather

try:
dom_london = Gweather(“london”)
london_weather = dom_london.search_wether_ja()
londontemp = dom_london.search_temp()
except:
london_weather =””
londontemp = “”
[/python]

ちなみにAPIで帰ってくるXMLは以下。かなり詳細な情報が得られる。地名も細かい指定ができる。
[xml]















































[/xml]

pythonは、0から始める人向けの【Pythonスタートブック】をまず2,3日でやって、あとは、【みんなのPython 改訂版】で必要な物だけ、芋づる式に調べて使ってます。1冊目で全体像を頭に入れて、2冊目を逆引きに使う感じ。この2冊はかなり役に立ちました。

アンドロイドアプリ

アンドロイドのスマートフォン(xperia acro)を買ったことだし、試しにアンドロイドアプリを作ることにした。

ある程度プログラムができるなら、アプリを作るのは難しくないみたい。ただ、どこまで作り込むかで難易度は全然違ってくるらしい。

iphoneと違って、誰でもアプリを公開して、アンドロイドマーケットに登録できるので面白そうってのも理由の一つ。ついでにJAVAも勉強しよう。

正規表現メモ

GAE上にサイトマップを置く方法がわからず迷った。

解決

app.yamlファイル内に以下を書けばOK

– url: /(.*\.xml)
static_files: htdocs/\1
upload: htdocs/(.*\.xml)

直接sitemap.xmlを入れて

– url: /(sitemap.xml)
static_files: htdocs/\1
upload: htdocs/(sitemap.xml)

でもOK。

正規表現が今だによくわかってないけど、解決したのでさっさと先に進む。

ElementTreeの使い方

google app engine for pythonでXMLを扱うときにElementTreeを使っていくつかはまった。(beautiful soupの方が簡単そうだけどGAPでは使えないっぽい)
基本的な使い方はネットですぐ見つかるので、わかりにくいことだけメモ。
取り敢えず動けばいいという感じでやってるので、用語の使い方などは適当。。

時間を取られたのは、
ネームスペース(名前空間)がある場合。
違う親の下に同じ名前のタグがある場合。

名前空間がある場合は比較的簡単。

name= ‘{‘ + ここにURI + ‘}’

で必要な物を取り出す場合は

xml = fromstring(xmlp)
title = xml.getiterator(namespace+’Title’)

でOK。
表示する場合はfor構文の中で

title[i].text.encode(‘utf-8’)

みたいにする。

次はやっかいで、違う親の中に同じタグがある場合。
例えば

necoの下にnameがあり、
dogの下にnameもあるとする。

これを

xml.findall(.//name)

としたら、猫と犬の名前がごちゃごちゃに入ってしまう。
個別に取り出すには
順番に指定して、

/neco/name
/dog/name
みたいにしてあげる。(一番上から全部書く)

実際には
xml.findall(.//neco/name)

さらに名前空間もある場合は

xml.findall(.//{url}neco/{url}name)

とすればOK。(urlの部分に名前空間のURIを入れる)
直接入れないで、変数に入れてからやったほうがシンプルなんだけど、なぜかエラーが出て上手くいかなかったので直接入れた。

以上で取り敢えずはすべて解決。