Monthly Archives: 6月 2016

[メモ] SlackとMattermostそれぞれのincomingWebhookへのポスト方法の違い

Pocket

MattermostはSlackのクローンであるが、incomingWebhookへのポストだけは、どうも違いがあるようだ。
以下にSlack/Mattermostそれぞれでの実例を示す。
まずmattermost

Slack

[メモ][Python] AnacondaをWindows xpにインストールしようとすると失敗する

Pocket

Anacondaは、Pythonのほかに、IPython、Spyder、pandas他便利ライブラリが一式でついてくるお手軽Python環境である。

しかしAnacondaをWindows xpにインストールしようとすると失敗する。
具体的には、インストール途中の「メニューを作る」ステップで失敗。
無視して進めると、C:\Anaconda3に実行ファイルは揃っているので、「なんだ気のせいか」と安心して起動しようとすると「有効なWin32アプリケーションではありません」という旨のエラーが発生する。

原因は、最新版がxpに対応していないせい。
以下から2.2.0をダウンロードし、インストールする。

https://repo.continuum.io/archive/

念のためファイル名とハッシュ値も残す。

Anaconda3-2.2.0-Windows-x86.exe
7c49a4e76e1c383038c4a1e8c4ac506f

Anaconda-2.2.0-Windows-x86.exe
32246b48658d4c3faeef425cec64a131

AnacondaのFAQにしっかり記載がある。

https://docs.continuum.io/anaconda/faq

How can I use Anaconda on Windows XP?
Windows XP is supported on Anaconda versions 2.2 and earlier. Download it from our archive.

Slack/MattermostのbotをPythonのFlaskで作ろう

Pocket

Slack/Mattermost(以降、まとめてSlack)のbotといえばHubotが有名だ。
Hubotはcoffeescriptで書かれているのだが、botのためだけに新しい言語を覚えるのも面倒。
加えてHubotを動作させるにはnpmが必要。
ちょっとそこまでは…。
Pythonなら普段使いで最初から環境は作ってあるし、楽だし。
そう思っていろいろと調べてみた。

Slackのbotに必要なことは?

Slackのbotに必要なのは、端的に以下の二つ。
1. Slackからのデータ送信を受ける。
2. Slackへ何かをする。

1.は、HTTP POSTでやってくるので、POSTを受けることさえできればよい。
2.は、例えばSlack上で何かの発言をすることだが、こちらはcurl(Pythonならrequests)でも使えば簡単にできる。

PythonでHTTP POSTを受けるには?

Flaskである。
Flaskとはごくごく軽量なwebフレームワークである。
驚くくらい簡単にwebサーバを作ることができる。
もちろんPOSTを受けるのもすぐにできる。
以下、説明。

Flaskのインストール

pipでもなんでも、好きなものを使ってインストールせい。

Flaskのテスト

以下のようなスクリプトを書く。
適当な名前で保存する。
flask.pyとかはやめようね。

上記のapp.route(‘/’)とは、ルーティング。
ルートディレクトリ(’/’)へのアクセスがあったら、次のdef welcome()が(デコレートによって)呼ばれる、ということである。

上記の場合、welcomeと表示するhtmlが返る。

app.debug = Trueについては後述。
app.run(host=’0.0.0.0)のhost=…の記述により、サーバを外部に公開することになる。

テストスクリプトの実行

localhostのポート5000でサーバが立ち上がったと分かる。
ブラウザでアクセスして「welcome」と表示されればよい。

ところで、app.debut = Trueだが、スクリプトを書き換えると、自動的に再読み込みをしてくれる。
実際のログは以下。

激烈に便利な機能なので、開発中は有効にしておくこと。

SlackからのPOSTを受ける。

先ほどのスクリプト冒頭のimportを以下のように変更。

さらに以下を追加。

上記のようにしておいて、Slack側のOutgoing Webhookで、呼び出すURLに「http://<あなたのサーバのアドレス>:5000/matter」を指定する。

Slack側からwebhookを呼び出してみると、POSTされた内容がログに表示されるはず。
なお、def post()が何も返さないのでエラーは出るが気にしない。

以下が例。

つまりPOSTの内容はディクショナリになっている。

Slackへ応答を返そう

Slackへ応答を返す場合には、POSTでもらった中にあるtokenが必要である。
応答文、tokenのディクショナリを作っておいて、それをjsonに変換し、返してやればよい。
Mattermostの場合、tokenのキーは’MATTERMOST_TOKEN’

先ほどのスクリプトを最終的に以下のようにする。
(わざわざjsonをimportしているが、Flaskにもそういう機能がある気がしてならない)
これでSlackから通知を受けると、「You said <トリガーワード>」という応答がSlackへ帰る。

【補遺】slackのoutgoing webhooks

slackでのwebhooks設定方法を示す。
webでいうと、左下のAppsからBrowse Appsを選び、outgoins WebHooksを探す
Add Configurationで設定へ。

webhooksを投げる条件を設定する。以下の3つ。

  1. 指定のチャンネルで発言したら
  2. 特定のトリガーワードを発言したら
  3. 特定のチャンネルで特定のトリガーワードを発言したら

1.はChannelで、2.はTrigger Word(s)で指定する。
3の場合には1.2.の両方を指定する。

上記条件に合致したらwebhooksを投げるURLを「URL(s)」で指定。
そのときのTokenは記載の通り。

webhooksで飛んでくるデータは以下の通り。json「ではない」ことに注意。

token=qFosSxxxxxxxxERh1Jfdy5
team_id=T0009
team_domain=example
channel_id=C0000000000
channel_name=test
timestamp=1355517523.000005
user_id=U0000000000
user_name=Steve
text=googlebot: What is the air-speed velocity of an unladen swallow?
trigger_word=googlebot:

 

[Windows] ファイルサーバへの接続ユーザを変えよう

Pocket

Sambaサーバのセットアップをしているとき、動作確認のために、Windowsから接続することがある。
このとき、権限も確認するために、ユーザを変えて接続しようとする。
しかしWindowsは、ファイルサーバの認証を一回してしまうと、再起動するまで記憶する(たぶん)。
それはそれで便利なのだが、検証するとなると障害になる。

netコマンドを使えば、再起動なく認証をやり直すことができる。
コマンドなので、バッチ化も可能。
以下、使用例。

net useで現在、記憶している接続を表示

net use /deleteで接続を削除

以下のようにすれば認証もできる。