2018年5月27日日曜日

Python で Slack の bot を作りはじめた (5)

前回から気を取り直してボットを作ってみます。ボットのフレームワークは、下記のページのものを参考にします。

PythonのslackbotライブラリでSlackボットを作る
https://qiita.com/sukesuke/items/1ac92251def87357fdf6

今回のボットは、問い合わせたら Raspberry Pi のグローバル IP アドレスを回答するだけのボットを作ります。IIJmio ひかりは固定 IP ではないので、自宅サーバーをやろうとするとたまに  IP アドレスが変わっていてアクセスができない事がありえます。そういったときにグローバル IP アドレスがわかれば、自宅のサーバーにアクセスができるようになります。まぁ、DDNS でも良いんだけど
グローバル IP を取得するために、確認くんというサイトを使います。ここにアクセスすると、自分のステータスを各種表示してくれるので、ここからグローバル IP アドレスを取得します。前回使っていた requests と BeautifulSoup が再び登場します。HTML を解析するにあたって、まず確認くんがどんな HTML 構造をしているのかをざっと眺めます。Chrome でページの検証をすると、簡単に該当部分の HTML がわかります。このページでは、IPアドレスは唯一ブルーのフォントで表記されていることがわかります。というわけで、BeautifulSoup で青文字のタグで抽出すれば、すぐにIPアドレスに辿り着けることになります。
まぁ、簡単に実装してみるとこんな感じになりました。IP だけじゃなく RaspberryPi の uptime とか、load 値とか表示できるようになると良いかもしれない。

# -*- coding: utf-8 -*-

from slackbot.bot import respond_to
import slackbot_settings
import requests
from bs4 import BeautifulSoup

@respond_to('status')
def status(message):
    url_target = 'http://www.ugtop.com/spill.shtml'
    # ページ取得
    response = requests.get(url_target)
    decoded = response.content.decode('cp932','ignore')

    # 解析
    parser = BeautifulSoup(decoded, 'lxml')
    ipaddr = parser.find('font', {'color' : 'blue'})
    message.reply(ipaddr.get_text())