0

基本上,我正在尝试使用 govtrack.us 提供的 api 来提取信息并将其存储到我自己的应用程序的数据存储中以进行进一步操作(使用 python)。默认情况下,api 提供 json,当我得到 json 时,我开始迷失如何将我想要的每个元素添加到数据存储区。例如,这个json有以下键:{u'meta', u'objects'}。每个对象都有以下键:

[u'gender_label', u'osid', u'id', u'pvsid', u'current_role', u'name_sortable', u'firstname', u'twitterid', u'middlename', u'lastname', u'bioguideid', u'birthday', u'link', u'youtubeid', u'nickname', u'name', u'roles', u'gender', u'namemod', u'metavidid', u'name_no_details', u'resource_uri']

我希望能够获取每个对象并将其存储到数据存储中(但并非所有信息都只是一些信息 - 例如 u'current_role'、u'youtubeid'、u'name' 等)。

现在,我有这个拉 json 的函数:

def get_congressman():
url = 'http://www.govtrack.us/api/v1/person?roles__current=true&limit=3000'
content  = None
try:
    content = urllib2.urlopen(url).read()
except URLError:
    return
if content:
    return content

这将遍历返回的 json:

current_congressman = get_congressman()
j            = json.loads(current_congressman)
name         = [c['name_no_details'] for c in j['objects']]
youtube      = [c['youtubeid'] for c in j['objects']]
gender_list  = [c['gender_label'] for c in j['objects']]

我不想将所有人的姓名、性别、youtube 提要等添加到单独的列表中,而是将每个对象添加到他们自己的列表中,其中包含添加到数据存储区所需的信息。基本上,一个类似的列表:

["Gary Ackerman", "Male", "RepAckerman"]

但是每个对象一个。解决此问题的最佳方法是什么?还是我必须有一个所有名字的列表,另一个所有性别的列表等等,然后将它们匹配起来?

4

1 回答 1

1

首先,您需要定义一个模型。有关详细信息,请参阅Ndb 概述

假设您的模型类似于

class Congressman(ndb.model):
    ...

Congressman然后,您将遍历所有对象一次并创建一个对象并存储它,而不是计算一个名称列表,另一个用于 youtube id 。

for congressman_info in j['objects']:
    congressman = Congressman(gender=congresmman_info['gender_label'],
                              name=congressman_info['name_no_details'], ...)
    congressman.put()
于 2012-08-16T07:44:46.260 回答