我最近发现了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
您知道我的问题应该到哪里去吗?你能帮忙吗?
看来您配置不当config
。我config=
在您的代码中看不到。该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
或config=
:
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] 删除。
我来说两句