カテゴリー : python

2004年03月17日

ちょっと前に紹介した 「moblog.uva.ne.jp の 「まど」 をホームページに」でつくった、
cgiプログラム get_moblog.cgi のプログラムを書き直しました。フィルターを使えるようにしました。除外したい url や特定 url の表示が行えるはずです。

プログラムは get_moblog_v2.0.py

もしフィルターを書きたい場合は、適当なファイル名、例えば moblog_acl.acl ファイルを用意し最初に + - * を書き、スペースまたは タブで区切り、ファイル名 を書いてください。
+ はこの url のみ表示。 - は表示しない。 - の場合は最後の行に * * を書いてください。
暗黙で最後はすべて表示しないがはいります。条件は、一行にひとつ、url がひとつです。

ファイルが用意できたら、適当なフォルダーにコピーし、get_moblog.cgi の最初のほうにある

moblog_acl = "./moblog_acl.acl" 

に ディレクトリー/ファイル名 を書いてください。
ファイルが存在しない、正しく読めなければフィルターは働かずすべて表示してくれます。

投稿者 heididorf : PM

2004年03月11日

METAR という空港の気象情報システムがあるそうな。でこれようの、python モジュール PyMETAR が存在するなり。。これを使えば天気を表示できたなり。。わたしのへぼい、cgi など使わんでもいいなり。ま、せっかく作って、お勉強したのでよしとしようなり ^^;コロ助なり

投稿者 heididorf : AM

2004年03月07日

とりあえず、もう少し汎用性を持たせた形で書き直しました。 とはいえ、フォーマットを自己解析しただけですので表示がおかしくなる都市が存在するかもしれません。一応、日本の金沢とアメリカの都市(ソースに urlが示されています)で確認はしております。
もしアメリカなどの国外の都市をどーしても表示したい場合は、表示部分を修正ください。

get_weather.py
get_weather_v3.2.py
get_weather_v3.3.py
get_weather_v3.4.py
get_weather_v3.5.py
get_weather_v3.5.3.py
get_weather_v3.5.4.py

このプログラムは非商用にかぎり自由にご利用ください。、一応著作権は放棄しておりません。
python 2.2* 2.3* で確認しております。

V0.3.5.4に変更します。 6/25 14:20
天気を日本語表記にしました。もし英語の時は、予想してない天気ということでそのとき追加します。

V0.3.5.3に変更します。 6/14 15:51
いやはや、今日の天気、condition がない場合、weatherData[key, 値] がエラーになります。 weather データーをつくるとき、キーと値の設定をしますが、キーしか設定できていないことが起きるわけです。値がない場合は "--" というデーターを入れました。 src の 3.5.3 のコメントを見て下さい。

V0.3.5に変更します。 3/12 23:15
reduce 、filter等々 を使い、正規表現をみなおし少しコンパクトにしました。

V0.3.4に変更します。 3/10 18:40
calendar モジュールをいれ 今日の曜日を日本語でいれ、表示も 2004/3/10 のようにしました。 明日の天気が時間によって今日になっていたのを、曜日を確認し翌日になるようにしました。

V0.3.3に変更します。 3/8 17:40
正規表現を書き直しました。 パターンの書き方におおきな誤りがありました。raw string で書かないといけないところを、そのまま書いてました。きっと \s|. のように OR でつかっていたので偶然動いただけです。

v0.3.2 に変更します。
while ループを、for in に変更しました。 re.compile を使い、正規表現が複雑そうなものはループの外で計算させるようにしました。 string.find(hoge, patern) を hoge.find(patern) に変更しました。 /font>

設置する場合は、拡張子を cgi にし テンプレート Main Index に次のように書いていただければいいかと思います。

<div class="weather"&g
t <iframe src=" http://heididorf.sakura.ne.jp/cgi-bin/get_weather.cgi" frameborder=0 width=220
height=500 scrolling=no title="お天気予報"></iframe> </div>

今回、最初、何行目のある文字の後ろにこのデータがあると決めうちで書いてみましたが、時間によってある項目が減ったり、増えたりして、また、都市によってデーターが存在する行が変化するため汎用性が大変低くなりました。そこで、アイディアを練り直し、データーをリスト、ディクショナリを使ってはまとめるようにしました。

