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