NEWS
Parser Ergebnis aus interner Url
-
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
-
@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?
-
Der parser sieht das html
Und nicht das was angezeigt wird.
Der Browser interpretiert das html und zeigt es an. -
@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?
-
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 kannquelltext 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
-
@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>
-
@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 -
@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+)"