python - python程序突然开始抛出KeyError
问题描述
我正在向服务器发出 API 请求,然后解析 json 响应并将其保存到 csv 文件中。一切正常,但现在突然,程序抛出错误。
奇怪的是,当我在笔记本电脑上运行相同的代码时,它可以工作,但在 vps 上,它会抛出异常(它刚才也在 vps 上工作,并且 vps 上没有任何可能导致异常的变化)。
我的python代码:
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
import requests
import json
import csv
from datetime import datetime
print("Started...")
def fn():
print(" Writing Data...")
session_id = "auZsJ4F2RsQNJxSPTMDt2238324"
Outlook='http://www.myfxbook.com/api/get-community-outlook.json?session=' + session_id
Outlook_response = requests.get(Outlook)
Outlook_data = Outlook_response.json()['symbols']
now = datetime.now()
current_time = now.strftime("%H:%M")
EURUSD=Outlook_data[0]
SHORTPERC0=EURUSD['shortPercentage']
LONGPERC0 =EURUSD['longPercentage']
SHORTvolume0=EURUSD['shortVolume']
longVolume0=EURUSD['longVolume']
longPositions0=EURUSD['longPositions']
shortPositions0=EURUSD['shortPositions']
with open('myfile.csv', 'a', newline='') as file:
writer = csv.writer(file)
writer.writerow([current_time, SHORTvolume0, longVolume0, longPositions0, shortPositions0])
print(" done...")
sched = BlockingScheduler()
# Execute fn() at the start of each minute.
sched.add_job(fn, trigger=CronTrigger(second=1))
sched.start()
这些是错误:
错误与 APScheduler 有关吗?还是关键错误?
json 响应如下所示:
{
"error": false,
"message": "",
"symbols": [{
"name": "EURUSD",
"shortPercentage": 45,
"longPercentage": 55,
"shortVolume": 23273.25,
"longVolume": 28123.5,
"longPositions": 74045,
"shortPositions": 60996,
"totalPositions": 135041,
"avgShortPrice": 1.1709,
"avgLongPrice": 1.1975
}
解决方案
这可能对你有用:
Request = 'https://www.myfxbook.com/api/login.json?email=username&password=password'
response = requests.get(Request, verify = False)
data = response.json()
Session = data['session']
path = ('https://www.myfxbook.com/api/get-community-outlook.json?session=' + Session)
Outlook_response = requests.get(path, verify = False)
Outlook_data = Outlook_response.json()['symbols']
不要因为发出许多请求而被阻止使用不同的用户代理标头
例如 :
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
Outlook_response = requests.get(Outlook, headers=headers)
Outlook_data = Outlook_response.json()['symbols']
推荐阅读
- r - 有没有办法做一个嵌套的for循环来获取R中的所有相关性?
- regex - 正则表达式匹配确切的字符串
- css - 如何在 React.js 中使用两个不同的 CSS 框架?
- angular - 一次设置两个javascript变量,ANGULAR
- java - 如何实现一种方法来打印下一个较小元素的索引(在java中)?
- java - 使用 sprintboot 和 mongodb 在 java 中回滚插入的对象
- html - CSS 动画 - 图像宽度从 0 到 100% 移动差异
- git - git vscode 太多无法显示
- reactjs - antd:元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:对象
- tensorflow - Colab TPU 错误 - InvalidArgumentError:TPU 不支持的数据类型:字符串,由输出 cond_8/Identity_1:0 引起