Text aus Internet Seite kopieren und importieren
Hallo zusammen,
gibt es die Möglichkeit, per Button eine Internetseite zu öffnen und sämtlichen angezeigten Text auf dieser Seite automatisch in ein Textfeld in Ninox zu kopieren? Am besten so, dass man das Öffnen der Seite gar nicht mitbekommt... oder braucht man dafür andere Programmiersprachen bzw. etwas wie den Integromat?
Vielen Dank im Voraus!
12 Antworten
-
ja tatsaechlich geht das ueber eine http Abfrage ohne dass sich die Seite öffnen muss, allerdings mit Einschränkung
- Bilder werden nicht geladen
du kannst natürlich auch die URL festlegen (zB Wiki .. und nur Suchanfragen schicken)
siehe https://ninox.com/de/manual/ninox-api/http-aufrufe
hier eine einfache Umsetzung:
der Button enthält fx()
let response := http("GET", URL);
if response.error then
alert(text(response.error))
else
Text := html(response.result)
enddas Ergebnis schreibst du ein ein formatiertes Textfeld
-
Hier eine kleine Verbesserung ..... Suchfeld (mit festgelegter Quelle Wikipedia)
Ergebnis (die Bildverweise muessten manuell bereinigt werden)
-
Das ist schon ziemlich genial. Allerdings klappt es bei meiner Situation irgendwie nicht.
Ich habe folgende URL, wo das Suchfeld ein bisschen weiter unten ist. Dort gebe ich einen Ort ein und erhalte dann Erdbebeninfos zu diesem Ort.
Man landet bei dem Beispiel Leipzig, dann auf der Seite: http://www-app1.gfz-potsdam.de/pbrisk/index_ug_cms.php?ortsname=Leipzig&SuchenButton=Suchen#abfrage
Die Infos auf dieser Seite hätte ich gerne in dem formatierten Textfeld.
In der URL ändert sich also immer nur der Ortsname "...=Leipzig&Suchen..."
Ich habe also ein Textfeld "Ort" erstellt, einen Feld "Text (formatiert) und den Button mit folgendem Code:
let URL := "http://www-app1.gfz-potsdam.de/pbrisk/index_ug_cms.php?ortsname=" + Ort + "&SuchenButton=Suchen#abfrage";
let response := http("GET", URL);
if response.error then
alert(text(response.error))
else
'Text (formatiert)' := html(response.result)
endes erscheint leider der error. Weißt du, woran es liegt und wie es funktioniert? Danke dir.
-
Edit: *Ich habe folgende URL: https://www.gfz-potsdam.de/din4149_erdbebenzonenabfrage/
Da ist das Suchfeld weiter unten.
-
Obwohl auch ein Error erscheint, wenn ich deine Variante 1 zu 1 nachbaue... ganz komisch
-
Hi,
setz den Ort mal in urlEncode() - also
let URL := "http://www-app1.gfz-potsdam.de/pbrisk/index_ug_cms.php?ortsname=" + urlEncode(Ort) + "&SuchenButton=Suchen#abfrage";
let response := http("GET", URL);
if response.error then
alert(text(response.error))
else
'Text (formatiert)' := html(response.result)
end
lg, Torsten
-
... funktioniert so bei mir einwandfrei:
-
Es funktionierte die ganze Zeit. Ich habe es aus dem Browser versucht und das funktioniert nicht. Man muss es mit der App machen. Vielen Dank!
Wenn mich aus dem Ergebnis nun aber nur die "Erdbebenzone" und die "Untergrundklasse" interessieren und nicht der gesamte Text, die direkt in Felder "Erdbebenzone" und "Untergrundklasse" rein kopiert werden sollen... geht das auch?
...und für Bilder gibt es gar keine Chance?
-
die normale URL lässt keine GET Abfrage zu, aber die APP1 ... wenns läuft, ist das ein guter Schritt
wenn du selektieren möchtes, dann kommst du nicht drum rum mit der API zu arbeiten und dich einzulesen und zu pobieren
hier gibts ne Dokumentation, hatte leider noch keine Zeit mich einzulesen
https://www.gfz-potsdam.de/gts2/
lade dir Postman, damit kannst du api Abfragen testen, bevor du den Fehler bei dir im Code suchst
wie man API abgragen programmiert ist in der Ninox Doku siehe meinen ersten Link.
Du bekommst dann ein JSON Objekt als Resultat, die kannst du dann nach den jeweilgen Inhalten deine Felder beliebig füllen....
Ob das mit Bildern geht, das habe ich noch nicht versuch...
-
Wenn es Dir nur um Erdbebenzone und Untergrundklasse geht, kannst Du die Felder über Reguläre Ausdrücke (regular expressions) befüllen. Anhand von extractx(Text,"regEx","flag","gruppe") kannst Du in einem Text bestimte Strukturen suchen und extrahieren (oder mit replacex auch ersetzen). Reguläre Ausdrücke sind ein sehr komplexes Thema und sehr kryptisch - aber in diesem Fall nicht allzu kompliziert... du weißt ja wonach Du suchen willst und die Struktur ist hoffentlich immer die gleiche... also:
Erdbebenzone := extractx(text('Text (formatiert)'),"(Erdbebenzone\s)(\d)","g","$2")
Untergrundklasse := extractx(text('Text (formatiert)'),"(Untergrundklasse\s)(\w)(\.)","g","$2")
Zur Erklärung:
Du suchst mit regulären Ausdrücken nach dem Vorkommen des Wortes "Erdbebenzone". Dieses kommt im Text aber 3 mal vor, also Grenzen wir weiter ein: gefolgt von einem Leerzeichen \s wiederum gefolgt von einer beliebigen einstelligen Zahl \d - falls es auch mehrstellig sein kann müsste es \d+ sein (das plus bedeutet "eins oder mehrere"). Genial ist aber das einteilen in Gruppen anhand von Klammern - und damit auch für uns super nutzbar.
(Erdbebenzone\s) Gruppe 1
(\d) oder (\d+) Gruppe 2
und genau die Gruppe 2 holen wir uns mit der option "$2"
Sehr komplexes Thema, aber damit hab ich mir in der Ninox schon viel arbeit erspart.
Übrigens, schöne Spielwiese zum ausprobieren von Regulären Ausdrücken: https://regex101.com/
Gruß
Tobias
-
Damit es im Browser funktioniert, müssen Sie es möglicherweise verwenden "do as server" https://ninox.com/de/manual/ninox-api/http-aufrufe
Erwarten Sie in Bezug auf extractx nicht, dass das Flag "g" funktioniert https://ninox.com/en/forum/ideas-and-suggestions-5abb9f4f45eda7ea1e75ed02/please-fix-the-extract-function-so-flags-will-work-5e25440845dcf70528699a3e?post=5f35371d539bd77f590ca617&page=1
Grüße
Sean
-
Vielen Dank schon einmal an alle!
Mit einer API zu arbeiten, wäre wahrscheinlich die sauberste Lösung aber es funktioniert jetzt mit der Lösung von Tobias, da mich aktuell nur Erdbebenzone und Untergrundklasse interessieren.
Ein unschönes Problem gibt es noch. Gebe ich zuvor "Berlin" ein, dann erscheinen mehrere Orte für Berlin mit verschiedenen Zonen, sodass man im Browser dann den gewünschten Ort von Berlin anklickt und daraufhin wieder den normalen Text mit Erdbebenzone und Untergrundklasse erhält.
Mir würde es schon reichen, dass wenn ich auf "Erdbebenzone bestimmen" klicke, gecheckt wird ob im erstellten Text "mehrere" wegen "für Berlin wurden mehrere Zonen gefunden..." auftaucht und falls ja ein Popup-Fenster erscheint mit "Für den eingegebenen Ort gibt es mehrere Zonen, bitte klicke auf "Fortfahren", um Online die gewünschte Zone auszuwählen oder "Abbrechen" um den Vorgang abzubrechen. Ich weiß schon, dass es mit if und contains und einer dialog box gemacht wird aber wie funktioniert das, dass es direkt gecheckt wird, wenn ich "Erdbebenzone bestimme" klicke?
Nur in Ninox, ist das wohl ohne API nicht zu lösen, denke ich.
Content aside
- vor 4 JahrenThu, August 13, 2020 at 5:56 PM UTCZuletzt aktiv
- 12Antworten
- 1919Ansichten