1、購買阿裡雲伺服器
https://www.aliyun.com/product/ecs2、安裝寶塔
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed099927
3、編寫腳本
①導入包
import requests
import json
import os
import time
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
②請求登入接口
def login():
try:
url = "######"
payload = json.dumps({
"username": username,
"password": password
})
headers = {
'Host': 'api.xchanger.cn',
'Cookie': '###########',
'accept': 'application/json;responseformat=3',
'content-type': 'application/json',
'x-app-id': '##',
'user-agent': 'BackgroundShortcutRunner/1092.8.7 CFNetwork/1220.1 Darwin/20.3.0',
'accept-language': 'zh-cn'
}
response = requests.request("POST", url, headers=headers, data=payload,verify=False)
print(response.json())
accessToken = response.json()['data']['accessToken']
userId = response.json()['data']['userId']
with open(r'login.txt', "w+") as f1:
f1.write(accessToken)
with open(r'userId.txt', "w+") as f2:
f2.write(userId)
return accessToken
except Exception as DamnMistake:
print(DamnMistake)
mail("登入錯誤",str(DamnMistake))
③請求車輛狀态接口
def status(sessionToken):
if os.path.exists(r'userId.txt'):
with open(r'userId.txt', "r") as f:
userId = f.read()
else:
userId = "#####"
url = "#####" + vin + "#####" + userId
payload = {}
headers = {
'Host': 'api.xchanger.cn',
'Cookie': '#######',
'accept': 'application/json;responseformat=3',
'ecarx-net-platform': 'tsp',
'user-agent': '#########)',
'authorization': sessionToken,
'accept-language': 'zh-cn'
}
response = requests.request("GET", url, headers=headers, data=payload,verify=False)
try:
#資料更新日期
updateTime=response.json()['data']['vehicleStatus']['updateTime']
updateTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(response.json()['data']['vehicleStatus']['updateTime']/1000))
#左前車窗(2是關閉)
winStatusDriver = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusDriver']
#右前車窗(2是關閉)
winStatusPassenger = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusPassenger']
#左後車窗(2是關閉)
winStatusDriverRear = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusDriverRear']
#右後車窗(2是關閉)
winStatusPassengerRear = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusPassengerRear']
#冷卻液是否正常(ture是正常)
engineCoolantTemperatureValidity=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['runningStatus']['engineCoolantTemperatureValidity']
#後尾箱是否開啟(1開啟,0沒有開啟)
trunkOpenStatus=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['trunkOpenStatus']
#引擎蓋是否開啟(1開啟,0沒有開啟)
engineHoodOpenStatus=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['engineHoodOpenStatus']
#左前門打開狀态(0是關閉)
doorOpenStatusDriver=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusDriver']
#右前門打開狀态(0是關閉)
doorOpenStatusPassenger=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusPassenger']
#左後門打開狀态(0是關閉)
doorOpenStatusDriverRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusDriverRear']
#右後門打開狀态(0是關閉)
doorOpenStatusPassengerRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusPassengerRear']
#左前門門鎖狀态(1是已上鎖)
doorLockStatusDriver=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusDriver']
#左後門門鎖狀态(1是已上鎖)
doorLockStatusDriverRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusDriverRear']
#右前門門鎖狀态(1是已上鎖)
doorLockStatusPassenger=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusPassenger']
#右後門門鎖狀态(1是已上鎖)
doorLockStatusPassengerRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusPassengerRear']
#車輛報警是否開啟(1為已開啟)
vehicleAlarm=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['vehicleAlarm']
#電瓶電壓
voltage = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['maintenanceStatus']['mainBatteryStatus']['voltage']
#發動機狀态(engine_off為關閉,engine_running為開啟)
engineStatus = response.json()['data']['vehicleStatus']['basicVehicleStatus']['engineStatus']
carStatus_dict = {
"資料更新時間": updateTime,
"左前車窗": winStatusDriver,
"右前車窗": winStatusPassenger,
"左後車窗": winStatusDriverRear,
"右後車窗": winStatusPassengerRear,
"後尾箱是否開啟": trunkOpenStatus,
"引擎蓋是否開啟": engineHoodOpenStatus,
"左前門打開狀态": doorOpenStatusDriver,
"右前門打開狀态": doorOpenStatusPassenger,
"左後門打開狀态": doorOpenStatusDriverRear,
"右後門打開狀态": doorOpenStatusPassengerRear,
"左前門門鎖狀态": doorLockStatusDriver,
"左後門門鎖狀态": doorLockStatusDriverRear,
"右前門門鎖狀态": doorLockStatusPassenger,
"右後門門鎖狀态": doorLockStatusPassengerRear,
"車輛報警是否開啟": vehicleAlarm,
"電瓶電壓": voltage,
"發動機狀态": engineStatus
}
with open(r'carStatus_dict.txt', "w+") as f:
f.write(str(carStatus_dict))
return carStatus_dict
except Exception as DamnMistake:
print(DamnMistake)
mail("擷取各項資料錯誤",str(DamnMistake))
⑤發送郵件
def mail(msgTitle, result_json):
my_sender = '####@qq.com' # 發件人郵箱賬号
my_pass = '####' # 發件人郵箱密碼
my_user = '#####@qq.com' # 收件人郵箱賬号
try:
msg = MIMEText(json.dumps(result_json, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False),
'plain', 'utf-8')
msg['From'] = formataddr(["###", my_sender]) # 括号裡的對應發件人郵箱昵稱、發件人郵箱賬号
msg['To'] = formataddr(["FK", my_user]) # 括号裡的對應收件人郵箱昵稱、收件人郵箱賬号
msg['Subject'] = msgTitle # 郵件的主題
server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 發件人郵箱中的SMTP伺服器,端口是25
server.login(my_sender, my_pass) # 括号中對應的是發件人郵箱賬号、郵箱密碼
server.sendmail(my_sender, my_user, msg.as_string()) # 括号中對應的是發件人郵箱賬号、收件人郵箱賬号、發送郵件
server.quit() # 關閉連接配接
except Exception as fuckError: # 如果 try 中的語句沒有執行,則會執行下面的
print('發送郵件報錯了,報錯内容為:\n')
print(fuckError)
⑥主程式
def main():
sessionToken = update_token()
carStatus_dict = status(sessionToken)
print(carStatus_dict)
car_Alarm=[]
if carStatus_dict['發動機狀态'] =="engine_off":
if carStatus_dict['左前車窗'] !="2":
car_Alarm.append("左前車窗未關閉")
if carStatus_dict['右前車窗'] !="2":
car_Alarm.append("右前車窗未關閉")
if carStatus_dict['左後車窗'] !="2":
car_Alarm.append("左後車窗未關閉")
if carStatus_dict['右後車窗'] !="2":
car_Alarm.append("右後車窗未關閉")
if carStatus_dict['後尾箱是否開啟'] == "1":
car_Alarm.append("後尾箱未關閉")
if carStatus_dict['左前門門鎖狀态'] != "1":
car_Alarm.append("左前門未鎖")
if carStatus_dict['左後門門鎖狀态'] != "1":
car_Alarm.append("左後門未鎖")
if carStatus_dict['右前門門鎖狀态'] != "1":
car_Alarm.append("右前門未鎖")
if carStatus_dict['右後門門鎖狀态'] != "1":
car_Alarm.append("右後門未鎖")
if carStatus_dict['左前門打開狀态'] == "1":
car_Alarm.append("左前門未關閉")
if carStatus_dict['左後門打開狀态'] =="1":
car_Alarm.append("左後門未關閉")
if carStatus_dict['右前門打開狀态'] =="1":
car_Alarm.append("右前門未關閉")
if carStatus_dict['右後門打開狀态'] =="1":
car_Alarm.append("右後門未關閉")
print(car_Alarm)
else:
pass
if len(car_Alarm)>0:
car_Alarm.append("資料更新時間:"+carStatus_dict['資料更新時間'])
with open(r'car_Alarm.txt', "w+") as f1:
f1.write(str(car_Alarm))
mail("車輛報警!!!!!!", car_Alarm)
4、上傳腳本
①打開寶塔
②點選“檔案”
③上傳
5、開啟定時任務
②點選“計劃任務”