フォロー自身とフォローに付随する機能¶
本節では friendships 系 REST API について記す。私自身はフォロー機能を全く利用しないので、この括りの機能には基本的には縁がない。試すとしたら、任意のユーザー同士の関係性を知る機能ということになる。
POST friendships/create¶
POST friendships/create は他人をフォローする機能だ。オプションとして彼に関するイベント通知の有無を設定できる。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration POST friendships/create
# See https://dev.twitter.com/rest/reference/post/friendships/create
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
response = tw.friendships.create(
screen_name='showa_yojyo',
follow=True)
# [2]
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] フォローするユーザーの
user_id
またはscreen_name
を指定する。どちらか一方でよい。また、オプションとして
follow=True
という解りにくいパラメーターがある。これは相手からのイベント通知を有効にするかどうかのフラグである。[2] 応答データを出力する。
次に実行例を示す。自分自身をフォローすることはできないようだ。
bash$ ./friendships-create.py
Traceback (most recent call last):
File "D:\Python35\lib\site-packages\twitter\api.py", line 319, in _handle_response
handle = urllib_request.urlopen(req, **kwargs)
File "D:\Python35\lib\urllib\request.py", line 162, in urlopen
return opener.open(url, data, timeout)
File "D:\Python35\lib\urllib\request.py", line 471, in open
response = meth(req, response)
File "D:\Python35\lib\urllib\request.py", line 581, in http_response
'http', request, response, code, msg, hdrs)
File "D:\Python35\lib\urllib\request.py", line 509, in error
return self._call_chain(*args)
File "D:\Python35\lib\urllib\request.py", line 443, in _call_chain
result = func(*args)
File "D:\Python35\lib\urllib\request.py", line 589, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./friendships-create.py", line 14, in <module>
response = tw.friendships.create(screen_name='showa_yojyo')
File "D:\Python35\lib\site-packages\twitter\api.py", line 312, in __call__
return self._handle_response(req, uri, arg_data, _timeout)
File "D:\Python35\lib\site-packages\twitter\api.py", line 345, in _handle_response
raise TwitterHTTPError(e, uri, self.format, arg_data)
twitter.api.TwitterHTTPError: Twitter sent status 403 for URL: 1.1/friendships/create.json using parameters: (oauth_consumer_key=...&screen_name=showa_yojyo)
details: {'errors': [{'code': 158, 'message': "You can't follow yourself."}]}
POST friendships/destroy¶
POST friendships/destroy は他人をフォローするのをやめる機能だ。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration POST friendships/destroy
# See https://dev.twitter.com/rest/reference/post/friendships/destroy
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
response = tw.friendships.destroy(screen_name='showa_yojyo')
# [2]
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] フォローを解除するユーザーの
user_id
またはscreen_name
を指定する。どちらか一方でよい。[2] 応答データを出力する。
次に実行例を示す。フォローに失敗したはずのユーザーでも相手のユーザーオブジェクトが得られる。
bash$ ./friendships-destroy.py
{
...
"following": false,
...
"screen_name": "showa_yojyo",
...
}
GET friendships/incoming¶
GET friendships/incoming は自分が保護ユーザー、つまりツイート非公開アカウントとして運用している場合に利用価値がある。これは自分に対してのフォローリクエストで未承認のものがどれだけあるかを知る機能だ。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET friendships/incoming
# See https://dev.twitter.com/rest/reference/get/friendships/incoming
from secret import twitter_instance
tw = twitter_instance()
next_cursor = -1 # [1]
while next_cursor: # [1]
response = tw.friendships.incoming(cursor=next_cursor)
print(response['ids'])
next_cursor = response['next_cursor'] # [1]
[1] 基本技法 で説明したカーソル処理。
次に実行例を示す。空のデータが得られる。私が公開アカウントであることか、誰からも相手にされていないことかのいずれかが成り立っている。
bash$ ./friendships-incoming.py
[]
GET friendships/outgoing¶
GET friendships/outgoing は自分がフォローしたい非公開アカウントの ID を得る機能だ。言い換えると、フォローリクエストがお預けを食らっている相手がどれだけいるかを知る機能だ。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET friendships/outgoing
# See https://dev.twitter.com/rest/reference/get/friendships/outgoing
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
next_cursor = -1 # [1]
while next_cursor: # [1]
response = tw.friendships.outgoing(cursor=next_cursor)
print(response['ids'])
next_cursor = response['next_cursor'] # [1]
[1] 基本技法 で説明したカーソル処理。
次に実行例を示す。どんな非公開アカウントをもフォローしようとしていないからこうなる。
bash$ ./friendships-outgoing.py
[]
GET friendships/lookup¶
GET friendships/lookup は自分と任意の他人との関係性を知る機能だ。関係性とは、フォロー関係、当方から先方へのブロック・ミュート状況といったものだ。一度のリクエストで複数のユーザーに対して情報を得ることができる。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET friendships/lookup
# See https://dev.twitter.com/rest/reference/get/friendships/lookup
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
ids = ','.join((str(i) for i in (577367985, 1220723053, 1288619659)))
response = tw.friendships.lookup(user_id=ids)
# [2]
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] 調査対象ユーザーをパラメーター
user_id
かscreen_name
の(どちらか一方でだろうか?)指定する。どちらも CSV 文字列とする。[2] 結果を出力する。
次に実行例を示す。一部省略する。
bash$ ./friendships-lookup.py
[
{
"connections": [
"followed_by"
],
"id": 577367985,
"id_str": "577367985",
"name": "...",
"screen_name": "..."
},
{
"connections": [
"followed_by"
],
"id": 1220723053,
"id_str": "1220723053",
"name": "...",
"screen_name": "..."
},
{
"connections": [
"followed_by"
],
"id": 1288619659,
"id_str": "1288619659",
"name": "...",
"screen_name": "..."
}
]
注目したいのは connections の値だ。ここには none
, blocking
, muting
,
following
, following_requested
, followed_by
がその条件を満たすもの全部が含まれる。
GET friendships/show¶
GET friendships/show は任意の二人のユーザー間の関係を得る機能だ。
サンプルコードを次に示す。選択するユーザー同士によってはかなり興味深い情報が得られることがあるが、ここではおとなしい結果が得られるようにした。
#!/usr/bin/env python
# Demonstration GET friendships/show
# See https://dev.twitter.com/rest/reference/get/friendships/show
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
users = (
dict(source_screen_name='asahi', target_screen_name='Sankei_news'),
dict(source_screen_name='Sankei_news', target_screen_name='asahi'),)
for i in users:
response = tw.friendships.show(**i)
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
sys.stdout.write('\n')
[1] この二人の関係性を調べてみよう。Twitter ではユーザー同士の関係性には対称律は一般に成り立たないので、引数を左右入れ替えてもう一度リクエストする。
次に実行例を示す。
bash$ ./friendships-show.py
{
"relationship": {
"source": {
"all_replies": null,
"blocked_by": null,
"blocking": null,
"can_dm": false,
"followed_by": false,
"following": false,
"following_received": null,
"following_requested": null,
"id": 42816371,
"id_str": "42816371",
"marked_spam": null,
"muting": null,
"notifications_enabled": null,
"screen_name": "asahi",
"want_retweets": null
},
"target": {
"followed_by": false,
"following": false,
"following_received": null,
"following_requested": null,
"id": 562773398,
"id_str": "562773398",
"screen_name": "Sankei_news"
}
}
}
{
"relationship": {
"source": {
"all_replies": null,
"blocked_by": null,
"blocking": null,
"can_dm": false,
"followed_by": false,
"following": false,
"following_received": null,
"following_requested": null,
"id": 562773398,
"id_str": "562773398",
"marked_spam": null,
"muting": null,
"notifications_enabled": null,
"screen_name": "Sankei_news",
"want_retweets": null
},
"target": {
"followed_by": false,
"following": false,
"following_received": null,
"following_requested": null,
"id": 42816371,
"id_str": "42816371",
"screen_name": "asahi"
}
}
}
GET friendships/no_retweets/ids¶
GET friendships/no_retweets/ids はリツイートを受信したくないユーザーを得る機能だ。 Twitter ではユーザーごとにリツイートを受信するか否かを選択することが可能で、例えば POST friendships/update を用いて受信設定を更新する。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration GET friendships/no_retweets/ids
# See https://dev.twitter.com/rest/reference/get/friendships/no_retweets/ids
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
response = tw.friendships.no_retweets.ids()
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] これは引数を一切取らない。
次に実行例を示す。当方誰でもウェルカムなので空のデータが返ってくる。
bash$ ./friendships-no_retweets-ids.py
[]
POST friendships/update¶
POST friendships/update は指定ユーザーに対して、リツイート受信または彼に対する何らかのイベント通知の有無設定を更新する機能だ。
次にサンプルコードを示す。
#!/usr/bin/env python
# Demonstration POST friendships/update
# See https://dev.twitter.com/rest/reference/post/friendships/update
from secret import twitter_instance
from json import dump
import sys
tw = twitter_instance()
# [1]
response = tw.friendships.update(
screen_name='showa_yojyo',
device=True,
retweets=True,)
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
[1] 対象ユーザーをいつものようにパラメーター
user_id
またはscreen_name
のどちらか一方で指定する。リツイート通知もプッシュ通知も有効にしたい。
次に実行例を示す。自分で自分の通知をオンにする。
bash$ ./friendships-update.py
{
"relationship": {
"source": {
"all_replies": false,
"blocked_by": false,
"blocking": false,
"can_dm": false,
"followed_by": false,
"following": false,
"following_received": null,
"following_requested": false,
"id": 461058152,
"id_str": "461058152",
"marked_spam": false,
"muting": false,
"notifications_enabled": false,
"screen_name": "showa_yojyo",
"want_retweets": false
},
"target": {
"followed_by": false,
"following": false,
"following_received": false,
"following_requested": null,
"id": 461058152,
"id_str": "461058152",
"screen_name": "showa_yojyo"
}
}
}
機能しなかったようだ。