APIからJSONデータを取得するためにPython 2.7.11を使用しています(ワルシャワ、ポーランドの木に関するデータですが、それは気にしません)。さらなる分析のために、APIによって提供されるすべてのデータを含む出力csvファイルを生成したいと思います。私はfor another project(ここでStackoverflowで議論され、@Martin Taylorによって修正されました)スクリプトを使い始めました。このスクリプトはうまくいかなかったので、私は非常に基本的な理解、グーグルでpdbデバッガを使って修正しようとしました。現時点では、結果は次のようになります。PythonでAPIを解析する - BOMでJSONを処理する方法
import pdb
import json
import urllib2
import csv
pdb.set_trace()
url = "https://api.um.warszawa.pl/api/action/datastore_search/?resource_id=ed6217dd-c8d0-4f7b-8bed-3b7eb81a95ba"
myfile = 'C:/dane/drzewa.csv'
csv_myfile = csv.writer(open(myfile, 'wb'))
cols = ['numer_adres', 'stan_zdrowia', 'y_wgs84', 'dzielnica', 'adres', 'lokalizacja', 'wiek_w_dni', 'srednica_k', 'pnie_obwod', 'miasto', 'jednostka', 'x_pl2000', 'wysokosc', 'y_pl2000', 'numer_inw', 'x_wgs84', '_id', 'gatunek_1', 'gatunek', 'data_wyk_pom']
csv_myfile.writerow(cols)
def api_iterate(myfile):
while True:
global url
print url
json_page = urllib2.urlopen(url)
data = json.load(json_page)
json_page.close()
for data_object in data ['result']['records']:
csv_myfile.writerow([data_object[col] for col in cols])
try:
url = data['_links']['next']
except KeyError as e:
break
with open(myfile, 'wb'):
api_iterate(myfile)
私は非常に新鮮なPythonユーザーですので、私はずっと混乱しています。今、私は、json辞書のオブジェクトを読み込んでいるときに、 'x_wgs84'要素に関連付けられたKeyerrorメッセージを取得します。私は、ソースURLにこの要素の前にU + FEFFのUnicode文字があるという事実と関係があると思います。私はこれを回避しようとしたが、私は立ち往生し、支援に感謝します。
私が言及したように、コードは他のいくつかの方法で壊れている可能性があります。私は非常に未熟なプログラマーです。
ありがとうございます@Cybril、私はすでにそれを試みました。前述のように、私はPython 2.7.11を使用しています。私はchanfe 'x_wgs84'を '\ ufeffx_wgs84'にしようとしましたが、これは問題を解決しませんでした。エラー応答もまったく同じでした。私は文字列の前に 'u'を置くことで何を意味するのか分かりません - あなたは 'u'feffx_wgs_84'や 'u' \ feffx_wgs_84 'のような意味ですか?これはどちらもうまくいかないようです。 – Jan
私の例を見てください。引用符の前に置くことです。 – Cyrbil
申し訳ありません@Cybril、今私はそれを手に入れます。 UnicodeEncodeError: 'ascii'コーデックは文字 'ufeff'を位置0にエンコードできません:序数は範囲内にありません(128)。これは実際に変更されました。 :)おそらく、私が読んだとおり、自動的にエンコードの問題を処理する要求を使用したからです。 – Jan