Irgendwie war ich die regelmäßig notwendigen Änderungen hinsichtlich der diversen Rückwärtssuchen der einschlägigen Anbieter leid und habe mein Heil nun in der API von Klicktel gesucht. Ich hoffe eine API wird weniger häufig geändert als das Antwortformat der Webseiten an sich.
Wenn man registriert ist den Account bestätigen und einloggen.
Unter „Statistiken“ auf konfigurieren klicken.
Unter URL, Name und Beschreibung etwas nach Eurer Wahl eintragen.
Nutzungsbedingungen und Datenschutzerklärung akzeptieren.
Euren Key eintragen.
Auf „Code erzeugen“ klicken.
Danach haben sich die Beispiel-Links unter Punkt 4 entsprechend Eurer Angaben geändert. Interessant für uns ist der Link unter der Überschrift "Rufnummer-Suche den wir kopieren und vom Grundsatz her in folgendes Beispiel-Skript übernehmen. Key und Rufnummer sind in dem Link natürlich gegen die entsprechenden Variablen auszutauschen.
<?
// Den Key bekommt man wenn man sich für die Klicktel-API registrieren lässt
$Key = 'blablasabbelbluppbluppsalbaderblabla';
// Die Rufnummer nach deren Besitzer gesucht wird
$Rufnummer = "030184000";
// Ab hier nichts mehr ändern.
$Name = "Anruf von unbekanntem Anrufer.";
$Data = file_get_contents("http://openapi.klicktel.de/searchapi/invers?key=$Key&number=$Rufnummer");
if($Data) $Json = json_decode($Data);
if (isset($Json->response->results[0]->entries[0]->displayname)) {
$Name = "Anruf von ".($Json->response->results[0]->entries[0]->displayname);
}
echo $Name."
";
?>
Die API gibt übrigens noch mehr Angaben her als nur den Namen des Anrufers. Schaut einfach mal in das Array rein was Ihr sonst noch so brauchen könnt.
Das war es schon. Überraschend einfach und kurz und wie ich hoffe langlebiger als das parsen einer Webseite…
Von: Beer, Katja <Katja.Beer@11880.com>
Gesendet: Donnerstag, 15. Februar 2018 08:29
An: Beer, Katja
Betreff: Klicktel Open API
Sehr geehrter Open API User,
wir müssen Ihnen leider mitteilen, dass unser Open API Dienst ab dem 31. März 2018 nicht mehr zur
Verfügung stehen wird.
In den letzten Jahren haben sich die rechtlichen Bestimmungen zur Datenvermarktung in der
Europäischen Union weiter verschärft und werden sich weiter verschärfen, dass wir das Open API
Produkt zukünftig nicht mehr anbieten werden.
Aus diesen Gründen kann ich Ihnen auch kein alternatives Produkt im Bereich der Online
Datenbereitstellung anbieten.
Wir möchten Ihnen für Ihr Vertrauen in unsere Datenqualität in den letzten Jahren danken.
Mit freundlichen Grüßen
Katja Beer
Mit freundlichen Grüßen
i.V. Katja Beer
Senior Product Manager B2C Media
11880 Internet Services AG
Kruppstraße 74
45145 Essen
T +49 201 8099127
M
Katja.Beer@11880.com
11880.com - Da werden Sie geholfen.
11880 Internet Services AG
Hauptsitz Essen
Handelsregister HRB 20157
Amtsgericht Essen
Vorstand Christian Maar
Aufsichtsratsvorsitzender Jörn Hausmann
Diese E-Mail hat mich heute erreicht. Ich hab die API über ein Skript bei jedem Telefonanruf aufgerufen und das hat bisher sehr gut funktioniert.
Was wirklich hinter der Einstellung steckt weiß ich nicht. Unternehmen begründen ja häufig irgendwelche Rationalisierungsmaßnahmen oder Einsparungen mit gesetzlichen Vorgaben. In letzter Zeit wurde ich von diesbezüglichen unverständlichen und verbraucherfeindlichen Gerichtsurteilen überrascht (z.B.: DWD muß App kostenpflichtig machen, ARD darf ein Verbrauchermagazin nicht mehr herausgeben).
Ohne jetzt die 88 Seiten der EU-Verordnung „gelesen“ zu haben, kann es sich ja im vorliegenden Fall nur um die sog. Inverssuche oder auch Rückwärtssuche zu handeln, und die ist laut Wikipedia nicht generell verboten. Eben nur da, wo der Einzelne widersprochen hat.
Wahrscheinlich hat da irgend ein Hausjurist kalte Füsse nach dem Motto „lieber vorauseilend einstellen als einmal in einen Prozess verwickelt zu werden“ sein Veto eingelegt.
Irgendwie muß ich ja als ebenfalls „schützungswürdige Person“ diese idiotischen Anrufe von irgendwelchen „Marktforschungsunternehmen“ abwehren können. Mein eigener Schutz ist mir eigentlich wichtiger als der Schutz der „Personenbezogenen Daten“ dieser Belästiger.
ich nutze die API auch und habe das gleiche E-Mail bekommen. Wie auch immer, es wird ja wohl abgestellt. Gibt’s denn dazu alternativen, die man ebenfalls relativ leicht im IPS integrieren kann? Wenn jemand Tipps hat schon mal danke im Voraus.
Ich nutze nun „DasÖrtliche“ mit folgender Funktion:
function QueryDasOertlicheDe($Rufnummer) {
$record = false;
$url = "http://www.dasoertliche.de/Controller?form_name=search_inv&ph=$Rufnummer";
# Create a DOM parser object
$dom = new DOMDocument();
# Parse the HTML from dasoertliche
# The @ before the method call suppresses any warnings that
# loadHTMLFile might throw because of invalid HTML or URL.
@$dom->loadHTMLFile($url);
if ($dom->documentURI == null)
{
IPSLogger_Wrn('Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$url);
return false;
}
$finder = new DomXPath($dom);
$classname="hit clearfix ";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), '$classname')]");
if ($nodes->length == 0) return false;
$cNode = $nodes->item(0); //div left
if ($cNode->nodeName != 'div') return false;
if (!$cNode->hasChildNodes()) return false;
$ahref = $cNode->childNodes->item(1);
if (!$ahref->hasChildNodes()) return false;
foreach ($ahref->childNodes as $div)
{
if ($div->nodeName == "a" ) break;
}
$record = array(
'Name' => utf8_encode(trim(utf8_decode($div->nodeValue), "
\r\0\xa0"))
);
return $record;
}
Die Funktion habe ich mir zusammenkopiert und angepasst. Leider habe ich nicht viel Ahnung von Dom und Zeichensätzen. Beim Anblick der Funktion sträuben sich mir zwar die Haare, aber sie funktioniert.
Vielleicht kann sie einer gebrauchen oder auch verbessern …
function QueryDasOertlicheDe($Rufnummer) {
$record = false;
$url = "http://www.dasoertliche.de/Controller?form_name=search_inv&ph=$Rufnummer";
# Create a DOM parser object
$dom = new DOMDocument();
# Parse the HTML from dasoertliche
# The @ before the method call suppresses any warnings that
# loadHTMLFile might throw because of invalid HTML or URL.
@$dom->loadHTMLFile($url);
if ($dom->documentURI == null)
{
IPSLogger_Wrn('Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$url);
return false;
}
$finder = new DomXPath($dom);
$classname="hit clearfix ";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), '$classname')]");
if ($nodes->length == 0) return false;
$cNode = $nodes->item(0); //div left
if ($cNode->nodeName != 'div') return false;
if (!$cNode->hasChildNodes()) return false;
$ahref = $cNode->childNodes->item(1);
if (!$ahref->hasChildNodes()) return false;
foreach ($ahref->childNodes as $div)
{
if ($div->nodeName == "a" ) break;
}
$record = array(
'Name' => utf8_encode(trim(utf8_decode($div->nodeValue), "
\r\0\xa0"))
);
return $record;
}