我想使用Python从API获取数据。 API文档提供了CURL和Ruby中的示例。如果您可以发布有关如何使用Python执行以下操作的代码片段,我将非常高兴。
获取身份验证令牌:
卷曲示例:
curl -X POST -d "{\"username\" : \"user@sample.com\", \"password\":\"sample\"}" http://api.sample.com/authenticate
Ruby示例:
require 'rubygems'
require 'rest_client'
require 'json'
class AuthorizationClient
attr_accessor :base_url
def initialize(base_url)
@base_url = base_url
end
def authenticate(username,password)
login_data = { 'username' => username, 'password' => password}.to_json
begin
JSON.parse(RestClient.post "#{@base_url}/authenticate", login_data, :content_type => :json, :accept => :json)['output']
rescue Exception => e
JSON.pretty_generate JSON.parse e.http_body
end
end
end
client = AuthorizationClient.new('http://api.sample.com/authenticate')
puts client.authenticate('user@sample.com','sample')
验证后,获取数据:
CURL示例:
curl http://api.sample.com/data/day/2011-02-10/authToken/80afa08-1254-46ee-9545-afasfa4565
Ruby代码:
require 'rubygems'
require 'rest_client'
require 'json'
class ReportingClient
attr_accessor :auth_token, :base_url
def initialize(base_url)
@base_url = base_url
end
def authenticate(username,password)
login_data = { 'username' => username, 'password' => password}.to_json
response = RestClient.post "#{@base_url}/authenticate", login_data, :content_type => :json, :accept => :json
@auth_token = JSON.parse(response)['output']
end
def get_report(start_date, end_date)
response = RestClient.get "#{@base_url}/data/day/#{day}/authToken/#{auth_token}"
JSON.parse(response)
end
end
client = ReportingClient.new('http://api.sample.com:20960')
client.authenticate('user@sample.com','sample')
results = client.get_report('2011-02-10')
puts JSON.pretty_generate(results)
谢谢..
PS:我知道pycurl。但我不确定我是否真的需要它。我很高兴使用Python本机库。 Pycurl可能因我的需要而过度杀人。
我是Python新手,在阅读'urllib2'文档并尝试示例后,我找不到合适的解决方案。
答案 0 :(得分:2)
阅读urllib2文档后,您完全不理解哪个部分? 我不知道我的Ruby,但从它的外观来看,它只涉及以json格式发送GET请求和POST请求并解析响应。这对于simplejson和urllib2来说非常简单。
答案 1 :(得分:2)
这不是端口,但看起来您正在发送POST然后获取授权令牌,然后使用此发送GET请求。 这是基于我的理解。
import urllib
import urllib2
import simplejson
import datetime
authURL = "http://api.sample.com/authenticate"
values = {"username" : "user@sample.com",
"password" : "sample"}
data = urllib.urlencode(values)
req = urllib2.Request(authURL, data)
response = urllib2.urlopen(req)
authToken = simplejson.load(response)["output"]
day = str(datetime.date.today())
dataURL = "http://api.sample.com/data/day/" + day + "/authToken/" + authToken
print simplejson.load(urllib2.urlopen(dataURL))