使用stocknewsapi时日期格式不匹配ValueError问题排查
解决StockNewsAPI调用的日期格式错误及前一交易日新闻获取问题
1. 修复日期格式不匹配的ValueError
- 错误根源:你的OHLC数据日期是
YYYY-MM-DD格式(比如'2018-02-22'),但StockNewsAPI要求的日期参数格式是%m-%d-%Y(即'MM-DD-YYYY'),格式不匹配导致解析失败。 - 处理步骤:
- 把原始日期字符串转成
datetime对象 - 按照API要求的格式重新生成日期字符串
- 把原始日期字符串转成
- 原生Python处理示例:
import datetime # 原始日期字符串 raw_date = '2018-02-22' # 转成datetime对象 date_obj = datetime.datetime.strptime(raw_date, '%Y-%m-%d') # 格式化为API需要的格式 formatted_date = date_obj.strftime('%m-%d-%Y') # 此时formatted_date为'02-22-2018',可直接传给API
- Pandas批量处理OHLC数据示例:
import pandas as pd # 假设你的OHLC数据存在df中,日期列名为'date' df['date'] = pd.to_datetime(df['date']) # 生成符合API要求的日期列 df['api_date'] = df['date'].dt.strftime('%m-%d-%Y')
2. 获取目标日期前一个交易日的新闻
直接对日期减1天会碰到周末或节假日,必须基于交易日历计算,两种靠谱方法:
方法一:用Pandas工作日偏移
from pandas.tseries.offsets import BusinessDay # 对目标日期减去1个工作日 df['prev_trading_day'] = df['date'] - BusinessDay(1) # 格式化为API需要的格式 df['prev_trading_day_api'] = df['prev_trading_day'].dt.strftime('%m-%d-%Y')
- 注意:Pandas默认工作日历不含市场节假日,若需适配美股/A股等特定市场,可搭配
pandas_market_calendars库自定义交易日历。
方法二:基于已有OHLC数据的日期序列
如果你的OHLC数据本身就是按交易日排序的,直接取上一行的日期就是前一个交易日:
# 先确保日期列已排序 df = df.sort_values('date') # 偏移一行获取前一交易日日期 df['prev_trading_day'] = df['date'].shift(1) # 格式化为API要求的格式 df['prev_trading_day_api'] = df['prev_trading_day'].dt.strftime('%m-%d-%Y')
调用API的示例代码
拿到格式化后的前一交易日日期后,传入API参数即可:
import requests API_KEY = '你的API密钥' BASE_URL = 'https://stocknewsapi.com/api/v1' for idx, row in df.iterrows(): # 跳过第一行,因为shift(1)会生成NaN if pd.isna(row['prev_trading_day_api']): df.loc[idx, 'news'] = [] continue params = { 'ticker': 'AAPL', # 替换为你的目标股票代码 'date': row['prev_trading_day_api'], 'api_token': API_KEY } response = requests.get(BASE_URL, params=params) # 把新闻数据存入df的news列 df.loc[idx, 'news'] = response.json().get('data', [])
内容的提问来源于stack exchange,提问作者a7dc
相关产品推荐
相关产品推荐

