Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wada811/5f6469f043daea5bcb5b to your computer and use it in GitHub Desktop.
Save wada811/5f6469f043daea5bcb5b to your computer and use it in GitHub Desktop.
Post Google Play App. Reviews to Slack

参考

修正箇所

  • mktemp が GNU 版で引数が不要だった。
  • パス通すのが面倒だったので同じ場所においてあれば動くようにした。
  • 各種定数について環境変数を設定するのが面倒だったのでベタ書きした。
  • Slack に投稿する際のフォーマットを調整した。
verifyCmd() {
for cmd in ${@}; do
if [ -z "$(which $cmd)" ]; then
echo "$cmd not found in PATH: $PATH"
return 1
fi
done
}
GOOGLE_BUCKET_ID= #
APP_PACKAGE= #
SLACK_URL= #
DIR=$(cd $(dirname $0); pwd)
verifyCmd "gsutil" "awk" "curl" "jq" "nkf" "mktemp" "comm" || exit 1
backupdir=_back
mkdir ${backupdir}
if [ $? -ne 0 ]; then
echo "[$(date)] Failed to create a backup directory: ${backupdir}. It might indicate the previous execution failed."
exit 1
fi
if [ ! -z $(ls -1 *.csv | head -n 1) ]; then
cp *.csv ${backupdir} || exit 1
fi
echo "...Retrieving reviews."
gsutil -m cp -r "gs://${GOOGLE_BUCKET_ID}/reviews/reviews_${APP_PACKAGE}_*" .
if [ $? -ne 0 ]; then
echo "[$(date)] Failed to download the latest reviews."
exit 1
fi
echo "...Looking for and posting new reviews."
i=0
$DIR/printNewReviews.sh ${backupdir} . | awk -F "," '{print $7 "," $9 "," $10 "," $11 "," $15}' | while read src; do
datetime=$(echo $src | awk -F "," '{print $1}')
star_count=$(echo $src | awk -F "," '{print $2}')
star=""
for (( i = 0; i < 5; i++ )); do
if [[ i -lt star_count ]]; then
star+="★"
else
star+="☆"
fi
done
color="danger"
if [[ $star_count = 5 ]] || [[ $star_count = 4 ]]; then
color="good"
elif [[ $star_count = 3 ]] || [[ $star_count = 2 ]]; then
color="warning"
else
color="danger"
fi
title=$(echo $src | awk -F "," '{print $3}')
text=$(echo $src | awk -F "," '{print $4}')
review_url=$(echo $src | awk -F "," '{print $5}')
msg=$(echo \"${star}\\n\<${review_url}\|${title:-"(タイトルなし)"}\>\\n\\n${text:-"(本文なし)"}\\n${datetime} \<${review_url}\|レビューに返信\>\" | jq -a '.')
curl -X POST --data-urlencode "payload={
\"channel\": \"#android-review\",
\"username\": \"Android-Review\",
\"icon_emoji\": \":android:\",
\"attachments\": [
{
\"fallback\": ${msg},
\"text\": ${msg},
\"color\": \"${color}\"
}
]
}" $SLACK_URL
if [ $? -ne 0 ]; then
echo "[$(date)] Failed to post to the Slack. src: ${src}"
exit 1
else
printf "Num Posted: %d\r" $i
fi
i=$(expr $i + 1)
done
if [ $? -ne 0 ]; then
echo "[$(date)] Failed to diff old and new reviews."
else
echo "...Done!"
fi
rm -rf ${backupdir}
exit $?
#! /bin/sh
verifyFile() {
if [ ! -f "$1" ]; then
echo "The specified file does not exist: $1"
return 1
fi
}
verifyDir() {
if [ ! -d "$1" ]; then
echo "The specified directory does not exist: $1"
return 1
fi
}
diffFiles() {
file1=$1
file2=$2
verifyFile "${file1}" || return 1
verifyFile "${file2}" || return 1
if [ -z "$(which nkf)" ]; then
echo "nkf not found in PATH: $PATH"
exit 1
fi
# If the files do not differ from each other, just exit successfully
if [ -z "$(diff ${file1} ${file2})" ]; then
return 0
fi
tmp1=$(mktemp) || return 1
tmp2=$(mktemp) || return 1
nkf -w ${file1} | sort > ${tmp1} || return 1
nkf -w ${file2} | sort > ${tmp2} || return 1
comm -13 ${tmp1} ${tmp2} || return 1
return 0
}
if [ $# -ne 2 ]; then
echo "Usage: $0 old_review_csv_dir new_review_csv_dir"
exit 1
fi
olddir=$1
newdir=$2
verifyDir "${olddir}"
verifyDir "${newdir}"
base=$(basename $0)
TMPDIR=$(mktemp) || exit 1
trap "rm -rf ${TMPDIR}" EXIT
for file in ${newdir}/*.csv; do
base=$(basename ${file})
cmpt="${olddir}/$(basename ${file})"
if [ -f "${cmpt}" ]; then
diffFiles ${cmpt} ${file}
else
# Display all the lines except for the header
tmp=$(mktemp) || exit 1
nkf -w ${file} > ${tmp} || exit 1
tail -n +2 ${tmp}
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment