Text automatisch in eigene Wikiseite schreiben

Laquestianne

Cadet 2nd Year
Registriert
Sep. 2009
Beiträge
25
Hallo,

ich habe eine Mediawiki und organisiere darin u.a. Infos über ein paar Rechner. Das wollte ich gern teilweise automatisieren. Ich habe mir das in etwa so vorgestellt:

  1. Ein Systeminformationsskript wird bei Einrichtung oder Veränderung (z.B. Ram-Erweiterung) eines Rechners gestartet (manuell), welches Systeminformationen in eine Datei schreibt
  2. Diese Datei wird auf einen FTP-Server hochgeladen
  3. Ein Überprüfungs-Skript soll jeden Morgen überprüfen, ob neue Dateien auf dem FTP-Server sind, und wenn ja, soll es folgendes initiieren:
  4. Die Systeminformationen sollen automatisch in eine Wikiseite geschrieben werden, am besten in einen Teilbereich (Unterpunkt "Datenblatt"). Wenn das nicht möglich ist, wäre die Alternative, eine neue Seite pro Rechner zu erstellen, in die der Text vom 1. Skript reingeschrieben wird. Danach wird die Datei vom FTP-Server gelöscht, sodass das Überprüfungsskript jeden Morgen möglichst wenig zu tun hat

D.h. es müsste nur noch ein Teil der Rechnerinfos manuell in die Wiki eingegeben werden; der Rest wird bei jeder Neu-Einrichtung oder Veränderung (und nur dann) automatisch in die Wiki geschrieben.

Tjo, vor allem Punkt 4 bereitet mir Kopfschmerzen: muss ich da direkt in die SQL-Datenbank der Wiki reinschreiben? Geht das überhaupt? Oder brauche ich ein Wiki-Plugin, das mir die Infos holt, also ohne Datenbankeingriff? Ich bin beim Systeminformationsskript so weit, dass die Ausgabe schon so formatiert ist, dass man sie ohne weiteres auf eine Wikiseite schreiben könnte, also wäre mir direktes Schreiben in eine Wikiseite am liebsten.
 
Servus,

zu deinem Problem mit dem Posten in eine Wiki Seite kann dir cURL sicherlich ganz hilfreich sein. Schau dir mal dazu im cURL Manual den Abschnitt "POST (HTTP)" an.

Viele Grüße
Pawel23
 
Also ich hab mir jetzt eine Testseite angelegt, auf der ich mit curl Text posten wollte.

Nach dem Curl-Manual hab ich jetzt mal gedacht, dass ich mir den Quelltext der Wikiseite angucken muss, während ich sie gerade editiere.

Das "Formularfeld" (das in diesem Fall keins ist, sondern ein textarea, sollte aber kein Problem sein, oder?) heißt "wpTextbox1".
Die Action ist "/index.php?title=Testseite&action=submit"
und der Submit-Button heißt "Seite speichern"

Das müssten eigentlich alle relevanten Informationen sein, oder?

Aber wenn ich jetzt folgendes eingebe

Code:
curl -d "wpTextbox1=MEINTEXT&press=Seite%20speichern" http://MEINWIKI.de/index.php/TESTSEITE&action=submit

gibt die Bash einen Fehler aus, weil sie den Befehl "amp" nicht kennt. Wie bringe ich jetzt die Bash dazu, den Text einfach so zu nehmen, wie er ist und nichts zu interpretieren? Wenn ich /&amp eingebe, kommt zwar kein Fehler, aber es klappt auch nicht.

Naja, ich denke mal, der Befehl ist so auch noch nicht 100%ig richtig, oder? Muss ich noch irgendwo"index.php?title=TESTSEITE&action=edit" unterbringen? Würd ich jetzt spontan vermuten, aber ich wüsste nicht wie genau.

Dass ich mich vorher einloggen muss, sollte eigentlich kein Problem sein, oder? Die Wiki hat nämlich keine UserPermissions eingestellt; jeder kann posten. Zur Sicherheit habe es aber auch einmal mit vorherigem
Code:
curl -u username:passwort http://MEINEWIKISEITE.de/index.php/Spezial:Anmelden
probiert.


Auszug aus dem Quelltext der Wikiseite:
Code:
<form id="editform" name="editform" method="post" action="/index.php?title=TESTSEITE&amp;action=submit" enctype="multipart/form-data">
<input type='hidden' value="" name="wpSection" />
<input type='hidden' value="20091001093756" name="wpStarttime" />

