Скрипт добавляет возможность сбора кадастровых номеров помещений с ЛК Росреестра без авторизации и пагинации. Кнопка “быстрый поиск” осуществляет именно быстрый поиск по адресу и используется чаще всего для выявления эталонного значения адреса. Кнопка “полный поиск” производит определенное количество запросов к Росреестру что в свою очередь позволяет получить более 100 объектов кадастрового учета поисковой выдаче. В таблицу не попадают погашенные кадастровые номера, только актуальные и уникальные значения номеров.
// ==UserScript==
// @name Поиск КН Росреестр
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Скрипт добавляет возможность сбора кадастровых номеров помещений с ЛК Росреестра без авторизации и пагинации. Кнопка "быстрый поиск" осуществляет именно быстрый поиск по адресу и используется чаще всего для выявления эталонного значения адреса. Кнопка "полный поиск" производит определенное количество запросов к Росреестру что в свою очередь позволяет получить более 100 объектов кадастрового учета поисковой выдаче. В таблицу не попадают погашенные кадастровые номера, только актуальные и уникальные значения номеров.
// @require https://code.jquery.com/jquery-3.7.1.min.js
// @author besfamilnij
// @match https://lk.rosreestr.ru/eservices/real-estate-objects-online
// @icon https://www.google.com/s2/favicons?domain=rosreestr.ru
// @grant none
// ==/UserScript==
var data = [];
$(document).ready(function(){
$('head').append('<style>#cad-cus-table{text-align: left;font-size: 14px;width: 100%;} #cad-cus-table thead tr{background: #d3d3d3;} #cad-cus-table td,#cad-cus-table th{padding: 3px 0px 7px 3px;border-bottom: 1px solid #000;}</style>');
setTimeout(()=>{
$('#main-page-wrapper').after('<div id="cad-cus" style="padding: 30px 150px;background: #f1f1f1;">'+
'<input id="cad-cus-text" style="display: inline-block;width: 60%;height: 50px;" class="realestateobjects-wrapper__option_input rros-ui-lib-input rros-ui-lib-block--default rros-ui-lib-input--icon-left" placeholder="Введите адрес дома..."> '+
'<button style="display: inline-block;" class="rros-ui-lib-button rros-ui-lib-button--primary" id="cad-cus-start">Полный поиск</button>'+
'<button style="display: inline-block;margin-left: 20px;min-width: 100px;" class="rros-ui-lib-button rros-ui-lib-button--primary" id="cad-cus-faststart">Быстрый поиск</button>'+
'<div id="cad-cus-info" style="width: 100%;height: 50px;opacity:0;background: #69e069;padding: 10px;margin: 10px 0px;">Инфо</div>'+
'<button id="del-non-mod" style="height: 30px;width: 400px;">Удалить значения не соответствующие эталонному в поиске</button><button id="copy-table" style="float: right;width: 315px;height: 30px;">Скопировать данные таблицы в буфер обмена</button>'+
'<span id="row-counter" style="opacity:0;display: block;text-align: center;">Строк в таблице: 123</span>'+
'<table id="cad-cus-table"><thead></thead><tbody></tbody></table>'+
'<div>');
}, 1300);
});
$(document).on('click', '#cad-cus-start', function(){
data = [];
let address = $('#cad-cus-text').val().trim();
if(address.length > 10){
let counter = prompt('Укажите пожалуйста приблизительное количество квартир в доме. От этого числа зависит результативность поиска.') * 1;
if(isFinite(counter) && counter > 0){
getAllReq(address, Math.ceil(counter / 1010 * 60));
}else{
alert('Значение должно быть числовым, повторите попытку.');
}
}else{
$('#cad-cus-start').attr('disabled', false);
}
});
$(document).on('click', '#cad-cus-faststart', function(){
data = [];
$('#cad-cus-faststart').attr('disabled', true);
let address = $('#cad-cus-text').val().trim();
if(address.length > 10){
getReq(address);
$('#cad-cus-faststart').attr('disabled', false);
}else{
$('#cad-cus-faststart').attr('disabled', false);
}
});
$(document).on('click', '#del-non-mod', function(){
delNonMod();
});
$(document).on('click', '#copy-table', function(){
copyTable();
});
function getReq(str){
let req = new XMLHttpRequest();
let url = 'https://lk.rosreestr.ru/account-back/address/search?term=' + str + '&objType=002001003000';
req.open("GET", url, true);
req.setRequestHeader('Accept', 'application/json, text/plain, */*');
req.addEventListener("load", function(e) {
data = data.concat(JSON.parse(this.response));
renderData(data);
}, false);
req.send();
}
function getAllReq(str, replays){
$('#cad-cus-info').text('Ожидайте завершения работы скрипта, это займет примерно ' + (replays * 1.2 / 60).toFixed(2) + ' минуты');
$('#cad-cus-start').attr('disabled', true);
$('#cad-cus-faststart').attr('disabled', true);
$('#cad-cus-info').css({'opacity':'1'});
for(let i=0; i<replays; i++){
setTimeout(()=>{
let req = new XMLHttpRequest();
let url = 'https://lk.rosreestr.ru/account-back/address/search?term=' + str + '&objType=002001003000';
req.open("GET", url, true);
req.setRequestHeader('Accept', 'application/json, text/plain, */*');
req.addEventListener("load", function(e) {
if(IsJsonString(this.response)){
data = data.concat(JSON.parse(this.response));
}
if(i == replays-1){
renderData(data);
$('#cad-cus-info').text('Работа скрипта завершена');
$('#cad-cus-start').attr('disabled', false);
$('#cad-cus-faststart').attr('disabled', false);
setTimeout(()=>{
$('#cad-cus-info').text();
$('#cad-cus-info').css({'opacity':'0'});
}, 3000);
}
}, false);
req.send();
}, 1010 * i);
}
}
function renderData(d){
d = uni(d);
let tableHead = '<tr><th>Номер</th><th>Адрес</th><th>Тип</th></tr>';
let tableBody = '';
let type = '';
for(let i=0; i<d.length;i++){
if(d[i].actual !== false){
switch(d[i].type) {
case 'FLAT':
d[i].type = 'Помещение';
break;
case 'OKS':
d[i].type = 'Сооружение';
break;
case 'PARCEL':
d[i].type = 'Участок';
break;
default:
d[i].type = d[i].type;
break;
}
tableBody += '<tr><td>' + d[i].cadnum + '</td><td>' + d[i].full_name + '</td><td>' + d[i].type + '</td></tr>';
}
}
$('#cad-cus-table thead').empty().append(tableHead);
$('#cad-cus-table tbody').empty().append(tableBody);
rowCount();
}
function uni(obj){
let uni = data.reduce((o, i) => {
if (!o.find(v => v.cadnum == i.cadnum)) { o.push(i); }
return o;
}, []);
return uni;
}
function IsJsonString(str) {
try { JSON.parse(str); } catch (e) { return false; }
return true;
}
function delNonMod(){
let model = $('#cad-cus-text').val();
let rows = $('#cad-cus-table tbody tr');
for(let i=0; i<rows.length;i++){
if(!$(rows[i]).html().includes(model)){
$(rows[i]).remove();
}
}
$('#del-non-mod').text('Таблица очищена от не эталонных значений!');
setTimeout(()=>{ $('#del-non-mod').text('Удалить значения не соответствующие эталонному в поиске'); }, 1500);
rowCount();
}
function copyTable(){
let htmlcode = '<table><tbody>' + $('#cad-cus-table tbody').html() + '</tbody></table>';
let blob = new Blob([htmlcode], { type: "text/html" });
navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]);
$('#copy-table').text('Данные таблицы скопированы!');
setTimeout(()=>{ $('#copy-table').text('Скопировать данные таблицы в буфер обмена'); }, 1500);
}
function rowCount(){
let rows = $('#cad-cus-table tbody tr');
$('#row-counter').text('Строк в таблице: ' + rows.length);
$('#row-counter').css({'opacity':'1'});
}
2 комментария. Оставить новый
Спасибо за Р(з)аботу ! Классно, что есть такие полезные фичи в открытом доступе)
Благодарю за оценку, рад что скрипт приносит пользу.