使用这个答案,我们可以获取所选货币的最新汇率信息。 在这里,我们可以使用以下URL获取特定日期的货币汇率:http://finance.yahoo.com/connection/currency-converter-cache?date=20150307并解析所获得的JSON以获取特定货币的汇率。 但是我需要获取一段时间内的货币汇率,就像这里一样,但是以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"
$ curl 'https://api.currencyfreaks.com/timeseries?apikey=YOUR_APIKEY&start_date=2016-01-07&end_date=2016-03-07&base=EUR&symbols=EUR,USD'
{
"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"
}
}
}
以下是将数据导入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)
或者,您也可以使用currencyapi.com。它提供了全球150多种货币的历史汇率JSON数据,并且与所有主要编程语言兼容。
要检索两个日期之间的特定汇率,请使用以下URL:
https://api.currencyapi.com/v3/range?apikey={{ API_KEY }}&datetime_start=2023-01-01T00:00:00Z&datetime_end=2023-01-31T23:59:59Z
JSON响应将是:
{
"data": [
{
"datetime": "2023-01-01T23:59:59Z",
"currencies": {
"CAD": {
"code": "CAD",
"value": 1.353397
},
"EUR": {
"code": "EUR",
"value": 0.934186
}
}
},
{
"datetime": "2023-01-02T23:59:59Z",
"currencies": {
"CAD": {
"code": "CAD",
"value": 1.356151
},
"EUR": {
"code": "EUR",
"value": 0.936562
}
}
},
{
"datetime": "2023-01-03T23:59:59Z",
"currencies": {
"CAD": {
"code": "CAD",
"value": 1.367522
},
"EUR": {
"code": "EUR",
"value": 0.948182
}
}
},
{...},
{...}
]
}
要仅检索一个特定日期,您也可以使用历史终点:https://currencyapi.com/docs/historical
Yahoo货币API已经停止使用。
有几个替代API提供货币转换数据。我建议的一个选择是SWOP货币汇率API,这是一个由开发人员为开发人员制作的快速、易于使用、可靠和透明的外汇汇率API。
完全声明:我是创建SWOP的开发人员之一 :)
雅虎API不再工作,但是还有其他的API以JSON格式提供货币数据。FXMarketAPI 是唯一一个提供Pandas兼容的API,以JSON格式提供历史数据。有一个 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并添加到上述请求中。