NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Last Online on VK accs (lolz.guru/market)
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Showing last seen date on Vk accounts
// @author alvkN
// @match lolz.guru/market/vkontakte/*
// @grant GM_xmlhttpRequest
// @license MIT
// ==/UserScript==
function LastSeen(){
function getLastSeen(id) {
return new Promise((resolve, reject) => {
const regex = /<ya:lastLoggedIn dc:date=.*?\/>/;
const req = new XMLHttpRequest();
req.open('GET', `https://api.allorigins.win/raw?url=${encodeURIComponent('https://vk.com/foaf.php?id=')}${id}}`, true);
req.onload = function () {
let date = new Date(regex.exec(req.responseText)[0].replace("<ya:lastLoggedIn dc:date=\"","").replace("\"/>",""));
resolve(GetFormatDate(date));
};
req.onerror = reject;
req.send();
});
}
function GetFormatDate(date)
{
const days = date.getDate();
const months = date.getMonth() + 1 < 10 ? "0" + (date.getMonth()+1) : date.getMonth()+1;
const years = date.getFullYear();
const hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
const minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
return String(hours+":"+minutes+" "+days+"."+months+"."+years);
}
function searchAccs(el) {
const accsArray = el.querySelectorAll('.marketIndexItem');
if(!accsArray) return;
accsArray.forEach((acc) => {
if(acc.checked) return;
else acc.checked = true;
renderLastSeen(acc);
});
}
async function renderLastSeen(acc) {
const id = await getId(acc);
const lastseen = await getLastSeen(id);
const title = acc.getElementsByClassName('marketIndexItem--Title')[0];
title.textContent = "["+lastseen+"] | "+title.textContent;
}
function getId(acc) {
return new Promise((resolve, reject) => {
const req = new XMLHttpRequest();
req.open('GET', `https://lolz.guru/market/${acc.id.replace('marketItem--','')}/`, true);
req.onerror = reject;
req.onload = function () {
const regex = /vk\.com\/id\d+/;
resolve(regex.exec(req.responseText)[0].replace("vk.com/id",''));
}
req.send();
});
}
window.addEventListener('load', () => {
searchAccs(document.body);
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if(mutation.target.nodeType == 1) {
searchAccs(mutation.target);
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
});
}
const script = document.createElement('script');
const code = document.createTextNode(`(${LastSeen})();`);
script.appendChild(code);
document.head.appendChild(script);