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())