slackbotでシステムを作ろうとした時に、botに投げた画像をいったん保存する方法がわからなかったので、記録しておく。
slackbot自体の始め方
slackbot自体の使い方は他のブログなどで詳しく紹介されているのでそちらを参考にしてほしい。
インストールはこれだけ
pip install slackbot
自分がslackbotを作る際参考にさせていただいたブログはこちら。
凄く丁寧でわかりやすかった。ありがとうございました。
http://blog.bitmeister.jp/?p=3892
画像の保存
botに画像を投げて色々やらせたかったのだが、どうも保存がうまくいかず手間取ってしまった。
普通に画像をURLからダウンロードする方法ではうまくいかなかった。
import urllib url = message.body['file']['url_private'] # messageにはファイル付きのメッセージが入っている urllib.urlretrieve(url)
この方法では数十KBの画像ファイルができるだけで、何も保存できていなかった。
色々調べた結果、GETメソッドを使う時ヘッダーを付けなければいけないらしいとわかった。
(slack公式サイト:file type | Slack)
正直この辺はよくわかっていないんだけど、requestsを使えば何とかなるらしい。
ということでサンプルがこちら。
プラグインのファイルの中にtokenをオリジナルのものにしてこれを書く。
import requests @listen_to("(.*)") def img(message, params): if 'file' in message.body: url = message.body['file']['url_private'] flag = message.body['file']['filetype'] tmpfile = "./tmp." + flag token = 'YOUR_TOKEN' rst = requests.get(url, headers={'Authorization': 'Bearer %s' % token}, stream=True) fo = open(tmpfile, "wb") shutil.copyfileobj(rst.raw, fo) fo.close()
今回はpythonのslackbotを紹介したけれど、この問題だけなら他のライブラリや言語でもこれを応用して解決できるかもしれない。