Автоматическое получение справочника БИК (Москва)

Автор:Izmajlov
Дата:28.11.2011
Просмотров:3859
Скачиваний:725
Оценка:, Оценок - 3
Скачать (zip-файл; Размер - 239363)

Обсудить в форуме

Описание

Для автоматического получения справочника БИК в МЦИ, написан скрипт (JS), который с компьютера, подключенного к интернету (обязательно) по дате получает полную базу, раскрывает архив в каталог.
Ведется лог, и в случае нештатный ситуация отсылается сообщение по емейл. В случае штатной работы - только пишется в лог.
Под Win7 можно можно этот скрипт подключить к шедулеру C:\Windows\System32\taskschd.msc.
Остается только в АБС обновить справочники.

С уважением,
Измайлов Ф.В.

Текст примера

 var fso = new ActiveXObject("Scripting.FileSystemObject");
var wsh = new ActiveXObject("WScript.Shell");

var ForReading = 1, ForWriting = 2, ForAppending = 8;
var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;

function sendMess(mess){
	var cdo = new ActiveXObject("CDO.Message");
	with(cdo){
		from="bik@mci.cbr.ru";
		to="<name@domen.ru>";
		subject=mess;
		configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")="IP or namedomen";
		configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing")=2;
		configuration.fields.update();
	}
	cdo.send();
	cdo = null;
}


var currPath = WScript.ScriptFullName.substr(0,WScript.ScriptFullName.lastIndexOf("\\"));
/* Если сущесвует прошлый файл - удаляем */
if(fso.FileExists(currPath+"\\bik.zip")){
	fso.DeleteFile(currPath+"\\bik.zip");
}
/* Заводим файл протокола работы */
var logName = currPath+"\\getBIK.log";
if(!fso.FileExists(logName)){
	fso.CreateTextFile(logName);
}

var d = new Date();
try{logFile = fso.OpenTextFile(logName,8);}catch(e){}
try{logFile.WriteLine("--------------------------");}catch(e){}
try{logFile.WriteLine(d.toLocaleString()+" - старт");}catch(e){}

strDay = ((d.getDate())<10)? "0"+(d.getDate()):(d.getDate());
strMonth = ((d.getMonth()+1)<10)? "0"+(d.getMonth()+1):(d.getMonth()+1);
fName = "bik_db_"+strDay.toString()+strMonth.toString()+d.getYear().toString()+".zip";
//fName = "bik_db_27112011.zip";

var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
//подключение
oXMLHTTP.Open("GET","http://www.cbr.ru/mcirabis/BIK/"+fName, 0);

//получение файла
oXMLHTTP.send();
var oADOStream = new ActiveXObject("ADODB.Stream");
oADOStream.Mode = 3; //разрешение на чтение и запись
oADOStream.Type = 1; //тип данных - Binary
oADOStream.Open();
oADOStream.Write(oXMLHTTP.responseBody);
//сохранение (с перезаписью файла при необходимости)
oADOStream.SaveToFile(currPath+"\\bik.zip", 2);
/* Получаем объект ФАЙЛ */
try{f = fso.getFile(currPath+"\\bik.zip");}
/* Если не получилось - то, Скорее всего  - нет связи */
catch(e){
	logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ получить файл "+fName);
	sendMess("Не удалось получить файл - "+fName);
	WScript.quit();
}

try{logFile.WriteLine(d.toLocaleString()+" - записан "+fName+" - "+f.Size+" байт");}catch(e){}
try{ts = f.OpenAsTextStream(ForReading, TristateUseDefault);
	s = ts.Read(6);
	if(s=="<html>"){
		logFile.WriteLine(d.toLocaleString()+" - Попытка получить файл за несуществующую дату "+fName);
		sendMess("Попытка получить файл за несуществующую дату - "+fName);
		WScript.quit();
	}
	ts.Close();
}
catch(e){
	logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ прочитать файл "+fName);
	sendMess("Не удалось прочитать файл - "+fName);
	WScript.quit();
}
try{
	ret = wsh.Run(currPath+"\\7za.exe e -y -bd "+f.path+" -oПутьДляРаскрытияАрхива-кПримеру c:\\sparav.mfo\\dat\\",0,true);
	if(ret==0){
		logFile.WriteLine(d.toLocaleString()+" - Разархивировали файлы из - "+fName);
	}else{
		logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ раскрыть архив (ошибка работы архиватора ) - "+ret);
		sendMess("НЕ УДАЛОСЬ раскрыть архив - (ошибка работы архиватора ) - "+ret);
		WScript.quit();
	}
}
catch(e){
	logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ раскрыть архив "+fName);
	sendMess("НЕ УДАЛОСЬ раскрыть архив - "+fName);
	WScript.quit();
}