LoginSignup
2
2

More than 5 years have passed since last update.

GitHubのreleasesダウンロード数をSlackに投げるシェルスクリプト

Last updated at Posted at 2016-10-22

概要

Slack APIをシェルスクリプトから叩きます。
基本的にはGitHub APIから取得したデータを,SlackのWebhook URLにPOSTするだけです。

具体的にやったこと

自分の作ったBootstrapのForkテーマRinのダウンロード数を定期的にSlackに投げるスクリプトです。

ソースコード(修正版)

関数が含まれていると適切にcronで動作しないため,修正しています。

#!/bin/sh

# Global Params
HONOKA=0
RIN=0
text="HonokaのDL数は *`curl -s https://api.github.com/repos/windyakin/Honoka/releases | jq '[.[] | .assets[].download_count] | add'`*, RinのDL数は *`curl -s https://api.github.com/repos/raryosu/Rin/releases | jq '[.[] | .assets[].download_count] | add'`* にゃ>ω</ <https://docs.google.com/spreadsheets/d/hoge|集計シート>"
username="Rin"
icon_emoji=":rin:"
channel="#general"
curl -X POST --data-urlencode "payload={\"channel\": \"${channel}\", \"username\": \"${username}\", \"text\": \"${text}\", \"icon_emoji\": \"${icon_emoji}\"}" https://hooks.slack.com/services/T0D0GURC7/hoge/hogehoge

ソースコード(旧版)

#!/bin/sh

# Global Params
RIN=0  #Rinのダウンロード数

# Get download count from Github
# @param $1 userID
# @param $2 repoName
# @return all_download_count (https://api.github.com/repos/$1/$2/releases)
getResponse() {
  curl -s https://api.github.com/repos/$1/$2/releases | jq '[.[] | .assets[].download_count] | add'
}

# Get Rin's download count
getDownloadCount() {
  RIN=`getResponse "raryosu" "Rin"`
}

# Send message to slack
sendMessage() {
  getDownloadCount
  text="RinのDL数は *${RIN}* にゃ>ω</"
  username="Rin"
  icon_emoji=":rin:"
  channel="#general"
  curl -X POST --data-urlencode "payload={\"channel\": \"${channel}\", \"username\": \"${username}\", \"text\": \"${text}\", \"icon_emoji\": \"${icon_emoji}\"}" https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXX
  eval $curl
}

sendMessage

解説

getResponse()

GitHubのAPIからダウンロード数を取得します。
本当はこの関数ではAPIからのレスポンスだけを取得しようと思っていたのですが,面倒だったのでjqでダウンロード数の総和を出しています。
引数1: GitHubユーザ名
引数2: リポジトリ名

getDownloadCount()

前述の理由から, getResponse() 関数にレスポンスを投げるだけの関数になりました…。

sendMessage()

Slack APIに投げるリクエストの生成及び実行を行っています。
username変数には,メッセージを投げるユーザ名を指定します(Botなのでどんな名前でも構いません。もちろん日本語でも。)
icon_emojiはそのユーザ名のemojiを指定します(任意)。
channelにはメッセージを投げる先のチャンネルを指定します。
textにはメッセージ本文を指定します。

その他

初シェルスクリプトなので,これでいいのか悪いのか…
あまりきれいなソースではないし,シェルスクリプトである必要ではないので,後日Rubyのスクリプトにでも書き直します。
cronとかで定期的に回せばとりあえずbotとして動作します。

改訂

  • 2016.10.22 function キーワードは ksh/bash/zsh 特有なため削除 & Github -> GitHub (Thanks @akinomyoga!)
  • 2016.10.23 sendMessage 関数の可読性を高める変更
  • 2017.01.17 関数が含まれるとcrontabで適切に動作しないため,修正版を公開
2
2
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
2
2