[Скрипты]Чистим подписки от удаленных аккаунтов и закладки от удаленных статей

Код скрипта

function getUserId() { let ls_user = localStorage.getItem('user'); if (!ls_user) {alert('Войдите на сайт'); return false;} let user = JSON.parse(ls_user); if (!user?.id) {alert('Войдите на сайт!'); return false;} return user.id; } async function getAccessToken() { return new Promise(resolve => { const ab = new AbortController(); const r = (x) => resolve(x.accessToken) || ab.abort(); navigator.serviceWorker.addEventListener('message', ev => ev.data.payload?.accessToken && r(ev.data.payload), { signal: ab.signal }); navigator.serviceWorker.controller.postMessage({ task: "refreshAuthSession", payload:{ refreshToken: JSON.parse(localStorage.getItem('auth-refresh-token')).token }, nonce: Math.random().toString(16).slice(2) }) }) } async function delay(milliseconds) { return new Promise(resolve => { setTimeout(resolve, milliseconds); }); } async function main() { const userId = getUserId(); if (!userId) return; let accessToken = await getAccessToken(); // //Чистим удаленные аккаунты в Подписках // const response = await fetch(`https://api.dtf.ru/v2.5/subsite/subscriptions?page=0&subsiteId=${userId}`, { method: 'get', headers: new Headers({ 'Accept': 'application/json', }) }); let response_json = await response.json(); for(let i=0; i<response_json.result.items.length; i++) { const account = response_json.result.items[i]; if (account.name === 'Аккаунт удален') { while (true) { await delay(400); const post_data = new FormData(); post_data.append('id', account.id); post_data.append('action', 'unsubscribe'); const response = await fetch("https://api.dtf.ru/v2.1/subsite/subscription", { method: 'post', body: post_data, headers: new Headers({ 'Accept': 'application/json', 'JWTAuthorization': `Bearer ${accessToken}` }) }); let response_json = await response.json(); if (response_json?.error?.code === 401) { accessToken = await getAccessToken(); } else { break; } } } } // //Удаляем удаленные статьи в Закладках // let offset = 0; const bookmarks = []; while (true) { await delay(400); const response = await fetch(`https://api.dtf.ru/v2.10/bookmarks?markdown=false&type=posts&count=20&offset=${offset}`, { method: 'get', headers: new Headers({ 'Accept': 'application/json', 'JWTAuthorization': `Bearer ${accessToken}` }) }); let response_json = await response.json(); if (response_json?.error?.code === 401) { accessToken = await getAccessToken(); continue; } if (response_json?.result.length === 0) break; bookmarks.push(...response_json.result.items); offset+=20; } for(let i=0; i<bookmarks.length; i++) { const bookmark = bookmarks[i].data; if (bookmark.title === 'Статья удалена') { while (true) { await delay(400); const post_data = new FormData(); post_data.append('id', bookmark.id); post_data.append('type', 1); post_data.append('referer', 'bookmarks'); const response = await fetch("https://api.dtf.ru/v2.1/unfavorite", { method: 'post', body: post_data, headers: new Headers({ 'Accept': 'application/json', 'JWTAuthorization': `Bearer ${accessToken}` }) }); let response_json = await response.json(); if (response_json?.error?.code === 401) { accessToken = await getAccessToken(); } else { break; } } } } } main();

Как запустить

  • Открыть консоль разработчика в Вашем браузере(обычно F12)
  • Вставить код
  • Запустить

Спасибо ftoh за помощь в написании скрипта

9
5
2
2
1
22 комментария