Токен
В нынешних реалиях зайти лог+пасс нереально, т.к. дн.ру форсит госуслуги. Где токен-то взять? Обыскал всех куков и не нашёл
Не знаю где его искать в DevTools, но можешь воспользоваться этим скриптом:
import requests
from pydnevnikruapi.dnevnik.exceptions import DiaryError
from urllib.parse import urlparse, parse_qs
cookies = {
'a_r_p_i': "",
'c_e_a_p': "",
'dnevnik_rr': "",
'dnevnik_sst': "",
'dnevnik_sst': "",
'DnevnikAuth_a': "",
'DnevnikAuth_l': "",
}
LOGIN_URL = "https://login.dnevnik.ru/login/"
RETURN_URL = (
"https://login.dnevnik.ru/oauth2?response_type="
"token&client_id=bb97b3e445a340b9b9cab4b9ea0dbd6f&scope=CommonInfo,ContactInfo,"
"FriendsAndRelatives,EducationalInfo"
)
def get_token(cookies):
token = requests.get(LOGIN_URL, params={
"ReturnUrl": RETURN_URL}, allow_redirects=True, cookies=cookies)
parsed_url = urlparse(token.url)
query = parse_qs(parsed_url.query)
result = query.get("result")
if result is None or result[0] != "success":
raise DiaryError("Что-то не так с авторизацией")
if token.status_code != 200:
raise DiaryError(
"Сайт лежит или ведутся технические работы, использование api временно невозможно"
)
token = parsed_url.fragment[13:-7]
return token
token = get_token(cookies)
print(token)
# Можешь раскомментировать чтоб протестить
# from pydnevnikruapi.dnevnik import dnevnik
# dn = dnevnik.DiaryAPI(token=token)
# print(dn.get_school())
В cookies вставь значения из DevTools -> Хранилище -> Куки -> https://dnevnik.ru (DevTools -> Приложение -> Хранилище -> Файлы cookie -> https://dnevnik.ru в Chrome). В консоли выведется твой токен. У меня, во всяком случае, работает :)
Изменено
Они что-то поменяли, теперь нужно брать куки из поддомена login.dnevnik.ru, например, https://login.dnevnik.ru/oauth2/. И достаточно всего двух: DnevnikAuth_a и DnevnikAuth_l.
О, спасибо! Попробую, как доберусь до компа
Сделал сайт для получения токена https://androsovpavel.pythonanywhere.com/
LOGIN_URL = "https://login.dnevnik.ru/login/" RETURN_URL = ( "https://login.dnevnik.ru/oauth2?response_type=" "token&client_id=bb97b3e445a340b9b9cab4b9ea0dbd6f&scope=CommonInfo,ContactInfo," "FriendsAndRelatives,EducationalInfo"
Откуда был взят client_id?
LOGIN_URL = "https://login.dnevnik.ru/login/" RETURN_URL = ( "https://login.dnevnik.ru/oauth2?response_type=" "token&client_id=bb97b3e445a340b9b9cab4b9ea0dbd6f&scope=CommonInfo,ContactInfo," "FriendsAndRelatives,EducationalInfo"
Откуда был взят client_id?
Точно не помню, но, похоже, отсюда: pydnevnikruapi/constants.py
подскажите, возможно ли сейчас получать токен дневника из log:pass госуслуг?