3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EC2/Cron】実装したAPIを活用して「Qiitaの公式更新情報」を月初にSlack通知

Last updated at Posted at 2024-06-30

はじめに

Qiita/RSSシリーズです。前回までの記事を振り返ります。

記事①では…。

「Qiita/RSS」を題材にPHPでXMLの解析を行いました。

記事②では…。

「Qiita/RSS」を題材にDrupalでAPI化をしてみました。

記事③では…。

Next.js でAPIデータにFetchしてみました。

今回は…。

EC2のCron設定で、Qiitaの更新情報を毎月1日にSlack通知してみたいと思います。

ちょっとこれだけだと情報不足...。

  1. 実装したAPIを利用して、Qiita公式更新情報を取得
  2. 取得したデータをPHPの関数でSlack通知機能を実装
  3. 月初に通知を行うよう、Jobの設定

って感じです。

一応…。完成イメージ。こんな感じでBotからメッセージが送信されます。

スクリーンショット 2024-06-29 20.20.00.png

設計

シリーズが長くなってきたので一旦整理します。

環境 用途
Qiita公式 RSS配信
Drupal環境 RSSデータをAPI化(キャッシュ実装込)
Next.js環境 フロントエンドからAPIを取得、レンダリング
EC2(Drupal)環境 Cron設定でSlackに通知を送る

今回は、APIにアクセスしてEC2(Drupal環境)からSlackにQiita公式更新情報を送ってみます。

APIには 8h のキャッシュが効いているので、直接RSSにHTTP通信するよりはマシだと思っています。

SlackのBotについて

SlackのBotの導入については本記事では割愛します。

私は、以下の記事のやり方でBotを導入しています。(Webhookが簡単だと思うのでそちらでも全然いいかと)

気が向けば記事書きます。

実装

001. スクリプトの実装

まずは、Cronで発動するPHPの関数を実装します。

実装の流れはこんな感じ.

  1. APIからデータを取得
  2. データをメッセージ用に加工
  3. Slackに送信

/**
 * Notice slack.
 */
function notice_qiita() {
  // APIからデータを取得.
  $client = new Client();
  // 定数 'ENDPOINT' には実際のAPIのURLを設定してください。
  $data = $client->get(ENDPOINT)->getBody()->getContents();
  $data = json_decode($data, TRUE);

  // Slackに送信するメッセージを構築.
  $blocks = [
    [
      "type" => "section",
      "text" => [
        "type" => "mrkdwn",
        "text" => "*<{$data['link']}|{$data['title']}>*",
      ],
    ],
  ];
  foreach ($data['data'] as $item) {
    $blocks[] = [
      "type" => "section",
      "text" => [
        "type" => "mrkdwn",
        "text" => "<{$item['link']}|{$item['title']}> - {$item['published']}",
      ],
    ];
  }
  $slack_message = [
    "blocks" => $blocks,
  ];

  // 環境変数.
  $token = getenv('slack_token');
  $channel_id = getenv('slack_channel_id');

  // 送信.
  $client->post('https://slack.com/api/chat.postMessage', [
    'headers' => [
      'Authorization' => "Bearer {$token}",
      'Content-Type' => 'application/json',
    ],
    'json' => [
      'channel' => $channel_id,
      'blocks' => $slack_message['blocks'],
    ],
  ]);
  echo "Slackに送信しました。";
}

// 記事内では例外処理は省略.

この時点で送信にこけないか、テストで関数を実行してみてください。

002. Cronの設定

毎月1日にスクリプトを実行します。

Crontabを開く

crontab -e

毎月1日に発動するよう設定

// 私はPHPスクリプトを実行するShellを実装しました。
0 0 1 * * bash script/batch/notice-slack.bash

Cron設定は以上です。
月初を待ってられないので、テストでいろいろ試してみてください。

まとめ

いかがでしたか?
今回のやり方だと、自身のサーバーがないと試せないですが、CronでSlackにいろいろ送ることができます。

AWSだったら無料利用枠でかなりのことできますので、使ってみてもいいかもですね。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?