sumas.xml
hinzufügen
Eine Suchmaschine zur Die Datei ~/MetaGer/config/sumas.xml
enthält Informationen, die zeigen, wie Ergebnisse von einer Suchmaschine abgerufen werden sollen.
In der Regel gibt es einen Link der Form https://example.com/search?q=test&encoding=utf8
.
Wenn man diesen Link abruft, liefert die Suchmaschine Ergebnisse für das Suchwort test
.
Wir nehmen nun an, dass obiges Beispiel tatsächlich eine Suchmaschine wäre und fügen diese zur sumas.xml
hinzu.
Ich spalte den Link in einzelne Teile auf, die zeigen und erklären in welchem Attribut diese in der sumas.xml
angegeben sind:
https://
beginnt der Link mit https://
bedeutet dies, dass die Ergebnisse über eine sichere Verbindung abgerufen werden.
Wir setzen hierfür das Attribut port
auf 443 und erhalten:
<suma port="443" />
Hinweis: Wenn der Link mit http://
beginnt, braucht dieses Attribut nicht gesetzt zu werden, da der dazugehörige Wert "80" als Standardwert gesetzt wird.
example.com
Dies ist der Hostname, der definiert unter welcher Adresse der Server gefunden werden kann.
Wir setzen hierfür das Attribut host
auf example.com und erhalten:
<suma port="443" host="example.com" />
/search?
Dies ist der Pfad zum Skript, welches die Suchanfrage behandeln soll. Wir lassen das ?
weg, da es immer vorhanden ist, setzen skript
auf /search und erhalten:
<suma port="443" host="example.com" skript="/search" />
q=test&encoding=utf8
Dies sind die Argumente, welche an die Suchmaschine übergeben werden sollen. Der Parameter q
beinahltet hierbei das Suchwort / die Suchworte und der Paramter encoding
ist offensichtlich immer vorhanden.
Für die Suchworte fügen wir den Platzhalter <<QUERY>>
ein. Er wird von MetaGer automatisch durch die bei MetaGer eingegebenen Suchworte ersetzt. Beachte bitte, dass die statischen Argumente bereits URL-Enkodiert und der gesamte String XML-Enkodiert sein muss, damit Fehler vermieden werden.
Wir setzen also formData
auf q=<<QUERY>>&encoding=utf8
und erhalten:
<suma port="443" host="example.com" skript="/search" formData="q=<<QUERY>>&encoding=utf8" />
name
Parameter Dieser Parameter ist nicht optional und muss eine innerhalb der XML-Datei eindeutige Identifizierung enthalten.
Wir wählen also den Namen example
und erhalten:
<suma port="443" host="example.com" skript="/search" formData="q=<<QUERY>>&encoding=utf8" name="example" />
package
Parameter Jede Suchmaschine benötigt ein zugehöriges PHP-Skript, welches beschreibt, wie die Ergebnisse aus dem Antwortstring der Suchmaschine extrahiert werden.
Die Antwort kann z.B.: ein XML, oder ein JSON String sein. Alle Parser können unter ~/MetaGer/app/Models/parserSkripte
gefunden werden.
package
beinhaltet den klein geschriebenen Klassennamen des zugehörigen parsers.
Wir nennen unsere Klasse Example
und erhalten:
<suma port="443" host="example.com" skript="/search" formData="q=<<QUERY>>&encoding=utf8" name="example" package="example" />
displayName
und Parameter homepage
Parameter Jede Suchmaschine (sofern diese vom Benutzer ausgewählt werden kann) taucht automatisch mit einem angezeigten Namen und einer Verlinkung auf deren Home unter localhost:8000/settings
auf.
Wir setzen displayName="Example"
und homepage="https://example.com"
und erhalten:
<suma port="443" host="example.com" skript="/search" formData="q=<<QUERY>>&encoding=utf8" name="example" package="example" displayName="Example" homepage="https://example.com" />
Achtung: Denke daran, dass du nun auch noch die Datei ~/MetaGer/app/Models/parserSkripte/Example.php
erstellen musst, um MetaGer mitzuteilen, wie die Antwort der Suchmaschine ausgewertet werden muss.
Tip: Nimm ein anderes Suchmaschinenskript als Vorlage. Du musst lediglich den Dateinamen, den Klassennamen und natürlich den Inhalt der Funktion loadResults()
anpassen. Die Variable $result
, die der Funktion übergeben wird enthält dabei den ungeparsten Antwortstring der Suchmaschine.
Dies sind alle notwendigen Attribute, damit eine API abgefragt werden kann. Eine übersicht über alle Attribute erhaltet ihr am Ende der Seite.
Hinweis: wenn eure hinzugefügte Suchmaschine bei einer Websuche(Standard) abgefragt werden soll, müsst ihr type="web"
setzen.
Die Datei sumas.xml
würde nach dem hinzufügen wie folgt aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<sumas>
<suma port="443" host="example.com" skript="/search" formData="q=<<QUERY>>&encoding=utf8" name="example" package="example" displayName="Example" homepage="https://example.com" />
</sumas>
<suma />
Mögliche und erforderliche Attribute eines XMl Elements name | value | optional? |
---|---|---|
name | eindeutiger name der Suchmaschine | nein |
host | hostname (www.example.com) | nein |
skript | Pfad zum Skript ("/example.php") | nein |
formData | URL-Parameter, die übergeben werden sollen. (`query=<<QUERY>>`; `<<QUERY>>` wird dabei später durch die Sucheingabe ersetzt | nein |
package | Klassenname der Parser-Datei. (example) | nein |
displayName | Welcher Name soll auf der Settings-Seite angezeigt werden? | nein |
homepage | Unter welchem Link ist diese Suchmaschine für die Öffentlichkeit erreichbar. ( https://example.com; wird dem Benutzer unter "/settings" angezeigt) | nein |
port | Port auf dem die API zuhört (80) | ja |
inputEncoding | Encoding in dem die URL-Parameter übertragen werden (Latin1) | ja |
userSelectable | Soll der Benutzer diese Suchmaschine unter "/settings" auswählen können? [0|1] ( Default: 1) | ja |
type | Gehört diese Suchmaschine zu einem Fokus? [web|bilder|nachrichten|produktsuche] | ja |
engineBoost | Wie hochwertig sind die Ergebnisse dieser Suchmaschine? ( Float 0<Wert ) | ja |
additionalHeaders | Zusätzliche HTTP-Header, die an die Suchmaschine übergeben werden. "$#!#$" wird in "\r\n" umgewandelt. | ja |
disabled | Ist diese Suchmaschine deaktiviert? [0|1] (Default: 0) | ja |
hasSiteSearch | Unsterstützt diese Suchmaschine auf Einzelseiten beschränkte Suchen? [0|1] (Default: 1) | ja |
cacheDuration | Zeit in Minuten, wie lange Suchergebnisse von dieser Suchmaschine Zwischengespeichert werden sollen (Default: 60) | ja |