我可以在API调用中使用字典键吗? (蟒蛇)

时间:2014-07-12 07:45:53

标签: python json encoding request

我认为没有问题,但我真的遇到了这段代码的麻烦,似乎无法提出解决方案。

我有一个字典,其键是正确的名称,例如John Green,我正在使用Sunlight Foundation的API来检索有关国会成员的信息(check here)。现在我需要请求使用name和lastname,所以我的代码看起来像这样:

 for key in my_dict:
   query_params2 = { 'apikey': 'xxxxxxxxxxx',
                 'firstname' : key.split()[0],
                 'lastname' : key.split()[-1]
                  }
   endpoint2 = "http://services.sunlightlabs.com/api/legislators.get.json"
   resp2 = requests.get(endpoint2, params = query_params2)
   data2 = resp2.json().decode('utf-8')
   print data2['response']['legislator']['bioguide_id']

这给出了一些我无法解释的错误:

Traceback (most recent call last):
File "my_program.py", line 102, in <module>
data = resp.json()
File "//anaconda/lib/python2.7/site-packages/requests/models.py", line 741, in json
return json.loads(self.text, **kwargs)
File "//anaconda/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "//anaconda/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "//anaconda/lib/python2.7/json/decoder.py", line 383, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

我猜它与编码有关,但我不知道如何解决它。

毋庸置疑,如果我手工输入名称和姓氏,请求就会完美无缺。

任何人都可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

这与编码无关。答案根本就不是JSON。当我尝试使用约翰&#39;和&#39;格林&#39;我收到400 Bad Request,回复内容为“没有此类对象存在”。

在网络界面中尝试 John Green 也会得到一个空洞的答案。此外,API文档中的URL与示例中的URL不同。

以下为我工作(同样没有John Green):

import requests

LEGISLATORS_URL = 'https://congress.api.sunlightfoundation.com/legislators'
API_KEY = 'xxxx'


def main():
    names = [('John', 'Green'), ('John', 'Kerry')]
    for first_name, last_name in names:
        print 'Checking', first_name, last_name
        response = requests.get(
            LEGISLATORS_URL,
            params={
                'apikey': API_KEY,
                'first_name': first_name,
                'last_name': last_name,
                'all_legislators': 'true'
            }
        ).json()
        print response['count']
        if response['count'] > 0:
            print response['results'][0]['bioguide_id']


if __name__ == '__main__':
    main()

输出:

Checking John Green
0
Checking John Kerry
1
K000148