我有一个机器人,该机器人通过使用aiohttp进行请求来访问Genius API。 该API以前曾经可以与aiohttp一起正常工作,但现在看来似乎不起作用。 API现在返回此值:
{'meta': {'message': 'This call requires an access_token. Please see: '
'https://genius.com/developers',
'status': 401}}
这是我编写的用于Genius API的aiohttp代码,该代码一直使用到最近。
import asyncio
import aiohttp
import pprint
BASE_URL = "http://api.genius.com"
HEADERS = {'Authorization': 'Bearer {access-token here}'}
SONG_TITLE = "any song title"
async def get_lyrics():
search_url = BASE_URL + "/search"
data = {'q': SONG_TITLE}
conn = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(connector=conn) as session:
async with session.get(search_url, params=data, headers=HEADERS) as response:
json = await response.json()
pprint.pprint(json)
loop = asyncio.get_event_loop()
loop.run_until_complete(get_lyrics())
为确保访问令牌或授权没有问题,请使用requests
尝试使用与上面完全相同的代码,然后从API返回预期的结果。使用requests
作参考的代码。
import requests
import pprint
BASE_URL = "http://api.genius.com"
HEADERS = {'Authorization': 'Bearer {access-token here}'}
SONG_TITLE = "any song title"
SEARCH_URL = BASE_URL + "/search"
DATA = {'q': SONG_TITLE}
RESPONSE = requests.get(SEARCH_URL, params=DATA, headers=HEADERS)
JSON = RESPONSE.json()
pprint.pprint(JSON)
为什么Genius API在使用aiohttp时会给出401,但是在requests
下可以正常工作。我想念什么吗? aiohttp版本是3.3.2,python版本是3.7.0。