Многие решения, касающиеся этой проблемы, решаются простым использованием библиотеки запросов, однако, когда я пытаюсь использовать библиотеку запросов для доступа к API Genius, она неправильно авторизуется, с описанием, The access token is expired, revoked, malformed, or invalid for other reasons.
При использовании urllib, он может авторизовать и получить доступ к API должным образом без ошибок, если ошибка HTTP версии не поддерживается снова, как правило, после первого запроса GET. Я также пробовал это решение , но оно также не устраняет ошибку. Что я могу сделать, чтобы исправить эту ошибку, чтобы получить доступ к API Genius? Мой исходный код показан ниже.
def find_lyrics(info):
# https://github.com/jasonqng/genius-lyrics-search/blob/master/search.py for accessing api
"""
Given info is list containing [author, title]
"""
search_req = Request("http://api.genius.com/search?q=" + " ".join(info))
search_req.add_header("Authorization", "Bearer " + TOKEN)
search_req.add_header("User-Agent", "curl/7.9.8 (i686-pc-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.6b) (ipv6 enabled)") #Must include user agent of some sort, otherwise 403 returned
while True:
try:
search_res = urlopen(search_req, timeout=4) #timeout set to 4 seconds; automatically retries if times out
search_raw = search_res.read()
except socket.timeout:
print("Timeout raised and caught")
continue
break
print(search_raw["meta"]["status"])
print(search_raw["response"]["hits"])
return search_raw