2014-02-25 2 views
0

uronib2를 사용하여 echonest API를 통해 여러 매개 변수를 전달합니다. 일부 아티스트 및 트랙 이름에는 앰퍼샌드 (&) 문자가 있습니다.html "&"및 매개 변수

예 : 토미 제임스 & artist=Tommy%20James%20&20The%20Shondells

가 어떻게 올바르게 API를 매개 변수를 통해 앰퍼샌드 문자를 전달할 수있는 Shondells ==?

전체 API 쿼리 :

http://developer.echonest.com/api/v4/song/search?api_key=KEY_GOES_HERE&artist=Tommy%20James%20&20The%20Shondells&title=Crimson%20and%20Clover

+0

지금 매개 변수를 어떻게 인코딩하고 있습니까? 일반적으로'urllib.quote'를 사용하여 인코딩을 처리하면'&'가 올바르게 인코딩됩니다. –

+0

'% 26'을 사용해 보셨습니까? – ConcurrentHashMap

답변

1

당신이 당신의 쿼리 문자열을 구축하는 방법을 당신은 언급하지 않았다,하지만 난 당신이 대신 수동으로 아무것도 인코딩의 urllib.quote(), urllib.quote_plus()urllib.urlencode() 기능을 확인하는 촉구한다. 후자는 전달 키와 값에 quote_plus()을 적용됩니다

>>> from urllib import urlencode 
>>> artist = 'Tommy James & The Shondells' 
>>> api_key = 'KEY_GOES_HERE' 
>>> urlencode({'artist': artist, 'api_key': api_key}) 
'api_key=KEY_GOES_HERE&artist=Tommy+James+%26+The+Shondells' 

이제 artist 항목은 + 공간과 앰퍼샌드에 대한 %26 사용하여 인코딩되었습니다.

+0

훌륭한 자료, 감사합니다. 내가 만든 CSV 파일을 반복하고 각 셀에서 값을 가져옵니다. – Mike

1

당신은 먼저 해당 URI 인코딩, '% 26'과 '&'의 각각의 발생을 교체하려고, URL에 아티스트 변수를 추가하기 전에.

artist = artist.replace('&', '%26') 
+2

이러한 문자를 수동으로 바꾸는 대신, 대신에'urllib.quote()'를 사용해야합니다. 이름에'= '문자가 있으면 어떨까요? 또는'/'? –

+0

이것은 정확히 내가 뭘 찾고 있는지, .quote() 메소드를 알지 못했다. 감사! – Mike

+0

@Mike : 당신이보아야 할 라이브러리에 더 많은 기능이 있습니다. [urlencode()'function] (예 : http://docs.python.org/2/library/urllib.html#urllib.urlencode)은 url이 키와 값을 인용합니다. –

관련 문제