#【環境】
windows8.1
python2.7
#【概要】
Qiita APIを使って最近のユーザランキングとタグランキングを作ります。
ユーザランキングはフォロワー数を、タグランキングはそのタグのアイテム数で
ランク付けしてます。
#【準備】
プログラムを実行するにはqiitaの設定ページからトークンを取得してください。
(右上の画像クリック)→(設定)→(アプリケーション)→(新しくトークンを発行する)
#【プログラム】
ユーザランキング
# -*- coding: utf-8 -*-
from qiita_v2.client import QiitaClient
# QiitaClientを継承してget_userをオーバーライド
class child_QiitaClient(QiitaClient):
def get_user(self, id, params=None, headers=None):
''' 特定のユーザを返します。
'''
return self.get("/users?page={}&per_page=100".format(id), params, headers)
TOKEN="取得したトークンを入力してください"
client = child_QiitaClient(access_token=TOKEN)
# ランキングするために配列を初期化(フォローされている人数用)
rank_followers = []
i = 0
for i in xrange(10):
rank_followers.append(0)
# ランキングするために配列を初期化(ユーザーの名前用)
rank_user_name = []
i = 0
for i in xrange(10):
rank_user_name.append("")
i = 0
for i in xrange(1,101):
res = client.get_user(str(i))
json_data = res.to_json()
for j in xrange(0,100):
# ユーザー名の代入
user_name = json_data[j]["id"]
# フォローされている人数の代入
user_followers = json_data[j]["followers_count"]
# ランク付け
for k in xrange(10):
if rank_followers[k] < user_followers:
rank_followers[k] = user_followers
rank_user_name[k] = user_name
break
print rank_followers
print rank_user_name
タグランキング
from qiita_v2.client import QiitaClient
# QiitaClientを継承してget_tagをオーバーライド
class child_QiitaClient(QiitaClient):
def get_tag(self, id, params=None, headers=None):
''' 特定のタグを返します。
'''
return self.get("/tags?page={}&per_page=100".format(id), params, headers)
TOKEN="取得したトークンを入力してください"
client = child_QiitaClient(access_token=TOKEN)
# ランキングするために配列を初期化(タグのアイテム数用)
rank_item = []
i = 0
for i in xrange(10):
rank_item.append(0)
# ランキングするために配列を初期化(タグの名前用)
rank_tag_name = []
i = 0
for i in xrange(10):
rank_tag_name.append("")
i = 0
for i in xrange(1,101):
res = client.get_tag(str(i))
json_data = res.to_json()
for j in xrange(0,100):
# タグ名の代入
tag_name = json_data[j]["id"]
# タグのアイテム数の代入
tag_item = json_data[j]["items_count"]
# ランク付け
for k in xrange(10):
if rank_item[k] < tag_item:
rank_item[k] = tag_item
rank_tag_name[k] = tag_name
break
print rank_item
print rank_tag_name
#【問題】
・ユーザーもタグも最近の1万項目しか取得できないため、全ての情報に対してランク付けが
できなかった。
・get_user関数にはContribution項目がないため、フォロワー数のランク付けとなってしまった。
#【感想・今後】
・Qiitaのユーザ情報ページなどをスクレイピングすると利用制限に引っかかってしまうため、
どうやって情報取得すればいいのか考えるのが面白かった。
・機会があったらQiitaの全てのユーザやタグに対してをランキング付けしてみたい。
#【参考サイト】
Qiita API v2ドキュメント
Python Wrapper for Qiita API v2
Qiita API がなぜかContribution数をかえしてくれない件
クラスを継承してオーバーライドするぞ