Pythonを使ってQiitaをいじる実験です。親記事: https://qiita.com/_____/items/d2d52823ea8ef763e3a7
過去の自分の投稿に、いいね、コメント、ストックしてくれた人をお礼にフォローしてみます。「いいね、コメント、ストック」は記事ごとに情報を取得するので、
- 過去の全投稿記事のIDを取得
- a各記事ごとにいいね等してくれたユーザ名を取得
- まだフォローしてなければフォロー
という手順を踏みます。2.の手順が記事投稿分になるのでAPI呼び出し数は、 3*投稿記事数
となることや、たくさんいいねされる人気者は 3.で登録するユーザ数分だけAPI呼び出しが走るので、APIの利用上限に引っかからないようにしましょう。いいねされていない投稿に関してはAPI呼び出しをしないという最適化が可能です。
import urllib, urllib.parse, urllib.request
import json
token = 'XXXXXX'
myname = '_____'
opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', 'Bearer {}'.format(token)),]
urllib.request.install_opener(opener)
def get_mypostids():
url = "https://qiita.com/api/v2/authenticated_user/items?per_page=100"
data = json.load(urllib.request.urlopen(url))
return [x['id'] for x in data]
def wholikes(postid):
url = f"https://qiita.com/api/v2/items/{postid}/likes"
data = json.load(urllib.request.urlopen(url))
return [x['user']['id'] for x in data]
def whocomments(postid):
url = f"https://qiita.com/api/v2/items/{postid}/comments"
data = json.load(urllib.request.urlopen(url))
return [x['user']['id'] for x in data]
def whostocks(postid):
url = f"https://qiita.com/api/v2/items/{postid}/stockers?per_page=100"
data = json.load(urllib.request.urlopen(url))
return [x['id'] for x in data]
def my_following():
_ = "https://qiita.com/api/v2/authenticated_user"
uid = json.load(urllib.request.urlopen(_))['id']
ret = []
for i in range(3):
url = f"https://qiita.com/api/v2/users/{uid}/followees?page={i+1}&per_page=100"
data = json.load(urllib.request.urlopen(url))
ret += [x['id'] for x in data ]
return ret
def follow(uid):
url = f"https://qiita.com/api/v2/users/{uid}/following"
req = urllib.request.Request(url, method='PUT')
urllib.request.urlopen(req)
if __name__ == '__main__':
who = []
for pid in get_mypostids():
who += wholikes(pid)
who += whocomments(pid)
who += whostocks(pid)
who = list(set(who))
following = my_following()
for user in who:
if user not in following:
follow(user)