見出し画像

RocketChatにカスタム絵文字を一括登録する(RestAPI+Curl)

 カスタム絵文字を使うと、チャットが盛り上がりますよね。ただ、デフォルトの絵文字群は、あまり面白みがない…
 自分で作ってもいいけど、絵文字を公開しているサイト様のを使って楽をしたい。
 ただし、アプリケーション上で一個一個登録するのもめんどくさい。公式にRestAPIが公開されているのでAPIを使いますが、python等のプログラミング言語を用いず、Curlでカスタム絵文字を登録します。

トークンとユーザIDを取得する

 APIを使って登録するための、トークンとユーザIDを取得します。管理者ユーザで、アクセストークンを作成します。
 マイアカウント→パーソナルアクセストークンを選び、使用用途に応じた名称をつけ、トークンを発行します。このとき二要素認証を飛ばします。(Ignore Two Factor Authentication)にチェックをいれる。

発行されたトークンとユーザIDをメモしておきます。流出&忘れないようにに注意してください。

スクリプトを作成する

例として/root/にemojiというディレクトリを作成し、そこに画像があるとします。

[root@localhost emoji]# pwd
/root/emoji
[root@localhost emoji]# ll
total 4
-rw-r--r-- 1 root root 1290 May 28 09:43 arigatougozaimasu.png

まずは1個ファイルをアップロードするスクリプトを記述します。

[root@localhost emoji]# vi upload.sh

公式ドキュメントを参考に作成します。先ほど取得したトークンとユーザIDを記入してください。

  • /api/v1/emoji-custom.create にPOSTする

  • X-Auth-Token:[半角スペース][トークン]

  • X-User-Id:[半角スペース][ユーザID]

  • emoji=@[相対ファイル名]

  • name=[カスタム絵文字名]

  • aliases=[エイリアス名]

#!/bin/bash

curl -H "X-Auth-Token: [トークン]" \
     -H "X-User-Id: [ユーザID]" \
     -F "emoji=@arigatougozaimasu.png" \
     -F "name=my-arigatougozaimasu" \
     -F "aliases=emoji-alias" \
     http://localhost:3000/api/v1/emoji-custom.create

このシェルスクリプトを実行します。結果はjson形式で返ってきます。

[root@localhost emoji]# sh upload.sh
{"success":true}
[root@localhost emoji]#

カスタム絵文字が登録されました!

一括で登録する

 次に、ディレクトリ配下のpngファイルを一括で登録します。先ほどの一個だけ登録できるスクリプトにファイル名を渡し、一個ずつ登録していきます。

  • ファイルは同一フォルダのみ

  • 絵文字名はcus-[.png前の文字]

  • エイリアスは[.png前の文字]

としました。

[root@localhost emoji]# ls
agerisyasu.png  akirame.png  annzenndaiiti.png  arigatai_.png
aguri-.png      a-ne_.png    aoharu.png         arigatougozaimasu.png
akeome.png      annsinn.png  a-.png             upload.sh

先ほどのアップロードスクリプトを修正します。
第一引数に拡張子ありファイル名、第二引数に拡張子なしファイル名を渡しています。upload.shのスクリプト内で分割してもいいと思います。(データ的にはそっちの方がいいかと)

#!/bin/bash

curl -H "X-Auth-Token: [トークンID]" \
     -H "X-User-Id: [ユーザID]" \
     -F "emoji=@$1" \
     -F "name=cus-$2" \
     -F "aliases=$2" \
     http://localhost:3000/api/v1/emoji-custom.create

このスクリプトにファイル名を渡すスクリプトを作ります。load.shとしました。

#!/bin/bash

find ./*.png -type f | while IFS= read -r filepath; do

  filename_with_extension=$(basename "$filepath")
  filename="${filename_with_extension%.*}"

  sh ./upload.sh $filename_with_extension $filename
done

これを実行します。エラー時の処理は考えていません。

[root@localhost emoji]# sh load.sh
{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}{"success":true}
[root@localhost emoji]#

複数個一括で登録できました。

参考サイトや絵文字サイト


この記事が気に入ったらサポートをしてみませんか?