Python3から京急の運行情報を取得する

今年の8月に開催されたMaker Faire Tokyo 2018で、
京急の運行情報を表示するガジェットを見ました。
僕は実家が京急沿線なのですが、展示してた方は最寄り駅が2駅くらい違うだけでした。

relativelayout.hatenablog.com

ググってみたら、ディスプレイ部分への表示はさておき
京急のHPから運行情報を読んでくるのは割と簡単そうだったので試してみました。

参考にしたのはこちらのサイト。

relativelayout.hatenablog.com

関数名も含めてほとんどコピペしただけですが
Python3で実装するために関数名やimportするモジュール名を変更しています。

Pythonの標準モジュールを使い、京急のHPのhtml内の
運行情報に相当する部分(class : unko-panel)を読んで(パースして)きます。
うんこーぱねる。

ついでに読んできた運行情報をslackへと投げてみました。
ソースコードはこんな感じ。

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

import urllib.request, urllib.error, urllib.parse
import slackweb
from html.parser import HTMLParser

unko = ""

class UnkoParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.flag = False

    def handle_starttag(self, tag, attrs):
        if tag == "div":
            attrs = dict(attrs)
            if 'class' in attrs:
                className = attrs['class']
                if className == 'unko-panel': #URL内のclass=unko-panelを読んでくる
                    self.flag = True

    def handle_data(self, data):
        if self.flag:
            global unko
            unko = unko + data

    def handle_endtag(self, tag):
        self.flag = False

url = "http://unkou.keikyu.co.jp/"
response = urllib.request.urlopen(url)


parser = UnkoParser()
parser.feed(response.read().decode('utf-8'))
print(unko.replace("\n", ""))

KEIKYU = slackweb.Slack(url="https://hooks.slack.com/services/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")
KEIKYU.notify(text=unko)

response.close()

実行させると京急の運行情報ページを読んできて
slackへと投稿します。ついでにアイコンも京急っぽくしてみました。

f:id:Tmegane:20181012171536p:plain

遅延が発生した時だけslackに投稿したりできるようにすれば、自分でどっかにアクセスしたり
Twitterとかに貼り付いてなくても受動的に遅延情報を取得することができます。
まあ、今は京急ユーザーじゃないんですけどね・・・