freelance-project-34-market.../deps/greasyfork/linkedin.user.js
2024-08-11 00:30:25 +03:00

129 lines
2.6 KiB
JavaScript

// ==UserScript==
// @name data extraction linkedin
// @namespace Violentmonkey Scripts
// @match https://www.linkedin.com/*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_getValues
// @grant GM_setValues
// @grant GM_listValues
// @grant GM_deleteValue
// @grant GM_deleteValues
// @version 0.1
// @author Siarhei Siniak
// @license Unlicense
// @description 10/08/2024, 8:44:59 PM
// @inject-into document
// @require https://cdn.jsdelivr.net/npm/@violentmonkey/dom@1
// @require https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js
// @noframes
// ==/UserScript==
class Linkedin {
constructor() {
this.data = new Map();
}
async data_load() {
let self = this;
const keys = await GM_listValues();
let loaded = 0;
for (let o in keys)
{
if (!o.startsWith('data-'))
{
return;
}
self.data.set(
o.slice(5,),
await GM_getValue(o)
);
loaded += 1;
}
console.log({action: 'loaded', total: loaded});
}
string_reduce (text) {
return text.replaceAll(/\s+/gi, ' ').trim();
}
parse_header() {
let self = this;
return [
$(
'.scaffold-finite-scroll__content > div > .relative .update-components-header'
).map((i, o) => ({
header: o.innerText
})),
$(
'.scaffold-finite-scroll__content > div > .relative .update-components-actor'
).map((i, o) => {
let header = $(o);
let teaser = $(o).parents('.relative')
.parent().find('.feed-shared-update-v2__description-wrapper');
return {
header: self.string_reduce(header.text()),
teaser: self.string_reduce(teaser.text()),
};
})
]
}
data_add (entry) {
let self = this;
if (self.data.has(entry.header))
{
return;
}
self.data.set(entry.header, {
entry: entry,
ts: (new Date()).valueOf(),
});
GM_setValue(
'data-' + entry.header,
self.data.get(entry.header)
).then(() => {console.log('saved ' + entry.header)});
console.log(self.data.get(entry.header));
}
document_on_changed () {
let self = this;
let current_data = self.parse_header();
current_data[0].each((i, o) => {
self.data_add(o);
});
current_data[1].each((i, o) => {
self.data_add(o);
});
}
listener_add() {
let self = this;
return VM.observe(
document.body,
() => {
self.document_on_changed();
}
);
}
}
const l = new Linkedin();
(async () => {
await l.data_load();
const disconnect = l.listener_add();
})();