Python中从API获取数据的CURL/Ruby替代方法

2024-04-20 04:45:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python从API获取数据。API文档用CURL和Ruby给出了示例。如果您可以发布关于如何使用Python执行以下操作的代码片段,我将非常高兴。在

要获取身份验证令牌:

卷曲示例:

curl -X POST -d "{\"username\" : \"user@sample.com\", \"password\":\"sample\"}" http://api.sample.com/authenticate

Ruby示例:

^{pr2}$

验证后,要获取数据:

卷曲示例:

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)

谢谢。。在

附言:我知道pycurl。但我不确定我是否真的需要它。我很乐意使用Python本机库。Pycurl可能对我来说太过分了。在

我是Python新手,在阅读了'urllib2'文档并尝试了一些示例之后,我找不到正确的解决方案。在


Tags: samplecomclientjsonhttpurl示例data
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))

在阅读了urllib2文档之后,您到底不明白哪一部分? 我不知道我的Ruby,但从它的外观来看,它只需要发送json格式的GET-request和POST请求并解析响应。对于simplejson和urllib2,这一点非常简单。在

相关问题 更多 >