LoginSignup
11
12

More than 5 years have passed since last update.

Qiita APIを使用した最近のランキング作り with Python

Last updated at Posted at 2016-05-28

#【環境】
 windows8.1
 python2.7

#【概要】
 Qiita APIを使って最近のユーザランキングとタグランキングを作ります。
 ユーザランキングはフォロワー数を、タグランキングはそのタグのアイテム数で
 ランク付けしてます。

#【準備】
 プログラムを実行するにはqiitaの設定ページからトークンを取得してください。
 (右上の画像クリック)→(設定)→(アプリケーション)→(新しくトークンを発行する)

#【プログラム】
ユーザランキング

user_rank.py
# -*- 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

タグランキング

tag_rank.py

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数をかえしてくれない件
 クラスを継承してオーバーライドするぞ

11
12
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
11
12