Ошибка с JSON
NEVERMORE102 opened this issue · 12 comments
Ignoring exception in on_ready
2021-08-30T09:35:58.567049+00:00 app[worker.1]: Traceback (most recent call last):
2021-08-30T09:35:58.567079+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/client.py", line 343, in _run_event
2021-08-30T09:35:58.567080+00:00 app[worker.1]: await coro(*args, **kwargs)
2021-08-30T09:35:58.567082+00:00 app[worker.1]: File "/app/bot.py", line 145, in on_ready
2021-08-30T09:35:58.567082+00:00 app[worker.1]: print(get_answers(link))
2021-08-30T09:35:58.567083+00:00 app[worker.1]: File "/app/mesh2.py", line 69, in get_answers
2021-08-30T09:35:58.567085+00:00 app[worker.1]: task_contents = fetch_json(auth_data, test_variant, test_type)
2021-08-30T09:35:58.567105+00:00 app[worker.1]: File "/app/mesh2.py", line 58, in fetch_json
2021-08-30T09:35:58.567106+00:00 app[worker.1]: return json.loads(task_responce.text)["training_tasks"]
2021-08-30T09:35:58.567106+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/json/init.py", line 346, in loads
2021-08-30T09:35:58.567107+00:00 app[worker.1]: return _default_decoder.decode(s)
2021-08-30T09:35:58.567107+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/json/decoder.py", line 337, in decode
2021-08-30T09:35:58.567107+00:00 app[worker.1]: obj, end = self.raw_decode(s, idx=_w(s, 0).end())
2021-08-30T09:35:58.567109+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/json/decoder.py", line 355, in raw_decode
2021-08-30T09:35:58.567109+00:00 app[worker.1]: raise JSONDecodeError("Expecting value", s, err.value) from None
2021-08-30T09:35:58.567118+00:00 app[worker.1]: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Добрый день! Можно у вас уточнить, какую ссылку вы передаете функции get_answers(), что приводит к такой ошибке?
Привет! С какими аргументами вы используете функцию get_answers()
? Проверив на нашем сервере, у нас всё работает по вашей ссылки
Я пробовал:
link = "https://uchebnik.mos.ru/exam/test/view_test/191202/" print(get_answers(link, 'spec'))
link = "https://uchebnik.mos.ru/exam/test/view_test/191202/" print(get_answers(link, 'homework'))
link = "https://uchebnik.mos.ru/exam/test/view_test/191202/" print(get_answers(link, 'spec'))
В функцию get_answers() не надо передавать тип задания. Он определяется автоматически. Поэтому в данном случае, бот вылетает
link = "https://uchebnik.mos.ru/exam/test/view_test/203857/" print(get_answers(link))
Всё та-же ошибка
Попробуем так... Скопируйте следующую программу, запустите её и пришлите то, что она выводит:
import mesh, requests
def get_json (link):
auth_data = mesh.auth()
test_variant = mesh.get_variant(link)
test_type = mesh.get_type(link)
url = "https://uchebnik.mos.ru/exam/rest/secure/testplayer/group"
request_data = {
"test_type": "training_test",
"generation_context_type": test_type,
"generation_by_id": test_variant
}
request_cookies = {
"auth_token": auth_data["authentication_token"],
"profile_id": str(auth_data["id"]),
"udacl": "resh"
}
task_responce = requests.post(
url = url,
data = json.dumps(request_data),
cookies = request_cookies,
headers = {"Content-type": "application/json"}
)
print(task_response.text)
get_json(ВАША ССЫЛКА ЗДЕСЬ)
Исправил пару ошибок в импортов и названия переменных.
<title>403 Forbidden</title>403 Forbidden
nginx/1.16.1
Я ещё заметил, что когда я открываю этот тест в браузере, то пишет, что я не авторизован, хоть это не так.
У меня предположение, что МЭШ блокирует ваш IP адрес и не позволяет делать запросы на их сервера. Попробуйте зайти на МЭШ или запустить бота с включённым VPN или прокси
Бот у меня вообще залит на Heroku(хостинге). Я просто слышал, что где-то нужен учительский аккаунт, но я использую только пользователя МЭШ. Если я даже лично перейду с этого аккаунта по ссылке, то он выдаст ошибку авторизации.
Попробуйте запустить ваш код с библиотекой mesh
на вашем личном компьютере, ведь нам все таки кажется проблема в Heroku. Наш основной бот хостится в России и проблем с МЭШ нету.