<input type='hidden' value="20091001093756" name="wpEdittime" />

<input type='hidden' value="" name="wpScrolltop" id="wpScrolltop" />

<input name="wpAutoSummary" type="hidden" value="d41d8cd98f00b204e9800998ecf8427e" />

<textarea name="wpTextbox1" id="wpTextbox1" cols="80" rows="25" tabindex="1" accesskey=",">
</textarea>
...
<div class='editButtons'>
<input id="wpSave" name="wpSave" type="submit" tabindex="3" value="Seite speichern" accesskey="s" title="Änderungen speichern [s]" />
...
In diesem Teil müssten eigentlich alle für Curl relevanten Infos sein, oder? Habe ich davon eine vergessen oder so?

Vielen Dank schonmal für jegliche Hilfe, mir wär damit echt sehr geholfen, wenn das klappen würde.


edit: Wenn ich manuell "TEST" in die Wikiseite reinschreibe, sieht der Quelltext an der testarea-Stelle so aus:
Code:
<textarea name="wpTextbox1" id="wpTextbox1" cols="80" rows="25" tabindex="1" accesskey=",">TEST

Muss man daraus noch irgendwelche Schlüsse ziehen und die in curl umsetzen?


edit2: Ich hab glaub ich auch noch einen Fehler gemacht, indem ich "press" aus dem Tutorial übernommen habe, der muss aber eigentlich "wpSave" heißen, oder? Aber auch damit klappts leider nicht, ich vermute mal es liegt an dem &amp, oder?

edit3: Ich habe jetzt mal klein mit der Suchfunktion anfangen wollen.
Code:
curl -d "search=TESTSEITE&go=Seite" http://MEINEWIKISEITE.de/index.php
- aber nichtmal das funktioniert, da werden nur 7 leere Zeilen ausgegeben (??) ;(
 
Zuletzt bearbeitet:
Okay, fangen wir ganz oben an. :)
Code:
curl -d "wpTextbox1=MEINTEXT&press=Seite%20speichern" http://WIKI/index.php/TESTSEITE&amp;action=submit

Das schlägt fehl, weil unter Linux das "&" dafür zuständig ist einen Befehl in den Hintergrund zu schicken; in etwa: "ls & date"
Deswegen wird auch gemeckert, dass der Befehl "amp" nicht gefunden werden kann.

Die Lösung dazu ist recht einfach. Einkapseln (und das amp weglassen, aber das ist eine andere Geschichte):
Code:
curl -d "wpTextbox1=MEINTEXT&press=Seite%20speichern" "http://WIKI/index.php/TESTSEITE&action=submit"

Aber das ist nur der Anfang:
Code:
<form id="editform" name="editform" method="post" action="/index.php?title=TESTSEITE&amp;action=submit" enctype="multipart/form-data">
<input type='hidden' value="" name="wpSection" />
<input type='hidden' value="20091001093756" name="wpStarttime" />

<input type='hidden' value="20091001093756" name="wpEdittime" />

<input type='hidden' value="" name="wpScrolltop" id="wpScrolltop" />

<input name="wpAutoSummary" type="hidden" value="d41d8cd98f00b204e9800998ecf8427e" />

<textarea name="wpTextbox1" id="wpTextbox1" cols="80" rows="25" tabindex="1" accesskey=",">
</textarea>
...
<div class='editButtons'>
<input id="wpSave" name="wpSave" type="submit" tabindex="3" value="Seite speichern" accesskey="s" title="Änderungen speichern [s]" />
...
Du hast hier nicht nur eine Textarea, sondern auf diverse verstecke Felder und es ist eine Multipartform.

Schau dir dazu mal unter http://curl.haxx.se/docs/programs.html das Programm formfind.pl an. Der Aufruf dafür sieht wie folgt aus. (Hier am Beispiel von Wikipedia):
Code:
curl  "http://de.wikipedia.org/w/index.php?title=Pawel23&action=edit" | ./formfind.pl

