Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Parser Ergebnis aus interner Url

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Parser Ergebnis aus interner Url

    This topic has been deleted. Only users with topic management privileges can see it.
    • Marc_el_K
      Marc_el_K last edited by Marc_el_K

      Hallo zusammen,

      ich bekomme etwas nicht gelöst und konnte dazu auch noch keine entsprechende Frage hier im Forum finden:

      Ich habe einen Service auf meinem Raspberry installiert, auf welchem auch der iobroker mit dem Parser läuft.

      Die Seite der Config zum Service erreiche ich unter http://IP_VOM_IOBROKER:PORT/

      Auf dieser Seite steht die Versionsnummer:

      Version: 1.8.4,
      

      Der Quelltext zeigt an:

      info.innerText = `Version: ${data.version}, 
      

      Meine Regular Expression funktioniert leider nicht:

      Version: ([A-Za-z0-9]+(\.[A-Za-z0-9]+)+),
      

      Kann mir jemand helfen, was ich falsch mache? Vielen Dank 🙂

      Homoran OliverIO 2 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Marc_el_K last edited by

        @marc_el_k sagte in Parser Ergebnis aus interner Url:

        Meine Regular Expression funktioniert leider nicht:

        ist das

        @marc_el_k sagte in Parser Ergebnis aus interner Url:

        Der Quelltext zeigt an:

        der vollständige Quelltext?

        was willst du davon ausgeben?

        1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @Marc_el_K last edited by

          @marc_el_k

          Der parser sieht das html
          Und nicht das was angezeigt wird.
          Der Browser interpretiert das html und zeigt es an.

          Marc_el_K 1 Reply Last reply Reply Quote 0
          • Marc_el_K
            Marc_el_K @OliverIO last edited by

            @oliverio Danke, aahh das ist das Problem.

            In dem Parser Adapter gibt es auf dem Stiftsymbol die Einstellung "Analysiere HTML".

            Hier nahm ich an, dass man dieses aktiviert, wenn man anhand des Quellcodes sucht, somit hatte ich es deaktiviert und erhofft, dass dadurch der Output gelesen wird.

            Habt ihr noch eine andere Idee, wie ich an den Wert komme?

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Marc_el_K last edited by OliverIO

              @marc_el_k

              wenn du mal den quelltext posten würdest, dann könnte man dir helfen.
              es muss leider der vollständige sein, da man ansonsten das regex nicht valide aufbauen kann

              quelltext erhälst du wenn du auf der seite rechte maustaste machst und "seitenwquelltext anzeigen" auswählst.

              wenn du selbst das regex erstellen willst, dann kann man ganz gut regex101.com verwenden

              Marc_el_K 1 Reply Last reply Reply Quote 0
              • Marc_el_K
                Marc_el_K @OliverIO last edited by

                @oliverio Ja, sehr gern

                
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="utf-8">
                    <meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1, maximum-scale=1">
                    <meta http-equiv="X-UA-Compatible" content="ie=edge">
                
                    <title>go2rtc</title>
                
                    <style>
                        body {
                            font-family: Arial, Helvetica, sans-serif;
                            background-color: white;
                        }
                
                        table {
                            background-color: white;
                            text-align: left;
                            border-collapse: collapse;
                        }
                
                        table td, table th {
                            border: 1px solid black;
                            padding: 5px 5px;
                        }
                
                        table tbody td {
                            font-size: 13px;
                        }
                
                        table thead {
                            background: #CFCFCF;
                            background: linear-gradient(to bottom, #dbdbdb 0%, #d3d3d3 66%, #CFCFCF 100%);
                            border-bottom: 3px solid black;
                        }
                
                        table thead th {
                            font-size: 15px;
                            font-weight: bold;
                            color: black;
                            text-align: center;
                        }
                
                        label {
                            display: flex;
                            align-items: center;
                        }
                
                        .controls {
                            display: flex;
                            padding: 5px;
                        }
                
                        .controls > label {
                            margin-left: 10px;
                        }
                    </style>
                </head>
                <body>
                <script src="main.js"></script>
                <div class="info"></div>
                <div class="controls">
                    <button>stream</button>
                    <label><input type="checkbox" name="webrtc" checked>webrtc</label>
                    <label><input type="checkbox" name="mse" checked>mse</label>
                    <label><input type="checkbox" name="hls" checked>hls</label>
                    <label><input type="checkbox" name="mjpeg" checked>mjpeg</label>
                </div>
                <table>
                    <thead>
                    <tr>
                        <th><label><input id="selectall" type="checkbox">Name</label></th>
                        <th>Online</th>
                        <th>Commands</th>
                    </tr>
                    </thead>
                    <tbody id="streams">
                    </tbody>
                </table>
                <script>
                    const templates = [
                        '<a href="stream.html?src={name}">stream</a>',
                        '<a href="links.html?src={name}">links</a>',
                        '<a href="#" data-name="{name}">delete</a>',
                    ];
                
                    document.querySelector('.controls > button')
                        .addEventListener('click', () => {
                            const url = new URL('stream.html', location.href);
                
                            const streams = document.querySelectorAll('#streams input');
                            streams.forEach(i => {
                                if (i.checked) url.searchParams.append('src', i.name);
                            });
                
                            if (!url.searchParams.has('src')) return;
                
                            let mode = document.querySelectorAll('.controls input');
                            mode = Array.from(mode).filter(i => i.checked).map(i => i.name).join(',');
                
                            window.location.href = `${url}&mode=${mode}`;
                        });
                
                    const tbody = document.getElementById('streams');
                    tbody.addEventListener('click', ev => {
                        if (ev.target.innerText !== 'delete') return;
                
                        ev.preventDefault();
                
                        const url = new URL('api/streams', location.href);
                        const src = decodeURIComponent(ev.target.dataset.name);
                        url.searchParams.set('src', src);
                        fetch(url, {method: 'DELETE'}).then(reload);
                    });
                
                    document.getElementById('selectall').addEventListener('change', ev => {
                        document.querySelectorAll('#streams input').forEach(el => {
                            el.checked = ev.target.checked;
                        });
                    });
                
                    function reload() {
                        const url = new URL('api/streams', location.href);
                        fetch(url, {cache: 'no-cache'}).then(r => r.json()).then(data => {
                            tbody.innerHTML = '';
                
                            for (const [name, value] of Object.entries(data)) {
                                const online = value && value.consumers ? value.consumers.length : 0;
                                const src = encodeURIComponent(name);
                                const links = templates.map(link => {
                                    return link.replace('{name}', src);
                                }).join(' ');
                
                                const tr = document.createElement('tr');
                                tr.dataset['id'] = name;
                                tr.innerHTML =
                                    `<td><label><input type="checkbox" name="${name}">${name}</label></td>` +
                                    `<td><a href="api/streams?src=${src}">${online} / info</a></td>` +
                                    `<td>${links}</td>`;
                                tbody.appendChild(tr);
                            }
                        });
                    }
                
                    const url = new URL('api', location.href);
                    fetch(url, {cache: 'no-cache'}).then(r => r.json()).then(data => {
                        const info = document.querySelector('.info');
                        info.innerText = `Version: ${data.version}, Config: ${data.config_path}`;
                    });
                
                    reload();
                </script>
                </body>
                </html>
                
                
                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Marc_el_K last edited by OliverIO

                  @marc_el_k sagte in Parser Ergebnis aus interner Url:

                      const url = new URL('api', location.href);
                      fetch(url, {cache: 'no-cache'}).then(r => r.json()).then(data => {
                          const info = document.querySelector('.info');
                          info.innerText = `Version: ${data.version}, Config: ${data.config_path}`;
                      });
                  

                  evtl ist es dir selbst aufgefallen, das der gesuchte text da gar nicht auftaucht
                  er wird durch das obige skript dynamisch geladen.

                  in zeile 1 siehst du, das da eine url gebildet wird.
                  an die url, die bei dir oben in der adressleiste steht (location.href) musst du noch
                  /api dran hängen. dann nochmal seitenquelltext abrufen und hier posten

                  1 Reply Last reply Reply Quote 0
                  • Marc_el_K
                    Marc_el_K last edited by Marc_el_K

                    @oliverio Ja, das ist mir aufgefallen.

                    Danke, für den Tipp mit der api. Nun erhalte ich, folgenden Inhalt angezeigt:

                    {
                      "config_path": "/usr/local/bin/go2rtc.yaml",
                      "host": "xxx.xxx.xxx.xxx:1984",
                      "rtsp": {
                        "listen": ":8554",
                        "default_query": "video&audio",
                        "PacketSize": 0
                      },
                      "version": "1.8.4"
                    }
                    

                    Mit kann ich schon mal Zeile 9 abfragen. Kann man noch auf 1.8.4 einkürzen?

                    "[A-Za-z]+"[^"]*"[0-9]*\.[0-9]+[0-9]*\.[0-9]+"
                    

                    EDIT:

                    GEht mit

                    "version"\s*:\s*"(\d+\.\d+\.\d+)"
                    
                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    550
                    Online

                    32.0k
                    Users

                    80.4k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    289
                    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