LU12b - Crawler

Als Datenquelle für unseren Chatbot möchten wir https://wiki.bzz.ch/ nutzen. Dadurch wird der Chatbot Fragen zum Unterricht beantworten können. Zudem ist beim Wiki im Gegensatz zu z.B. Moodle keine Authentisierung erforderlich, was das Vorhaben etwas vereinfacht.

XML-RPC

Mit RPC (Remote Procedure Call) lassen sich Befehle auf einem fremden System ausführen. XML-RPC nutzt RPC um Daten im XML-Format auszutauschen.

Notiz am Rande

Im Prinzip ist XML-RPC der Vorgänger von SOAP (Simple Object Access Protocol). SOAP nutzt ebenfalls ein erweitertes XML-Format wird aber heutzutage von REST, basierend auf JSON, verdrängt. Es gibt jedoch noch zahlreiche Systeme, die SOAP (historisch bedingt) nutzen.

Ebenfalls gibt es JSON-RPC. Dieses wurde aber grösstenteils durch REST abgelöst.

https://wiki.bzz.ch/ nutzt DokuWiki (https://www.dokuwiki.org/de:dokuwiki), welches XML-RPC und teilweise auch JSON-RPC unterstützt.

Beispiel XML-RPC Beispiel JSON-RPC
Request:
curl -X POST https://wiki.bzz.ch/lib/exe/xmlrpc.php \
     -H "Content-Type: text/xml" \
     --data '<?xml version="1.0"?>
<methodCall>
  <methodName>wiki.getPage</methodName>
  <params>
    <param>
      <value><string>de:modul:ffit:3-jahr:start</string></value>
    </param>
  </params>
</methodCall>'
Request:
curl -X POST https://wiki.bzz.ch/lib/exe/jsonrpc.php \
     -H "Content-Type: application/json" \
     --data '{
        "jsonrpc": "2.0",
        "id": "1",
        "method": "wiki.getPage",
        "params": ["de:modul:ffit:3-jahr:start"]
     }'
Response:
<?xml version="1.0"?>
<methodResponse>
    <params>
        <param>
            <value>
                <string>====== 3. Lehrjahr =====
 
===== Inhalte =====
 
&lt;nspages . -subns -nopages -exclude -h1 -textNS=&quot;&quot; -simplelist&gt;</string>
            </value>
        </param>
    </params>
</methodResponse>
Response:
{
    "id": "1",
    "jsonrpc": "2.0",
    "result": "====== 3. Lehrjahr =====\n\n===== Inhalte =====\n\n<nspages . -subns -nopages -exclude -h1 -textNS=\"\" -simplelist>"
}

Man sieht, dass die Antwort im Prinzip dieselbe ist.

Die von DokuWiki unterstützten Befehle sind aufgelistet auf https://www.dokuwiki.org/lib/exe/openapi.php#?route=overview