botに京急の運行情報を調べさせて、Slackで発言させたい。
使用言語はPython。
さあどうしようかと思ったら、さいきんは、どんなものでもライブラリが揃っていて、あっという間になんでも出来てしまうのな。

ページの取得はrequests、解析はlxmlを使う。

Webページの事前解析

ページのソースから、狙いの箇所を特定するようなキーワードを見つける。
あるいは、たとえばChromeなら、デベロッパーツールで探してもよい。
京急のページであれば、以下のように。

keikyu
手がかりは"div.unko-panel"。
これをもとにコードを書く。

抽出コード

stackoverflowを調べればサンプルコードなんかいくらでもあるよねー。

import lxml.html
import requests

def getKeikyuStatus():
    target_url = "http://unkou.keikyu.co.jp/"
    target_html = requests.get(target_url).text
    root = lxml.html.fromstring(target_html)

    divs = root.xpath("//div[contains(@class, 'unko-panel')]")
    for div in divs:
        unkouinfo = div.text_content().encode("UTF-8")

    return unkouinfo.strip()

requestsでwebページ取得。
lxmlで読み込んで、class “unko-panel"のdivタグを見つければよい。

[参考]slackへの投稿

ここはサラッと。
詳細はslackのサイトを見る。
前章の関数の戻り値を引数に取る関数。

def noticeSlack(keikyuStatus):
    url ="https://slack.com/api/chat.postMessage"
    msg = keikyuStatus + " #keikyu"

    payload_dic = {
        "token": "xoxb-xxxx-xxxx",
        "type": "message",
        "channel":"#general",
        "text":msg,
        "username":"keikyubot",
        "icon_emoji":":bird:",
        }

    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
    r = requests.post(url, params=payload_dic, headers=headers)

    return r