Qiita
Python
QiitaAPI
Python3

Qiita ハック with Python#1

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

トークンの取得、チェック

Qiitaが提供している開発者用ダッシュボード https://qiita.com/settings/applications にWebブラウザでログインして、read_qiita, write_qiita の権限をもつトークンを発行してもらう。トークンは、このタイミングでしか表示されないのできちんとどこかに保存する。

以下のようなプログラムを発行して、トークンを使って自分の情報が取得できることを確認する。

import urllib, urllib.parse, urllib.request
import json

token = 'XXXXXXX'
myname = '_____'

opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', 'Bearer {}'.format(token)),]
urllib.request.install_opener(opener)

def api_authcheck():
  url = "https://qiita.com/api/v2/authenticated_user"
  data = (json.load(urllib.request.urlopen(url)))
  assert (data['id'] == myname)

if __name__ == '__main__':
  api_authcheck()

全投稿記事のダンプ

Qiitaやめたいときは自分の投稿をダンプしたいところ。自分の投稿記事が100を超えるとページネーションが必要( https://qiita.com/api/v2/docs#get-apiv2authenticated_useritems )だが、大多数のユーザには以下のプログラムで十分だろう。

def dump_allposts():
  url = "https://qiita.com/api/v2/authenticated_user/items?per_page=100"
  data = json.load(urllib.request.urlopen(url))
  ret = [(x['id'], x['title'], x['body']) for x in data]
  return ret

if __name__ == '__main__':
  posts = dump_allposts()
  for p in posts:
    print(p[0],p[1])

これでいつでもQiitaをやめられるね!

最近の投稿の統計を監視

新規投稿したら、閲覧数やLikeなどが気になるところ。こんなプログラムを書いて、slack連携してみては?

def print_mypoststats():
  url = "https://qiita.com/api/v2/authenticated_user/items?per_page=10"
  data = json.load(urllib.request.urlopen(url))
  posts = [(x['page_views_count'], x['likes_count'], x['comments_count'], x['title']) for x in data]
  for post in posts:
    #print ("{}views,{}likes,{}comments {}".format(*post))
    print ("{1:3d} Likes,{2:2d}comments {3}".format(*post))

if __name__ == '__main__':
  print_mypoststats()

閲覧数はAPI仕様では取得できるようなんだけど、実際にはNoneが入っていて取得できない。Qiita運営に要望出してもいいかもしれないなあ。