なにぶん、通常のプログラムはすべて awk で、簡単なcgi は AWK で書いてしまいますので、python は超初心者です。マニュアルをみながら書いたのですが、python の日本語情報は存在するのですがやはり難解な部分が多く、テストを繰り返してしたいことを、試行錯誤しながら書いています。

python は、変数の宣言はいらないのですが、いきなりリスト、ディクショナリーに新規追加ができないようで、若干とまどいました。また、AWK は c ライクな書き方をするのですが、python はかっこを使わないということ、ループ、if などには : を使うなど、AWK ユーザーにはやはり頭がたこになりますね。ただし、プログラムは、覚えれば書きやすい、読みやすうと思います。

最後に get_weather_v3.py は、むちゃくちゃ計算が遅いです。なぜ? <--- 正規表現の使い方がむちゃくちゃだから?

投稿者 heididorf : PM

2004年03月06日

左フレームに天気予報、日/月の出、日/月の入りを表示するようにしました。
みてわかるように、The Weather Underground, Inc. の、mobile用のページ情報を読み込んで、cgi で天気ホームページをつくり< iframe> で埋め込んだ。ここのホームページには、Free Weather Stickersも用意されているが、今回は文字ベースで表示したかったのでプログラムを書くことにした。perl 用には、Weather-Undergroundがあるようであるが、自分は perl きらい人間でるので、python で cgi を書くことにした。しかし、とりあえず動いてはいるが、実は時間によって情報の増減がある。ある情報がある時間にはあるが、ある時間には消えていたりすることがわかった。純粋に、テキストベースの情報があればうれしいのだが、ここのホームページは迷路のようで、情報を探せなかった。とりあえず、常にある情報のみ表示させることにした。もう少し、プログラムの改良を行い、形になったら、ソースを公開したいと思う。

投稿者 heididorf : AM

2004年02月26日

http://moblog.uva.ne.jp の直近の転送された画像を右のフレームに組み込みました。
ランダムに色々なホームページの写真が見れるので自分のホームページで見れたらいいなと思って作ってみました。

お願い : 自由にご利用ください。ただし自己責任で、プログラムをきちんと理解してお使いください。

まず、http://moblog.uva.ne.jp の <img> タグ、<a href> タグ情報をとってくる必要があります。
python で簡単な通信プログラム、CGI を書きました。

get_moblog.cgi
#!/usr/local/bin/python
import urllib, string

print "Content-type: text/html\n"
#html の体裁を整える、無くても動くけど、文字コードを誤ることもあるので... print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
\"http://www.w3.org/TR/html4/loose.dtd\">" print "<html lang=\"ja\">" print "<head>" print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />" print "<title>show moblog images</title>" print "</head>" print "<body>" #ここまで
url = "http://moblog.uva.ne.jp/"
#何枚の画像を調べるか?
howmany = 7
i = 1
f = urllib.urlopen(url)

while i <= howmany:
data = f.readline()
#<div class="banner_image"> の行を抽出
if (string.find(data, "banner_image") > 0):
start = string.find(data, "<a href")
href_end = string.find(data, ">", start)
lastIs = string.find(data, "</div", href_end) - 1
printdataIs_1 = data[start:href_end]
printdataIs_2 = data[href_end :lastIs]
#<a href.... target="_top"> とすることで、今のページを閉じてリンク先が開く
print printdataIs_1, "target=\"_top\"", printdataIs_2, "<br>"
i = i + 1
#指定数を超えて画像情報が無い場合
if (string.find(data, "id=\"foot\"") > 0):
print "<!-- I can't find banner_image's tag !! -->"
break #体裁を整える print "</body>" print "</html>"

上記 CGI を適当なディレクトリーにコピーしてください。
つぎに、下記 内容をテンプレートに書き込み。

<div class="show_moblog">
<meta http-equiv="Refresh" content="60">
<iframe src="http:///cgi-binをインストールしたディレクトリ/get_moblog.cgi"
width="140" height="135" frameborder="0" scrolling="yes" />
</meta> </div>

iframe をつかい、 新しい フレームを作成し、 http-equiv の Refresh と、content の値で
指定時間ごとに新しい情報を取得します。
style sheet には、class show_moblog を適当に作成ください。

投稿者 heididorf : PM