リスト関連¶
本節では lists 系 API の応用について記す。私が Twitter の機能で最も利用するのがリストである。特にリストへのユーザー登録処理を重視している。
POST lists/create¶
リストを新しく作成するための API だ。Twitter Web Client で作業するほうが早い。
#!/usr/bin/env python
# Demonstration POST lists/create
# See https://dev.twitter.com/rest/reference/post/lists/create
from secret import twitter_instance
tw = twitter_instance()
tw.lists.create(name='listname', description='This is a temporary list')
POST lists/destroy¶
自分の所有するリストを一つ指定して、それを削除する API だ。使用頻度はテスト用に作成したダミーリストをまた削除するときに使うくらいだ。
#!/usr/bin/env python
# Demonstration POST lists/destroy
# https://dev.twitter.com/rest/reference/post/lists/destroy
from secret import twitter_instance
tw = twitter_instance()
tw.lists.destroy(
owner_screen_name='showa_yojyo',
slug='listname',)
GET lists/list¶
GET lists/list は指定ユーザーの所有する全てのリストと購読しているリストを取得する機能だ。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET lists/list
# See https://dev.twitter.com/rest/reference/get/lists/list
from secret import twitter_instance
tw = twitter_instance()
# [1]
response = tw.lists.list(screen_name='showa_yojyo')
# [2]
for item in response:
print('{mode} {full_name} {description}'.format_map(item).replace('\n', '\\n'))
[1] メソッド
lists.list
にuser_id
またはscreen_name
キーワード引数を与えて、そのユーザーの持っているリストを全部取得する。ユーザーが作成したリストに加え、もしあれば、購読している他ユーザーが作成したリストを含む。[2] 各リストの
mode
,full_name
,description
各属性をコンソールに出力する。
実行例を示す。自分のものについては隠しリストも得られる。
bash$ ./lists-list.py
public @mj_sega_ad/【mj5】twitter連動
public @OReillyMedia/everything-o-reilly
public @fenrir_official/fenrir-inc フェンリルの公式アカウントなど。
public @nikkei/日経グループ 日経グループ内の公式アカウントのリストです。\n#WelcomeToTwitter
public @showa_yojyo/followed-by People who follow(ed) me for a fixed period. For some reason some followers are not included.
private @showa_yojyo/...
public @showa_yojyo/videogame Accounts related to videogame productions, amusement facilities, etc.
public @showa_yojyo/informative Accounts of people or organizations that supplyeveryone helpful information and knowledge.
public @showa_yojyo/tools Accounts that inform of software, hardware, events, bug-fixes, release schedules, etc.
public @showa_yojyo/bot A list of amusing bot accounts.
GET lists/statuses¶
GET lists/statuses はリストを指定して、そのタイムラインを閲覧する機能だ。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET lists/statuses
# See https://dev.twitter.com/rest/reference/get/lists/statuses
from secret import twitter_instance
tw = twitter_instance()
# [1]
kwargs = dict(
owner_screen_name='showa_yojyo',
slug='informative',
per_page=10,
page=1,
include_entities=False,
include_rts=True)
response = tw.lists.statuses(**kwargs)
for item in response:
# [2]
print(item['user']['screen_name'])
print('{text}\n{created_at} {source}'.format_map(item))
print('-' * 70)
[1] メソッド
lists.statuses
に与える引数を準備する。リストを特定する手段は一つではないのだが、分かりやすさを優先してslug
およびowner_screen_name
を同時に指示する。ここでは
screen_name
がshowa_yojyo
のユーザーの、informative
という公開リストがあるという前提で、そのタイムラインを見るという例だ。[2] 文字列をコンソールに出力する。ツイート内容、改行、ツイート時刻、ツイートに利用したアプリ名が確認できる。
GET lists/show¶
GET lists/show は指定のリストの詳細を知るための API だ。次の例は私の所有するリスト bot
の全属性を標準出力に出力する。
#!/usr/bin/env python
# Demonstration GET lists/show
# See https://dev.twitter.com/rest/reference/get/lists/show
from secret import twitter_instance
from pprint import pprint
tw = twitter_instance()
response = tw.lists.show(
owner_screen_name='showa_yojyo',
slug='bot')
pprint(response)
コンソールからの実行例を示す。ユーザー自身の情報は一部カットした。
bash$ lists-show.py
{'created_at': 'Sun Feb 12 13:21:16 +0000 2012',
'description': 'A list of amusing bot accounts.',
'following': True,
'full_name': '@showa_yojyo/bot',
'id': 65280663,
'id_str': '65280663',
'member_count': 4873,
'mode': 'public',
'name': 'bot',
'slug': 'bot',
'subscriber_count': 4,
'uri': '/showa_yojyo/lists/bot',
'user': {'contributors_enabled': False,
'created_at': 'Wed Jan 11 12:01:03 +0000 2012',
'default_profile': False,
'default_profile_image': False,
'description': '実は電子の世界の人で現実には存在しない。',
...
'verified': False}}
POST lists/update¶
POST lists/update は自分の所有するリストの属性を変更するための API だ。あまり利用しないのでコード省略。
POST lists/members/create¶
POST lists/members/create は自分の所有するリストに指定ユーザーを一人分登録する機能だ。今では POST lists/members/create_all で完全に置き換えてしまって構わなそうだ。
一応サンプルコードを示す。
#!/usr/bin/env python
# Demonstration POST lists/members/create
# https://dev.twitter.com/rest/reference/post/lists/members/create
from secret import twitter_instance
tw = twitter_instance()
tw.lists.members.create(
owner_screen_name='showa_yojyo',
slug='listname',
screen_name=screen_name)
POST lists/members/create_all¶
POST lists/members/create_all はブラウザー上の操作ではできないと思われる、一括でユーザーを複数指定して指定のリストに登録する処理を実現する機能だ。
次のサンプルコードの screen_names
はスクリーンネームの tuple
インスタンスを意味する。この API はリストを多用する筆者が利用する頻度がもっとも高い。
#!/usr/bin/env python
# Demonstration POST lists/members/create_all
# https://dev.twitter.com/rest/reference/post/lists/members/create_all
from secret import twitter_instance
tw = twitter_instance()
screen_names=(
# ...
)
tw.lists.members.create_all(
owner_screen_name='showa_yojyo',
slug='listname',
screen_name=','.join(screen_names))
利用者ノート
上のサンプルコードはあくまで簡易版だ。ウン千というアカウントをリストに登録する状況が私の場合はあるので、CSV 文字列を組む手順に工夫が要る。
手許のスクリプトを見たら、大体こういうことをしている。
ユーザー ID をテキストファイルから入力する
リクエストをプログラムでループにする
15 アカウントずつリクエストする
リクエスト間に何秒間かのウェイトを入れる
POST lists/members/destroy¶
POST lists/members/destroy はリストから指定したユーザーを削除する機能だ。しかし、これを利用するくらいならばブラウザーで Twitter を利用するほうが早いやもしれない。複数ユーザーを処理するための POST lists/members/destroy_all も参照。
一応サンプルコードを示す。
#!/usr/bin/env python
# Demonstration POST lists/members/destroy
# https://dev.twitter.com/rest/reference/post/lists/members/destroy
from secret import twitter_instance
tw = twitter_instance()
tw.lists.members.destroy(
owner_screen_name='showa_yojyo',
slug='listname',
screen_name='showa_yojyo')
POST lists/members/destroy_all¶
POST lists/members/destroy_all は自分の所有するリストから複数のユーザーを一度に削除する機能だ。コードとしては POST lists/members/create_all と同じ構造になる。
#!/usr/bin/env python
# Demonstration POST lists/members/destroy_all
# https://dev.twitter.com/rest/reference/post/lists/members/destroy_all
from secret import twitter_instance
tw = twitter_instance()
screen_names=(
# ...
)
tw.lists.members.destroy_all(
owner_screen_name='showa_yojyo',
slug='listname',
screen_name=','.join(screen_names))
GET lists/members¶
GET lists/members は指定リストに登録されているユーザーをすべて得ることができる機能だ。登録ユーザー数が多いリストに対しては、次のように「カーソル処理」で複数回のリクエストをすることになるだろう。
#!/usr/bin/env python
# Demonstration GET lists/members
# https://dev.twitter.com/rest/reference/get/lists/members
from secret import twitter_instance
OWNER_SCREEN_NAME='showa_yojyo'
SLUG='informative'
tw = twitter_instance()
next_cursor = -1
while next_cursor != 0:
response = tw.lists.members(
owner_screen_name=OWNER_SCREEN_NAME,
slug=SLUG,
cursor=next_cursor)
users = response['users']
for i in users:
print('{screen_name}:{description}'.format_map(i).replace('\n', '\\n'))
next_cursor = response['next_cursor']
利用者ノート
GET lists/ownerships と GET lists/subscriptions を合わせたようなデータが得られる。
GET lists/members/show¶
GET lists/members/show は指定ユーザーが指定リストに登録されているかを調べる機能だ。使い途が少々思いつかない。
#!/usr/bin/env python
# Demonstration GET lists/members/show
# https://dev.twitter.com/rest/reference/get/lists/members/show
from secret import twitter_instance
tw = twitter_instance()
params = dict(
owner_screen_name='showa_yojyo',
slug='informative',
screen_name='asahi',
include_entities=False,
skip_status=False,)
response = tw.lists.members.show(**params)
print('{screen_name} / {name} {description}'.format_map(response).replace('\n', '\\n'))
GET lists/memberships¶
GET lists/memberships は、あるユーザーが他のユーザーが管理しているリストに含まれているとき、そのようなリストを列挙するのに利用する機能だ。
#!/usr/bin/env python
# Demonstration GET lists/memberships
# https://dev.twitter.com/rest/reference/get/lists/memberships
from secret import twitter_instance
tw = twitter_instance()
kwargs = dict(screen_name='showa_yojyo')
next_cursor = -1
while next_cursor:
# [1]
response = tw.lists.memberships(cursor=next_cursor, **kwargs)
lists = response['lists']
# [2]
for item in lists:
print('{full_name}, {description}'.format_map(item).replace('\n', '\\n'))
next_cursor = response['next_cursor']
[1] ユーザー
showa_yojyo
を含むリストをリクエストする。cursor
については別項で詳しく解説する。[2] 各リストの名前と説明文をコンソールに出力する。
full_name
の先頭にはリストの作者のscreen_name
が見えると思う。
POST lists/subscribers/create¶
POST lists/subscribers/create は他人のリストを購読する機能だ。利用しないこともないが、説明を省略する。
POST lists/subscribers/destroy¶
POST lists/subscribers/destroy は他人のリストの購読をやめる機能だ。利用しないので説明略。
GET lists/subscribers¶
GET lists/subscribers は指定リストの購読者をリストする機能だ。どうも非公開ユーザーが購読していてもリストされないらしい。
#!/usr/bin/env python
# Demonstration GET lists/subscribers
# https://dev.twitter.com/rest/reference/get/lists/subscribers
from secret import twitter_instance
tw = twitter_instance()
next_cursor = -1
while next_cursor:
response = tw.lists.subscribers(
owner_screen_name='showa_yojyo',
slug='informative',
cursor=next_cursor)
for item in response['users']:
print('{screen_name}: {description}'.format_map(item).replace('\n', '\\n'))
next_cursor = response['next_cursor']
余談だが、ユーザー属性の description は改行文字が含まれる場合がある。CSV 形式で出力する場合は注意したい。
POST lists/subscribers/show¶
POST lists/subscribers/show は任意のユーザーが任意のリストを購読しているかどうかを知る機能だ。使いどころが思い浮かばないので、説明を省く。
GET lists/subscriptions¶
GET lists/subscriptions はあるユーザーが購読している(他ユーザーの管理下にある)リストを得るために利用する機能だ。
#!/usr/bin/env python
# Demonstration GET lists/subscriptions
# https://dev.twitter.com/rest/reference/get/lists/subscriptions
from secret import twitter_instance
tw = twitter_instance()
next_cursor = -1
while next_cursor:
response = tw.lists.subscriptions(
screen_name='showa_yojyo',
cursor=next_cursor)
for item in response['lists']:
print('{full_name}: {description}'.format_map(item).replace('\n', '\\n'))
next_cursor = response['next_cursor']
GET lists/ownerships¶
GET lists/ownerships は特定のユーザーが管理しているリストを列挙するのに利用する機能だ。
#!/usr/bin/env python
# Demonstration POST lists/ownerships
# https://dev.twitter.com/rest/reference/post/lists/ownerships
from secret import twitter_instance
tw = twitter_instance()
next_cursor = -1
while next_cursor:
response = tw.lists.ownerships(
screen_name='showa_yojyo',
cursor=next_cursor)
for item in response['lists']:
print('{mode}:{full_name}:{description}'.format_map(item).replace('\n', '\\n'))
next_cursor = response['next_cursor']