id:suztomo先生のpython講座 - 3回目ぐらい
モジュール
- えらいひとがまとめてくれた便利なライブラリみたいなの
json使ってみよう
googleまたはcloudに関係するイベントを検索、出力フォーマットはatom http://api.atnd.org/events/?keyword_or=google,cloud&format=atom /*format= のところを json にした*/
jsonをつかえるようにする
json形式で読み込む
- サンプルクエリで呼び出される結果をファイルに保存する
- wget "http://api.atnd.org/events/?keyword_or=google,cloud&format=json"
- 「&」がよくなかったみたいで、クォーテーションでくくった。
- wget "http://api.atnd.org/events/?keyword_or=google,cloud&format=json"
- 以下のようなpythonのファイル「atnd.py」を作る
#!/usr/bin/env python import simplejson #simplejson をいんぽーと f = open("atnd2.json") #wgetしたクエリの出力結果を格納 x = simplejson.load(f) #pythonで扱える形にsimplejsonで読み込む? for i in [0,9]: print (x['events'][i]['title'])
ipythonでいろいろ試してみる
$ ipython atnd.py
でひらいて、いろいろしらべる。
In [1] : x
とやると、とりあえず検索クエリの結果を保存したファイルの中身がばーっとでる。
次に、
In [5] : type (x) Out [5]: <type 'dict'>
とやると、xに格納されたデータがどんな型?なのか分かる。
この場合「dict」ということで、「辞書型(dictionary)」と分かる。
辞書は順序付けのされていない キー(key): 値(value) のペアからなり、 キーが (辞書の中で) 一意でければならない、と考えると最もよいでしょう。
http://www.python.jp/doc/2.5/tut/node7.html#SECTION007500000000000000000
ということらしい。
In [6]: x.
x.__class__ x.__getattribute__ x.__lt__ x.__str__ x.iterkeys
x.__cmp__ x.__getitem__ x.__ne__ x.clear x.itervalues
x.__contains__ x.__gt__ x.__new__ x.copy x.keys
x.__delattr__ x.__hash__ x.__reduce__ x.fromkeys x.pop
x.__delitem__ x.__init__ x.__reduce_ex__ x.get x.popitem
x.__doc__ x.__iter__ x.__repr__ x.has_key x.setdefault
x.__eq__ x.__le__ x.__setattr__ x.items x.update
x.__ge__ x.__len__ x.__setitem__ x.iteritems x.values
次に、x.とかやってtabを押して候補をだすと、xに対して呼び出せるkey?がわかるので、
それっぽいものをさがす。
ここんとこはよくわからなかったけど、とりあえず「keys」というやつをすずとも先生が選んでくれました。
で、以下のようにしてみると、以下のような感じになるんでゲソ
In [7]: x.keys() #関数だからちゃんと()つけないとだめ Out[7]: [u'results_returned', u'events', u'results_start', u'results_available']
ふむふむ。(←わかってない
ただ、それっぽい名前の項目がリストになってるのかなーみたいなのはなんか分かる。
とりあえず、[results_returned]を選んで取り出してみる
In [8]: x['results_returned'] Out[8]: 10
まぁなんか10件の結果が返ってきましたね、ということがわかる。*1
件数は分かったので、次に[events]を見る。
In [9]: x['events'] Out[9]: [{u'accepted': 38, u'address': u'\u672d\u5e4c\u5e02\u767d\u77f3\u533a\u6771\u672d\u5e4c5\u67611\u4e01\u76ee1\uff0d1', u'catch': u'\u304a\u984c\uff1a\u521d\u5fc3\u8005\u5411\u3051', . . .
となんかもりっと返ってくる。
ので、さっきのtypeってやつで、どんな型なのか調べてみる。
In [11]: type(x['events']) Out[11]: <type 'list'>
すると、「list」と返ってきて、リストなんだなーとわかる。
ということは、適当な番号を指定してやれば格納されたeventsの項目をひとつ抜き出せそうですね、となる。
すずとも先生曰く、うしろに[0]とか付ければよい、とのことなので、
n [12]: x['events'][0] Out[12]: {u'accepted': 38, u'address': u'\u672d\u5e4c\u5e02\u767d\u77f3\u533a\u6771\u672d\u5e4c5\u67611\u4e01\u76ee1\uff0d1', u'catch': u'\u304a\u984c\uff1a\u521d\u5fc3\u8005\u5411\u3051', . . .
としてみると、またもりっとかえってきた。
なので、もっかいtypeしてみる。
In [13]: type(x['events'][0]) Out[13]: <type 'dict'>
すると今度はdictときて、辞書型なのかー、ということがわかった。
先ほどと同じように、.keys()とうしろにつけてみる。
In [15]: x['events'][0].keys() Out[15]: [u'owner_nickname', u'event_url', u'ended_at', u'description', u'accepted', u'title', u'event_id', u'lon', u'updated_at', u'owner_twitter_id', u'url', u'waiting', u'owner_twitter_img', u'address', u'catch', u'place', u'started_at', u'limit', u'lat', u'owner_id']
おお、なんか出た。
で、「title」というのを取り出してみると
In [16]: x['events'][0]['title'] Out[16]: u'Hokkaido.pm #3'
わーい、「Hokkaido.pm #3」というイベントのタイトルを見ることができた。
HIT件数は10あるらしかったので、今度はatnd.pyにfor文を足して、タイトルを全部書き出させてみる。
#!/usr/bin/env python import simplejson f = open("atnd2.json") x = simplejson.load(f) for i in [0,1,2,3,4,5,6,7,8,9]: print (x['events'][i]['title'])
で、実行結果
COTTOS:atnd htomine$ python atnd.py Hokkaido.pm #3 世界の注目スタートアップ勉強会 第8回 データマイニング+WEB 勉強会@東京 ( #TokyoWebmining #8) −大規模解析・ウェブ・クオンツ 祭り− 第9回 山陰ITPro勉強会 ESPer2010 第5回 やさしいPAIP読書会 9LISP - 027 Android 鍋部:キックオフ鍋会 第7回 データマイニング+WEB 勉強会@東京 (Tokyo.Webmining #7) −機械学習・解析・セマンティックウェブ祭り− 第7回「コンピュータビジョン最先端ガイド」勉強会@関東 COTTOS:atnd htomine$ python atnd.py 世界の注目スタートアップ勉強会
わーー。
という感じでモジュールを使ってみようだったけど、いろいろ触ってみた感じだった。
とりあえずプログラミング全然初歩があれなので、いちいち質問しています。。。
id:suztomoありがとう!