Wiki Beiträge sichern

Crian

Top Contributor
Ich würde gern in einem Wiki, in dem ich mitarbeite, regelmäßig bestimmte Beiträge sichern.

Manuell müsste ich die Seiten ansteuern, auf bearbeiten klicken (wofür ich eingeloggt sein muss) und den Inhalt mit Ctrl-A Ctrl-C irgendwohin kopieren. Eigentlich ist das doch eine gute Aufgabe für ein Programm.

Ich suche nun nach Ansätzen, den richtigen Suchworten etc. denn alles Googlen führte nur zu fertigen Java-Programmen für Leute, die einen Zugang zu den Internas des Wikis haben, welchen ich nicht habe. Ich habe dort zwar admin-Rechte, habe aber keine Ahnung, wie ich dort ein generelles Update durchführen könnte.

Also würde ich gern einfach ab und an mal ein Programm anstoßen, das die von mir hinterlegten Seiten anläuft und den Quelltext sichert.

Für alle Ratschläge bin ich dankbar.

Falls das irgendwie wichtig ist, es handelt sich um ein wikia-Wiki.
 

Crian

Top Contributor
Damit käme ich dann an die HTML-Seiten (was auch schomal besser als nichts wäre). Ich würde aber gern den Quelltext, den man unter "Bearbeiten" erreichen kann und der die [[Wikimarkierungen]] enthält, auch sichern.

Aber damit werde ich erstmal anfangen. So eine Sitemap finde ich leider nicht. Da suche ich aber nochmal gründlicher.
 

Crian

Top Contributor
Ich bräuchte nochmal eine Hilfe bei der Suche nach den richtigen Suchbegriffen. Bei "Java HTML Parser" bekomme ich teilweise sehr alte Seiten angezeigt, deren Code nicht funktioniert. In der Insel habe ich auch nichts dazu gefunden.


[EDIT]Insbesondere scheint mir eine Methode zu fehlen, erstmal eine Webseite als Text einzulesen. Das Parsen käme ja erst danach.[/EDIT]

[EDIT]Das hab ich nun mit anderen Suchbegriffen hinbekommen:

Java:
    public String readPage(String site) throws IOException {
        URL url = new URL(site);
        BufferedReader r = new BufferedReader(new InputStreamReader(
                url.openStream()));
        StringBuilder builder = new StringBuilder();
        String line = null;
        while ((line = r.readLine()) != null) {
            builder.append(line);
            builder.append("\n");
        }
        return builder.toString();
    }

und mit

Java:
    public static void main(String[] args) {
        String site = "http://www.java-forum.org/";
        PageReader reader = new PageReader();
        try {
            String content = reader.readPage(site);
            System.out.println(content);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

Bekomme ich etwas angezeigt.[/EDIT]
 
Zuletzt bearbeitet:

Crian

Top Contributor
So. Mit der schlichten Lösung

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PageReader {

    public String readPage(String site) {
        String content;
        try {
            content = tryToreadPage(site);
        }
        catch (IOException e) {
            content = "";
            e.printStackTrace();
        }
        return content;
    }

    public String tryToreadPage(String site) throws IOException {
        URL url = new URL(site);
        BufferedReader r = new BufferedReader(new InputStreamReader(
                url.openStream()));
        StringBuilder builder = new StringBuilder();
        String line = null;
        while ((line = r.readLine()) != null) {
            builder.append(line);
            builder.append("\n");
        }
        return builder.toString();
    }

    private List<String> getTextAreas(String content) {
        Pattern textAreaPattern = Pattern
                .compile("<textarea[^>]*>([^>]*)</textarea");
        Matcher matcher = textAreaPattern.matcher(content);

        List<String> list = new ArrayList<>();

        while (matcher.find()) {
            list.add(matcher.group(1));
        }
        return list;
    }

    public static void main(String[] args) {
        String site = "http://.../Seite?action=edit";
        PageReader reader = new PageReader();

        String content = reader.readPage(site);
        List<String> areas = reader.getTextAreas(content);
        for (String areaContent : areas) {
            System.out.println(areaContent);
        }
    }

}

Bekomme ich die Inhalte der mich interessierenden Textareas. Das ist natürlich ein recht grobes Vorgehen, reicht mir für meinen Zweck aus. Nun kann ich die Inhalte speichern. Ein crawlen durch Links etc. habe ich dabei nicht, das wäre natürlich auch fein, ab einer bestimmten Startseite. Mal sehen.
 

Crian

Top Contributor
So. Ich kann nun auch den Wikilinks folgen. Denn die interessieren mich ja, nicht die Links aus dem HTML. Wenn es jemanden interessiert, kann ich auf Nachfrage auch gern mehr Code zeigen.
 

Crian

Top Contributor
Es hat sich nun eine weitere Problematik ergeben:

Um meine eigenen Blogs dort zu sichern, muss ich mich authentifizieren.

So eine Seite sieht so aus:

Code:
...

<form action="/wiki/Spezial:Anmelden" method="post" name="" class="WikiaForm " >
<fieldset>
                <div class="input-group error general-errors">
            <div class="error-msg"></div>
        </div>
                                                            <input type="hidden" name="loginToken" value="">
                                                            <input type="hidden" name="returnto" value="">
                                                            <input type="hidden" name="returntoquery" value="">
                                                            <div class="input-group required   ">
                                                                                                <label>Benutzername</label>
                        <input type="text" name="username" value=""  >


                                        </div>
                                                            <div class="input-group required   ">
                                                                                                <label>Dein Passwort</label>
                        <input type="password" name="password" value=""  >


                                        </div>
                                                            <div class="input-group    ">
                                                                                                <a href="#" class="forgot-password">Passwort vergessen?</a>

                                        </div>
                                                            <div class="input-group    ">
                                                                                                <label>
                            <input type="checkbox" name="keeploggedin" value="1"   > Eingeloggt bleiben                         </label>


                                        </div>
                                    </fieldset>

<div class="submits">
                                <input type="submit" value="Anmelden" class="" name="" >
                    </div>
</form>


....

Kann man daraus irgendwas zusammenbasteln, mit dem ich das im Programm nachbilden kann? Damit kenne ich mich leider gar nicht aus.
 
G

Gast2

Gast
Wäre es nicht wesentlich einfacher regelmäßig ne Datenbanksicherung zu erstellen?!
Dann sparst du dir das einloggen, lesen, parsen, speichern, ...
 

Crian

Top Contributor
Ich hab nur die Rechte, das Wiki zu administrieren, auf eine Eben für Backups komme ich aber nicht. Sonst hätte sich die Frage gar nicht gestellt. *schmunzelt*
 

Templarthelast

Bekanntes Mitglied
Vielleicht solltest du dann den Leuten mit den entsprechenden Rechten mal nach Datenbankzugriff fragen. Denn es würde ja im Endeffekt keinen Unterschied machen.
 

Ähnliche Java Themen

Neue Themen


Oben