-
-
Save bushaev-denis/a3786cc30f79a63469ba9ce9ae647555 to your computer and use it in GitHub Desktop.
const beep = () => { | |
const context = new AudioContext(); | |
const oscillator = context.createOscillator(); | |
oscillator.type = "sawtooth"; | |
oscillator.frequency.value = 1200; | |
oscillator.connect(context.destination); | |
oscillator.start(); | |
if (confirm("Появилась запись")) { | |
oscillator.stop(); | |
} | |
}; | |
const getDate = (month, year) => [ | |
(month > 11 ? month - 12 : month) + 1, | |
month > 11 ? year + Math.floor(month / 11) : year | |
]; | |
const randSeconds = (n, x) => { | |
return Math.floor(Math.random() * (x * 1000 - n * 1000 + 1) + n * 1000); | |
}; | |
const fetchSlots = async (month, year) => { | |
const res = await fetch("https://q.midpass.ru/ru/Booking/GetMonthSchedule", { | |
headers: { | |
accept: "application/json, text/javascript, */*; q=0.01", | |
"accept-language": "ru,en;q=0.9", | |
"content-type": "application/x-www-form-urlencoded; charset=UTF-8", | |
"sec-ch-ua": | |
'"Chromium";v="106", "Google Chrome";v="106", "Not;A=Brand";v="99"', | |
"sec-ch-ua-mobile": "?0", | |
"sec-ch-ua-platform": '"macOS"', | |
"sec-fetch-dest": "empty", | |
"sec-fetch-mode": "cors", | |
"sec-fetch-site": "same-origin", | |
"x-requested-with": "XMLHttpRequest" | |
}, | |
referrer: | |
"https://q.midpass.ru/ru/Booking?serviceId=54030d6a-e145-08e2-60fb-33344fac2455", | |
referrerPolicy: "strict-origin-when-cross-origin", | |
body: `serviceId=54030d6a-e145-08e2-60fb-33344fac2455&month=${month}&year=${year}&day=1&k=7431`, | |
method: "POST", | |
mode: "cors", | |
credentials: "include" | |
}); | |
if (res.ok) { | |
return await res.json(); | |
} | |
return null; | |
}; | |
const start = async () => { | |
if (!started) { | |
return; | |
} | |
const date = new Date(); | |
const month = date.getMonth(); | |
const year = date.getFullYear(); | |
const dates = [getDate(month, year), getDate(month + 1, year)]; | |
const slots = await Promise.all(dates.map(async (date) => await fetchSlots(...date))); | |
const totalAvailableSlots = slots.reduce((res, cur) => res + cur.AvailableSlots, 0); | |
if (totalAvailableSlots > 0) { | |
beep(); | |
} else { | |
setTimeout(start, randSeconds(30, 90)); | |
} | |
}; | |
let started = false; | |
const buttonText = ['▶ запустить скрипт️', '⏸ остановить скрипт']; | |
const Button = document.createElement('button'); | |
Button.style.cssText = 'position: fixed; top: 20px; left: 20px; font-size: 1.5rem'; | |
Button.textContent = buttonText[0]; | |
document.documentElement.appendChild(Button) | |
Button.addEventListener('click', () => { | |
started = !started; | |
Button.textContent = buttonText[Number(started)]; | |
start(); | |
}) |
Обновлено: динамическая подстановка месяца.
Обновлено: рандомное время следующего запроса.
Обновлено: добавлена кнопка для включения/паузы. Это необходимо, т.к. браузер блокирует все звуки или уведомления со вкладки, если пользователь не делал на ней никаких действий (например не нажимал на интерактивные элементы)
Обновлено: описание экрана
@dez64ru предлагаю добавить еще отправку сообщения в телеграм: https://medium.com/javarevisited/sending-a-message-to-a-telegram-channel-the-easy-way-eb0a0b32968
@vitalets я думаю, что кому нужно допилит. Я такой функционал поддерживать не хочу.
Здравствуйте, не перезагружается эта страница, есть ли обновления?
https://q.midpass.ru/en/Booking?serviceId=165e4506-5936-4a7e-f70d-be47572308b0
Я изменил ссылку и параметры в скрипте
Скрипт для оповещения о появлении окошка на запись загранника для q.midpass.ru
Устанавливаем расширение https://chrome.google.com/webstore/detail/injector/bfdonckegflhbiamlmidciapolfccmmb/related?hl=en
Логинимся на сайте, доходим до экрана (если доступен выбор услуги, если нет - ничего страшного, можно остаться на любом другом экране)
(тык) Как включить звук на сайте
Screen.Recording.2022-11-01.at.18.32.59.mov
(тык) Видео как добавить код в расширение
Untitled.mov
Обновляем страницу 1 раз, чтоб применился скрипт.
На сайте сверху слева появится кнопка, вам необходимо ее нажать (подробности, почему так) .
Готово, вы великолепны, когда появится окошко будет мерзкий и громкий писк с уведомлением в браузере
Когда скрипт перестанет быть нужным удаляем расширение или скрипт из расширения.
Обратите внимание на то, что сайт периодически сбрасывает сессию и вам необходимо заходить заново в аккаунт