Deusu.de Blog

18.7.2016

API jetzt im Testbetrieb

Lange geplant, lange angekündigt und endlich so weit, dass ich es in den externen Testbetrieb schicken kann... das API von DeuSu.

Ich habe noch keine ausführliche Dokumentation fertig, also gebe ich hier einfach mal eine Kurzanleitung. Fragen bitte einfach in den Kommentaren stellen. Ich werde diese dann beantworten und wahrscheinlich auch den Artikel mit anpassen.

Bombardiert das API aber jetzt bitte nicht gleich mit etlichen Abfragen. Faustregel sollte sein, dass nie mehr als eine Abfrage pro Sekunde kommen sollte, besser sogar nur alle 5 Sekunden wenn ihr das irgendwie steuern könnt, z.B. wenn ihr bestimmte Listen mit Suchabfragen abarbeitet. Dass das nicht geht wenn ihr das API z.B. für eine Meta-Suchmaschine nutzt ist klar. Mir geht es nur darum, dass falls es möglich ist, dass dann die Abfragen zeitlich gestreckt werden.

 

Aufruf:

Basis-URL: https://api.deusu.de/beta/query
HTTP-Methode: GET
(Edit 27.8.2016: http wird nicht mehr unterstützt. Nur noch https.)

Der Teil der URL, der im Moment "beta" lautet wird sich ändern sobald das API in den Normalbetrieb geht. Da wird dann statt "beta" (wahrscheinlich) "v1" stehen. Bereitet euch also schon mal darauf vor, dass ihr das einfach ändern könnt.

 

Mögliche Parameter:

p=[Seitennummer]
Beginnt mit "1" (natürlich ohne Anführungszeichen) für die erste Seite, 2 für die nächste, usw... Höchst mögliche Seitenzahl ist 100. Wird dieser Parameter weggelassen wird p=1 angenommen.

pc=[Seitenanzahl/PageCount] (Nachtrag vom 19.7.2016)
Die Seitenanzahl muss im Bereich von 1 bis 10 liegen. Es können also maximal 100 Ergebnisse auf einmal abgefragt werden. Bitte beachten, dass für eine Abfrage der Ergebnisse 101-200 "p=11&pc=10" benutzt werden muss.

q=[Suchbegriff(e)]
Bestimmt wonach gesucht wird. Die Begriffe sind URL-Encoded.

source=news
Es wird nur in aktuellen Nachrichten gesucht.

 

Beispiele:

https://api.deusu.de/beta/query?q=berlin
Holt die ersten 10 Ergebnisse für eine Suche nach "berlin" im gesamten Datenbestand.

https://api.deusu.de/beta/query?p=2&source=news&q=hotels+berlin
Holt Ergebnisse 11-20 für eine Suche nach "hotels berlin" ausschließlich in aktuellen Nachrichten.

 

Format der Daten:

Die Daten, die ihr vom API zurück bekommt, beginnen in etwa so:

startwith=1
endwith=10
totalcount=133067
corpussize=2135607839
keywords=2
keyword=berlin
keywordoccurences=17170185
keyword=hotels
keywordoccurences=19022506

Jede Zeile ist im Format "[identifier]=[value]". StartWith und EndWith geben hier an, dass die Ergebnisse 1 bis 10 folgen.

TotalCount ist die Anzahl gefundener Seiten. CorpusSize gibt an wie groß der Datenbestand ist in dem gesucht wurde.

Die Suche bestand aus zwei Begriffen. Für jeden Begriff ist angegeben wie oft dieser insgesamt vorkam. Von "Keyword" und "KeywordOccurences" wird "Keyword" immer zuerst kommen.

Danach folgen dann für jede gefundene Seite Angaben für "URL", "Title", "Snippet" und "RankingValueInt". Die "URL"-Angabe erfolgt immer als erste, so dass ihr davon ausgehen könnt, dass wenn eine Zeile mit "url=" beginnt, ab hier die Angaben für ein neues Ergebnis kommen.

Wenn ihr einen Parser hierfür implementiert achtet bitte darauf, dass irgendwann weitere Angaben hinzu kommen könnten. Wenn also irgendwo ein "[identifier]=" kommt den ihr bisher nicht kennt, dann muss dieser einfach ignoriert werden.

Ich vermute auch mal, dass wohl kaum jemand die "Keywords"-Angaben oder RankingValueInt brauchen wird. Die könnt ihr in eurem Parser dann natürlich auch einfach ignorieren.

Kommentare:
Von: (Unbekannt)
21.7.2016, 13:01
 

