9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

自分の投稿したQiita記事のPV数をAPIで取得する

Last updated at Posted at 2019-11-13

TL;DR

  • 自分の投稿した記事のPV数を知りたい
  • 個々のページを見れば確認できるが、できれば一括で取りたい
  • Qiita APIを使おう

投稿したエントリのPV数について

自分が投稿した記事を見ると、PV数が表示されます。

image.png

見れるのは、自分が投稿した記事だけみたいですよね。

それはそうとして、これをなんとかして一括で取れないものだろうか、と。

Qiita API v2

これを実現するには、Qiita APIを使えばよいみたいです。

Qiita API v2 ドキュメント

"投稿"に関するAPIを使えば、page_views_count(閲覧数)として取得することが可能なようです。

投稿

調べてみると、いくつか同じようなことをしている記事もあったのですが、ここは勉強を兼ねて自分で書いてみたいと思います。

お題は、Pythonで。

利用するQiita APIは、以下の2つです。

アクセストークンの取得

最初に、アクセストークンを取得します。

「設定」 → 「アプリケーション」から、アクセストークンを発行してください。

image.png

スコープは、今回はread_qiitaがあれば良いです。

image.png

ここで取得したトークンの値を覚えておきます。

image.png

作成したアクセストークンは、一覧としては確認することができます。

image.png

環境

今回の環境は、こちらです。

$ python3 -V
Python 3.6.8

HTTPのリクエストには、Requestsを使うことにします。

$ pip3 install requests

使用したRequestsのバージョンは、こちらです。

$ pip3 freeze
...
requests==2.22.0
...

ソースコード

では、PV数を取得するソースコードを作成します。

こんな感じで作りました。

  • 自分が投稿した記事のPV数を取得し、結果を表示する
    • PV数、タイトル、URL、タグ、作成日時を表示
  • 表示は、PV数の降順に行う
  • Qiita APIの呼び出し時には、Authorizationヘッダーでアクセストークンを付与する
  • APIの呼び出し後には、スリープを入れる

get_qiita_item_pv.py

from time import sleep
import requests

access_token = "[作成したアクセストークン]"

item_list_base_url = "https://qiita.com/api/v2/authenticated_user/items"
headers = { "Authorization": f"Bearer {access_token}" }

page = 1
per_page = 100

sleep_time = 0.1

page_views = []

while True:
    item_list_url = f"{item_list_base_url}?page={page}&per_page={per_page}"

    items = requests.get(item_list_url, headers = headers)
    items_body = items.json()

    if not len(items_body):
        break

    for entry in items_body:
        item_id = entry["id"]

        item_url = f"https://qiita.com/api/v2/items/{item_id}"

        item = requests.get(item_url, headers = headers)
        item_body = item.json()

        title = item_body["title"]
        url = item_body["url"]
        tags = item_body["tags"]
        created_at = item_body["created_at"]
        page_views_count = item_body["page_views_count"]

        page_views.append({
            "title": title,
            "url": url,
            "tags": [ tag["name"] for tag in tags ],
            "created_at": created_at,
            "page_views_count": page_views_count
        })

        sleep(sleep_time)

    page += 1

    sleep(sleep_time)

page_views.sort(key = lambda e: e["page_views_count"], reverse = True)

for page_view in page_views:
    print(f"""page_view: {page_view['page_views_count']}
  title: {page_view['title']}
  url: {page_view['url']}
  tags: {page_view['tags']}
  created_at: {page_view['created_at']}""")
    print()

PV数は、記事一覧のAPIでは取得できなくて(APIドキュメントを見ると取れそうな雰囲気はあるのですが…)、実際には記事個別のAPIを呼び出す必要があります。この時に、認証情報(要はアクセストークン)が必要になります。

実行

では、自分のアカウントでこのスクリプトを動作させてみます。

こんな結果になりました。

$ python3 get_qiita_item_pv.py 
page_view: 6154
  title: Ubuntu Linux 18.04 LTS / 18.10でOpenJDK 11を使いたい
  url: https://qiita.com/charon/items/af0f0de2ae9adbc03bfe
  tags: ['Java', 'Linux', 'Ubuntu']
  created_at: 2018-11-19T13:03:18+09:00

page_view: 3846
  title: プロキシ環境下でdocker buildしたい
  url: https://qiita.com/charon/items/d8365d610343d64d598e
  tags: ['Docker']
  created_at: 2019-01-04T11:29:29+09:00

page_view: 1826
  title: 初めてのZeroMQ(Python)でREQ-REPパターン
  url: https://qiita.com/charon/items/bdbef40fca6fa89edb24
  tags: ['Python', 'ZeroMQ']
  created_at: 2019-04-09T16:32:42+09:00

page_view: 1735
  title: Apacheのアクセスログを、FluentdでtailしてElasticsearchに放り込む
  url: https://qiita.com/charon/items/86d12ac7ca2d7cf6c580
  tags: ['Apache', 'Fluentd', 'Elasticsearch', 'Kibana']
  created_at: 2018-12-12T09:09:26+09:00

page_view: 1613
  title: Stack Overflowクローン、Scooldを使ったQAサイト
  url: https://qiita.com/charon/items/cacc2cfac380d8ad46b9
  tags: ['Java', 'AdventCalendar']
  created_at: 2018-12-11T14:34:57+09:00

page_view: 1385
  title: Docker Composeで起動したコンテナのログを、Amazon CloudWatch Logsに送る
  url: https://qiita.com/charon/items/7e2328e5abf7340d32b6
  tags: ['Docker', 'CloudWatch-Logs']
  created_at: 2019-05-07T12:49:04+09:00

〜省略〜

自分の書いた記事で、どのようなものが見られているのか、時々見てみると面白いのかもな?と思います。

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?