【问题标题】:How to save results from an api request to the Google Datastore?如何将 api 请求的结果保存到 Google 数据存储区?
【发布时间】:2012-08-16 07:20:00
【问题描述】:

基本上,我正在尝试使用 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"]

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

【问题讨论】:

    标签: python json api google-app-engine google-cloud-datastore


    【解决方案1】:

    首先您需要定义一个模型。详情请见Ndb Overview

    假设您的模型类似于

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

    【讨论】:

    • 不知道。谢谢!
    猜你喜欢
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2019-08-30
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多