Python3爬取火幣網比特幣實時價格併發送郵件和短信

用火幣網提供的api老是請求超時,然後看主頁裏也有實時刷新的數據,查看了一下請求,嗯正是我想要的。

哈哈 就是這個請求,你可以獲取到它主頁上實時刷新的數據。接下來我們解析下就好了。下面是請求返回的數據

{
    "status": "ok",
    "ts": 1559702338917,
    "data": [
        {
            "open": 248.89,
            "close": 242.96,
            "low": 234.8,
            "high": 250.02,
            "amount": 669334.0044362148,
            "count": 322168,
            "vol": 163329927.9850952,
            "symbol": "ethusdt"
        },
        {
            "open": 3.0347,
            "close": 3.0538,
            "low": 2.8685,
            "high": 3.0659,
            "amount": 16344894.914061155,
            "count": 102189,
            "vol": 48578701.64491653,
            "symbol": "htusdt"
        },
        {
            "open": 7944.75,
            "close": 7837.9,
            "low": 7479.35,
            "high": 7980.28,
            "amount": 40337.64223297392,
            "count": 571819,
            "vol": 315498762.44109035,
            "symbol": "btcusdt"
        },
        {
            "open": 6.7328,
            "close": 6.3443,
            "low": 6.03,
            "high": 6.7907,
            "amount": 27134442.945868704,
            "count": 333429,
            "vol": 175824597.93713987,
            "symbol": "eosusdt"
        },
        {
            "symbol": "huobi10",
            "open": 639.8474168199,
            "close": 626.1713820587,
            "low": 597.8679230151,
            "high": 643.392013073,
            "amount": 0,
            "count": 0,
            "vol": 0
        }
    ]
}

只有主頁上主流比的數據,其他的還是去科學代理去調用API吧。

我的需求是:每分鐘獲取btc的最新價格並寫入MongoDB和發送郵件,低於7000$或大於8500$就自動給我發短信 (短信用的騰訊雲,新用戶免費體驗100條)

下面直接上代碼

import smtplib

import requests
from qcloudsms_py import SmsSingleSender
import time
import datetime
import ssl
import pymongo
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

smtpserver = 'smtp.163.com'
username = '郵箱@163.com'
password = '密碼'
email_sender = '郵箱@163.com'
addressee = '郵箱@qq.com'
exit_count = 5

ssl._create_default_https_context = ssl._create_unverified_context

# 短信應用 SDK AppID
app_id = 'app_id'  # SDK AppID 以1400開頭

# 短信應用 SDK AppKey
app_key = "app_key"

sms_type = 0  # Enum{0: 普通短信, 1: 營銷短信}
sender = SmsSingleSender(app_id, app_key)
# 簽名
sms_sign = "簽名"  # NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這裏的簽名"騰訊雲"只是示例,真實的簽名需要在短信控制檯中申請

my_client = pymongo.MongoClient("mongodb://127.0.0.1:28017/")
my_db = my_client["btc_db"]
my_col = my_db["btc"]


def sendEmail(msg):
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(email_sender, addressee, msg)
    smtp.quit()


def setMsg(msgs):
    msg = MIMEMultipart('mixed')
    msg['Subject'] = '韭菜分報'
    msg['From'] = '郵箱@163.com <郵箱@163.com>'
    msg['To'] = addressee
    text_plain = MIMEText(msgs, 'plain', 'utf-8')
    msg.attach(text_plain)
    return msg.as_string()


while True:
    url = 'https://www.huobi.co/-/x/pro/market/overview5?r=ny2seo'
    data = requests.get(url)
    detail = data.json()
    lowest_money = detail['data'][2]['close']
    lowest_money = float(lowest_money)
    loss_money = round(8000 - lowest_money, 2)
    loss_money = str(loss_money)
    my_dict = {"price": lowest_money, "loss": loss_money, "create_date": datetime.datetime.now().strftime(
        "%Y-%m-%d %H:%M:%S")}
    my_col.insert_one(my_dict)
    if lowest_money < 7000 or lowest_money > 8500:
        lowest_money = str(lowest_money)
        params = ['', lowest_money, loss_money, '趕緊拋售!']
        sender.send_with_param(86, 手機號, 346801, params, sign=sms_sign, extend="", ext="")
        msgs = '您現在的韭菜價格爲' + lowest_money + ',虧損價格爲' + loss_money + ',請及時收割韭菜,建議趕緊拋售'
        sendEmail(setMsg(msgs))
        print(msgs)
    else:
        lowest_money = str(lowest_money)
        msgs = '您現在的韭菜價格爲' + lowest_money + ',虧損價格爲' + loss_money + ',請及時收割韭菜,建議持續觀望'
        sendEmail(setMsg(msgs))
        print(msgs)
    time.sleep(60)

效果圖⬇️ 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章