Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Skript für Abfrage Wunschkennzeichen

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Skript für Abfrage Wunschkennzeichen

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sneak-L8 last edited by

      Hallo zusammen,

      ich habe mir ein kleines Skript geschrieben, um nicht selbst täglich nach einem Wunschkennzeichen zu schauen. Das blöde: es tut nicht 😞 .
      Ich habe mir die übertragenen Formulardaten und Header angesehen und versucht, es so gut es geht nachzubauen, aber mir scheint, dass der Server nicht merkt, dass es sich um einen Folgeaufruf handelt.

      Könnt Ihr mal einen Blick drauf werfen:

      // 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&uuml;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);
      

      Da es ja keine App ist sondern nur eine Website sollte man aus dem Seitenquelltext ja alles entdecken. Und das sind ein paar Formularwerte und Header-Angaben.
      Was mache ich falsch?

      Viele Grüße
      Sneak-L8

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      1.0k
      Online

      32.1k
      Users

      80.7k
      Topics

      1.3m
      Posts

      1
      1
      429
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo