早速、第1章を読んで楽しもう!
。。。って思ったところ、1.2.1のtwitter ウェブAPIのラッパーを取得して、「Twitterの検索トレンドの取得」ってとこではまった。。。w
ターミナルで、
>>> import twitter
>>> twitter_api = twitter.Twitter(domain="api.twitter.com", api_version='1')
>>> trends = twitter_api.trends()
って本では入れるようになってるけど、どうにも
Traceback (most recent call last):
File "
File "/Library/Python/2.7/site-packages/twitter-1.7.1-py2.7.egg/twitter/api.py", line 155, in __call__
File "/Library/Python/2.7/site-packages/twitter-1.7.1-py2.7.egg/twitter/api.py", line 170, in _handle_response
twitter.api.TwitterHTTPError: Twitter sent status 404 for URL: 1/trends.json using parameters: ()
details:
ってエラーを吐いてるよ。。。orz
ってか「status 404 for URL:」って書いてあるよ?
あれ??
そんなわけで、Twitter本家のサイトを見に行くと、
うん、リクエストURL違うね?w
ラッパーだと、1/trends.json
でも、公式ガイドだと、1/trends/1.json
www
ってことで、仕方なく、easy_installしたtwitterのラッパーの「api.py」を見に行き、該当箇所を修正。
まぁ「api.py」の121行目の「uri = '/'.join(uriparts)」の後に改行いれて、122行目に「uri = uri + '/1'」っていれてあげるだけなんだけどね。
これで
(略)
>>> trends = twitter_api.trends()
っていれてもエラーはかなくなった!うん、よし!
で、続けて本にある通り、
>>> [ trend['name'] for trend in trends['trends'] ]
とリスト内包表記で、Go!!
。。。っと??またエラーだよ?w
>>> [trend['name'] for trend in trends['trends']]
Traceback (most recent call last):
File "
TypeError: list indices must be integers, not str
んーー??
インデックスエラー??
そんなわけで、さっき代入したtrendsの中を見てみる。
>>> trends
[{u'created_at': u'2011-11-20T16:32:46Z', u'as_of': u'2011-11-20T16:38:38Z', u'trends': [{u'url': u'http://twitter.com/search/%23HappyBirthdayJaxon', u'query': u'%23HappyBirthdayJaxon', u'events': None, u'promoted_content': None, u'name': u'#HappyBirthdayJaxon'}, {u'url': u'http://twitter.com/search/%22Katy%20is%20AMAzing%22', u'query': u'%22Katy%20is%20AMAzing%22', u'name': u'Katy is AMAzing', u'promoted_content': None, u'events': None}, {u'url': u'http://twitter.com/search/%23excaz', u'query': u'%23excaz', u'events': None, u'promoted_content': None, u'name': u'#excaz'}, {u'url': u'http://twitter.com/search/%22Get%20Ariana%20On%20Ellen%22', u'query': u'%22Get%20Ariana%20On%20Ellen%22', u'events': None, u'promoted_content': None, u'name': u'Get Ariana On Ellen'}, {u'url': u'http://twitter.com/search/%23MaisFeioQueORonaldinho', u'query': u'%23MaisFeioQueORonaldinho', u'events': None, u'promoted_content': None, u'name': u'#MaisFeioQueORonaldinho'}, {u'url': u'http://twitter.com/search/%22Edgar%20Allen%20Poe%22', u'query': u'%22Edgar%20Allen%20Poe%22', u'events': None, u'promoted_content': None, u'name': u'Edgar Allen Poe'}, {u'url': u'http://twitter.com/search/%22Excelsior%20-%20AZ%22', u'query': u'%22Excelsior%20-%20AZ%22', u'name': u'Excelsior - AZ', u'promoted_content': None, u'events': None}, {u'url': u'http://twitter.com/search/Jaxon', u'query': u'Jaxon', u'events': None, u'promoted_content': None, u'name': u'Jaxon'}, {u'url': u'http://twitter.com/search/%22David%20Luiz%22', u'query': u'%22David%20Luiz%22', u'events': None, u'promoted_content': None, u'name': u'David Luiz'}, {u'url': u"http://twitter.com/search/AMA's", u'query': u"AMA's", u'events': None, u'promoted_content': None, u'name': u"AMA's"}], u'locations': [{u'woeid': 1, u'name': u'Mundial'}]}]
あや??
u'trends': [{u'url': u'http://twitter.com/search/%23HappyBirthdayJaxon', u'query': u'%23HappyBirthdayJaxon', u'events': None, u'promoted_content': None, u'name': u'#HappyBirthdayJaxon'}, 。。。
ってなってる。
twitterの返してくる形が変わったのかな?
ということで、リスト内包表記を
>>> [ trend[u'name'] for trend in trends[0]["trends"] ]
に変えてあげると、見事、
[u'#HappyBirthdayJaxon', u'Katy is AMAzing', u'#excaz', u'Get Ariana On Ellen', u'#MaisFeioQueORonaldinho', u'Edgar Allen Poe', u'Excelsior - AZ', u'Jaxon', u'David Luiz', u"AMA's"]
本が期待してる結果になったね!!
真夜中にこんなハマるとは思わなかったw
そんなわけで、今日はここで寝ることに。
さてさて、明日もがんばるぞー!
追記:
また不具合起きたので、コードを追加しました。
こちら
0 件のコメント:
コメントを投稿