はじめに
Qiitaのトレンドから気になるタグの記事だけ取得出来たら便利だなぁ~と思い、
せっかくならDiscordで流して情報共有できるようにしようと決意しました。
会社で使用する技術の情報収集/共有を効率化したい方はぜひ最後までご覧ください。
それでは始めましょう!
目次
- 参考文献
- 事前準備
- APIを取得する
- 送信先のDiscordサーバーのWebhook URLを取得する
- Pythonでコーディング
- 検索タグを設定
- Qiita APIを叩いて、検索タグに該当する記事のURLを取得する
- APIでトレンド記事の情報を取得する(json形式)
- 記事ごとにリンクとタグを取得する
- 検索タグに該当するURLのみ取得する
- POSTリクエストを送る
- おつかれさまでした
参考文献
こちらの記事/ドキュメントを参考にさせていただきました。
- Netlify Functions を使って Qiita のトレンド API を非公式で作ってみた
- Intro to Webhooks (Discordの公式ドキュメント)
- DiscordにWebhookでいろいろ投稿する
事前準備
コーディングに入る前に、Qiitaのトレンド一覧を取得するAPIと、記事を送信したいDiscordのサーバーのWebhook URLを取得します。
APIを取得する
Qiitaの公式APIにはトレンド記事一覧を取得するAPIが無いようです。
クローリングしてもよいのですが、今回は@HelloRuskさんが作成されたAPIを使用させていただくことにしました。
送信先のDiscordサーバーのWebhook URLを取得する
公式ドキュメントが分かりやすいので見ていただければ一発ですが念のため。
「サーバー設定」→「連携サービス」→「ウェブフックを作成」→「ウェブフックURLをコピー」の順で取得できます。
Pythonでコーディング
準備が整いましたので、Pythonを使ってコーディングしていきましょう!
検索タグとDiscordサーバーのWebhook URLを準備
収集したい情報のタグを事前に用意します。
今回は人気そうな「Python」や「機械学習」などを入れてみました。
import requests
import json
# 検索タグの設定
search_tags = ["Python", "機械学習", "MachineLearning", "DeepLearning", "競技プログラミング", "R"]
# DiscordのサーバーのWebhook URL
webhook_url = "https://discordapp.com/api/webhooks/みなさんのWebhook_URL"
Qiita APIを叩いて、検索タグに該当する記事のURLを取得する
APIでトレンド記事の情報を取得する(json形式)
APIを叩くとトレンドのページの情報がjson形式で取得できます。
api_url = "https://qiita-api.vercel.app/api/trend"
res = requests.get(api_url)
trends = json.loads(res.text)
記事ごとにリンクとタグを取得する
取得したトレンドデータ(json)からURLとタグを取得します。
link_urls = []
tags = []
for i in range(len(trends)):
link_url = trends[i]["node"]["linkUrl"]
link_urls.append(link_url)
tags_temp = []
for j in range(len(trends[i]["node"]["tags"])):
tag = trends[i]["node"]["tags"][j]["name"]
tags_temp.append(tag)
tags.append(tags_temp)
検索タグに該当するURLのみ取得する
興味のあるタグ(検索タグ)が含まれた記事だけ取得します。
send_urls = []
for i in range(len(trends)):
for search_tag in search_tags:
if search_tag in tags[i]:
send_urls.append(trends[i]["node"]["linkUrl"])
break
else:
continue
POSTリクエストを送る
前項までで興味のあるタグが含まれた記事のURLを取得することができました!
あとはDiscordのサーバーに対してURLをPOSTすれば完了です!。
for send_url in send_urls:
content = {
"username":"Qiita2Discord",
"content":f"{send_url}"
}
requests.post(webhook_url, content)
おつかれさまでした
これにて任務完了です。
快適なQiita Lifeにつながれば幸いです。
お読みいただきありがとうございました。