2013-07-10 42 views
0

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

我一开始就陷入困境,但这里是我的。

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和元组不能连接的错误,但我只是失去了,我怎么会传递一个JSON对象的URL的形式。

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

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

我似乎无法得到那个工作。以下卷发代码作为文档中的示例提供。任何想法如何在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 

回答

1

你可能想序列化,然后Base64编码。

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

现在嵌入URL是安全的。

拿回来一个对象:

json.loads(base64.urlsafe_b64decode(encoded)) 
1

the documentation,你应该做以下几件事:

  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})