在R中调用REST API

雷米

我最近发现了dataforseo api,并尝试通过R调用它

library(httr)

username <- '[email protected]'
password <- 'mypassword'

dataforseo_api <- POST('https://api.dataforseo.com/v2/op_tasks_post/$data', 
                authenticate(username,password), 
                body = list(grant_type = 'client_credentials'),
                type = "basic",
                verbose()
               )

这是我收到的消息:

<- HTTP/1.1 401 Unauthorized
<- Server: nginx/1.14.0 (Ubuntu)
<- Date: Sun, 08 Jul 2018 13:31:34 GMT
<- Content-Type: application/json
<- Transfer-Encoding: chunked
<- Connection: keep-alive
<- WWW-Authenticate: Basic realm="Rest Server"
<- Cache-Control: no-cache, must-revalidate
<- Expires: 0
<- Access-Control-Allow-Origin: *
<- Access-Control-Allow-Methods: POST, GET, OPTIONS
<- Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With

您知道我的问题应该到哪里去吗?你能帮忙吗?

哈克

看来您配置不当configconfig=在您的代码中看不到body还的编码不正确。

另外,在API文档中,我什么都没有看到grant_type似乎应该将一系列任务放在那里,例如:

   {882394209:  {'site': 'ranksonic.com', 'crawl_max_pages': 10}}

响应:

{'results_count': 1, 'results_time': '0.0629 sec.', 'results': {'2308949': {'post_id': 2308949, 'post_site': 'ranksonic.com',
 'task_id': 882394209, 'status': 'ok'}}, 'status': 'ok'}

好,所以首先我们需要set_configconfig=

username <- '[email protected]' # fake email
password <- 'vxnyM9s7FAKESeIO' # fake password

set_config(authenticate(username,password), override = TRUE)

GET("https://api.dataforseo.com/v2/cmn_se")
Response [https://api.dataforseo.com/v2/cmn_se]
  Date: 2018-07-08 16:20
  Status: 200
  Content-Type: application/json
  Size: 551 kB
{
    "status": "ok",
    "results_time": "0.0564 sec.",
    "results_count": 2187,
    "results": [
        {
            "se_id": 37,
            "se_name": "google.com.af",
            "se_country_iso_code": "AF",
            "se_country_name": "Afghanistan",
...
GET("https://api.dataforseo.com/v2/cmn_se/$country_iso_code")
Response [https://api.dataforseo.com/v2/cmn_se/$country_iso_code]
  Date: 2018-07-08 15:48
  Status: 200
  Content-Type: application/json
  Size: 100 B
{
    "status": "ok",
    "results_time": "0.0375 sec.",
    "results_count": 0,
    "results": []
GET("https://api.dataforseo.com/v2/cmn_se/$op_tasks_post")
Response [https://api.dataforseo.com/v2/cmn_se/$op_tasks_post]
  Date: 2018-07-08 16:10
  Status: 200
  Content-Type: application/json
  Size: 100 B
{
    "status": "ok",
    "results_time": "0.0475 sec.",
    "results_count": 0,
    "results": []

那是一回事。同样对于POST数据,他们需要您将其指定为json例如encode = "json"从他们的文档:

所有POST数据均应以JSON格式(UTF-8编码)发送。关键字是通过传递任务数组的POST方法发送的。数据应在此POST数组的data字段中指定。我们建议一次最多发送100个任务。

进一步:

当将任务数组发送到数据字段时,使用POST方法完成任务设置。每个数组元素都具有以下结构:

然后继续列出2个必填字段和许多可选字段。

另请注意,您可以使用reset_config()after作为更好的做法。如果您要经常运行,共享或使用多于一台计算机,为了安全和方便起见,我还建议您将凭据放在环境变量中而不是脚本中。

最后的建议是,您可能只想利用他们发布的Python客户端库和大量示例。由于每个新的API请求都是您在R的支持下会在R方面开创的先河,因此仅使用Python进行数据收集就可能会有所回报。

这是一个有趣的API。如果您转至开放数据栈交换,则应考虑与该社区共享它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章