Code:
--- FORM report. Uses POST to URL "submit"
--- type: multipart form upload [use -F]
Input: NAME="baseRevId" (HIDDEN)
Input: NAME="undidRev" VALUE="0" (HIDDEN)
Input: NAME="wpAntispam" (TEXT)
Input: NAME="wpSection" (HIDDEN)
Input: NAME="wpStarttime" VALUE="20091001151446" (HIDDEN)
Input: NAME="wpEdittime" VALUE="20091001151447" (HIDDEN)
Input: NAME="wpScrolltop" (HIDDEN)
Input: NAME="wpAutoSummary" VALUE="d41d8cd98f00b204e9800998ecf8427e" (HIDDEN)
Textarea: NAME="wpTextbox1"
Input: NAME="wpSummary" (TEXT)
Input: NAME="wpSave" VALUE="Seite speichern" (SUBMIT)
Input: NAME="wpPreview" VALUE="Vorschau zeigen" (SUBMIT)
Input: NAME="wpDiff" VALUE="Ã
                             nderungen zeigen" (SUBMIT)
Input: NAME="wpEditToken" VALUE="+\" (HIDDEN)
--- end of FORM

Das alles muss theoretisch mit in die Parameterliste.

Viele Grüße
Pawel23
 
Zuletzt bearbeitet:
Vielen Dank für deine Mühen :)

Also die Ausgabe vom formfind.pl sieht in meiner Wiki so aus:

Code:
--- FORM report. Uses POST to URL "submit"
--- type: multipart form upload [use -F]
Input: NAME="wpSection" (HIDDEN)
Input: NAME="wpStarttime" VALUE="20091002101350" (HIDDEN)
Input: NAME="wpEdittime" VALUE="20091001140823" (HIDDEN)
Input: NAME="wpScrolltop" (HIDDEN)
Input: NAME="wpAutoSummary" VALUE="d41d8cd98f00b204e9800998ecf8427e" (HIDDEN)
Textarea: NAME="wpTextbox1"
Input: NAME="wpSummary" (TEXT)
Input: NAME="wpSave" VALUE="Seite speichern" (SUBMIT)
Input: NAME="wpPreview" VALUE="Vorschau zeigen" (SUBMIT)
Input: NAME="wpDiff" VALUE="Ã
                             nderungen zeigen" (SUBMIT)
Input: NAME="wpEditToken" VALUE="+\" (HIDDEN)
--- end of FORM
--- FORM report. Uses GET to URL "/index.php"
Input: NAME="title" VALUE="Spezial:Search" (HIDDEN)
Input: NAME="search" (TEXT)
Input: NAME="go" VALUE="Seite" (SUBMIT)
Input: NAME="fulltext" VALUE="Suchen" (SUBMIT)
--- end of FORM


ok...
Dann muss ich aber noch rauskriegen, mit welchen Werten gewisse Felder überhaupt belegt werden können, oder?:

wpSection: da muss man die Nummer der zu editierenden Section angeben, man kann ja auch nur Teile einer Seite bearbeiten und der Teil ab der ersten Überschrift ist immer wpSection=1. Wenn man eine ganze Seite bearbeiten möchte, muss man einen leeren Wert angeben glaub ich.
wpScrolltop: keine Ahnung, true/false?
wpAutoSummary: mh, kann ich da wohl den jetzt rausbekommenen Wert stehenlassen?
wpPreview, wpDiff, kann ich ignorieren, weil ich ja keine Vorschau o.ä. will, sondern eine Seite speichern will, richtig?
wpTextbox1: das ist ja kein input type, sondern ein textarea. Kann ich da trotzdem einfach so irgendwas reinschreiben mit curl?
wpEditToken: öh, ja, ka?^^


Tjo, gibts ne Methode, rauszufinden, mit was für Arten von Werten (und am besten, wie die möglichen Werte interpretiert werden) die input-Felder, bei denen ein kryptischer oder kein Value vorhanden ist, belegt werden können?

Muss ich wirklich für alle möglichen Felder Werte angeben um posten zu können?

Wenn ich

Code:
curl -d "wpStarttime=20091002101350&wpEdittime=20091001140823&wpTextbox1=MEINTEXT&wpSummary=MEINESUMMARY&wpSave=Seite%20speichern"
"http://MEINEWIKISEITE.de/index.php/TESTSEITE&action=submit"
eingebe, bekomme ich einfach den Quelltext der Seite ausgegeben. Gibts ne Möglichkeit, das was curl konkret gemacht hat, in einem Logfile abzuspeichern und einzusehen oder so?
Aktuell scheints curl nicht zu interessieren, ob mit -d was angebe oder nicht und ob ich 10 Sachen angebe oder eine... es wird einfach immer der Seitenquelltext ausgegeben.
 
Zuletzt bearbeitet:
Zurück
Oben