将R连接到API,传递用户名和密码

时间:2016-06-15 14:58:10

标签: python r httr

我一直在尝试使用R从API检索数据,但还没有成功。我尝试使用httr包和GET函数在R中执行此操作,但是当我输入URL时出现以下错误:

错误:' new_handle'不是来自&namespace; curl'

的导出对象

归结为我想要连接到数据,我必须传递一些参数,如密码和用户名。

我确实有一些同事工作的Python代码(我已经匿名化了我们公司特有的网址),我想要的是在R中以类似的方式连接数据:

-------------等效的Python代码:--------------

import urllib
import datetime as dt 
import dateutil
import json

headers = {u'content-type': u'application/x-www-form-urlencoded; charset=UTF-8'}
values = {"grant_type": "password",
      "username": "XXXXXXXXX",
      "password": "XXXXXXXXX",
      "client_id": "PS"}
ko = urllib.request.Request("XXXXXX",
                        urllib.parse.urlencode(values).encode("utf-8"),
                        headers)
token = urllib.request.urlopen(ko).read()
epic = token.decode()
token_key = epic.split(",")[0].split(":")[1].replace('"', "")
lines_to_write = list()
lines_to_write.append("Identifier;Year;Period;Park Energy Availability [%]")
start_day = dt.datetime(2015, 1, 1)
data_day = start_day
headers = {u'content-type': u'application/json', u'Authorization': 'Bearer ' + token_key}
values = {'scope': {}, 'period': {'Begin': str(data_day).replace(" ", "T"), 'End': str(data_day + dateutil.relativedelta.relativedelta(months=1)).replace(" ", "T")}}
hest = urllib.request.Request("XXXXXXXXX", json.dumps(values).encode(), headers)
data = urllib.request.urlopen(hest)
vild_hest = data.read()

非常感谢任何帮助,

祝你好运, 特里斯坦

1 个答案:

答案 0 :(得分:0)

您提供的API的R代码不起作用,因为它只是所需内容的一部分。下面是R所需的结构,用于构建REST API。用户名和密码将通过POST主体传递给API服务器(如下所述,或者也可以作为列表添加到正文中)。

您还必须提供密钥(在下面的情况下为“API-KEY”)。请注意,您正在发送POST以启动API服务器的身份验证。大多数API服务器会向您发回1或2个密钥,您将在以后与API服务器通信时使用这些密钥。

所有http交互都将获得包httr的帮助是正确的。 GET将在API客户端和API服务器之间的通信的后期使用,但不会在第一个身份验证阶段使用。

POST (
url = "xxx", 
add_headers( 
"API-KEY" = "xxx",
"VERSION" = "2", 
"Content-Type" = "application/json; charset=UTF-8", 
"Accept" = "application/json; charset=UTF-8"), 
body = "{identifier: xxx, password: xxx}"
)