Seite 1 von 1

JSON {{Objekt}}

Verfasst: Freitag 15. Juni 2012, 15:28
von mcdwerner
Hallo wieder mal!

zur Zeit versuche ich mich in die Wikipedia API einzuarbeiten.
Bei einer Query bekomme ich ein JSON-Objekt, das u.a einen String enthält, in dem die Überschriften mit geschweiften Klammern kodiert sind:

Code: Alles auswählen

{{Überschrift}}
Absatz
Gibt es in Python schon einen fertigen Parser, der mir die Überschriften und die Absätze zurückliefert, oder muss ich mir selber was basteln?
Falls ich selber ran muss wäre ich wohl im "re" Modul gut aufgehoben?

Viele Grüße,
Werner

Re: JSON {{Objekt}}

Verfasst: Freitag 15. Juni 2012, 16:41
von Dav1d
Wenn ich mich recht entsinne ist das Creole:

http://pypi.python.org/pypi?%3Aaction=s ... mit=search

Re: JSON {{Objekt}}

Verfasst: Freitag 15. Juni 2012, 21:20
von mcdwerner
Vielen Dank!
Auf "Creole" war ich noch gar nicht gestoßen!
Dann werd ich mich da auch noch einlesen :D

Re: JSON {{Objekt}}

Verfasst: Montag 18. Juni 2012, 06:46
von noisefloor
Hallo,

zwei geschweifte Klammern sind im Creole-Syntax ein Bild... Egal. ;-)

Es gib einen fertigen Creole-Parser http://code.google.com/p/python-creole/ von Jens, der hier im Forum Mod ist. Zeitnahe Hilfe bei Fragen sollte also gewährleistet sein... ;-)

Gruß, noisefloor

Re: JSON {{Objekt}}

Verfasst: Montag 18. Juni 2012, 15:35
von mcdwerner
jup, danke noisefloor, interessanterweise ist das Ergebnis von diesem Request: http://de.wiktionary.org/w/api.php?acti ... es=abandon ein JSON, indem die {{Überschriften}} in doppelten geschweiften Klammern stehen, da muss ich mich wohl noch tiefer durch die API wühlen... Oder weiss von euch jemand mehr darüber?

Vielleicht kurz zu der Idee dahinter: Ich lerne Vokabeln gerne mit Lernkarten http://de.wikipedia.org/wiki/Lernkartei, warum also nicht die Rückseite vom Wiktionary holen, anstatt sie selber einzugeben (wäre aber auch als einfacher Translator zu gebrauchen...) falls ich langfristig am Ball bleibe möchte ich daraus einen Web-Service machen, aber als Einstieg versuche ich mich gerade hier dran: http://developer.ubuntu.com/showdown/

Gruß, Werner

Re: JSON {{Objekt}}

Verfasst: Montag 18. Juni 2012, 15:50
von Hyperion
mcdwerner hat geschrieben:jup, danke noisefloor, interessanterweise ist das Ergebnis von diesem Request: http://de.wiktionary.org/w/api.php?acti ... es=abandon ein JSON, indem die {{Überschriften}} in doppelten geschweiften Klammern stehen, da muss ich mich wohl noch tiefer durch die API wühlen...
Naja, das sieht mir stark nach Creole aus - innerhalb eines JSON-Strings kann man ja quasi alles serialisieren, also auch das Markup, auf welchem das Wiki aufbaut.

Re: JSON {{Objekt}}

Verfasst: Montag 18. Juni 2012, 20:33
von noisefloor
Hallo,

@Hyperison: Meinst du, dass {{foo}} ein JSON-Objekt ist, welche "nur" das Element {foo} beinhaltet? Kann sein, wäre aber sehr verwirrend ;-)

Gruß, noisefloor

Re: JSON {{Objekt}}

Verfasst: Montag 18. Juni 2012, 20:48
von BlackJack
@noisefloor: Das wäre kein gültiges JSON. Das ganze Problem hat überhaupt nichts mit JSON zu tun. Ich denke das wollte Hyperion zumindest indirekt damit sagen: Dass man in JSON halt alles mögliche in die Zeichenketten tun kann.

Re: JSON {{Objekt}}

Verfasst: Dienstag 19. Juni 2012, 05:23
von Hyperion
@noisefloor: Nein, BlackJack hat das ja schon klar gestellt. Ich dachte es wäre mittlerweile offensichtlich, dass der eigentliche Inhalt nichts mit JSON zu tun hat, sondern in Richtung Creole-Markup geht.

Ich habe das ganze mal in einer Shell mittels `json`-Modul geladen und dann durch Jens Creole-Parser `python-creole` gejagt: Hier das Ergebnis. So wirklich toll ist die Ausgabe nicht; k.A. ob es sich nun wirklich um Creole handelt, oder ggf. Jens Parser zu strikt ist o.ä. (Ach so, hier die Originalseite)

Immerhin erkennt man nun im formatierten Dump schön, dass das JSON wirklich das "kleinste" Problem ist und ja lediglich als Container für den wahren Inhalt dient.

@mcdwerner: Wenn Du nur an die Bedeutung kommen willst, kannst Du ja mal gucken, ob man da nicht mittels RegExp dran kommt? Einen Creole-Parser mit AST gibt es ja nicht wirklich - @Jens: Oder bietet Deiner so etwas?

Re: JSON {{Objekt}}

Verfasst: Dienstag 19. Juni 2012, 05:51
von mcdwerner
@Hyperion: mit Regex und String-Methoden Funktioniert es schon ganz gut.

Dass es sicher nicht an JSON liegt sieht man auch an der Abfrage als XML: http://de.wiktionary.org/w/api.php?acti ... es=abandon
Hier ist genau der selbe String enthalten...

Vermutlich haben die hier was eigenes, "Creole-artiges" gestrickt...

Ich werd am Ball bleiben...

Viele Grüße, Werner

Edit hat sich verschrieben

Re: JSON {{Objekt}}

Verfasst: Dienstag 19. Juni 2012, 06:32
von Leonidas
Naja, MediaWiki unterstützt soweit ich weiß kein Creole und Creole wurde an die MediaWiki-Syntax angelehnt, von daher nicht so verwunderlich.

Re: JSON {{Objekt}}

Verfasst: Dienstag 19. Juni 2012, 10:06
von sma
Die Dinger in {{ }} sind Vorlagen, aka Makros, keine Überschriften. Überschriften werden bei Mediawiki mit führenden Gleichheitszeichen markiert.

Wenn man http://de.wiktionary.org/w/index.php?ti ... ction=edit aufruft, sieht man nicht nur den Quelltext, der auch über das API abgerufen werden kann, sondern auch eine lange Liste der Vorlagen, die in diesem Text benutzt werden. Nun kann man sich den Quelltext von z.B. "Siehe auch" anschauen: http://de.wiktionary.org/w/index.php?ti ... ction=edit . Ich rate mal, dass man daran auch über das API kommt.

Ich bin mir sicher, dass man irgendwo in der Wikipedia auch eine Beschreibung der Syntax findet. Wenn ich raten sollte, würde ich sagen, dass bei einer Vorlage nach dem {{ zunächst der Name kommt und dann hinter einem | ein oder mehrere Argumente bis zum }}. Innerhalb der Vorlage kann man dann mit {{{1}}} (also dreifachen geschweiften Klammern und einer Zahl) auf die Argumente zugreifen. Offenbar gibt es - zumindest in Vorlagen - auch noch bedingte Anweisungen wie "#if:" wo offenbar dann zwei || die Bedingung von dem Rumpf trennen. Das ist alles andere als trivial.

Zudem kann man nicht einfach nur mit regulären Ausdrücken und Suchen und Ersetzen arbeiten, weil Argumente von Vorlagen wieder Vorlagen referenzieren dürfen, also z.B. {{Siehe auch|{{Spache|Englisch}}}}.

Stefan

Re: JSON {{Objekt}}

Verfasst: Dienstag 19. Juni 2012, 10:56
von Hyperion
sma hat geschrieben: Zudem kann man nicht einfach nur mit regulären Ausdrücken und Suchen und Ersetzen arbeiten, weil Argumente von Vorlagen wieder Vorlagen referenzieren dürfen, also z.B. {{Siehe auch|{{Spache|Englisch}}}}.
Aber Du weißt ja nicht, was der OP eigentlich will! Evtl. reicht ihm da ja schon eine gut "abgreifbare" Stelle der Seite(n)?