Skip to content

Latest commit

 

History

History
110 lines (89 loc) · 8.21 KB

README.md

File metadata and controls

110 lines (89 loc) · 8.21 KB

mid-passport-checker

Массовая проверка статуса оформления загранпаспортов через сервис МИД РФ, для тех, кто подавал заявление на загранпаспорт за границей.

Позволяет отслеживать соседние с вашими заявления, примерно понять дату готовности паспорта и посчитать, сколько паспортов было готово за период времени.

Статистика собирается через ваш браузер, с вашего IP, через официальные сервисы МИД.

Пример таблички

Проверка паспортов на 5 лет

Для паспортов, которые проверяются через этот сервис: https://passportzu.kdmid.ru/Home/Status

При использовании этого сервиса делается запрос к странице следующего вида:

https://passportzu.kdmid.ru/Petition/GetPetitionStatus?folderId=347004700 (номер в параметре folderId заменяется на номер вашего заявления)

Массовый сбор статусов

  1. Определите диапазон ID, по которым будете собирать данные, чтобы не собирать лишнее, иначе может вылезти капча или временно заблокируют проверку с вашего IP. Для этого посмотрите, какие статусы перед вашим номером заявления (номера заявлений идут по порядку) и какой номер заявления сейчас самый последний. Выйдет примерно 100-300 заявлений.
  2. Откройте любую страницу с сайта https://passportzu.kdmid.ru. Если этого не сделать, скрипт не сработает.
  3. Откройте панель разработчика, вкладка Консоль
  4. Вставьте этот скрипт, измените параметры для запросов в первых 2 строчках (начальный и конечный номер заявления) и нажмите Enter. Остальные строчки трогать не нужно.
const start_id = 347004700;
const end_id = 347004873;

for (let i = start_id; i < end_id; i++) {
	fetch('https://passportzu.kdmid.ru/Petition/GetPetitionStatus?folderId='+i)
  		.then((response) => response.json())
  		.then(
  			(data) => {
  				let status;
  				if (data.StatusText == 'Статус заявления: дело в обработке.') status = 'дело в обработке';
  				if (data.StatusText == 'Статус заявления: паспорт готов.') status = 'паспорт готов';
  				if (data.StatusText == 'Заявление с таким номером не было сохранено на сайте.') status = '–';
  				console.log(status+"\t"+i+"\n");
  			});
}

2022-11-16_23-11-36

  1. Скопируйте вывод консоли и вставьте в текстовый редактор, например Sublime Text 3. Выводятся следующие данные: статус, номер заявления. Удалите лишний код и вставьте в таблицу. 2022-11-16_23-12-13

  2. Не рекомендую запускать проверку слишком часто, достаточно 1-2 раза в сутки.

Проверка паспортов на 10 лет

Для паспортов, которые проверяются через этот сервис: https://info.midpass.ru/

При использовании этого сервиса делается запрос к странице следующего вида:

https://info.midpass.ru/api/request_ex/83104/00003900 (83104 — id консульства, 00003900 — номер заявления)

Чтобы узнать ID вашего консульства:

  1. Откройте https://info.midpass.ru/
  2. Откройте панель разработчика. Для этого в Windows нажмите F12, в MacOS Cmd+Alt+J.
  3. Откройте вкладку Сеть
  4. На странице вбейте свои данные и нажмите Найти.
  5. Посмотрите ID консульства в запросе (см. скриншот) 2022-11-16_22-22-03

Массовый сбор статусов

  1. Определите диапазон ID, по которым будете собирать данные, чтобы не собирать лишнее, иначе может вылезти капча или временно заблокируют проверку с вашего IP. Для этого посмотрите, какие статусы перед вашим номером заявления (номера заявлений идут по порядку) и какой номер заявления сейчас самый последний. Выйдет примерно 100-300 заявлений.
  2. Откройте любую страницу с сайта https://info.midpass.ru/. Если этого не сделать, скрипт не сработает.
  3. Откройте панель разработчика, вкладка Консоль
  4. Вставьте этот скрипт, измените параметры для запросов в первых 3 строчках (id консульства, начальный и конечный номер заявления) и нажмите Enter. Остальные строчки трогать не нужно.
const consulate_id = 83104;
const start_id = 3900;
const end_id = 4182;

for (let i = start_id; i <= end_id; i++) {
	fetchRetry('https://info.midpass.ru/api/request_ex/'+consulate_id+'/0000'+i, i);
}


async function fetchRetry(url, i) {
	const RETRY_COUNT = 5;
	let count = RETRY_COUNT;
	while(count > 0) {
		try {
			return fetch(url)
				.then((response) => response.json())
				.then(
					(data) => {
						let receptionDate = data[0]?.receptionDate ?? '—';
						let passportStatus = data[0]?.passportStatus.name ?? '–';
						let internalStatus = data[0]?.internalStatus.name ?? '–';
						let percent = data[0]?.internalStatus.percent ?? '–';
						console.log(`0000${i}\t${receptionDate}\t${passportStatus}\t${internalStatus}\t${percent}`);
					})
				.catch((error) => {
					console.log(`0000${i}\t–\t–\t–\t–\tОшибка`);
					console.log(error);
				});
		} catch(error) {
		  console.log(`Ошибка retry 0000${i}:`, error);
		}
	await new Promise(r => setTimeout(r, 500));
	count -= 1;
	}

  throw new Error(`0000${i} Too many retries`);
}
  1. Скопируйте вывод консоли и вставьте в текстовый редактор, например Sublime Text 3. Выводятся следующие данные: номер заявления, дата подачи документов, статус оформления, внутренний статус, процент оформления. Удалите лишний код и вставьте в таблицу. 2022-11-16_23-16-30

  2. Не рекомендую запускать проверку слишком часто, достаточно 1-2 раза в сутки.

Для подсветки json-кода в Chrome можно поставить расширение JSON Viewer