r - 在 R 中调用 REST API
问题描述
我最近发现了 dataforseo api 并尝试通过 R 调用它
library(httr)
username <- 'mygmailadress@gmail.com'
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
你知道我的问题应该出在哪里吗?你能帮忙吗?
解决方案
看起来你配置不正确config
。config=
我在您的代码中没有看到 a 。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_config
or config=
:
username <- 'Hack-R@stackoverflow.com' # 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 数组的数据字段中指定。我们建议一次最多发送 100 个任务。
更远:
当任务数组发送到数据字段时,使用 POST 方法完成任务设置。每个数组元素具有以下结构:
然后它继续列出 2 个必填字段和许多可选字段。
另请注意,您可以使用reset_config()
after 作为更好的做法。如果您要经常运行它、共享它或使用超过 1 台计算机,我还建议将您的凭据放在环境变量中,而不是脚本中,以确保安全性和易用性。
最后一点建议是,您可能只想利用他们发布的 Python 客户端库和大量示例汇编。由于每个新的 API 请求都是您在没有他们支持的情况下在 R 中开拓的东西,因此仅在 Python 中进行数据收集可能会有所回报。
这是一个有趣的 API。如果您使用 Open Data Stack Exchange,您应该考虑与该社区共享它。
推荐阅读
- wpf - MultiDataTrigger 不考虑所有条件
- dax - TOPN DAX 功能不起作用。该公式返回所有行而不是 TOP 3
- c++ - 部分模板专业化不起作用
- angular - 如果我们在 Primeng orderlist 中使用拖放重新排序,如何获取元素的新修改索引
- javascript - 根据字符串过滤嵌套的对象数组
- java - 如何在地图内的地图中存储价值?
- velo - 如何在 Wix 的动态页面上访问 quantityInStock
- python - 刮痧。如何先加载中间件?
- c# - Cookie 身份验证在 ASP NET Core 作为 IIS 子站点上不起作用
- linux - 从 makefile 运行 .tcl 命令