superdima05/mesh

Ошибка с 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. Наш основной бот хостится в России и проблем с МЭШ нету.