31
34

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 1 year has passed since last update.

Python と Qiita API v2 を使って投稿一覧を取得する

Last updated at Posted at 2018-06-08

概要

自分のQiita投稿が増えつつあるので、Qiita APIで投稿内容取得していろいろ整理したいなぁと思ってえいって作ったPythonスクリプトメモ

できるようになること

  • Qiita API GET/api/v2/users/:user_id/items のリクエスト
  • 結果レスポンスから、指定されたユーザの投稿一覧を取得できる

公式ドキュメント

Qiita API v2ドキュメント
 GET/api/v2/users/:user_id/items 箇所

およその作業時間

15分

必要なもの

  • Pythonが実行できる環境

注意事項

  • 認証していない状態で自分の投稿一覧をさくっととるだけなので、IPアドレスごとに1時間に60回までリクエスト制限があります

今回取得できる内容

HTTP/1.1 200
Content-Type: application/json

[
  {
    "rendered_body": "<h1>Example</h1>",
    "body": "# Example",
    "coediting": false,
    "comments_count": 100,
    "created_at": "2000-01-01T00:00:00+00:00",
    "group": {
      "created_at": "2000-01-01T00:00:00+00:00",
      "id": 1,
      "name": "Dev",
      "private": false,
      "updated_at": "2000-01-01T00:00:00+00:00",
      "url_name": "dev"
    },
    "id": "4bd431809afb1bb99e4f",
    "likes_count": 100,
    "private": false,
    "reactions_count": 100,
    "tags": [
      {
        "name": "Ruby",
        "versions": [
          "0.0.1"
        ]
      }
    ],
    "title": "Example title",
    "updated_at": "2000-01-01T00:00:00+00:00",
    "url": "https://qiita.com/yaotti/items/4bd431809afb1bb99e4f",
    "user": {
      "description": "Hello, world.",
      "facebook_id": "yaotti",
      "followees_count": 100,
      "followers_count": 200,
      "github_login_name": "yaotti",
      "id": "yaotti",
      "items_count": 300,
      "linkedin_id": "yaotti",
      "location": "Tokyo, Japan",
      "name": "Hiroshige Umino",
      "organization": "Increments Inc",
      "permanent_id": 1,
      "profile_image_url": "https://si0.twimg.com/profile_images/2309761038/1ijg13pfs0dg84sk2y0h_normal.jpeg",
      "twitter_screen_name": "yaotti",
      "website_url": "http://yaotti.hatenablog.com"
    },
    "page_views_count": 100
  }
]

投稿記事本文(rendered_body/body)、タイトル(title)、URL(url)、閲覧数(page_views_count)、「LGTM!」「いいね!」(likes_count)の数とか取れますね。
詳しくは以下を参照。

Qiita API v2ドキュメント(投稿)

※ただし、ドキュメント上閲覧数(page_views_count)が取得可能になっていますが、私が実行したところなぜか「"page_views_count":null」が返却されます^^;

取得用Pythonスクリプトサンプル

投稿日時(created_at)、タイトル(title)、URL(url)を取得して、カンマ区切りで表示する
USER_ID(私の場合、fkooo。URLにも含まれているものです)、ITEM_NUM(必要な投稿数を指定。レスポンスが投稿の作成日時の降順で返却される)は欲しい情報に修正しましょう
投稿記事が100以上あれば、ページング(PAGE、PAR_PAGE)を調整します(PAR_PAGEの最大値は100です)

import http.client
import json

# 表示するユーザ名
USER_ID = "XXXXX"
# ユーザの投稿数
ITEM_NUM = 10
# ページ番号 (1から100まで)
PAGE = "1"
# 1ページあたりに含まれる要素数 (1から100まで)
PAR_PAGE = "100"

conn = http.client.HTTPSConnection("qiita.com", 443)
conn.request("GET", "/api/v2/users/" + USER_ID + "/items?page=" + PAGE + "&per_page=" + PAR_PAGE)
res = conn.getresponse()
print(res.status, res.reason)
data = res.read().decode("utf-8")

# 文字列からJSON オブジェクトへでコード
jsonstr = json.loads(data)

print("==========================================================")
# ヘッダ出力
print("\"no\",\"created_at\",\"tile\",\"url\"")

# 投稿数を指定
for num in range(ITEM_NUM):
    created_at = jsonstr[num]['created_at']
    tile = jsonstr[num]['title']
    url = jsonstr[num]['url']
    
    # ダブルクォートありCSV形式で出力
    print("\"" + str(num) + "\",\"" + created_at + "\",\"" + tile + "\",\"" + url + "\"")

print("==========================================================")
conn.close()

まとめ

とりあえず認証とかせずにリクエスト1本でシンプルに一覧をることができました(^^)
以下も投稿したので興味がある人がいればぜひ(^^)

Google Apps Script から Qiita API v2 を使ってGoogleスプレッドシートに日々「いいね数」(LGTM数)と「閲覧数」を記録する

以上!

変更履歴

20180707 ページングに対応

31
34
2

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
31
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?