2016-12-29 8 views
0

우분투 서버 16.04.1의 Soundcloud API (pip install soundcloud과 함께 설치됨)에 soundcloud-pythonhttps://github.com/soundcloud/soundcloud-python을 사용하고 있습니다.SOUNDCLOUD API : soundcloud-python을 사용하여 오류 429에 대한 응답 본문 얻기

사운드 클 라우드 API 속도 제한 공식 페이지 https://developers.soundcloud.com/docs/api/rate-limits#play-requests은 앱이 API 속도 제한을 초과하는 경우 429 Client Error 응답 본문에 몇 가지 추가 정보가 포함 된 JSON 개체가 표시된다고 말합니다.

블록이 끝날 때 사용자에게 알리기 위해 reset_time 필드를 얻는 데 관심이 있습니다.

예를 들어 속도 제한을 초과하면 response = client.put('/me/favorites/%d' % song_id) 일 때 앱이 작동하지 않으며 responsenull 일 때 문제가 발생합니다.

JSON 응답 본문은 어떻게 구할 수 있습니까?

답변

0

왜 패키지의 소스 코드를 읽고 스스로 찾으십니까?

보자 ... client 객체를 가지고 있지만 browsing the source code 객체가 있다고 설명하지 않고 Client 클래스를 정의하는 "client.py"모듈이 있음을 알 수 있습니다. 이 클래스는 명시 적으로 put 방법을 정의하지 does'nt하지만 __getattr__ hook 정의

def __getattr__(self, name, **kwargs): 
    """Translate an HTTP verb into a request method.""" 
    if name not in ('get', 'post', 'put', 'head', 'delete'): 
     raise AttributeError 
    return partial(self._request, name, **kwargs) 

좋아, 그래서 Client.put(...)return self._request("put", **kwargs)Client.put(**kwargs)을 정의하는 아주 쓸데없이 복잡한 방법입니다 Client._request를 감싸는 partial object을 반환합니다.

이제 Client._request을 살펴 보겠습니다. 기본적으로 몇 가지 정상성 검사를하고 **kwargs을 업데이트하고 wrapped_resource(make_request(method, url, kwargs))을 반환합니다.

모듈 시작 부분에서 가져 오기를 조회하면 make_request은 "request.py"에서 제공되고 wrapped_resource은 "resources.py"에서 가져온 것을 볼 수 있습니다. 그래서이 가정 - 내가 (BTW 포스트 예외 역 추적 등의 문제에 대해 saking하십시오) "예외가 발생"뜻 가정 -

당신은 API 호출을 수행하면 속도 제한을 통해 "이 응용 프로그램을 충돌"하면서 언급 하위 레벨에서 처리되는 경우 request.make_request부터 시작하겠습니다. 많은 데이터 서식 지정/마사지가 분명하고 마지막으로 the interesting part : response.raise_for_status()을 호출합니다. (5XX이 클라이언트에 대한 requests.exceptions.HTTPError (4XX) 및 서버를 제기한다 - 이것은 실제로 우리가 python-requests fine manual을 읽는다면, 우리는 raise_for_status가 무엇을 발견 a few lines abovein the requirements file

를 확인 우리가 실제로 유명한 python-requests package에 위임되는 힌트를,이다) 상태 코드.

이제는 예외가 무엇인지 알 수 있습니다. 귀하의 예외에 해당 정보가 모두 포함되어 있고 추적본이 있었으므로 귀하가 게시했을 때 많은 고통을 덜어 주셨을 것입니다.

하지만 어쨌든 ... 응답 내용을받지 못하는 것 같습니다. 그렇습니까? 잠깐, 아직 완료되지 않았습니다. 파이썬 요청은 상당히 잘 설계된 패키지이므로 여전히 응답을 구할 수 있습니다.실제로 requests.exceptions source code을 보면 HttpErrorRequestException의 하위 클래스이고 그 중 RequestException이 "requestresponse 개 개체로 초기화 (d)"되어 있다는 것을 알 수 있습니다.

만세, 우리는 예외가 있습니다. 따라서 우리가해야 할 일은 예외를 잡아서 response 속성을 확인하는 것입니다.이 속성에는 "추가 정보"가 포함되어야합니다.

이제이 역 추적없이 분류하는 쓰기하지만, 약 7 분 나에게 절반 이상 시간이 걸렸다 양해 바랍니다 - 그것은 단순한 이분까지 삶은 것 역 추적과를, 시간 requests.exceptions 소스 코드로 이동하여 요청 및 응답을 유지했는지 확인하십시오. 좋아, 내가 속이고, 나는 소스 코드를 읽는 데 익숙해졌지만 파이썬 요청을 많이 사용한다. 그러나 여전히 : 파이썬의 대화 형 셸을 사용하여 한 시간도 채 안되어서 스스로 해결할 수 있었다. 실시간으로 개체를 살 수 있습니다.

+0

바로'response.json()'에있었습니다. reset_time은'response.json() [ 'errors'] [0] [ 'release_at']'에 있습니다. 완전한 대답을 주셔서 감사합니다. –