1. Ich meine, dass der Abruf (https://api.deusu.de/beta/query?q=berlin) Probleme mit Sonderzeichen (UTF8) hat.

2. Es gelingt mir nicht, die Inhalte via php abzurufen (fsockopen, file_get_contents, curl).

Rückgabecontent der Seite:

Objekt verschoben
Dieses Dokument befindet sich möglicherweise hier.

S. Birkholz

Von: Michael Schöbel
21.7.2016, 14:18
 

Das Problem mit den Sonderzeichen liegt nicht am API, sondern an der darunter liegenden Software. Die war nie für so etwas ausgelegt. Ich habe schon etliche Workarounds dafür an mehreren Stellen, aber wirklich funktionieren tut das leider nicht.

Irgendwann werde ich mal dazu kommen das Problem wirklich an der Wurzel zu beheben. Aber das wird sicherlich noch eine Weile dauern.

Meine PHP-Kenntnisse sind rudimentär bis nicht vorhanden. Ich habe es aber mal mit CURL auf der Kommandozeile versucht, und da sah es so aus:

curl --head "https://api.deusu.de/beta/query?q=berlin"
HTTP/1.1 200 OK
Content-Length: 3505
Content-Type: text/plain; charset=UTF-8
Expires: Thu, 21 Jul 2016 14:15:01 GMT
Server: Microsoft-IIS/8.0
Date: Thu, 21 Jul 2016 12:15:01 GMT
Connection: close

Warum es bei Ihnen nicht geht, weiß ich leider nicht.

-- Michael Schöbel

Von: Michael Schöbel
21.7.2016, 14:31
 

Nachtrag: Ich glaube ich habe gerade eine mögliche Ursache dafür gefunden, warum es mit PHP nicht ging.

Versuchen Sie es bitte erneut, und lassen Sie mich wissen, ob es jetzt geht oder nicht.

-- Michael Schöbel

Von: (Unbekannt)
21.7.2016, 14:36
 

OK, jetzt funktioniert mein PHP-Script - Problem gelöst!

Danke...

Von: Michael Schöbel
21.7.2016, 14:52
 

Super.

Fehler lag bei mir. Ich habe für die normale Suche bei DeuSu einige User-Agents gesperrt, weil die mit VIEL zu vielen Suchabfragen aufgefallen waren. Auch wenn kein User-Agent angegeben ist griff diese Sperre.

Und ich hatte vergessen die Sperre für das API zu deaktivieren.

-- Michael Schöbel

Von: (Unbekannt)
21.7.2016, 14:57
 

OK, das mit den Sonderzeichen wäre (zumindest in PHP) auch gelöst:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body>
<?php

$host = "https://api.deusu.de/beta/query/?p=2&source=news&q=hotels+berlin";
$content = file_get_contents($host);

$content = mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));

echo $content;

?> </body>
</html>

Gruß und Dank

S. Birkholz

Von: (Unbekannt)
21.7.2016, 15:02
 

! Nein, leider doch nicht ganz gelöst !

Von: (Unbekannt)
31.7.2016, 20:31
 

Ein Hinweis zur Abfragefrequenz... die wird von Twitter und anderen APIs per X-Rate-Limit-Remaining und X-Rate-Limit-Reset gesteuert.

Wenn also bei jedem (!) Request X-Rate-Limit-Remaining auf 0 und X-Rate-Limit-Reset auf t+1 gesetzt ist, dann sollten API Clients, die sich zu benehmen wissen, automatisch eine Sekunde zwischen den Abfragen warten.

Von: (Unbekannt)
13.9.2016, 08:21
 

Nutze diese Suchmaschine jetzt 1 Monat.

Fazit: Unbrauchbar!

Autovervollständigung läuft total am Suchthema vorbei, genau wie die Suchergebnisse, die nicht mal annähernd etwas mit der Anfrage zu tun haben.

Eingegebene Suchanfragen können nur nach mehrmaligem Anklicken geändert werden, wenn überhaupt.

Unter diesen Umständen kann ich diese Seite weder empfehlen, noch unterstützen!

Von: Michael Schöbel
13.9.2016, 08:55
 

> Eingegebene Suchanfragen können nur nach mehrmaligem Anklicken geändert werden, wenn überhaupt.

Häh? Man geht nach oben zum Sucheingabefeld, klickt das an, und gibt einen neuen Begriff ein oder ändert den bestehenden.

> Autovervollständigung läuft total am Suchthema vorbei

Haha... :) Es gibt überhaupt keine Autovervollständigung. Was Du siehst ist Dein Browser in Aktion.

Ich gebe zu die Suchergebnisse sind noch (stark) verbesserungswürdig. Aber was erwartest Du wenn man mit einem Budget arbeitet, dass circa ein Millionstel des Budgets von Google oder Bing beträgt?

-- Michael Schöbel

Sie möchten einen Kommentar zu diesem Blog-Posting abgeben? Falls ja, tragen Sie Ihren Kommentar bitte einfach in dem unten stehenden Feld ein, und klicken dann auf "Absenden".

Kommentare erscheinen erst nach manueller Kontrolle. Leider gab es sonst zu viel Spam.


Zurück zur Blog-Übersicht