返回
如何通过 POST 请求从 Interactive Brokers 获取股票代码?
python
2024-03-07 20:55:54
通过 POST 请求从 Interactive Brokers 获取股票代码
前言
Interactive Brokers (IB) 是一个广受欢迎的在线交易平台,提供广泛的金融产品。虽然 IB 提供了丰富的功能和数据,但它没有提供一种简便的方法来直接获取股票代码。本文将介绍一种通过 POST 请求从 IB 网站获取股票代码的解决方案。
问题陈述
许多 IB 用户需要从其网站批量获取股票代码,但目前还没有一个简单的方法。常规请求查询变得越来越不可靠,因此需要一种替代方案。
解决方法
我们开发了一个 Python 代码示例,演示了如何模仿 IB 的产品搜索功能,并通过 POST 请求获取股票代码。该方法涉及以下步骤:
- 建立一个会话对象,用于维护与 IB 网站的连接。
- 构造一个包含适当参数和标头的 POST 请求。
- 发送请求并处理响应。
- 解析响应以提取股票代码。
代码示例
import requests
from requests.packages.urllib3.util.retry import Retry
# 建立会话
session = requests.Session()
# 重试策略
retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
session.mount('https://', retries)
# 构造请求
url = "https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters"
payload = {"pageNumber": 1, "pageSize": "100", "sortField": "symbol", "sortDirection": "ASC", "product_country": ["GB"], "product_symbol": "", "new_product": "all", "product_type": ["STK"], "domain": "uk"}
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
# 发送请求
response = session.post(url, data=payload, headers=headers)
# 解析响应
if response.status_code == 200:
data = response.json()
for product in data['products']:
print(product['symbol'])
else:
print("请求失败:", response.status_code)
总结
通过上述代码示例,用户可以成功地从 IB 网站获取股票代码。该解决方案可以自动执行从 IB 获取股票代码的任务,并为开发人员提供了一个可靠的替代方案。
常见问题解答
-
为什么我需要使用 POST 请求?
IB 网站不提供一个简单的端点来获取股票代码,因此必须使用 POST 请求来发送查询。 -
代码是否适用于所有 IB 股票代码?
是的,该代码可以用于获取 IB 上所有上市股票代码。 -
如何处理页面大小?
IB 限制了每页返回的股票代码数量。通过调整 "pageSize" 参数,可以增加或减少返回的代码数量。 -
如何处理错误?
代码包含了一个重试策略来处理网络错误。如果请求失败,将自动重试。 -
我如何定制代码以满足我的需求?
可以通过修改 "payload" 字典和 "headers" 字典来定制代码。例如,可以更改 "product_country" 参数来获取特定国家的股票代码。