Skip to the content.
この記事にはこんなことが書かれています。
- QittaAPIを使って、ある日に投稿された記事一覧を取得してみた
- 記事を取得するまでの軌跡とイメージ
- 躓いたところ

■モチベーション

前回記事でWebhookを使った情報伝達方法について実装したり、Web APIについて深堀してみたりしました。
1.【情報処理】AWSでwebhookの受信&メール通知を実装する(API Gateway+Lambda)
2.Web APIについて
3.Web APIでBotを作ろう!

3つ目の記事で、各県のトレンド(統計情報)などをつぶやくBotを作ろうと思っていましたが。
やっぱ地味だよね…。
ということで、ちょっともがいていています。
そんな中、個人的にQittaの技術記事を定期的に読んで面白いなぁと思っている身なので、QittaのAPIを使えないか試してみたという記録になります。


■QittaAPIを使って、ある日に投稿された記事一覧を取得してみた

Qitta使ったことがない人のためにサンプル載せますが、こんな感じに記事一覧が見えています。


一日に何百もの記事が投稿されていますが、これを“いいね”がつく記事をピックアップしていったりすると、よく注目されている記事が探せたりします。

QittaAPIを使えば、これらの解析も楽になります。先に結果ですが、CSVにある日の記事一覧を出力してみました。


A列にある数字がいいねの数になります。
これを昇順にして、Bot投稿するだけでもだいぶ面白いですね。(自分的に)


コード

Qiitaの記事情報をAPIで取得しCSVに書き出す
上記参考資料のコードを改良して、特定の日の記事を取り出すコードにしました。
とりあえず動けばいいという観点で作ったので、あまりキレイではありません。

import http.client
import json
import pandas as pd
import math

h = {'Authorization': 'Bearer xxxxxxxx自分のアクセストークンxxxxxxxx'}
conn = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"

# この期間に作成されたQiitaの記事情報を取得
start = '2019-04-28'
end = '2019-04-28'

# 日付をリスト化
date_list = [d.strftime('%Y-%m-%d') 
             for d in pd.date_range(start, end, freq='D')]
print(date_list)

# カウント用変数
num = 0
p = 0

# start_listの配列の数だけ繰り返し処理 ←今回は1日なのでループの意味あまりない
for i in date_list:
    num += 1
    # 日付のリストから検索の開始日と終了日を取り出す
    search_date =  date_list
    query = "&query=created:>=" + search_date[0] + "+created:<=" + search_date[0] + "&per_page=100"
     # 検索で指定した日に作成された記事数を取得
    conn.request("GET",  url + query, headers=h)
    res = conn.getresponse()
    res.read()
    print(res.status, res.reason)
    print(res.headers['Total-Count'])
    total_count = int(res.headers['Total-Count'])
    # 取得した記事数をもとにリクエスト回数を算出
    page_count = math.ceil(total_count / 100)
    print(search_date[0] + "のデータを取得します...")
    print("この日に作成されたデータを取得するのに必要なリクエスト回数は" + str(page_count) + "回です")
    #データを取得しCSVに書き出す
    for p in range(page_count):
        p += 1
        page = "page=" + str(p)
        conn.request("GET", url + page + query, headers=h)
        res = conn.getresponse()
        print(res.status, res.reason)
        data = res.read().decode("utf-8")
        df = pd.read_json(data)
        print(df)
        df.to_csv("qiita2.csv", encoding="utf-8", columns=[
            'likes_count', 
            'created_at',
            'title',
            'url'
            ], mode='a', header=False, index=False)
        print(str(p) + "/" + str(page_count) + "完了")


■つまったところ

かなりいっぱいありました。こちらについては、Qittaの方に記載しましたので、ご参照いただければと思います。
Qiita API を使って、特定の日の記事データを取得する方法

次回は、これらを使ってなにか面白いものを作りたい


Mainページに戻る