ユーザーアカウント関連¶
本節では users 系 API の応用方法について述べる。
GET users/lookup¶
GET users/lookup は一度に 100 件までの Twitter ユーザー詳細情報を得ることができる。この API を利用するには、ユーザー ID を必要な分だけあらかじめ知っておく必要がある。
利用者ノート
ドキュメントにあるように ID を収集するには GET friends/ids や GET followers/ids を併用することになりそうだ。
複数のユーザー ID をカンマで連結して CSV テキストする。 Python では
','.join(ids)
でそれを実現できる。
GET users/show¶
GET users/show は特定のユーザーの詳細情報を得るのに GET users/show を利用する。いわば GET users/lookup の単数版だ。
#!/usr/bin/env python
# Demonstration GET users/show
# See https://dev.twitter.com/rest/reference/get/users/show
from secret import twitter_instance
from pprint import pprint
tw = twitter_instance()
# [1]
response = tw.users.show(
screen_name='showa_yojyo',
include_entities=False)
# [2]
pprint(response)
[1] 基本的に指定する引数はこれだけで構わない。
[2] ユーザーの Twitter 情報を出力してみる。
GET users/search¶
GET users/search はキーワードから何か関係のありそうなユーザーを探すのにたいへん便利だ。応用例としては、例えば bot に関係しそうなユーザーを可能な限りかき集めて、ひとつのリストにまとめるといったものが考えられる(私はそれを実践している)。
これはごく単純な呼び出し例なので、キーワード引数 count
の上限である 20 ユーザーしか取得できない。さらに取得するには、この API の呼び出しをループの中に入れて、キーワード引数 page
をループカウンターで指定するとよいだろう。その際には関数 time.sleep
等でリクエストに時間的間隔を設けると申し分ない。
#!/usr/bin/env python
# Demonstration GET users/search
# See https://dev.twitter.com/rest/reference/get/users/search
from secret import twitter_instance
tw = twitter_instance()
response = tw.users.search(
q='bot',
page=0,
count=20,
include_entities=False)
for i in response:
print('''
{screen_name} | {name}
{location}
{url}
{description}
ツイート数 {statuses_count}
フォロー {friends_count} 人
フォロワー {followers_count} 人
'''.format_map(i))
GET users/suggestions¶
GET users/suggestions は Twitter によるおすすめアカウントのカテゴリーのみを得る機能だ。
サンプルコードを次に示す。
#!/usr/bin/env python
# Demonstration GET users/suggestions
# See https://dev.twitter.com/rest/reference/get/users/suggestions
from secret import twitter_instance
tw = twitter_instance()
response = tw.users.suggestions()
for i in response:
print('{name}|{slug}|{size}'.format_map(i))
私の実行例を示す。誰もフォローしていない割にはかなりのカテゴリーが表示される。リストには山ほどユーザーを収容していることからこういう構成になっているのだろうかと思う。お笑い系はどこにもいないのだが?
bash$ ./users-suggestions.py
Twitter|twitter|13
野球|野球|11
サッカー|サッカー|15
スポーツ|スポーツ|15
お笑い|お笑い|15
政府|政府|15
ニュース|ニュース|14
ジャーナリスト|ジャーナリスト|15
旅行 / レジャー|旅行-レジャー|15
声優 / アニメ|声優-アニメ|15
ファッション|ファッション|14
音楽|音楽|15
ライフライン / 公共交通機関|ライフライン-公共交通機関|13
美術館・博物館|美術館・博物館|15
テレビタレント|テレビタレント|15
GET users/suggestions/:slug¶
GET users/suggestions/:slug は上記のあるカテゴリーのユーザー群を取得する機能だ。これは PTT でどう呼び出すものか試行錯誤したが、最終的には次のコードで動作を確認した。
#!/usr/bin/env python
# Demonstration GET users/suggestions/:slug
# See https://dev.twitter.com/rest/reference/get/users/suggestions/%3Aslug
from secret import twitter_instance
from json import dump
from urllib.parse import quote
import sys
tw = twitter_instance()
# [1]
response = tw.users.suggestions._id(_id=quote('政府'))
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] 例えば「政府」が有効なカテゴリー名の一つなので、これでユーザーを得たい。 PTT では日本語の実引数を自動的にエンコードしてくれるが、ここでは手動で処理する。また、ドキュメントのどこにもない
_id
の使い方に注意して欲しい。
次に実行結果を示す。大部分を省略する。
bash$ ./users-suggestions-slug.py
{
"name": "政府",
"size": 15,
"slug": "政府",
"users": [
{
...
"name": "厚生労働省",
...
},
{
...
"name": "総務省消防庁",
...
},
...
{
...
"name": "消費者庁",
...
}
]
}
GET users/suggestions/:slug/members¶
GET users/suggestions/:slug/members は上記の GET users/suggestions/:slug の返すデータに加え、各ユーザーの最近のツイートをも返す。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET users/suggestions/:slug/members
# See https://dev.twitter.com/rest/reference/get/users/suggestions/%3Aslug/members
from secret import twitter_instance
from json import dump
from urllib.parse import quote
import sys
tw = twitter_instance()
# [1]
response = tw.users.suggestions._id.members(_id=quote('政府'))
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
次に実行結果を示す。大部分を省略する。
bash$ ./users-suggestions-slug-members.py
[
{
...
"status": {
...
},
...
"name": "厚生労働省",
...
},
...
]
POST users/report_spam¶
POST users/report_spam は指定のユーザーがスパムであることを Twitter に報告する。誰彼構わずスパム報告していると、報告者のほうが Twitter のブラックリストに載ると聞いたことがある。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration POST users/report_spam
# See https://dev.twitter.com/rest/reference/post/users/report_spam
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
response = tw.users.report_spam(screen_name='showa_yojyo')
# [2]
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] スパムを
user_id
またはscreen_name
のどちらか一方で指定する。[2] 送信結果を出力する。