// V1.0 - 13.07.2020: Erste Schritte für Skript
//const request = require('request');
const request = require('request/index.js');
const START_DOMAIN = 'https://kfz2.virtuelles-rathaus.de';
const START_URL = START_DOMAIN + '/igv/servlet/Internetgeschaeftsvorfaelle';
const START_PARAM = '?MANDANT=08215000&AUFRUF=WKZ';
const defaultHeader = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
'Accept-Charset': 'UTF-8',
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'
};
const NO_HIT = "'<p class='meldung'>Keine verfügbaren Kennzeichen gefunden!</p>";
const SPLIT_EINTRAG = /<div id='OPT_KENNZEICHENSUCHE_TREFFER' class='radio'>((?:.|\n|\r)*?)<div class="blaettern">/gi;
const SPLIT_KENNZ = /<span class='visibleText'>((?:.|\n|\r)*?)<\/span>/gi;
const TIMESTMP = /<div><input type='hidden' name='ZEITSTEMPEL' value='((?:.|\n|\r)*?)' \/><\/div>/i;
var empfaenger = "email@email.de";
var cookieJar = null;
var options = null;
function isAbrufOk(oper, err, stat, body) {
if (err)
log('Fehler "' + err + '" beim ' + oper, "error");
else if(body) {
if (stat.statusCode == 200)
return true;
log("Fehler " + stat.statusCode + " bei " + oper + " - " + body);
} else
log("Leere Seite bei " + oper + " (Status " + stat.statusCode + ")");
return false;
}
function sendMail(kennzeichen) {
var subject = 'Wunschkennzeichen gefunden';
var mailtext = '<font face="Calibri"><p>Gute Nachrichten,</p><p>Es gibt wieder Kenzeichen zu reservieren:</p>';
mailtext += '<p>' + kennzeichen + '</p>';
sendTo("email", {
from: "Wunschkennzeichen",
to: empfaenger,
subject: subject,
text: 'Neu: ' + kennzeichen,
html: mailtext
});
}
function checkNoHit(body) {
if (body.indexOf(NO_HIT) < 0) {
log('Meldung "kein Treffer" fehlt!');
sendMail(body);
}
}
function process_auswahl(err, stat, body) {
if (! isAbrufOk("Abruf Wunschkennzeichen", err, stat, body)) {
return;
}
SPLIT_EINTRAG.lastIndex = 0;
var result = SPLIT_EINTRAG.exec(body);
if (result) {
SPLIT_KENNZ.lastIndex = 0;
var list
var anzTreffer = 0;
var Treffer = "";
while (list = SPLIT_KENNZ.exec(result[0])) {
anzTreffer ++;
if (anzTreffer == 1)
Treffer = list[0];
else
Treffer += ", " + list[0];
}
if (anzTreffer == 0) {
log("Leere Treffermenge");
checkNoHit(body);
} else {
sendMail(Treffer);
}
} else {
log("Kein Result gefunden");
if (body.indexOf("<fieldset id='EINGABE_KENNZEICHENSUCHE_VERFUEGBAR'>") < 0)
log("Webformular nicht erkannt...");
else
checkNoHit(body);
}
}
function requestWunschkennzeichen(buchstaben, ziffern, timestmp) {
var formData = {
'WKZ_ERKENN_Z': buchstaben, // TXT_KENNZEICHENSUCHE_ERKENNUNGSZEICHEN
'WKZ_ZIFFERN': ziffern, // TXT_KENNZEICHENSUCHE_ZIFFERN
// 'WKZ_UNTERSCH_Z': 'KA', // INPUT-TXT_KENNZEICHENSUCHE_UNTERSCHEIDUNG
'WKZ_SUCHMERKMAL': "NULL", // OPT_KENNZEICHENSUCHE_BESONDERHEIT1
'BTN_WKZSUCHE': "suchen",
'ZEITSTEMPEL': timestmp
};
options.form = formData;
options.url = START_URL;
options.headers['content-type'] = 'multipart/form-data';
log("Starte Kennzeichenabfrage für KA-" + buchstaben + " " + ziffern + " ...");
request.post(options, process_auswahl);
}
function getFormTimestamp(body) {
var timestmp = TIMESTMP.exec(body);
if (timestmp)
return timestmp[1];
log("Wunschkennzeichen: Keinen Timestamp gefunden", "error");
return null;
}
function process_start_page(err, stat, body) {
if (! isAbrufOk("Start Wunschkennzeichen", err, stat, body))
return;
if (body.indexOf("name='WKZ_UNTERSCH_Z'") > 0) {
var timestmp = getFormTimestamp(body);
log("System initialisiert, Timestamp = " + timestmp);
requestWunschkennzeichen("ID", "", timestmp);
}
else {
log('Text nicht gefunden', 'error');
sendMail(body);
}
}
// *********************************** Allgemeine Start-Funktion ***************************************
function doRequest() {
cookieJar = request.jar();
var header = defaultHeader;
options = {
url: START_URL + START_PARAM,
jar: cookieJar,
headers: header
};
log("Fordere Start-Seite an...")
request(options, process_start_page);
}
doRequest(); // einmal gleich losstarten
schedule("1 6 * * *", doRequest);