저는 python을 처음 사용하여 urllib을 사용하여 musicbrainz에서 JSON 데이터를 가져 오려고 시도 중이며 일부 데이터를 구문 분석 할 수 있습니다. 그러나 일부 아티스트의 경우 JSON 데이터의 특정 필드/키는 필요하지 않을 수 있으므로 제공되지 않습니다. 추가 필터 기준에 따라 가져온 JSON 데이터를 필터링하는 방법을 잘 모르겠습니다.필터는 Python의 특정 기준에 따라 JSON 데이터를 가져 왔습니다.
아래 예제에서 릴리스 목록 >> 릴리스 >> 릴리스 그룹 >> 유형이 '단일'로 설정된 경우에만 가져온 JSON 데이터를 필터링해야합니다. 가져온 JSON은 최대 50 번까지 반복 할 수 있지만 'Single'카테고리의 필터 만 추가로 필터링 할 수 있습니다. 어떻게 할 수 있는지 알려주세요. 감사!
샘플 JSON :
{
"created": "2012-12-27T13:22:55.834Z",
"recording-list": {
"count": 3,
"offset": 0,
"recording": [{
"score": "100",
"title": "Stronger",
"artist-credit": {
"name-credit": [{
"artist": {
"name": "Britney Spears",
"sort-name": "Spears, Britney"
}
}]
},
"release-list": {
"release": [{
"id": "13c5511f-1f99-4ffe-97d5-562c05e9d8d5",
"title": "Hit Hammer 2001 (disc 1)",
"status": "Official",
"artist-credit": {
"name-credit": [{
"artist": {
"id": "89ad4ac3-39f7-470e-963a-56509c546377",
"name": "Various Artists"
}
}]
},
"release-group": {
"id": "6c4c2cc3-3d8e-3a19-9d46-da076c34b6e9",
"type": "Compilation",
"primary-type": "Album",
"secondary-type-list": {
"secondary-type": ["Compilation"]
}
},
"medium-list": {
"track-count": 20,
"medium": [{
"position": 1,
"track-list": {
"count": 20,
"offset": 0,
"track": [{
"number": "1",
"title": "Stronger",
"length": 203266
}]
}
}]
}
}]
}
}, {
"id": "feb9acbf-1d3d-4395-9512-bfbdcfa72eb9",
"score": "100",
"title": "Stronger",
"artist-credit": {
"name-credit": [{
"joinphrase": "",
"artist": {
"name": "Britney Spears",
"sort-name": "Spears, Britney"
}
}]
},
"release-list": {
"release": [{
"id": "45e2a271-2f6b-4029-b11e-b6d94d169f9a",
"title": "Stronger: The Remixes",
"status": "Official",
"release-group": {
"id": "4d018ba8-f05e-4817-8c70-34307161a0fc",
"type": "Single",
"primary-type": "Single"
},
"date": "2000-12-12",
"country": "US",
"medium-list": {
"track-count": 6,
"medium": [{
"position": 1,
"format": "CD",
"track-list": {
"count": 6,
"offset": 0,
"track": [{
"number": "1",
"title": "Stronger",
"length": 203000
}]
}
}]
}
}]
},
"puid-list": {
"puid": [{
"id": "28550845-c68a-314d-90c1-010dff730f4a"
}]
}
}]
}
}
파이썬 코드 :
def get_mbid(artist, song):
artist=urllib.quote_plus(artist)
song=urllib.quote_plus(song)
recording_url = 'http://search.musicbrainz.org/ws/2/recording/?&fmt=json&query=artist:"'+artist+'"%20AND%20recording:"'+song+'"'
search_results = urllib.urlopen(recording_url)
json = simplejson.loads(search_results.read())
search_results.close()
if json['recording-list']['count'] == 0:
return get_mbid_artist(artist)
else:
recordings = json['recording-list']['recording']
for recording in recordings:
mbid = recording['artist-credit']['name-credit'][0]['artist']['id']
print mbid
정말로 '기본 유형'을 필터링하고 싶습니다. 'type'은 더 이상 사용되지 않고'primary-'와'secondary-type'으로 대체되고 있습니다. 검색어 URL에 필터를 추가하지 않으시겠습니까? '& primary-type = Single'을 추가하면됩니다. –
안녕 Martijn, 제안 주셔서 감사합니다하지만 작동하는 것, 조스 덤프 여전히 URL에 주 유형을 전달 나와 함께 동일하게 보입니다. http://musicbrainz.org/ws/2/recording?&fmt=json&query=artist%3A"Britney+Spears"++AND+recording%3A"Stronger"&primary-type=Single –
맞습니다. 녹음 된 내용이 반환되고있는 것 같습니다. 거기에 적어도 * 싱글 릴리스가 있습니다. 어떤 종류의 필터링이 필요합니까? 당신은 항상 릴리스를 반복 할 수 있으며, 싱글 인 것들만 처리 할 수 있습니다. –