Display additional information in VK profile

Display registration date, last profile edit and last seen in VK user profile

Fra 13.10.2017. Se den seneste versjonen.

// ==UserScript==
// @name           Display additional information in VK profile
// @name:ru        Отображение доп. информации на странице ВКонтакте
// @namespace      https://greasyfork.dpdns.org/ru/users/155145-inlifeuser
// @version        2017.10.13
// @description    Display registration date, last profile edit and last seen in VK user profile
// @description:ru Отображение даты регистрации, последнего редактирования страницы и последний заход на странице пользователя ВКонтакте
// @author         Inlifeuser
// @license        MIT
// @include        *://vk.com/*
// @exclude        *://vk.com/notifier.php*
// @exclude        *://vk.com/*widget*.php*
// @run-at         document-end
// @grant          GM_xmlhttpRequest
// @connect        vk.com
// ==/UserScript==

"use strict";
function addLeadingZeroToDate(date) {
    return ("0" + date).slice(-2);
}
function convert24HoursTo12Hours(hours) {
    hours = hours % 12;
    return hours ? hours : 12;
}
function convert24HoursToAmPmLc(hours) {
    return hours >= 12 ? "pm" : "am";
}
(function() {
    function insertToVkProfile() {
        var vkUserProfile = document.body.querySelector("#profile_short:not(.display_additional_information_in_vk_profile)");
        if (!vkUserProfile) return;
        var vkUserWall = document.body.querySelector("a.ui_tab_sel[href*=\"/wall\"]");
        if (!vkUserWall) return;
        var vkUserId = (vkUserWall.href.match(/wall(\d+)/i) || [])[1];
        if (!vkUserId) return;
        vkUserProfile.className += " display_additional_information_in_vk_profile";
        var vkPageLang = document.body.querySelector("a.ui_actions_menu_item[onclick*=\"lang_dialog\"]");
        var vkCurrentLang;
        if (vkPageLang) {
            vkCurrentLang = vkPageLang.textContent;
        } else {
		    vkCurrentLang = navigator.language.substring(0,2);
        }
        var vkLang, vkRegMonthName, vkLastSeenPlatformName;
        if (vkCurrentLang == "Language: english" || vkCurrentLang == "en") {
            vkLang = "en";
            vkRegMonthName = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
            vkLastSeenPlatformName = ["mobile website version or unofficial mobile app", "official app for iPhone", "official app for iPad", "official app for Android", "official app for Windows Phone", "official app for Windows 10", "full website version or unofficial app"];
        } else if (vkCurrentLang == "Язык: русский" || vkCurrentLang == "ru") {
            vkLang = "ru";
            vkRegMonthName = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"];
            vkLastSeenPlatformName = ["мобильная версия сайта или неофициальное мобильное приложение", "оф. приложение для iPhone", "оф. приложение для iPad", "оф. приложение для Android", "оф. приложение для Windows Phone", "оф. приложение для Windows 10", "полная версия сайта или неофициальное приложение"];
        } else {
            vkLastSeenPlatformName = ["mobile website version or unofficial mobile app", "official app for iPhone", "official app for iPad", "official app for Android", "official app for Windows Phone", "official app for Windows 10", "full website version or unofficial app"];
        }
        var i = 0;
        while (i < 3) {
            var vkUserProfileElement = document.createElement("div");
	        vkUserProfileElement.style.display = "none";
            vkUserProfile.insertBefore(vkUserProfileElement, vkUserProfile.firstChild);
		    i++;
	    }
        GM_xmlhttpRequest({
            method: "GET",
            url: "/foaf.php?id=" + vkUserId,
            onload: function(vkFoafResponse) {
                if (vkFoafResponse.status == 200) {
                    var vkFoafRegDate = (vkFoafResponse.responseText.match(/ya:created dc:date="(.+)"/i) || [])[1];
                    var vkFoafLastProfileEditDate = (vkFoafResponse.responseText.match(/ya:modified dc:date="(.+)"/i) || [])[1];
                    if (vkFoafRegDate) {
                        var vkRegDate = new Date(vkFoafRegDate);
                        var vkRegDateElement = document.createElement("div");
                        vkRegDateElement.className = "clear_fix profile_info_row";
                        if (vkLang == "en") {
                            vkRegDateElement.innerHTML = "<div class=\"label fl_l\">Registration date:</div><div class=\"labeled\">" + vkRegMonthName[vkRegDate.getMonth()] + " " + vkRegDate.getDate() + ", " + vkRegDate.getFullYear() + " at " + convert24HoursTo12Hours(vkRegDate.getHours()) + ":" + addLeadingZeroToDate(vkRegDate.getMinutes()) + ":" + addLeadingZeroToDate(vkRegDate.getSeconds()) + " " + convert24HoursToAmPmLc(vkRegDate.getHours()) + "</div>";
                        } else if (vkLang == "ru") {
                            vkRegDateElement.innerHTML = "<div class=\"label fl_l\">Дата регистрации:</div><div class=\"labeled\">" + vkRegDate.getDate() + " " + vkRegMonthName[vkRegDate.getMonth()] + " " + vkRegDate.getFullYear() + " г. " + vkRegDate.getHours() + ":" + addLeadingZeroToDate(vkRegDate.getMinutes()) + ":" + addLeadingZeroToDate(vkRegDate.getSeconds()) + "</div>";
                        } else {
                            vkRegDateElement.innerHTML = "<div class=\"label fl_l\">Registration date:</div><div class=\"labeled\">" + addLeadingZeroToDate(vkRegDate.getDate()) + "." + addLeadingZeroToDate(vkRegDate.getMonth()+1) + "." + vkRegDate.getFullYear() + " " + addLeadingZeroToDate(vkRegDate.getHours()) + ":" + addLeadingZeroToDate(vkRegDate.getMinutes()) + ":" + addLeadingZeroToDate(vkRegDate.getSeconds()) + "</div>";
                        }
                        vkUserProfile.replaceChild(vkRegDateElement, vkUserProfile.childNodes[0]);
                    } else {
                        console.info("Registration date on VK FOAF profile is empty or unavailable");
                    }
                    if (vkFoafLastProfileEditDate) {
                        var vkLastProfileEditDate = new Date(vkFoafLastProfileEditDate);
                        var vkLastProfileEditDateElement = document.createElement("div");
                        vkLastProfileEditDateElement.className = "clear_fix profile_info_row";
                        if (vkLang == "en") {
                            vkLastProfileEditDateElement.innerHTML = "<div class=\"label fl_l\">Last profile edit:</div><div class=\"labeled\">" + vkRegMonthName[vkLastProfileEditDate.getMonth()] + " " + vkLastProfileEditDate.getDate() + ", " + vkLastProfileEditDate.getFullYear() + " at " + convert24HoursTo12Hours(vkLastProfileEditDate.getHours()) + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getSeconds()) + " " + convert24HoursToAmPmLc(vkLastProfileEditDate.getHours()) + "</div>";
                        } else if (vkLang == "ru") {
                            vkLastProfileEditDateElement.innerHTML = "<div class=\"label fl_l\">Посл. ред. стр.:</div><div class=\"labeled\">" + vkLastProfileEditDate.getDate() + " " + vkRegMonthName[vkLastProfileEditDate.getMonth()] + " " + vkLastProfileEditDate.getFullYear() + " г. " + vkLastProfileEditDate.getHours() + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getSeconds()) + "</div>";
                        } else {
                            vkLastProfileEditDateElement.innerHTML = "<div class=\"label fl_l\">Last profile edit:</div><div class=\"labeled\">" + addLeadingZeroToDate(vkLastProfileEditDate.getDate()) + "." + addLeadingZeroToDate(vkLastProfileEditDate.getMonth()+1) + "." + vkLastProfileEditDate.getFullYear() + " " + addLeadingZeroToDate(vkLastProfileEditDate.getHours()) + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getSeconds()) + "</div>";
                        }
                        vkUserProfile.replaceChild(vkLastProfileEditDateElement, vkUserProfile.childNodes[1]);
                    } else {
                        console.info("Last profile editing date on VK FOAF profile is empty or unavailable");
                    }
                } else {
                    console.error("Failed to get VK FOAF profile (registration date and last profile edit date): " + vkFoafResponse.status + " " + vkFoafResponse.statusText);
                }
            },
            onerror: function() {
                console.error("Failed to get VK FOAF profile (registration date and last profile edit date)");
            }
        });
        GM_xmlhttpRequest({
            method: "GET",
            url: "https://api.vk.com/method/users.get?user_ids=" + vkUserId + "&fields=last_seen&v=5.68",
            onload: function(vkApiUsersGetResponse) {
                if (vkApiUsersGetResponse.status == 200) {
                    var vkApiUsersGetObject = JSON.parse(vkApiUsersGetResponse.responseText);
                    var vkLastSeenUnixtime = vkApiUsersGetObject.response[0].last_seen.time;
                    if (vkLastSeenUnixtime) {
                        var vkLastSeenDate = new Date(vkLastSeenUnixtime*1000);
                        var vkLastSeenDateElement = document.createElement("div");
                        vkLastSeenDateElement.className = "clear_fix profile_info_row";
                        var vkLastSeenPlatform = vkApiUsersGetObject.response[0].last_seen.platform;
                        if (vkLang == "en") {
                            vkLastSeenDateElement.innerHTML = "<div class=\"label fl_l\">Last seen:</div><div class=\"labeled\">" + vkRegMonthName[vkLastSeenDate.getMonth()] + " " + vkLastSeenDate.getDate() + ", " + vkLastSeenDate.getFullYear() + " at " + convert24HoursTo12Hours(vkLastSeenDate.getHours()) + ":" + addLeadingZeroToDate(vkLastSeenDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastSeenDate.getSeconds()) + " " + convert24HoursToAmPmLc(vkLastSeenDate.getHours()) + " (" + vkLastSeenPlatformName[vkLastSeenPlatform-1] + ")</div>";
                        } else if (vkLang == "ru") {
                            vkLastSeenDateElement.innerHTML = "<div class=\"label fl_l\">Последний заход:</div><div class=\"labeled\">" + vkLastSeenDate.getDate() + " " + vkRegMonthName[vkLastSeenDate.getMonth()] + " " + vkLastSeenDate.getFullYear() + " г. " + vkLastSeenDate.getHours() + ":" + addLeadingZeroToDate(vkLastSeenDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastSeenDate.getSeconds()) + " (" + vkLastSeenPlatformName[vkLastSeenPlatform-1] + ")</div>";
                        } else {
                            vkLastSeenDateElement.innerHTML = "<div class=\"label fl_l\">Last seen:</div><div class=\"labeled\">" + addLeadingZeroToDate(vkLastSeenDate.getDate()) + "." + addLeadingZeroToDate(vkLastSeenDate.getMonth()+1) + "." + vkLastSeenDate.getFullYear() + " " + addLeadingZeroToDate(vkLastSeenDate.getHours()) + ":" + addLeadingZeroToDate(vkLastSeenDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastSeenDate.getSeconds()) + " (" + vkLastSeenPlatformName[vkLastSeenPlatform-1] + ")</div>";
                        }
                        vkUserProfile.replaceChild(vkLastSeenDateElement, vkUserProfile.childNodes[2]);
                    } else {
                        console.info("Last seen date and platform on VK API profile is empty or unavailable");
                    }
                } else {
                    console.error("Failed to get VK API profile (last seen date and platform): " + vkApiUsersGetResponse.status + " " + vkApiUsersGetResponse.statusText);
                }
            },
            onerror: function() {
                console.error("Failed to get VK API profile (last seen date and platform)");
            }
        });
    }
    new MutationObserver(insertToVkProfile).observe(document.body, {childList: true, subtree: true});
})();
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元