NEWS
Name zu Telefonnummer pharsen
-
Hallo,
denkt ihr es ist möglich, die Namen von Telefonnummern aus der Rückwärtssuche von Das Telefonbuch zu pharsen?
Zumindest immer den ersten Treffer.
Die URLs Suns ganz easy aufgebaut.
Zb
https://www.dastelefonbuch.de/Rückwärts-Suche/08003301000
wenn man die Nummer der Telekom sucht. -
@david-g und was steht dann im Quelltext?
-
Beim genannten Beispiel
telefonbuch.txtLeider zu lang für hier.
EDIT
Die Treffer fangen immer mit:<div class="name" title="Deutsche Telekom">
an. Auch wenn es mehrere gibt.
-
Mit dem Parser Adapter bekomme ich den Namen jetzt ausgelesen.
Nur bringt mir das ja leider nichts, da ich dort nur eine feste URL eingeben kann und der Adapter keine URL per sendTo oder ähnlich empfangen kann.
Bekomme ich sowas in Blockly nachgebaut?
P. S.
Wäre eine nette Funktion für den TR64 Adapter.
In den Nutzungsbedinungen von Das Telefonbuch finde ich nichts was das verbietet. -
Klar,
hab das mal eine Seitenerweiterung für das Schweizer Telefonbuch mit Spidermonkey gemacht (inklusive Download)
Kann am Wochenende mal reinschauen
-
Habe es mit ChatGPT bis hierhin geschafft.
(Im Log im Bild sieht man einmal eine gefundene Nummer und danach eine nicht gefundene Nummer)Schaffe es aber nicht, das Skript so anzupassen, dass ich eine Funktion mit Ergebnis nehmen kann. Wo dann im Ergebnis entweder der Name oder ein Fehler steht.
-
@david-g
Blockly ist nicht so meins.
Das Skript sieht schon mal gut aus mit axios und cheerio.
Wenn du das kopierst und als neues JavaScript Skript einfügst und dann mit setState den Inhalt von result einfach in einen DatenPunkt schreiben -
In das JS muss irgendwo dann ein return rein.
Wenn ich eine leere Funktion mit Ergebnis in Blockly anlege steht da
return 0;
drinnen und er gibt eine 0 aus.
Darein würde ich gerne die beiden Meldungen haben, die jetzt ja an 2 Stellen in das Log geschrieben werden). -
// Erfordert die 'axios' Bibliothek, die du installieren musst: npm install axios const axios = require('axios'); // axios soll bei keiner Antwort nach 3 Sekunden einen Fehler auswerfen und nicht ewig weiter warten axios.defaults.timeout = 3000 const cheerio = require('cheerio'); //der sollte eigentlich im Funktionsaufruf stehen das link in deinem Blockly // let link; let result = '' // URL der Webseite const url = link; try { // HTTP-Anfrage an die Webseite senden const response = await axios.get(url) // Den HTML-Inhalt der Antwort erhalten const html = response.data; // Die HTML-Inhalte mit Cheerio parsen const $ = cheerio.load(html); // Das gewünschte Element mit der Klasse 'name' auswählen und den Titelwert auslesen const title = $('.name').attr('title'); // Das Ergebnis in der Variable "result" speichern result = title; // Den Titelwert ausgeben log(result); } catch(error) { result = `Fehler beim Abrufen der Seite: ${error}` log(result, 'error'); // hoffe ich hab nicht nachricht und type vertauscht :) }; return result
-
Danke,
bei einem Treffer klappt es.
Bei einer unbekannten Nummer kommt unter result jetzt (debugbaustein als warn)12:29:54.417 warn javascript.0 (20690) script.js.Eigene_Scripte.Tests.Tel_parser: Fehler beim Abrufen der Seite: AxiosError: Request failed with status code 410
Der Ursprungscode hat da ja eine schöne Meldung ausgegeben.
-
410 Die angeforderte Ressource wird nicht länger bereitgestellt und wurde dauerhaft entfernt.
https://de.wikipedia.org/wiki/HTTP-Statuscode
btw. du solltest das nicht laufend prüfen, irgendwann kommst du auf ne banliste wegen bot
-
@david-g sagte
Code 410
Wenn du die selbe Telefonnummer über den Browser anfragst, was kommt da für eine Meldung?
Du solltest dem axios auf jeden Fall einen User-Agent header eines browsers mitgeben,
Sonst wird die abfrage leicht identifiziert das sie von einem Skript kommt.
Dann könnte die ip recht schnell gesperrt werden.
Auch würde ich die Ergebnisse cachen und die Anzahl der Abfragen pro Tag begrenzen.Ggfs mal im Browser nachschauen was da im Header noch mitgeliefert wird.;
-
@ticaki sagte in Name zu Telefonnummer pharsen:
410 Die angeforderte Ressource wird nicht länger bereitgestellt und wurde dauerhaft entfernt.
https://de.wikipedia.org/wiki/HTTP-Statuscode
btw. du solltest das nicht laufend prüfen, irgendwann kommst du auf ne banliste wegen bot
So oft werde ich ja nicht angerufen ^^.
@oliverio sagte in Name zu Telefonnummer pharsen:
Du solltest dem axios auf jeden Fall einen User-Agent header eines browsers mitgeben,
Sonst wird die abfrage leicht identifiziert das sie von einem Skript kommt.
Dann könnte die ip recht schnell gesperrt werden.
Auch würde ich die Ergebnisse cachen und die Anzahl der Abfragen pro Tag begrenzen.
Ggfs mal im Browser nachschauen was da im Header noch mitgeliefert wird.;Da bin ich überfragt.
Weist du, was ich noch einfügen muss?Vom zusammengooglen würde ich sagen, dass ich das noch einbauen muss:
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '; const headers = { 'User-Agent': userAgent, // Weitere benutzerdefinierte Header, falls erforderlich };
Passt das so?
Nicht, dass das unplausibel ist und man noch schneller geblockt wird. -
Du schaust mit f12 in die Developer Tools deines Browsers.
Dann in den Netzwerk tab
Dann machst du irgendeine Web Abfrage
Und schaust dir irgend einen request an
Da stehen dann die request und die respond headers irgendwo
Bei request header müsste dann einer mit dem Namen user-agent sein.
Den kopierst du und spendest ihn mit axios bei deiner Anfrage mit.
Wie, das kann dir chatgpt oder die Doku von axios sagen -
-
@david-g
? -
@oliverio
Passt das? (kleine Handytastatur)@david-g sagte in Name zu Telefonnummer pharsen:
Vom zusammengooglen würde ich sagen, dass ich das noch einbauen muss:
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '; const headers = { 'User-Agent': userAgent, // Weitere benutzerdefinierte Header, falls erforderlich };
Passt das so?
Nicht, dass das unplausibel ist und man noch schneller geblockt wird.EDIT
Und hier muss wohl noch was angepasst werden:const response = await axios.get(url, { headers });
-
Hab das Skript jetzt so weit fertig.
Bei einem Anruf wird die Telefonnummer vom TR64 Adapter genommen und mir das Ergebnis per Telegramm gesendet.
Falls eine Durchwahl anruft, die nicht im Telefonbuch steht, wird versucht ein 1000er, 100er oder 10er Rufnummernblock aufzulösen und mit der -0 zu ersetzen.
So bekommt man in vielen Fällen zumindest die Nummer der Zentrale aufgelöst.Hab das heute bestimmt schon 30x laufen lassen und wurde noch nicht geblockt.
-
@david-g
Er sieht ein wenig kurz aus.
Beim iPad sieht er so ausMozilla/5.0 (iPad; CPU OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/116.0.5845.118 Mobile/15E148 Safari/604.1
-
Ja, hab ihn zwischenzeitlich korrigiert:
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';
Ist aber ein Beispiel was ich so online gefunden habe.