id:suztomo先生のpython講座 - 3回目ぐらい

モジュール

  • えらいひとがまとめてくれた便利なライブラリみたいなの

json使ってみよう

  • atndのAPIリファレンスにのっている、イベントサーチAPIのサンプルクエリをjson形式で読み込んでみる(っていうことだとおもう
googleまたはcloudに関係するイベントを検索、出力フォーマットはatom
http://api.atnd.org/events/?keyword_or=google,cloud&format=atom

/*format= のところを json にした*/

ATND API リファレンス

jsonをつかえるようにする

  • import jsonとかしてもだめだったので、json/simplejsonをつかえるようにしたい
    • easy_installというので入らなかったので、先生がtarball落としてきて使えるようにしてくれたようです

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ありがとう!

*1:Googleだかクラウドだかに関連するイベント、ということでしたね。