26
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?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

社内ラジオの視聴者数の集計を自動化してみた

Last updated at Posted at 2023-07-21

社内ラジオ(Relic Radio)とは

毎週金曜日のお昼12:30から、全社員向けに配信するradioです。
内容とゲストは毎週変わり、金曜日のお昼休憩にご飯を食べながら聞く感じです。

Amazon IVS(Amazon Interactive Video Service)で、配信しています。(現在は配信方法が変わりました。)

今までの集計方法

sandboxアカウントで配信しているので、以下のaws cliコマンドを叩くことでストリーミング配信されているチャンネルの情報をjson形式で取得することができます。

aws ivs get-stream \
--channel-arn arn:aws:ivs:us-east-1:xxxxxxxxxxxx:channel/xxxxxxxxxx \
--region us-east-1

帰ってくるjsonは以下になります。

{
    "stream": {
        "channelArn": "arn:aws:ivs:us-east-1:xxxxxxxxxxxx:channel/xxxxxxxxxx",
        "health": "HEALTHY",
        "playbackUrl": "https://9be064b2ee73.us-east-1.playback.live-video.net/api/video/v1/us-east-xxxxxxxxxxxx.channel.xxxxxxxxxx.m3u8",
        "startTime": "2023-03-10T02:34:30+00:00",
        "state": "LIVE",
        "streamId": "st-xxxxxxxxxxxxxx",
        "viewerCount": 0
    }
}

こちらのviewerCountが実際に聞いている人の数になります。
このコマンドを叩いて、取得した人数をチャンネルに送って、スプレッドシートに反映させて、の作業を5分に1回行っていました。

今回の自動化

せっかくやるので、あまり触ったことがない言語で書きたいと思って、ちょうどいい機会だったのでシェルスクリプトで処理を書きました。

処理の流れ

  • aws cliコマンドでstream情報を取得
  • 取得したjsonからviewerCountを取得
  • 取得した視聴者数をslackAPIを使用して自動で投稿
  • 上記を5分間隔で繰り返す

ソースコードが以下になります。
スクリーンショット 2023-03-10 13.17.28.png (664.5 kB)

シェルスクリプトの面白かった点

  • 変数の定義の仕方が違う
  • 文字列と変数の連結
  • 条件の判定の仕方(-z)が違う
  • \で改行してもコマンドを連結できる
  • jsonデータの扱いにjq .を使用する

これから覚えていきたい点

  • 入力した文字列の使用
  • trapを使ったシグナルのキャッチした後の処理
  • エラーハンドリング etc...

slack APIの自動送信

slackAPIのhttps://slack.com/api/chat.postMessageのエンドポイントに、発行したoauth tokenを使用してrequestを投げると、指定したチャンネルに、投稿したいテキストを送信することができます。

手順

  1. Create New Appを押して、新しいAppを作成する
スクリーンショット 2023-03-10 13.38.24.png (395.2 kB)
  1. From scratchを選択
スクリーンショット 2023-03-10 13.40.02.png (427.6 kB)
  1. App Nameを決めてとworkspaceを選択
スクリーンショット 2023-03-10 13.41.34.png (430.6 kB)
  1. 作成できたらOAuth & PermissionsScopes項目で、一番最小権限のscopeであるchat:writechat:write.customizeを選択

  2. workspaceと紐付ける

  3. チャンネルに作成したAppを招待する

  4. エンドポイントにtokenを使用してrequestを送ると、指定したチャンネルにメッセージが飛ぶ

キャプチャ
スクリーンショット 2023-03-10 17.06.48.png (63.5 kB)

今後やりたいこと

gas(google app script)を使用して、視聴者数と時間を引数にとったメソッドを用意して外部から叩けるようにしたいです。
一応gasで作成はしていて、機能テストもしているのですが、この関数を叩くには、GCP(Google Cloud Platform)にプロジェクトを作成して、gasにGoogle Cloud Platform(GCP)プロジェクトを紐付けてAPIとしてデプロイしなければいけない。。。
GCPのrelicのフォルダに勝手にプロジェクトを作成していいかわからなかったため、一旦保留しています。

スクリーンショット 2023-03-10 14.01.32.png (391.3 kB)

最後に

シェル、gas、最近はフロントエンドの改修タスクでreactも少しだけ触っていて、それぞれ書き方や定義の仕方などが違ってきて、その度にgoogleで検索して書いていくのは大変ですが、実装していく上で意識する部分は似ているのかなと感じつつ、楽しいと感じています。
やっぱり私はlaravelが好きですが、吸収できるものや興味のあるものはどんどんやっていこうかなと思っています。

26
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
26
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?