本篇是前兩篇追蹤兩大虛擬幣 : 比特幣與虛擬幣行情的綜合測試, 參考 :
主要修改部分是爬蟲函式名稱, 因為可通用所以改成 coingecko_crawler(), 其餘只是複製貼上, 完整程式碼如下 :
測試 1 : 擷取 CoinGecko 網站資料繪製比特幣+乙太幣價格變化圖形 [看原始碼]
import requests
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image
def coingecko_crawler(url):
res=requests.get(url)
prices=res.json()['stats']
df=pd.DataFrame(prices)
df.columns=['datetime', 'TWD']
df['datetime']=pd.to_datetime(df['datetime'], unit='ms')
df['datetime'] += pd.DateOffset(hours=8)
df.index=df['datetime']
return df
def notify_image(msg, token, image):
url='https://notify-api.line.me/api/notify'
headers={'Authorization': 'Bearer ' + token}
data={'message': msg}
image=open(image, 'rb')
imageFile={'imageFile': image}
r=requests.post(url, headers=headers, data=data, files=imageFile)
if r.status_code==requests.codes.ok:
return '圖片發送成功!'
else:
return f'圖片發送失敗: {r.status_code}'
plt.rcParams["font.family"]=["Microsoft JhengHei"]
token='ud7PaDL45fz849A0e1f5oaMCbRIkxMXapQCt7PfNkzz'
# 比特幣
url='https://www.coingecko.com/price_charts/1/twd/90_days.json'
btc=coingecko_crawler(url)
btc['100MA']=btc['TWD'].rolling(window=100).mean()
btc[['TWD', '100MA']].plot(kind='line')
last_time=str(btc.iloc[-1:].index.values[0])[0:19]
last_price=int(btc.iloc[-1:]["TWD"].values[0])
plt.title(f'比特幣 {last_time} 台幣 {last_price} 元')
plt.xlabel('')
plt.ylabel('價格(台幣)')
plt.grid(True)
plt.legend(['價格', '100小時均價'], loc='best')
plt.savefig('btc_prices.jpg')
img=Image.open('btc_prices.jpg') # 開啟檔案
img=img.crop((18, 26, 590, 453)) # 裁切圖片去除外圍白邊
img.save('btc_prices.jpg') # 回存檔案
msg=f'\n比特幣 {last_time} 台幣 {last_price} 元'
notify_image(msg, token, 'btc_prices.jpg')
# 乙太幣
url='https://www.coingecko.com/price_charts/279/twd/90_days.json'
eth=coingecko_crawler(url)
eth['100MA']=eth['TWD'].rolling(window=100).mean()
eth[['TWD', '100MA']].plot(kind='line')
last_time=str(eth.iloc[-1:].index.values[0])[0:19]
last_price=int(eth.iloc[-1:]["TWD"].values[0])
plt.title(f'乙太幣 {last_time} 台幣 {last_price} 元')
plt.xlabel('')
plt.ylabel('價格(台幣)')
plt.grid(True)
plt.legend(['價格', '100小時均價'], loc='best')
plt.savefig('eth_prices.jpg')
img=Image.open('eth_prices.jpg') # 開啟檔案
img=img.crop((0, 26, 590, 453)) # 裁切圖片去除外圍白邊
img.save('eth_prices.jpg') # 回存檔案
msg=f'\n乙太幣 {last_time} 台幣 {last_price} 元'
notify_image(msg, token, 'eth_prices.jpg')
#plt.show() # 測試時才使用
此處最後一列的 plt.show() 是測試時檢視用, 上線時要註解掉. 結果如下 :
可見兩大虛擬幣走勢幾乎一樣.
接下來是佈署到樹莓派, 但因為此程式在繪圖時用到微軟正黑體中文字型, 樹莓派沒有此字型, 故須下載字型後進型設定, 方法參考 :
用 WinSCP 將爬蟲程式傳送到樹莓派後用下列指令將其改為可執行 :
pi@raspberrypi:~ $ sudo chmod +x /home/pi/btc_eth_prices_line_notify.py
然後編輯 Crontab, 加入執行此程式的時間指令, 參考 :
pi@raspberrypi:~ $ crontab -e
crontab: installing new crontab
pi@raspberrypi:~ $ crontab -l
0 16 * * 1-5 /usr/bin/python3 /home/pi/twstock_dashboard_update.py
*/30 9-14 * * 1-5 /usr/bin/python3 /home/pi/yahoo_twstock_monitor.py
0 8,18 * * * /usr/bin/python3 /home/pi/btc_eth_prices_line_notify.py
OK, 收工啦.
沒有留言 :
張貼留言