#python #api #python-requests #discord #chatbot
Вопрос:
Я создаю чат-бота discord с использованием python, где мой бот отправляет новости с помощью API, но я не могу этого сделать.
Мой код:-
import requests
def get_news(): #========================================News
url = "https://google-news1.p.rapidapi.com/top-headlines"
load_dotenv()
querystring = {"country":"INDIA","lang":"en","limit":"50","media":"true"}
headers = {
'x-rapidapi-key': "os.getenv('NEWS_API')",
'x-rapidapi-host': "google-news1.p.rapidapi.com"
}
response = requests.request("GET", url, headers=headers, params=querystring)
json_data=json.loads(response.text)
return json_data
@client.event
async def on_message(message):
if message.content.startswith('|news'): #====================================News
data=get_news()
list1=message.content.split(" ")
try:
num=int(list1[1])
except:
num=5
i = 1
for item in data['article']:
if not(item['description']):
continue
await message.channel.send(str(i) ". " item['url'])
if i == num:
break
i = 1
Я использую API от https://rapidapi.com/ubillarnet/api/google-news1/
Но я столкнулся с некоторой ошибкой
Моя ошибка:-
$ python -u "d:Codepython projectsDiscord_Chat_BOTmain.py"
We have logged in as Buddy#9784
Ignoring exception in on_message
Traceback (most recent call last):
File "C:UserssohamAppDataRoamingPythonPython39site-packagesdiscordclient.py", line 343, in _run_event
await coro(*args, **kwargs)
File "d:Codepython projectsDiscord_Chat_BOTmain.py", line 218, in on_message
for item in data['article']:
KeyError: 'article'
Пожалуйста, помогите мне исправить эту ошибку
Комментарии:
1. Не могли бы вы добавить
print(json_data)
прямо передreturn json_data
входомget_news()
и повторить, чтобы мы могли подтвердить его ценность?2. Когда я печатаю это, это дает мне
{'message': 'You are not subscribed to this API.'}
. Но я подписался на него в rapidapi.com3. Ваш синтаксис apikey для получения
NEWS_API
из os env inheaders
может быть неверным. Мое предложение состоит в том, чтобы сделать 1 из 2 вещей. 1) Явно введите свойx-rapidapi-key
inheaders
или 2) создайте переменную, напримерnews_api = os.getenv('NEWS_API')
, и затемx-rapidapi-key: news_api,
.
Ответ №1:
Я думаю, что причина в следующем:
headers = {
'x-rapidapi-key': "os.getenv('NEWS_API')",
'x-rapidapi-host': "google-news1.p.rapidapi.com"
}
Вы буквально отправляете текст "os.getenv('NEWS_API')"
в качестве ключа, вместо того, чтобы запускать os.getenv('NEWS_API')
и отправлять значение в качестве ключа. Поскольку строка "os.getenv('NEWS_API')"
не является допустимым ключом, у вас нет разрешения.
Вместо этого удалите кавычки, чтобы отправить фактический ключ:
headers = {
'x-rapidapi-key': os.getenv('NEWS_API'),
'x-rapidapi-host': "google-news1.p.rapidapi.com"
}