この記事にはこんなことが書かれています。
- 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 を使って、特定の日の記事データを取得する方法
次回は、これらを使ってなにか面白いものを作りたい