[Скрипты]Чистим подписки от удаленных аккаунтов и закладки от удаленных статей
Код скрипта
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 за помощь в написании скрипта
22 комментария