# coding:utf-8
# ----------------------------------
# BTCの価格チェック
# ----------------------------------
# 必要パッケージ
# pip install python-dateutil
# pip install email
# pip install pygame
# ----------------------------------
import sys
import requests
import time
import dateutil.parser
from datetime import datetime
from pytz import timezone
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
from email.header import Header
import json
import pygame
#★暴騰価格
CHK_BTC_PLUS = 10000
#★暴落価格
CHK_BTC_MINS = -10000
#★スリープ時間間隔(分)
sleep_time = 10
#★この価格を割ったらアラート発生
CHK_BTC_PRICE = 700000
#★送信元メール
MY_ADDRESS = 'ここに入力'
#★送信元メールパスワード
MY_PASSWORD = 'ここに入力'
#★送信元メールSMTPサーバー
SMTP_SERVER = 'ここに入力'
#★送信先アドレス
TO_ADDRESS = 'ここに入力'
#
#関数:MP3再生
#
def org_mp3(filename):
#初期化
pygame.mixer.init()
#ファイルの読み込み
pygame.mixer.music.load(filename)
#再生回数(-1:loop)
pygame.mixer.music.play(2)
#再生中はスリープ
time.sleep(14)
#再生の終了
pygame.mixer.music.stop()
#
#関数:ファイル読み込み
#
def org_read_file(filename):
#ファイルオープン
fp = open(filename)
#全行読み込みバッファに格納
buf_line = fp.read()
#ファイルクローズ
fp.close()
return buf_line
#
#関数:メール送信
#
def org_send_mail(from_address,to_address,subject,body):
charset = "ISO-2022-JP"
msg = MIMEText(body.encode(charset), "plain", charset)
msg["Subject"] = Header(subject,charset)
msg["From"] = MY_ADDRESS
msg["To"] = TO_ADDRESS
msg["Date"] = formatdate(localtime=True)
smtp = smtplib.SMTP(SMTP_SERVER,587)
smtp.ehlo()
smtp.starttls()
smtp.login(MY_ADDRESS, MY_PASSWORD)
smtp.sendmail(from_address,to_address,msg.as_string())
smtp.quit()
#
#JSON Check
#
def is_json(myjson):
try:
resp_content = myjson.json()
return True
except ValueError:
resp_content = myjson.content
return False
#
#メイン
#
if __name__ == '__main__':
i=0
bf_bid=[]
bf_ask=[]
zaif_bid=[]
zaif_ask=[]
tdatetime_str = ""
flg_alert=0
API_zaif ="https://api.zaif.jp/api/1/ticker/btc_jpy"
#メール件名
subject_header = "【BTC価格アラート】"
#ループ
while True:
updown=""
#APIリクエスト
res2 = requests.get(API_zaif)
#JSONかどうかチェックしエラーならループ
if is_json(res2) != True:
continue
#JSON取得
json_zaif = res2.json()
#リストに追加
zaif_bid.append(int(json_zaif["bid"]))
zaif_ask.append(int(json_zaif["ask"]))
#JSON形式では直接パース出来ないのでdeteutil使用
tdatetime_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#金額表示用
zaif_bid_str = "{:,d}".format(zaif_bid[i])
zaif_ask_str = "{:,d}".format(zaif_ask[i])
#1分間に指定円下がったかチェック
kakakusa = int(zaif_bid[i]) - int(zaif_bid[i-1])
#指定金額を割ったらアラート音
if (zaif_bid[i] < CHK_BTC_PRICE) and (flg_alert == 0):
#アラーム音
org_mp3("alerm.mp3")
#Linex系の場合はファイルの読み込みは絶対パスで
# org_mp3("/home/pi/twitter_bot/BTC/alerm.mp3")
flg_alert=1
pass
#暴騰した?
if kakakusa > 0:
#コンソール出力
print("[" + tdatetime_str + "] BTC_JPY : " + zaif_bid_str + "円(+"+ str(kakakusa) +"円)")
if kakakusa > CHK_BTC_PLUS:
#メール件名編集
subject_header += str(kakakusa) + "円上昇"
#メール本文
mail_body = "BTCの暴騰アラートです!。\n\n" + str(sleep_time) + "分の間に" + str(kakakusa) + "円上昇しました。\n\nチャートを確認してください\nhttps://zaif.jp/trade_btc_jpy\n\n\n\n----------\n" + tdatetime_str
#メール送信
org_send_mail(MY_ADDRESS,TO_ADDRESS,subject_header,mail_body);
#アラーム音
# org_mp3("alerm.mp3")
org_mp3("/home/pi/twitter_bot/BTC/alerm.mp3")
pass
pass
#暴落した?
elif kakakusa < 0:
print("[" + tdatetime_str + "] BTC_JPY : "+zaif_bid_str + "円("+ str(kakakusa) +"円)")
if kakakusa < CHK_BTC_MINS:
#メール件名編集
subject_header += str(kakakusa) + "円下落"
#メール本文
mail_body = "BTCの暴落アラートです!。\n\n" + str(sleep_time) + "分の間に" + str(kakakusa) + "円下落しました。\n\nチャートを確認してください\nhttps://zaif.jp/trade_btc_jpy\n\n\n\n----------\n" + tdatetime_str
#メール送信
org_send_mail(MY_ADDRESS,TO_ADDRESS,subject_header,mail_body);
#アラーム音
# org_mp3("alerm.mp3")
org_mp3("/home/pi/twitter_bot/BTC/alerm.mp3")
pass
pass
else:
#コンソール出力
print("[" + tdatetime_str + "] BTC_JPY : "+zaif_bid_str + "円")
pass
#スリープ
time.sleep(int(sleep_time)*60)
i=i+1
ご質問はコメント欄からお願いします