ようへいの日々精進XP

よかろうもん

短い冬休みに Python で slack ボットを作るぞ(1)

tl;dr

短い冬休みを利用して Python で slack ボットを作ってみることにした。(もう、冬休みは終わったけど)

参考

www.fullstackpython.com

上記のサイトをほぼ写経しただけです。

下調べ

Real Time Messaging API

今まで Incoming Webhooks で Slack にアラートを通知したり、RSS インテグレーションは触ったことあったけど、ボットを育てていくにあたっては Real Time Messaging API を利用する必要があるとのことです。

Websocket ベースの Real Time Messaging API(以降 RTM API) を利用することで、手元の端末からでもメッセージの送受信がリアルタイムで行うことが出来るようになり、ボットを手軽に作成し、運用出来るようになるようです。

Python で slack ボット

Python で slack ボットを育てるには以下のようなモジュールを使うと良さそうです。

slackbot と python-rtmbot ちゃんと触っていないので、詳しいことは割愛しますが、Slack API コールや Websocket 周りをうまーくラップしているようで、ボットにさせたいアクションをプラグインとして組み込むような実装になっているようです(プラグインのみの実装に注力すれば良いというのが良いですな)が、今回は python-slackclient を使って RTM API を意識しながらボットを作ってみたいと思います。

出来たもの

github

github.com

ひとまず

f:id:inokara:20170104224918p:plain

  • 電車遅延
  • 天気

を教えてくれるボット、名付けて pikapika ボット。

使い方

準備

pip install -r requirements.txt

設定(setting.toml)

slack の API トークンやボットの ID を設定する。

[common]
interval = 1
example_command = '教えて'

[slack]
api_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
bot_id    = 'XXXXXXXXXXX'

[get_weather]
uri = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400010'

[train_delay]
uri = 'http://api.tetsudo.com/traffic/atom.xml?qshu'

bot_id については、以下のように Python スクリプトを実行して確認する。

python print_bot_id.py ${bot_name}

bot_id は以下の xxxxxxxxx のように出力される。

Bot ID for '${bot_name}' is xxxxxxxxx

実行

$ python pika.py
2017-01-04 23:27:34,948 DEBUG Starting new HTTPS connection (1): slack.com
2017-01-04 23:27:35,292 DEBUG https://slack.com:443 "POST /api/rtm.start HTTP/1.1" 200 5147
2017-01-04 23:27:36,126 INFO bot を開始しました...

天気

@pika 教えて 天気

f:id:inokara:20170105095555p:plain

うーん。

遅延

@pika 教えて 遅延

f:id:inokara:20170105095606p:plain

まあ、こんなものかな...

以上

天気とか遅延だけでは面白くないので、この pikapika ボットを色々と育てていきたいと考えています。

(memo) python-slackclient で RTM API

slack への接続

slack_client = SlackClient('api_token')
slack_client.rtm_connect()

各 channel を読み取る

slack_client.rtm_read()

2017 年 01 月 01 日(日)

あけましておめでとうございます

あっという間に 12 月を過ごし、気付いたら年が越えていました。

今年も宜しくお願い致します。

走り初

だらだらと

  • 奥さんと過ごす
  • こんなお正月も悪く無い

2017 年目標

2017 年目標

年間を通して仕事が出来るように

  • 頑張る時にはしっかり頑張る、休む時にはしっかりと休む
  • 家族を大切にする

資格取得頑張る

AWS 関連

Ruby

  • Ruby Association Certified Ruby Programmer Gold version 2.1

Python

  • Python 3 エンジニア認定基礎試験

マラソンサブスリー

英語がんばる

  • 英語が出来ないとダメってことを痛感しているので
  • TOEIC で習熟度を可視化していく

読書 15 冊以上

  • 昨年 30 冊が達成できなかったので下方修正
  • インプットを増やす
  • 本を読まないと言葉が出てこないことを痛感している
  • とにかく興味を持った本は読む
  • 読んだら感想文を書くようにすることで読解力とアウトプット力を養う

アウトプット

  • ブログ(質の向上)、記事数は 230 記事以上
  • 勉強会への参加、発表等

Ruby がんばる

