Python でフィードを扱う (1)

先日インストールした feedparser を使って RSS フィードの情報を取得して表示させてみます。他の blog などを拝見して見よう見まねで書いてみたのが以下のコード。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#coding: utf-8

import feedparser
rssurl = "http://osanai.org/anyway/feed"

fdp = feedparser.parse(rssurl)

e = fdp.entries[0]
print e.links
print e.title
print e.category

for entry in fdp['entries']:
  published = entry['published']
  title = entry['title']
  link = entry['link']
  print "published:", published
  print "title:", title
  print "link:", link, "\n"

この blog のフィードから取得してみます。feedparser.parse( 対象 URL).entries[] のかたちでリストとしてフィードの中身が得られるようです。entries[0] で最新のエントリ、entries[1] で一つ前ですね。

上記の実行結果は下記のようになりました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ python fdp1.py

[{'href': u'http://osanai.org/anyway/archives/2012/05/14235002.html', 'type': u'text/html', 'rel': u'alternate'}]
Node.js を触ってみる
Programming

published: Mon, 14 May 2012 14:50:02 +0000
title: Node.js を触ってみる
link: http://osanai.org/anyway/archives/2012/05/14235002.html

published: Sun, 13 May 2012 15:11:13 +0000
title: Python でフィードを扱う(準備段階)
link: http://osanai.org/anyway/archives/2012/05/14001113.html

published: Sat, 12 May 2012 15:32:43 +0000
title: 土曜日にやるルーティンを定めよう
link: http://osanai.org/anyway/archives/2012/05/13003243.html

published: Fri, 11 May 2012 14:56:09 +0000
title: 現状に満足しない姿勢
link: http://osanai.org/anyway/archives/2012/05/11235609.html

published: Thu, 10 May 2012 15:11:18 +0000
title: 目線を遠くに、そして近くに
link: http://osanai.org/anyway/archives/2012/05/11001118.html

print e.links のところはどういうことになっているのか、よくわかりませんが、複数形ではなく print e.link とやると単純に URL だけが得られました。

published でエントリが書かれた日時を取得できるようですね。でもタイムゾーンが日本ではない模様。日本時間で取得する、あるいは変換するのはどうしたらよいのかな。

次はちゃんと公式ドキュメントを読んでみたいと思います。

Node.js を触ってみる

先月出ていた WEB&DB PRESS を昨日夕食時にぱらぱらと眺めていて、Node.js の特集記事があったので導入部分だけ読んでいました。

WEB+DB PRESS Vol.68
WEB+DB PRESS Vol.68

Node.js という言葉はよく見かけて知っていたものの、その中身や特徴については把握していなかったので興味深く読めました。

ちょっとだけ触ってみたくなったので自分のマシンにもインストールすることにしました。

日本ユーザグループのサイトからインストール方法が書かれたページへのリンクがあったので参照してみます。

Mac の場合は MacPorts を利用するのがよいそうです。MacPorts はしばらく触っていなかったので見よう見まねで port selfupdate としてみたのですが、あえなくエラーとなってしまいました。。

1
2
3
4
 $ port selfupdate
--->  Updating the ports tree
Error: Synchronization of the local ports tree failed doing rsync
Error: /opt/local/bin/port: port selfupdate failed: Couldn't sync the ports tree: Synchronization of 1 source(s) failed

CUI でインストールできたほうが格好いいのですが、あまりそこに時間をかけても仕方がないので、誌面で紹介されていたように普通にブラウザからインストーラをダウンロードします。

Node のインストール
↑Node.js 本体とパッケージマネージャ npm がインストールされます。

1
2
$ node -v
v0.6.17

無事にインストールされたことを確認してから Hello World を写経します。

1
2
var text = 'Hello Node!';
console.log(text);
1
2
$ node hello.js
Hello Node!

もうひとつ、http サーバを動かすサンプルも写経してみました。

1
2
3
4
5
6
7
var http = require('http');
var server = http.createServer(function(req,res) {
    res.writeHead(200,{'Content-Type':'text/html'});
    res.end('<h1>Hello Node!</h1>');
});
server.listen(8080);
console.log('server started on 8080');

これを実行すると Terminal では下記のように表示されます。

1
2
$ node http_hello.js
server started on 8080

そして、ブラウザから localhost:8080 にアクセスすると、
Mozilla Firefox
↑確かに表示されました!

まぁ今のところ、node.js について学ぶことは優先順位が低く、その時間があったら Python の feedparser を使って作りたい物があるのでそちらにリソースを割くべきなのですが、入り口だけ軽く触ってみました。これに限らず、興味を持ったときにさわりだけでも覗いてみることで自分のアンテナを少しずつ広げていきたいですね。

参考記事

Python でフィードを扱う(準備段階)

久しぶりに PC の話題を少々。先日 Windows のノート PC でも少し試した Python のモジュール feedparser を MacBook でも試してみます。手順としてはダウンロードしてきて、setup.py を実行するだけです。

Windows 機のときと同様にまずは setuptools を上記からダウンロードして、入れます。

1
2
3
4
5
6
7
8
$ sh setuptools-0.6c11-py2.6.egg

Processing setuptools-0.6c11-py2.6.egg
Removing /Library/Python/2.6/site-packages/setuptools-0.6c11-py2.6.egg
Copying setuptools-0.6c11-py2.6.egg to /Library/Python/2.6/site-packages
setuptools 0.6c11 is already the active version in easy-install.pth
Installing easy_install script to /usr/local/bin
error: /usr/local/bin/easy_install: Permission denied

ん? already the active version がどうのこうのと、どうやらすでにインストール済みだった模様。入れようとしていたディレクトリの中身を確認したところ、しっかり入っていました。

