技術メモ

役に立てる技術的な何か、時々自分用の覚書。幅広く色々なことに興味があります。

slackbotでbotに投げられた画像をダウンロードする

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を紹介したけれど、この問題だけなら他のライブラリや言語でもこれを応用して解決できるかもしれない。

為替の分足CSVデータが無料でダウンロードできるサイト

こちらでダウンロードできるようだ。
2001年1月から最新(おそらく定期的に更新)までのデータを扱える。
1分足より長いスパンにする時は独自で整形しないとしないといけないかもしれない。

関連記事:

  • OANDAのAPIを使ってリアルタイムでデータを取ってくる(登録必要)

swdrsker.hatenablog.com

root権限なしでcmakeをインストールする

root権限がない状態でcmakeをインストールする時、ソースからビルドする。
gcc,g++,makeが必要になる。
手順としては以下の通り

  1. cmakeのソースをダウンロード,解凍
  2. インストール先のフォルダを作成
  3. ビルド、インストール
  4. (状況に応じて)PATHを通す(※PATHの優先順位に注意)

cmakeのソースの最新版はこちら

wget https://cmake.org/files/v3.9/cmake-3.9.1.tar.gz;
tar zxvf cmake-3.9.1.tar.gz;
cd ./cmake-3.9.1/;

mkdir $HOME/cmake;
./configure --prefix=$HOME/cmake;
make;
make install;


※PATHの優先順位に注意
自分でセッティングしたcmakeを使いたい場合はこのようにPATHの先頭に付け足すようにする。

export PATH=$HOME/cmake/bin:$PATH

PATH上に同じコマンドがある場合、先頭にあるコマンドが優先されるからだ。
逆に元々あるコマンドを使いたいようなときはこうする。

export PATH=$PATH:$HOME/cmake/bin


参考:
PATHの優先順位に気をつけよう « blog.hekt.org