Python 頑張る

書いたからには

頑張ろう

  • 定期的に進捗を棚卸ししていきたい

ショロカレ 25 日目 | 初老丸を支える技術 2016

これは

初老丸アドベントカレンダー 25 日目の記事です。

qiita.com

だいぶん遅くなってしまい、アドベントカレンダーでは無くなってはいますが 2016 年のシメをやりたいと思います。

初老丸を支えた 2016 年の振り返り

目標 結果(出来た = ○ / 出来なかった = × / イマイチ = △) メモ
年間を通して仕事が出来るように チームメンバー、奥さんに支えられて何とか一年を乗り切った
AWS の資格を 1 つ以上取得 6 月にAWS 認定ソリューションアーキテクトアソシエイトレベルを取得
サブスリー × 鹿児島マラソンで 3 時間 09 分 18 秒、まだまだ
英語がんばる × ぜんぜんダメ
読書 30 冊以上 x 年間で 3 冊くらい...やばい
アウトプット × ブログの記事数は多いけど、技術的な内容は昨年よりも少ない
Ruby がんばる 8 月に Ruby Association Certified Ruby Programmer Silver version 2.1 を取得

初老丸を支えた技術

AWS

  • Amazon Elasticsearch Service を年間通して触っていたような気がする
  • DynamoDB になんでもかんでも書き込んで Write キャパシティで死んだのは良い経験だった

Ruby

  • Ruby Association Certified Ruby Programmer Silver version 2.1 を受験する為に勉強した
  • コードはそれほど書けなかった
  • 来年はもっと人のコードを読んで勉強する、もっとコードを書く、そして Ruby Association Certified Ruby Programmer Gold version 2.1 を取得する

Python

  • Ruby よりもたくさん書いた
  • ほとんど見よう見まねだったので、すごく汚いし非効率な動きをするものがあったり...
  • 来年は Ruby 同様にもっと人のコードを読んで勉強しつつ Python 3 エンジニア認定基礎試験を受験して合格する

Elasticsearch と Kibana と Logstash

  • Search API 等の各種 API をドキュメントからチョイスして利用する、もっと各種 API について理解する必要がある
  • Logstash はプラグイン作ってみたり、Amazon Elasticsearch Service にログを飛ばしたりした

取得した資格

  • AWS 認定ソリューションアーキテクトアソシエイトレベル
  • Ruby Association Certified Ruby Programmer Silver version 2.1
  • MCP 70-533 Implementing Microsoft Azure Infrastructure Solutions

異常を気付く技術が圧倒的に足りない

  • これが全く足りていない
  • 普段から監視、観察を行うこと、値やシステムが返す値に疑いを持つことが重要だと思った

初老丸を支えた数値

ブロク数

  • 271 記事(本記事を含む)
  • 但し、技術的な内容は半分くらい

GitHub コントリビュート

  • 216 contributions(ほぼ自作自演)

初老丸を支えた人たち

cloudpack SRE チームメンバー、会社の皆さん

  • 昨年に引続き、会社のメンバーには大変お世話になった
  • チーム以外にもバックオフィスの皆さん等、色々な人に支えられた一年だった
  • 来年はもっと貢献出来るようになりたいなー

奥さん

  • どんな時にも叱咤激励してくれる奥さんには本当に感謝している
  • 残業で遅くなって家族サービスがおろそかになって、たまにアラート発生する時もあるけど、本当に奥さん無しではこの一年を過ごすことが出来なかった

ありがとう、これからもよろしく。

ということで

簡単ですが一年の振り返りとさせて頂きました。

皆さん、良いお年をお迎え下さい。

2016 年 12 月 29 日(木)

たいせつ

今年一杯で解散する SMAP の「たいせつ」という曲のメロディがすごく心地よかったので Amazon で購入した。

たいせつ

歌詞もちゃんと読んでみるとイイ。

Everything is oh My 君となら ちゃんとやれそうな気がするよ たいせつだと思う時 スゴク素直なんだ やすらぐんだ 強くなれてるんだ

SMAP のメンバーもお互いを「たいせつ」と思えば、後味悪い解散とかにならなかったんぢゃないんかなと思ったり。