1
2
3
4
5
$ ls /usr/local/bin

easy_install     ipcontroller     ipython          pycolor
easy_install-2.6 ipengine         ipythonx         wget
ipcluster        iptest           kod

一応事前に Python のモジュール一覧を help(‘modules’) で確認したつもりでしたが、見落としていたようです。

feedparser を上記よりダウンロード、解凍して、

1
python setup.py install

を実行すれば OK.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ cd feedparser-5.1.2
$ python setup.py install
running install
running bdist_egg
running egg_info
writing feedparser/feedparser.egg-info/PKG-INFO
writing top-level names to feedparser/feedparser.egg-info/top_level.txt
writing dependency_links to feedparser/feedparser.egg-info/dependency_links.txt
reading manifest file 'feedparser/feedparser.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'feedparser/feedparser.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.6-universal/egg
running install_lib
running build_py
creating build
creating build/lib
copying feedparser/feedparser.py -> build/lib
creating build/bdist.macosx-10.6-universal
creating build/bdist.macosx-10.6-universal/egg
copying build/lib/feedparser.py -> build/bdist.macosx-10.6-universal/egg
byte-compiling build/bdist.macosx-10.6-universal/egg/feedparser.py to feedparser.pyc
creating build/bdist.macosx-10.6-universal/egg/EGG-INFO
copying feedparser/feedparser.egg-info/PKG-INFO -> build/bdist.macosx-10.6-universal/egg/EGG-INFO
copying feedparser/feedparser.egg-info/SOURCES.txt -> build/bdist.macosx-10.6-universal/egg/EGG-INFO
copying feedparser/feedparser.egg-info/dependency_links.txt -> build/bdist.macosx-10.6-universal/egg/EGG-INFO
copying feedparser/feedparser.egg-info/top_level.txt -> build/bdist.macosx-10.6-universal/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/feedparser-5.1.2-py2.6.egg' and adding 'build/bdist.macosx-10.6-universal/egg' to it
removing 'build/bdist.macosx-10.6-universal/egg' (and everything under it)
Processing feedparser-5.1.2-py2.6.egg
Copying feedparser-5.1.2-py2.6.egg to /Library/Python/2.6/site-packages
Adding feedparser 5.1.2 to easy-install.pth file

Installed /Library/Python/2.6/site-packages/feedparser-5.1.2-py2.6.egg
Processing dependencies for feedparser==5.1.2
Finished processing dependencies for feedparser==5.1.2

無事インストールできたようで一安心です。

結局のところ準備段階の域を出ず、まだまだこれからようやくスタートというところなのですが、ひとまずここまでです。

しばらく離れていると、それまで使っていなかった知識はきれいさっぱりと抜けていて、また調べ直す必要が出てきたりしますね(例えば入っている Python のバージョン確認するにはどうすればよいのだったっけ、とか)。こういうロスを防ぐには、ある程度のまとまった期間に定期的に対象に触れ続けるしかないのかなと思います。もっと精進せねば。

土曜日にやるルーティンを定めよう

今の勤務先は基本的にカレンダー通りの営業で、基本的には土日祝は休日ということになっています。平日は仕事で立て込んでいて個人的な作業をする時間を確保できないことが多いです。

洗濯などの家事や細々とした個人的な事務作業の類は大抵の場合、週末にまとめて対応しているのですが、洗濯などは土曜日に済ませてしまった方が満足度が高いだろうということに今日ふと気づきました。

日曜日になると、翌日は月曜日で仕事前日ということもあり、できればゆったりと過ごしたいと感じます。そこに洗濯などの家事や、溜まったレシートの入力などの雑多な用事があると相対的に少しテンションがさがってしまいがちです。

理屈で考えると、土日 2 日間のどこの時間帯をそれら作業に割り当てたとしても、それ以外の時間は休日として残されているので満足度は変わらないはずです。

しかし、洗濯などのやるべきことを(意識しているか否かによらず)先送りしつつ、まる 1 日をフルで使える土曜日よりも、それらを済ませてすっきりした頭で(かつ、すっきりした部屋で) 1 日まるまる空いている日曜日とを比較すると、やはり後者の方が気分がよいのです。

これからは、「土曜日に済ませること」を明文化してキチッと定めて、そのとおりに実行して、日曜日は心からリラックスできるような週末の過ごし方を心がけたいと思います!

現状に満足しない姿勢

昨日考えたことをもう少し具体的に書いてみます。
例えば今シェアハウスに住んでいるのは決してベストチョイスではありません。コストが抑えられるというメリットがあるから住んでいるわけですが、その分一般的な一人暮らしの生活と比べるとだいぶ快適度合いが下がります。

今のシェアハウスへの引越を検討しているときに相談した人たちには一様に「そんな環境で大丈夫なの?」と心配されました。結局今のところ十分に適応できていて、そのこと自体は自分にとってプラスだと捉えていますが、この環境にいることが自分にとっての当たり前になってはいけないなと感じているのです。

もっと過ごしやすい部屋で、もっと会社の近くで、快適な生活をおくることを未来の自分に対して期待していなければいけません。

もちろん、自分にとっての優先順位があるので、シェアハウスを出て部屋を借りることを一番の目標にするかどうかは別問題です。今だって出ようと思えばすぐにでも出られる状況ですが、今のところは住居の快適性よりも他の要素を重視しているために引き続き住んでいます。

それでも、定期的に付近の賃貸情報をチェックしたり、引っ越す際のコストをざっくり計算するなどして、ある程度具体的に先のイメージを持っておく必要があると思います。現状と将来とバランスよく考えるために、そういうことを留意しておいた方がいいかなと思うのでした。