0

我正在使用 python 中的 diffbot api,它们具有一个功能,您可以在一个 HTTP 请求中发送包含 50 个 URL 的批处理请求。问题是我不知道如何构建这样的脚本。

我一开始就被卡住了,但这就是我所拥有的。

import requests
import json

url = 'http://www.diffbot.com/api/'

batch = {"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fblogs.wsj.com%2Fventurecapital%2F2012%2F05%2F31%2Finvestors-back-diffbots-visual-learning-robot-for-web-content%2F%3Fmod%3Dgoogle_news_blog%26token=XXX"},{"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fgigaom.com%2Fcloud%2Fsilicon-valley-royalty-pony-up-2m-to-scale-diffbots-visual-learning-robot%2F%26token=XXX"}

r = requests.get(u+batch)

现在,当然我得到了错误,说 str 和 tuples 不能连接,但我只是迷失了如何以 URL 的形式传递 json 对象。

如果有人能指出我正确的方向,将不胜感激。

这是一个如何使用 curl 执行调用的示例,如果有人知道如何在 python 中重新创建它。

我似乎无法让它发挥作用。以下 curl 代码在文档中作为示例提供。知道如何在 python 中重新创建它吗?

curl
    -d 'token=...'
    -d 'batch=[
            {"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fblogs.wsj.com%2Fventurecapital%2F2012%2F05%2F31%2Finvestors-back-diffbots-visual-learning-robot-for-web-content%2F%3Fmod%3Dgoogle_news_blog%26token=..."},
        {"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fgigaom.com%2Fcloud%2Fsilicon-valley-royalty-pony-up-2m-to-scale-diffbots-visual-learning-robot%2F%26token=..."}
    ]'
http://www.diffbot.com/api/batch
4

2 回答 2

1

根据文档,您应该做以下事情:

  1. 在 HTTP POST 中发送数据,而不是 GET。
  2. 在请求正文中发送数据,而不是 URL。
  3. 您的批次应该在列表中,而不是隐式元组。
  4. 你也应该发送你的令牌。

正确的代码看起来更像:

import requests
import json

batch = [{"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fblogs.wsj.com%2Fventurecapital%2F2012%2F05%2F31%2Finvestors-back-diffbots-visual-learning-robot-for-web-content%2F%3Fmod%3Dgoogle_news_blog%26token=XXX"},{"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fgigaom.com%2Fcloud%2Fsilicon-valley-royalty-pony-up-2m-to-scale-diffbots-visual-learning-robot%2F%26token=XXX"}]
batch_dumped = json.dumps(batch)

token = 'sample token'

r = requests.post('http://www.diffbot.com/api/batch', data={'token': token, 'batch': batch_dumped})
于 2013-07-11T09:13:15.400 回答
1

您可能想要序列化然后 Base64 编码。

import base64
encoded = base64.urlsafe_b64encode(json.dumps(batch))

现在可以安全地嵌入 URL。

要将其返回到对象:

json.loads(base64.urlsafe_b64decode(encoded))
于 2013-07-10T23:12:08.510 回答