この Python スクリプトを作成して、CSV ファイルからの一連の曲 ID コードを使用して Echonest Songs API にクエリを実行し、JSON 応答を新しい CSV ファイルに解析します。
私が取得している CSV には、1 つの列とヘッダーしかありません。JSON 応答は次のようになります (id 値は CSV 内のものです)。
{
"response": {
"status": {
"version": "4.2",
"code": 0,
"message": "Success"
},
"songs": [
{
"artist_id": "ARSQSCB1187B9912A0",
"artist_name": "Warren G",
"id": "SOCHNQM13167710571",
"audio_summary": {
"key": 11,
"analysis_url": "http://echonest-analysis.s3.amazonaws.com/TR/46UlqAq8HVkiQEZM0TBRYS2f9FihdJTqhIjeBh/3/full.json?AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ&Expires=1378873388&Signature=mXiI%2Bb%2BndmJMiIl9GNPO8GEDT08%3D",
"energy": 0.34873219698986957,
"liveness": 0.2955813703355687,
"tempo": 95.315,
"speechiness": 0.3528227641100349,
"acousticness": 0.6892753604056542,
"mode": 0,
"time_signature": 4,
"duration": 232.45333,
"loudness": -8.597,
"audio_md5": "b7eca18e4ac88f97f188007f45fe8daa",
"valence": 0.6579951690603227,
"danceability": 0.8058721228042193
},
"title": "Make It Do What It Do"
}
]
}
}
これまでの私のPythonスクリプトは次のとおりです。
#!/Users/.../anaconda/bin/Python
import urllib
import json
import csv
from time import sleep
API_URL = 'http://developer.echonest.com/api/v4/song/profile?'
API_KEY = 'api_key here'
writer = csv.writer(open("/Users/me/path/to/output", "wB"))
input_file = csv.DictReader(open('/me/path/to/input', "rB"))
for row in input_file:
song_id = row['id']
qs = urllib.urlencode({"api_key": API_KEY,
"bucket": "audio_summary",
"id": song_id})
url = '{}?{}'.format(API_URL, qs)
resource = urllib.urlopen(url)
parsed_json = json.load(resource)
for songs in parsed_json:
print songs
row = []
writer.writerow({k: v.encode('utf-8') for k, v in songs.audio_summary()})
sleep(5)
ただし、コマンド ラインからスクリプトを実行しようとすると、次のエラーが発生します。
Traceback (most recent call last):
File "/Users/.../Rap/echo.py", line 11, in <module>
for row in input_file:
File "/Users/.../anaconda/lib/python2.7/csv.py", line 103, in next
self.fieldnames
File "/Users/.../anaconda/lib/python2.7/csv.py", line 90, in fieldnames
self._fieldnames = self.reader.next()
_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
プログラミングは初めてです。スクリプトで修正する必要があるものはありますか? これに対するより良いアプローチはありますか?
ありがとう!