Slack に投稿したファイルの一覧を取得するAPI
https://api.slack.com/methods/files.list
問い合わせする時に、絞り込み条件をしないと1つのファイルの情報だけでも大きく
大量に出てたいへん、
投稿時刻等の条件指定するのが現実的で、
ts_from = From 時刻
ts_to = To時刻
で、UNIX Time を指定しないとならない。
1つのファイルの情報は、以下の情報が、JSON で取得される。
https://api.slack.com/types/file
この中の、url_private のURLをSlackログイン済ブラウザに貼り付ければ、
画像ファイルであればそのまま表示される。
url_private_download のURLをSlackログイン済ブラウザに貼り付ければ、
ファイルダウンロードする。
だれが、投稿したか?は、user キーの値だが、Slackが管理してるIDで値だけ見ても
判断できない。
users.info というAPI メソッドでユーザ情報を
問い合わせれば出てくるのだが、、
https://api.slack.com/methods/users.info
これもたくさん情報が返ってくる。Slack表示上の人の名前が知りたいわけで、
Slack表示上の人の名前は、user → real_name を参照
{ "ok": true, "user": { "id": "XXXXXXXXXXXXX", "team_id": "XXXXXXXXXXXXXXX", "name": "xxxxxxxxxxx", "deleted": false, "color": "e7392d", "real_name": "\u文字の Unicode 書式", ...
のように、real_name は、Unicode である。
JavaScript 上で、問い合わせていて実際の表示名を知りたければ、
var realname = decodeURIComponent(real_name_value);
のようにする。
Java で、問い合わせ結果 JSON パースしていて、実際の表示名を知りたければ、
static String unicodeToString(String unicode){ String[] sp = unicode.split("\\\\u"); int[] cs = new int[sp.length - 1]; for (int i = 0; i < cs.length; i++){ cs[i] = Integer.parseInt(sp[i + 1], 16); } return new String(cs, 0, cs.length); }
こんなメソッドでも用意して、real_name の値を変換することになるだろう。
いや、そんなことしなくても、gson で読み込めば、JsonObject として読み込めるので、
getAsString() は、期待どおりの文字列を返してくれるのを簡単に書ける。