#social_data参加メンバーのリスト作るスクリプト書いた
標題の通りです。@zaoriku0さんが「誰かリスト作って」と言ってたので書きました。
「入門 ソーシャルデータ」真面目に勉強する会 第1回〜第10回
の参加者をATND APIで取ってきて、TwitterのAPI使ってリスト作るだけです。
結果作ったリスト→ https://twitter.com/#!/who_you_me/social-data
# -*- coding: utf-8 -*- import urllib import json import cPickle as pickle import oauth2 """ ATND APIにアクセスして参加者のTwitter_screen_nameを取得 """ def make_query(params): # "key1=value1&key2=value2..."に変換 return '&'.join(['%s=%s' % (key, ','.join(value)) for key, value in params.items()]) ep = 'http://api.atnd.org/events/users/' # イベントID ids = [23451,24237,24517,24531,24533,24532,25511,25512,25513,25514] ids = map(lambda x: str(x), ids) # valueはリストで入れよう params = {'event_id': ids, 'format': ['json']} url = ep + '?' + make_query(params) response = urllib.urlopen(url) data = json.loads(response.read()) users = [user['twitter_id'] for event in data['events'] for user in event['users'] if user['twitter_id']] # 重複を取り除く users = set(users) # 永続化 pickle.dump(users, open('users.pkl', 'w')) """ Twitter APIにアクセスしてリストを作成 """ CONSUMER_KEY = YOUR_COMUSER_KEY CONSUMER_SECRET = YOUR_CONSUMER_SECRET ACCESS_TOKEN_KEY = YOUR_ACCESS_TOKEN_KEY ACCESS_TOKEN_SECRET = YOUR_ACCESS_TOKEN_SECRET # リストつくる ep = 'https://api.twitter.com/1/lists/create.json' params = {'name': 'social_data', 'description': '「入門 ソーシャルデータ」真面目に勉強する会 の参加者'} consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET) token = oauth2.Token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET) client = oauth2.Client(consumer, token) response = client.request(ep, 'POST', urllib.urlencode(params)) data = json.loads(response[1]) list_id = data['id'] # 作成したリストにメンバーを登録 ep = 'https://api.twitter.com/1/lists/members/create_all.json' params = {'list_id': list_id, 'screen_name': ','.join(users)} client.request(ep, 'POST', urllib.urlencode(params))
ATNDのAPI、イベントIDを指定して検索するときに複数のIDを指定するには
event_id=id1,id2,id3...
みたいにコンマで区切ってセットするんだけど、このコンマをパーセントエンコードしちゃうと何故か正しい結果返さないんだよなあ、、、
なのでurlllib.urlencode()は使えず、仕方ないので自分でkey=valueの形に(エンコードせず)変換するmake_query関数を作りましたとさ。