LoginSignup
7
3

More than 5 years have passed since last update.

Qiita ハック with Python#2

Posted at

Pythonを使ってQiitaをいじる実験です。親記事: https://qiita.com/_____/items/d2d52823ea8ef763e3a7

過去の自分の投稿に、いいね、コメント、ストックしてくれた人をお礼にフォローしてみます。「いいね、コメント、ストック」は記事ごとに情報を取得するので、

  1. 過去の全投稿記事のIDを取得
  2. a各記事ごとにいいね等してくれたユーザ名を取得
  3. まだフォローしてなければフォロー

という手順を踏みます。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)
7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3