1

New York Times APIからJSONをフェッチし、それをCSVに変換するスクリプトができました。ただし、次のエラーが発生することがあります。

UnicodeEncodeError:'ascii'コーデックは位置21の文字u'\ u201c'をエンコードできません:序数が範囲内にありません(128)

出力をUTF-8に変換すれば、これをすべて回避できると思いますが、その方法がわかりません。これが私のPythonスクリプトです:

import urllib2
import json
import csv

outfile_path='/NYTComments.csv'

writer = csv.writer(open(outfile_path, 'w'))

url = urllib2.Request('http://api.nytimes.com/svc/community/v2/comments/recent?api-key=ea7aac6c5d0723d7f1e06c8035d27305:5:66594855')

parsed_json = json.load(urllib2.urlopen(url))

print parsed_json

for comment in parsed_json['results']['comments']:
    row = []
    row.append(str(comment['commentSequence']))
    row.append(str(comment['commentBody']))
    row.append(str(comment['commentTitle']))
    row.append(str(comment['approveDate']))
    writer.writerow(row)
4

2 に答える 2

1

いくつかのこと...

  • NewYork Times APIについては何も知りませんが、「api-key」を使用してコードスニペットを公開するべきではないと思います。この点についての推測(私はこれまでこのAPIを使用したことがありません)

  • 見てみると、APIはエンコーディングを教えてくれます。ヘッダーに次の情報が返されます。

    Content-Type=application/json; charset=UTF-8 
    
  • 「pythonとUnicodeEncodeError」をグーグルで検索すると、多くの助けが得られます。しかし、ここでは、あなたの問題はおそらくコメントの「str」を呼んでいるようです。その場合、「ascii」コーデックを使用します。そして、128を超える文字がある場合は、ブームになります。表示されているエラーが発生します。 これは、このトピックに関するかなり良いブログ投稿です。それはあなたがそれを読むのを助けるかもしれません。

編集:この解決策は私のために働きます:

for comment in parsed_json['results']['comments']:
    row = []
    row.append(str(comment['commentSequence']))
    row.append(comment['commentBody'].encode('UTF-8', 'replace'))
    row.append(comment['commentTitle'].encode('UTF-8', 'replace'))
    row.append(str(comment['approveDate']))
    writer.writerow(row)
于 2012-10-05T04:06:31.943 に答える
0

str()の2番目と3番目の呼び出しをunicode()に置き換えます。

for comment in parsed_json['results']['comments']:
    row = []
    row.append(str(comment['commentSequence']))
    row.append(unicode(comment['commentBody']))
    row.append(unicode(comment['commentTitle']))
    row.append(str(comment['approveDate']))
    writer.writerow(row)
于 2012-10-05T04:41:55.197 に答える