5
4

More than 1 year has passed since last update.

Qiitaトレンドから気になる記事を自動で取得してDiscordへ

Posted at

はじめに

Qiitaのトレンドから気になるタグの記事だけ取得出来たら便利だなぁ~と思い、
せっかくならDiscordで流して情報共有できるようにしようと決意しました。
会社で使用する技術の情報収集/共有を効率化したい方はぜひ最後までご覧ください。

それでは始めましょう!

目次

  • 参考文献
  • 事前準備
    • APIを取得する
    • 送信先のDiscordサーバーのWebhook URLを取得する
  • Pythonでコーディング
    • 検索タグを設定
    • Qiita APIを叩いて、検索タグに該当する記事のURLを取得する
      • APIでトレンド記事の情報を取得する(json形式)
      • 記事ごとにリンクとタグを取得する
      • 検索タグに該当するURLのみ取得する
    • POSTリクエストを送る
  • おつかれさまでした

参考文献

こちらの記事/ドキュメントを参考にさせていただきました。

事前準備

コーディングに入る前に、Qiitaのトレンド一覧を取得するAPIと、記事を送信したいDiscordのサーバーのWebhook URLを取得します。

APIを取得する

Qiitaの公式APIにはトレンド記事一覧を取得するAPIが無いようです。
クローリングしてもよいのですが、今回は@HelloRuskさんが作成されたAPIを使用させていただくことにしました。

送信先のDiscordサーバーのWebhook URLを取得する

公式ドキュメントが分かりやすいので見ていただければ一発ですが念のため。
「サーバー設定」→「連携サービス」→「ウェブフックを作成」→「ウェブフックURLをコピー」の順で取得できます。

Pythonでコーディング

準備が整いましたので、Pythonを使ってコーディングしていきましょう!

検索タグとDiscordサーバーのWebhook URLを準備

収集したい情報のタグを事前に用意します。
今回は人気そうな「Python」や「機械学習」などを入れてみました。

main.py
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形式で取得できます。

main.py
api_url = "https://qiita-api.vercel.app/api/trend"
res = requests.get(api_url)
trends = json.loads(res.text)

記事ごとにリンクとタグを取得する

取得したトレンドデータ(json)からURLとタグを取得します。

main.py
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のみ取得する

興味のあるタグ(検索タグ)が含まれた記事だけ取得します。

main.py
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すれば完了です!。

main.py
for send_url in send_urls:
    content = {
        "username":"Qiita2Discord",
        "content":f"{send_url}"
    }
    requests.post(webhook_url, content)

おつかれさまでした

これにて任務完了です。
快適なQiita Lifeにつながれば幸いです。
お読みいただきありがとうございました。

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