上週利用爬蟲去比特幣網站 CoinGeko 抓比特幣行情, 然後用 Matplotlib 繪製價格趨勢圖以 Line Notify 推播, 參考 :
其實抓第二大虛擬幣乙太幣的價格方法相同, 只是 json 資料源網址不同而已 :
主要是改 url 部分, 然後將 'btc' 改成 'eth' 就可以報完工了 :
測試 1 : 擷取 CoinGecko 網站資料繪製乙太幣價格變化圖形 [看原始碼]
import requests
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image
def coingecko_eth_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"]
url='https://www.coingecko.com/price_charts/279/twd/90_days.json'
eth=coingecko_eth_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') # 回存檔案
token='ud7PaDL45fz849A0e1f5oaMCbRIkxMXapQCt7PfNkzz'
msg='乙太幣價格變化'
notify_image(msg, token, 'eth_prices.jpg')
plt.show()
此例是從比特幣那篇最後的範例修改而來 (中文化+調整時差), 結果如下 :
從曲線趨勢看 (典型 W 底), 最近比特幣與乙太幣似乎有谷底翻身之勢啊!
2 則留言 :
請問:資訊顯示能5分鐘更新一次嗎?
若可以,請問如何設定呢??
謝謝
只要設定 crontab 為 */5 * * * * 即可, 參考 :
https://yhhuang1966.blogspot.com/2022/07/crontab.html
張貼留言