memoryfolder

メモです

pythonでwebスクレイピングして数値を定期的に表示

仮想通貨をpoolでマイニングしてると、時系列のstatsがほしいことがあります(時間平均しか表示してくれないところが多いです)。
そんなとき、pythonで簡単にスクリプトを書いてグラフを書けたら便利だと思いました。

JSONデータを提供してくれているのでそれを使います

{"currentHashrate":35555555,"hashrate":45873284,"pageSize":30,"payments":null,"paymentsTotal":0,"roundShares":0,"stats":{"balance":728220201,"immature":39496737,"lastShare":1506157777},"workers":{"rig1":{"lastBeat":1506157777,"hr":35555555,"offline":false,"hr2":45873284}},"workersOffline":0,"workersOnline":1,"workersTotal":1}

スクリプト

import lxml.html
import requests
import json
from time import strftime

#JSON url
target_url = 'https://ubiqpool.io/api/accounts/0x79b40db0f843847d2045991379eb1ab765f22e73'

#create log file in /.log
logname='./log/log'+strftime("%Y%m%d%H%M%S") +'.csv'
f=open(logname,'w')
f.write('time,30min-hashrate,balance\n')
f.close()

for i in xrange(100000):
	#retrieve data from JSON
	target_html = requests.get(target_url).text
	root = lxml.html.fromstring(target_html)
	txtcontent =  str(root.text_content())
	jsonresult = txtcontent[0:len(txtcontent)-1]
	a=json.loads(jsonresult)
	hashrate=int(a['currentHashrate'])
	balance=int(a['stats']['immature'])+int(a['stats']['balance'])

	#print to stdout
	print strftime("%Y-%m-%d %H:%M:%S")
	print "current rate:   " + str(hashrate)
	print "total average:  " + str(np.average(rates))+'\n'

	#append to csv file
	fg=open(logname,'a')
	fg.write(strftime("%Y-%m-%d %H:%M:%S")+','+str(hashrate)+','+str(balance)+'\n')
	fg.close()

	time.sleep(900)#15min interval