// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Script fuer den automatischen Download von Titeldaten aus dem CBS // // Historie: // 15-12-2009 js: created // 16-12-2009 js: added boolean _CONNECT_PER_SESSION to have a // choice between connect per session or per download // 04-01-2010 js: date-calculation corrected // // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++ // +++++ AUTO START +++++ __startProcedure() // ++++++++++++++++++++++++++++ // Functions: // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // function __check_next_ym: return next YearMonth // function __connect: connect CBS-Host, return boolean // function __last_month: return last month // function __last_year: return last year // function __message: create messagebox // function __startProcedure: main procedure for automatic download // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ function __check_next_ym(y, m) { var year = y; var month = m; year = (month == "12") ? String(parseInt(year,10) + 1) : year; month = (month == "12") ? "01" : String(parseInt(month,10) + 1); month = (month.length == 1) ? "0" + month : month; return(year + month); } function __connect(host, port, account, passwd, connect) { var connection; if (connect) { // try to connect connection = application.connect(host, port); if (connection) { application.activeWindow.variable("P3VUN") = account; application.activeWindow.variable("P3VWW") = passwd; // Press 3x the key to login application.activeWindow.simulateIBWKey("FR"); // Press the key to select "KAT" application.activeWindow.simulateIBWKey("FR"); // Press the key to select "GVK-Katalogisierung" application.activeWindow.simulateIBWKey("FR"); } } else connection = false; // __message("connect: " + connection); return(connection); } function __last_month(m) { var month = m; month = (month == "01") ? "12" : String(parseInt(month,10) -1); month = (month.length == 1) ? "0" + month : month; return(month); } function __last_year(y) { return(String(parseInt(y,10) -1)); } function __message(txt) { application.messageBox("Hinweis", txt, "message-icon"); } function __startProcedure() { // -------------------------------------------- // __startProcedure() run automatic by starting WINIBW30 // -------------------------------------------- // Ablauf: // 1 - Host connect // 2 - Monatlicher Download // am 2.(16.Vormonat-1.akt.Monat) // am 16. (2.aktMonat bis 15.akt.Monat) // -------------------------------------------- // Ausfuehrung: // Ueber Windows Scheduler nach Abschluss taegl.Katalogisierung 22:00 // -------------------------------------------- // Offene Probleme: // 1. Wenn keine Treffer sind (f sel dat1 bis dat2), dann stoppt // ein Dialogfenster das Script und das Script kann nicht weiter // ausgefuehrt werden // 2. Das Script kann ueber den Aufruf startProzedur() // automatisch mit der WINIBW30 gestartet werden, // aber es gibt keine Moeglichkeit, aus dem Script // heraus die WINIBW30 zu beenden (etwa per // Tastenbelegung Funktionstaste F4 mit Beenden und // Ausfuehren von application.activeWindow.simulateIBWKey("F4");) // 3. Bei Ausfuehrung vieler Downloads bindet die WINIBW // Arbeitsspeicher und wird langsam in der Ausfuehrung // -------------------------------------------- // Lösung: // Externes Kill ueber Windows-Scheduler auf WINIBW30 Prozess // nach ausreichender Zeit (pskill WINIBW30) // -------------------------------------------- // ++++++++++++++ DIESE PARAMETER MUESSEN GESETZT WERDEN +++++++++++++++++++++ // Connection Parameter var _HOST = "host.gbv.de"; // Host CBS var _PORT = "9998-9999"; // Ports CBS var _ACCOUNT = "account"; // Benutzer var _PASSWD = "geheim"; // Passwort var _CONNECT_PER_SESSION = false; // Connect host per session or per download // (per download is more stable!) // Download Parameter var _DOWNLOAD_DIR = "E:\\Usr\\lbs\\Uni_bibliographie\\daten\\"; // Directory fuer Downloadfile var _WINDIR = "C:\\Windows\\"; // Windows Directory var _SELCODE = "xv"; // Selectionscode 70xx // Datumsangaben var _FROM_YEAR = "2009"; // Startjahr Download var _FROM_MONTH = "11"; // Startmonat Download // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Hinweis zum Downloadverzeichnis: // -------------------------------- // ACHTUNG - nach \ immer grosses U, da sonst Unicode ! // Ein Download direkt auf einen Webserver per UNC-Pfad ist moeglich: // var _DOWNLOAD_DIR = "\\\\UB1DV001\\e$\\xampp\\htdocs\\Ubwikiext\\Uploads\\Uni_bibliographie\\daten\\"; // var _DOWNLOAD_DIR = "E:\\Usr\\lbs\\Uni_bibliographie\\daten\\"; // DOWNLOAD LOKAL (wesentlich schneller) // Variablen fuer Download var _SETSIZE; // Setgroesse var _STATUS; // Status var _DOWNLOAD_FORMAT; // p = PICA+; d = PICA3 var _DWLFILE = utility.newFileInput(); // Download-Filecheck var _FILENAME; // Name des Downloadfiles // Datumsangaben var _NOW = new Date(); // Aktuelles Datum ermitteln var _YYYY = String(_NOW.getFullYear()); var _MM = (_NOW.getMonth() +1 < 10) ? "0" + String(_NOW.getMonth() +1) : String(_NOW.getMonth() +1); var _DD = (_NOW.getDate()<10) ? "0" + String(_NOW.getDate()) : String(_NOW.getDate()); // weitere Datumsangaben var _TODAY = _YYYY + _MM + _DD; // aktuelles Datum var _START_YEAR; // Startjahr Download var _START_MONTH; // Startmonat Download var _END_YEAR; // Endjahr Download var _END_MONTH; // Endmonat Download var _DWL_16bis02; // Endmonat Download in Folgemonat true/false var _YM; // Jahr+Monat Download var _NEXT_MONTH; // Naechster Monat Download var _NEXT_YEAR; // Naechstes Jahr Download // Sonstige Variablen var i; // Zaehler var j; // Zaehler // ++++++++++++++++++++++++++++ // +++++ PROGRAMM START +++++ // ++++++++++++++++++++++++++++ if ( __connect(_HOST, _PORT, _ACCOUNT, _PASSWD, _CONNECT_PER_SESSION) || !_CONNECT_PER_SESSION) { // Formatzaehler fuer Download pica3 und pica+ for (j=1; j<3; j++) { _DOWNLOAD_FORMAT = (j==1) ? "p" : "d"; // Download ueber mehrere Jahre - vorhandene Downloads werden uebersprungen (filecheck) _START_YEAR = _FROM_YEAR; // Startjahr Download _START_MONTH = _FROM_MONTH; // Startmonat Download _END_MONTH = (parseInt(_DD,10) > 15) ? _MM : __last_month(_MM); //Endmonat Download _END_YEAR = ((_END_MONTH == 12) && (_MM == 1)) ? __last_year(_YYYY) : _YYYY; // Endjahr Download _DWL_16bis02 = (parseInt(_DD,10) > 1) && (_END_YEAR + _END_MONTH < _YYYY + _MM); // Endmonat Download in Folgemonat _YM = _START_YEAR + _START_MONTH; // Jahr+Monat Download while ( _YM <= _END_YEAR + _END_MONTH) { // __message("Download _YM/Format: " + _YM + "/" + _DOWNLOAD_FORMAT); // +++ Download Startmonat 2. bis 15. +++ _FILENAME = "dwl" + _START_YEAR + _START_MONTH + "02-15" + _DOWNLOAD_FORMAT; // check, ob download file schon vorhanden if (! _DWLFILE.open(_DOWNLOAD_DIR + _FILENAME + ".txt")) { // __message("Download-File: " + _DOWNLOAD_DIR + _FILENAME + ".txt"); if ( __connect(_HOST, _PORT, _ACCOUNT, _PASSWD, !_CONNECT_PER_SESSION) || _CONNECT_PER_SESSION) { // evt. vorhandenes tmp-File loeschen application.shellExecute("file:///" + _WINDIR + "system32\\cmd.exe", 6, "open", "/c del " + _DOWNLOAD_DIR + _FILENAME + ".tmp"); // Download-File in user_pref.js eintragen application.writeProfileString("winibw.filelocation", "download", "file:///" + _DOWNLOAD_DIR + _FILENAME + ".tmp"); // __message("f sel " + "02-" + _START_MONTH + "-" + _START_YEAR + " bis " + // "15-" + _START_MONTH + "-" + _START_YEAR + " " + _SELCODE); application.activeWindow.command("f sel " + "02-" + _START_MONTH + "-" + _START_YEAR + " bis " + "15-" + _START_MONTH + "-" + _START_YEAR + " " + _SELCODE, false); // Setgroesse ermitteln _SETSIZE = application.activeWindow.variable("P3GSZ"); // __message("_SETSIZE: " + _SETSIZE); if (_SETSIZE > 0 ){ // Download ausfuehren for (i=1; i <= _SETSIZE; i++) { application.activeWindow.command("dow " + i + " " + _DOWNLOAD_FORMAT, false); } } if (!_CONNECT_PER_SESSION) { application.activeWindow.closeWindow(); application.activeWindow.closeWindow(); } // tmp-File erst nach abgeschlossenem Download umbenennen application.shellExecute("file:///" + _WINDIR + "system32\\cmd.exe", 6, "open", "/c rename " + _DOWNLOAD_DIR + _FILENAME + ".tmp " + _FILENAME + ".txt"); } // else { __message("cannot connect host: " + _HOST); } } else { _DWLFILE.close(); // __message(_FILENAME + " schon vorhanden !"); } // +++ Download Startmonat 16. bis 1. Folgemonat +++ _FILENAME = "dwl" + _START_YEAR + _START_MONTH + "16-01" + _DOWNLOAD_FORMAT; // check, ob download file schon vorhanden if ((! _DWLFILE.open(_DOWNLOAD_DIR + _FILENAME + ".txt")) && (_START_MONTH < _MM || _DWL_16bis02)) { // __message("Download-File: " + _DOWNLOAD_DIR + _FILENAME + ".txt"); if ( __connect(_HOST, _PORT, _ACCOUNT, _PASSWD, !_CONNECT_PER_SESSION) || _CONNECT_PER_SESSION) { // evt. vorhandenes tmp-File loeschen application.shellExecute("file:///" + _WINDIR + "system32\\cmd.exe", 6, "open", "/c del " + _DOWNLOAD_DIR + _FILENAME + ".tmp"); // Download-File in user_pref.js eintragen application.writeProfileString("winibw.filelocation", "download", "file:///" + _DOWNLOAD_DIR + _FILENAME + ".tmp"); // __message("f sel " + "16-" + _START_MONTH + "-" + _START_YEAR + // " bis " + "01-" + __check_next_ym(_START_YEAR, _START_MONTH).substring(4,7) // + "-" + __check_next_ym(_START_YEAR, _START_MONTH).substring(0,4) + " " + _SELCODE); application.activeWindow.command("f sel " + "16-" + _START_MONTH + "-" + _START_YEAR + " bis " + "01-" + __check_next_ym(_START_YEAR, _START_MONTH).substring(4,7) + "-" + __check_next_ym(_START_YEAR, _START_MONTH).substring(0,4) + " " + _SELCODE, false); // Setgroesse ermitteln _SETSIZE = application.activeWindow.variable("P3GSZ"); // __message("_SETSIZE: " + _SETSIZE); if (_SETSIZE > 0 ){ // Download ausfuehren for (i=1; i <= _SETSIZE; i++) { application.activeWindow.command("dow " + i + " " + _DOWNLOAD_FORMAT, false); } } if (!_CONNECT_PER_SESSION) { application.activeWindow.closeWindow(); application.activeWindow.closeWindow(); } // tmp-File erst nach abgeschlossenem Download umbenennen application.shellExecute("file:///" + _WINDIR + "system32\\cmd.exe", 6, "open", "/c rename " + _DOWNLOAD_DIR + _FILENAME + ".tmp " + _FILENAME + ".txt"); } // else { __message("cannot connect host: " + _HOST); } } else { _DWLFILE.close(); // __message(_FILENAME + "schon vorhanden !"); } // weiter im Datum _YM = __check_next_ym(_START_YEAR, _START_MONTH); _START_YEAR = _YM.substring(0,4); _START_MONTH = _YM.substring(4,7); // __message("Next: " + _YM); } // end of while loop } // end of formatzaehler j } // end of connect per session if (_CONNECT_PER_SESSION) application.activeWindow.closeWindow(); // Press the key to close the WINIBW30 // F4 vorher dem Befehl "Beenden" zuweisen // Funktioniert leider nicht ! // application.activeWindow.simulateIBWKey("F4"); // Protokollieren per E-Mail // application.shellExecute("file:///C:/Soft/tools/wmailto.exe", 6, "open", "-sBIBLIOGRAPHIE:WINIBW-Download -cub-iuk@ub.uni-rostock.de -fUB1LB001"); // EXTERNES kill-kommando zur Sicherheit, falls WINIBW30 haengt ! // PSTOOLS: http://technet.microsoft.com/de-de/sysinternals/bb896649.aspx // application.shellExecute("file:///C:/Soft/Tools/pskill.exe", 6, "open", "WinIBW30"); }