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"]

ただし、オブジェクトごとに1つ。これについて行くための最良の方法は何でしょうか?または、すべての名前のリスト、すべての性別の別のリストなどを用意して、それらを一致させる必要がありますか?

4

1 に答える 1

1

まず、モデルを定義する必要があります。詳細については、Ndbの概要を参照してください。

あなたのモデルが次のようなものだとしましょう

class Congressman(ndb.model):
    ...

次に、名前の1つのリストを計算する代わりに、YouTube IDのリストを計算する代わりに、すべてのオブジェクトを1回トラバースし、オブジェクトを作成してCongressman保存します。

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 に答える