如何通过雅虎财经获取货币汇率的历史数据?
How to get historical data for currency exchange rates via Yahoo Finance?
我需要获得 JSON 或 XML 响应,其中包含货币汇率的时间顺序,例如,从 2015-01-07 到 2015-03-07。
通过 this answer 我们可以获得所选货币的最新汇率信息。
Here 我们可以使用 URL 获取特定日期的货币汇率:
http://finance.yahoo.com/connection/currency-converter-cache?date=20150307
并将获得的 JSON 解析为某种货币。
但我需要获取日期范围内的货币汇率,因为它是 here 但采用 JSON 或 XML 格式。
有办法吗?
使用 YQL (https://developer.yahoo.com/yql/)
然后您可以使用如下查询检索所需的数据:
SELECT *
FROM
yahoo.finance.historicaldata
WHERE
symbol = "EUR=X"
AND
startDate = "2009-09-11"
AND
endDate = "2010-03-10"
这是将数据放入 pandas DataFrame 的解决方案。然后,您可以使用 pandas.DataFrame.to_json.
等函数从 DataFrame 导出到 JSON、XML 等
这些符号也可能与您使用的不同。
import pandas as pd
import pandas_datareader.data as web
from datetime import datetime
start = datetime(2016, 1, 1)
end = datetime(2017, 3, 31)
aud = web.DataReader('AUD=X', 'yahoo', start, end)
In [29]: aud.head(5)
Out[29]:
Open High Low Close Volume Adj Close
Date
2016-01-01 1.3752 1.3752 1.3752 1.3752 0 1.3752
2016-01-04 1.3725 1.3950 1.3712 1.3723 0 1.3723
2016-01-05 1.3921 1.4017 1.3857 1.3916 0 1.3916
2016-01-06 1.3963 1.4168 1.3941 1.3961 0 1.3961
2016-01-07 1.4124 1.4322 1.4109 1.4124 0 1.4124
您需要安装 pandas-datareader。 (我假设您已经 pandas)。
sudo -H pip install pandas-datareader (ubuntu)
pip install pandas-datareader (windows)
Yahoo API 不再有效,但是还有其他 API 以 JSON 格式提供货币数据。 FXMarketAPI 是唯一提供 Pandas 兼容 API 且以 JSON 格式提供历史数据的 API。有一个 pandas 端点可以帮助您提取数据。尽管免费用户有 1000 个请求的限制。你可以在下面看到一个例子。
URL = "https://fxmarketapi.com/apipandas"
params = {'currency' : 'EURUSD',
'start_date' : '2018-07-02',
'end_date':'2018-12-06',
'api_key':'**************'}
response = requests.get("https://fxmarketapi.com/apipandas", params=params)
df= pd.read_json(response.text)
记得获取 api_key 的访问权限并添加到上述请求中。
Yahoo curreny API 已停产。
有多个 API 提供货币转换数据。我建议的一个选择是 SWOP currency exchange rate API,一种快速、易于使用、可靠且透明的外汇汇率 API,由开发人员为开发人员制作。
完全免责声明:我是创建 SWOP 的开发人员之一 :)
- SWOP API 提供 180 多种货币的当前和历史汇率。它们直接从可信来源(各种中央银行和其他重要银行)收集。
- 为了方便开发人员,SWOP API 有两个端点,GraphQL 和 REST/JSON。
- 免费计划允许每月 1,000 次请求,付费计划允许更多请求和功能。
对于最简单的解决方案,您应该使用 CurrencyFreaks API。它以 JSON 和 XML 格式提供全球 179 种货币的历史汇率,兼容各种编程语言
比如Shell, Node.js, Java, JS, Python, PHP, Ruby, C, C#, Go, Swift
要获取两个日期之间的历史汇率,它提供了 time-series endpoint。
$ curl 'https://api.currencyfreaks.com/timeseries?apikey=YOUR_APIKEY&start_date=2016-01-07&end_date=2016-03-07&base=EUR&symbols=EUR,USD'
JSON 响应将是:
{
"start_date": "2016-01-07",
"end_date": "2016-01-10",
"base": "EUR",
"rates": {
"2016-01-07 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0776"
},
"2016-01-08 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0921"
},
"2016-01-09 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0932"
},
"2016-01-10 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0932"
}
}
}
要获取特定日期的历史汇率,请使用 historical rates endpoint.
希望对你有用。
我需要获得 JSON 或 XML 响应,其中包含货币汇率的时间顺序,例如,从 2015-01-07 到 2015-03-07。
通过 this answer 我们可以获得所选货币的最新汇率信息。
Here 我们可以使用 URL 获取特定日期的货币汇率: http://finance.yahoo.com/connection/currency-converter-cache?date=20150307 并将获得的 JSON 解析为某种货币。
但我需要获取日期范围内的货币汇率,因为它是 here 但采用 JSON 或 XML 格式。
有办法吗?
使用 YQL (https://developer.yahoo.com/yql/)
然后您可以使用如下查询检索所需的数据:
SELECT *
FROM
yahoo.finance.historicaldata
WHERE
symbol = "EUR=X"
AND
startDate = "2009-09-11"
AND
endDate = "2010-03-10"
这是将数据放入 pandas DataFrame 的解决方案。然后,您可以使用 pandas.DataFrame.to_json.
等函数从 DataFrame 导出到 JSON、XML 等这些符号也可能与您使用的不同。
import pandas as pd
import pandas_datareader.data as web
from datetime import datetime
start = datetime(2016, 1, 1)
end = datetime(2017, 3, 31)
aud = web.DataReader('AUD=X', 'yahoo', start, end)
In [29]: aud.head(5)
Out[29]:
Open High Low Close Volume Adj Close
Date
2016-01-01 1.3752 1.3752 1.3752 1.3752 0 1.3752
2016-01-04 1.3725 1.3950 1.3712 1.3723 0 1.3723
2016-01-05 1.3921 1.4017 1.3857 1.3916 0 1.3916
2016-01-06 1.3963 1.4168 1.3941 1.3961 0 1.3961
2016-01-07 1.4124 1.4322 1.4109 1.4124 0 1.4124
您需要安装 pandas-datareader。 (我假设您已经 pandas)。
sudo -H pip install pandas-datareader (ubuntu)
pip install pandas-datareader (windows)
Yahoo API 不再有效,但是还有其他 API 以 JSON 格式提供货币数据。 FXMarketAPI 是唯一提供 Pandas 兼容 API 且以 JSON 格式提供历史数据的 API。有一个 pandas 端点可以帮助您提取数据。尽管免费用户有 1000 个请求的限制。你可以在下面看到一个例子。
URL = "https://fxmarketapi.com/apipandas"
params = {'currency' : 'EURUSD',
'start_date' : '2018-07-02',
'end_date':'2018-12-06',
'api_key':'**************'}
response = requests.get("https://fxmarketapi.com/apipandas", params=params)
df= pd.read_json(response.text)
记得获取 api_key 的访问权限并添加到上述请求中。
Yahoo curreny API 已停产。
有多个 API 提供货币转换数据。我建议的一个选择是 SWOP currency exchange rate API,一种快速、易于使用、可靠且透明的外汇汇率 API,由开发人员为开发人员制作。
完全免责声明:我是创建 SWOP 的开发人员之一 :)
- SWOP API 提供 180 多种货币的当前和历史汇率。它们直接从可信来源(各种中央银行和其他重要银行)收集。
- 为了方便开发人员,SWOP API 有两个端点,GraphQL 和 REST/JSON。
- 免费计划允许每月 1,000 次请求,付费计划允许更多请求和功能。
对于最简单的解决方案,您应该使用 CurrencyFreaks API。它以 JSON 和 XML 格式提供全球 179 种货币的历史汇率,兼容各种编程语言 比如Shell, Node.js, Java, JS, Python, PHP, Ruby, C, C#, Go, Swift
要获取两个日期之间的历史汇率,它提供了 time-series endpoint。
$ curl 'https://api.currencyfreaks.com/timeseries?apikey=YOUR_APIKEY&start_date=2016-01-07&end_date=2016-03-07&base=EUR&symbols=EUR,USD'
JSON 响应将是:
{
"start_date": "2016-01-07",
"end_date": "2016-01-10",
"base": "EUR",
"rates": {
"2016-01-07 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0776"
},
"2016-01-08 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0921"
},
"2016-01-09 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0932"
},
"2016-01-10 00:00:00+00": {
"EUR": "1.0",
"USD": "1.0932"
}
}
}
要获取特定日期的历史汇率,请使用 historical rates endpoint.
希望对你有用。