Skip to content

Instantly share code, notes, and snippets.

@qfox
Created December 24, 2022 16:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qfox/0a7eac193740588f9f9e4b3eb62dabd8 to your computer and use it in GitHub Desktop.
Save qfox/0a7eac193740588f9f9e4b3eb62dabd8 to your computer and use it in GitHub Desktop.
Отписаться (удалить) от всех подписок на rutube (рутуб)
// Нужно открыть devtools в хроме или firefox, и скопировать туда полностью содержание файла
// Вспомогательная пауза для 429
const pause = delay => new Promise(resolve => setTimeout(resolve, delay));
// Забираем список на кого мы подписаны из ручки
const subscriptionReq = await fetch('https://rutube.ru/api/v1/subscription/cards/detail?limit=1000&offset=0', { credentials: 'include' });
const { results } = await subscriptionReq.json();
// Бежим подряд без параллелизма, рутуб всё равно ограничивает кол-во запросов с клиента, поэтому смысла ускорять нет, не даст быстрее
for (const { id, object } of results) {
// Ручка удаления одной подписки, дергаем для каждой подписки
const r = await fetch(`https://rutube.ru/api/subscription/card/userchannel/${object.id}`, { method: 'DELETE', credentials: 'include' });
// Выводим в консоль от кого отписались (info, log в рутубе переопределены, используются в приложении)
console.dir(`${id}, ${object.id}, ${object.name}, ${r.status}`);
r.status === 204 || (r.text().then(text => console.dir(`${id} ${text}`)));
// Если получили 429 — ждём минуту, потому что достигли лимита запросов
if (r.status === 429) {
await pause(60000);
}
await pause(300); // Попытка обмануть автоматику, чтобы не достигать лимита запросов
}
@Arhimondus
Copy link

Спас меня) Спасибо, добрый человек)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment