Hatena::ブログ(Diary)

99円のへたれ日記! RSSフィード

2014-05-15

[]Pythonでriver.go.jpからダムの貯水率を取得する

ダムbotCoreserverで動かしているのですが,cronがたまに失敗するのが気持ち悪いので,GAEに移植しようと思い立つ.

とりあえず,いまPHPで動いているriver.go.jp(川の防災情報)から貯水率を取得するコードをPythonで書きなおしてみた.(GAEのPython3対応はまだか)

#!/usr/bin/env python2
# coding: utf-8

import urllib2
from bs4 import BeautifulSoup

class DamInfo:
	BASE_URL = 'http://www1.river.go.jp'
	OUTSIDE_URL_BEFORE = '/cgi-bin/DspDamData.exe?ID='
	OUTSIDE_URL_AFTER = '&KIND=3&PAGE=0'
	ENCODE = 'euc-jp'
	USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko'

	def __init__(self, id):
		self.id = id

	def getRecentPerOfStorage(self):
		date = ''
		time = ''
		pos = ''

		outside_contents = self.__getOutsideHtml()
		iframe_url = self.__getIframeUrl(outside_contents)
		contents = self.__getIframeHtml(iframe_url)

		soup = BeautifulSoup(contents)
		for tr in soup.table.find_all('tr'):
			td = tr.find_all('td')
			date = td[0].string
			time = td[1].string
			pos = td[6].string

			if pos != '-':
				break
		else:
			raise "Can't find PerOfStorage"

		return date, time, pos

	def __getHtml(self, url):
		headers = {'User-Agent': self.USER_AGENT}
		req = urllib2.Request(url, None, headers)
		response = urllib2.urlopen(req)
		contents = response.read().decode(self.ENCODE)
		return contents

	def __getOutsideHtml(self):
		url = self.BASE_URL + self.OUTSIDE_URL_BEFORE + self.id + self.OUTSIDE_URL_AFTER
		return self.__getHtml(url)

	def __getIframeHtml(self, iframe_url):
		url = self.BASE_URL + iframe_url
		return self.__getHtml(url)

	def __getIframeUrl(self, contents):
		soup = BeautifulSoup(contents)
		return soup.iframe['src']

	def __getCsvUrl(self, contents):
		soup = BeautifulSoup(contents)
		return soup.a['href']

def main():
	SAMEURA_ID = '1368080700010'
	damInfo = DamInfo(SAMEURA_ID)
	perOfStorage = damInfo.getRecentPerOfStorage()
	print perOfStorage

if __name__ == '__main__':
	main()
$ ./dam.py 
(u'2014/05/15', u'15:00', u'94.7')

Python使ったことなかったので下手くそなのはご愛嬌です…

ちなみにヘルプによれば,川の防災情報から取得したデータは自由に使えるようですが,別ページにはツールでの取得はやめてくれとも.

今のところは一時間ごとのアクセスなので,問題無いとは思いますがやり過ぎには注意ですね.

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kyuuzyuu9yen/20140515/1400138537