Ankündigung

Einklappen
Keine Ankündigung bisher.

Einfache Abfrage von JSON Daten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Einfache Abfrage von JSON Daten

    Hallo,

    ich versuche vergeblich die JSON Daten von

    http://de.wiktionary.org/w/api.php?a...al&format=json

    auszulesen. Leider möchte das Script einfach nicht funktionieren.

    Hat von euch evtl. jemand einen Tipp? Vielen Dank im Voraus!

    Mein Script:

    PHP-Code:
        $url 'http://de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json';

        
    $curl curl_init();
        
    $headers = array();
        
    curl_setopt($curlCURLOPT_HTTPHEADER$headers);
        
    curl_setopt($curlCURLOPT_HEADER0);
        
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
        
    curl_setopt($curlCURLOPT_URL$url);
        
    curl_setopt($curlCURLOPT_TIMEOUT30);
        
    $json curl_exec($curl);
        
    curl_close($curl);
         
        
    $data json_decode($json);

        if(!empty(
    $data->list[0]->parse)) {

    $titel $data->list[0]->title;

    echo 
    "Titel: ".$titel;



  • #2
    Leider möchte das Script einfach nicht funktionieren.
    Nutzlose Information... WAS funktioniert nicht?

    Lass dir den ganzen Datensalat mal ausgeben => var_dump();
    Vermutlich greifst du falsch auf die Struktur zu (?)
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Die Ausgabe der JSON Daten funktioniert nicht.

      Mit
      PHP-Code:
      $titel $data->list[0]->titlebzw$titel $data->list[0]->parse[0]->title
      sollte, wenn es dann funktioniert, Karneval ausgegeben werden.

      var_dump(); gibt auch nichts aus

      Kommentar


      • #4
        Die Ausgabe der JSON Daten funktioniert nicht.
        Nochmal: "geht nicht"/"funktioniert nicht" ist keine brauchbare Fehlerbeschreibung!

        Betreibe Debugging.
        http://php-de.github.io/#debugging
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          .. und das Error-Reporting aktiviert?

          PHP-Code:
          ini_set('display_errors''On');
          error_reporting(-1);    //max. aufgedreht 
          Zitat von levans Beitrag anzeigen
          var_dump(); gibt auch nichts aus
          Doch nicht etwa so? Was gibst du mit var_dump aus ?

          Kommentar


          • #6
            Danke jspit.

            Nun sieht der Code so aus

            PHP-Code:
            <?php
            ini_set
            ('display_errors''On');
            error_reporting(-1);    //max. aufgedreht 

                
            $url 'http://de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json';

                
            $curl curl_init();
                
            $headers = array();
                
            curl_setopt($curlCURLOPT_HTTPHEADER$headers);
                
            curl_setopt($curlCURLOPT_HEADER0);
                
            curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
                
            curl_setopt($curlCURLOPT_URL$url);
                
            curl_setopt($curlCURLOPT_TIMEOUT30);
                
            $json curl_exec($curl);
                
            curl_close($curl);
                 
                
            $data json_decode($json);

                if(!empty(
            $data->list[0]->parse)) {

            $titel $data->list[0]->parse[0]->title;

            echo 
            "Titel: ".$titel;

            }

            var_dump($titel);

            ?>
            und zeigt nur eine weiße Seite mit folgenden Text:

            Notice: Undefined variable: titel in /wort/test.php on line 27
            NULL
            Nur wieso gibt der denn NULL wieder, wenn hier auf http://de.wiktionary.org/w/api.php?a...al&format=json im Array parse->title "Karneval" steckt.

            Tut mir leid, ich bin noch am lernen.

            Kommentar


            • #7
              Wo ist das Problem ???

              PHP-Code:
              [...]
              $data json_decode($json);
              print_r($data->parse->title); 
              oder

              PHP-Code:
              [...]
              $data json_decode($json);
              $data2 $data->parse;
              print_r($data2->title); 
              Ausgabe:
              Code:
              Karneval
              Karneval

              Kommentar


              • #8
                Wow, so einfach ist das. Vielen Dank dafür. Könnte ich nun praktisch alle Daten auslesen? Ich habe jetzt das Script mit einer Variable erweitert
                PHP-Code:
                echo $data->parse->wikitext->Wortart
                um nun die Wortart auszulesen. Geht das, obwohl die Daten in wikitext liegen? Mit
                PHP-Code:
                echo $data->parse->wikitext->Wortart
                liest er die Wortart leider nicht aus, stattdessen gibt er die Meldung "Notice: Undefined property: stdClass::$Wortart in /wort/test.php on line 21" aus.

                Kommentar


                • #9
                  Der Wikitext ist insgesamt lediglich ein String, also ein einzelner Wert innerhalb der JSON-Struktur.

                  Da musst du dir einen Parser für die Wiki-Syntax suchen, der so was ordentlich macht, oder die Information stumpf per Regex rausziehen (was halt das Format ziemlich ignoriert und deshalb potenziell fehleranfällig ist).

                  PHP-Code:
                  $jsonString = <<<'EOT'
                  {"parse":{"title":"Karneval","wikitext":{"*":"== Karneval ({{Sprache|Deutsch}}) ==\n=== {{Wortart|Substantiv|Deutsch}}, {{m}} ===\n\n{{Deutsch Substantiv \u00dcbersicht\n|Nominativ Singular=der Karneval\n|Nominativ Plural 1=die Karnevale\n|Nominativ Plural 2=die Karnevals\n|Genitiv Singular=des Karnevals\n|Genitiv Plural 1=der Karnevale\n|Genitiv Plural 2=der Karnevals\n|Dativ Singular=dem Karneval\n|Dativ Plural 1=den Karnevalen\n|Dativ Plural 2=den Karnevals\n|Akkusativ Singular=den Karneval\n|Akkusativ Plural 1=die Karnevale\n|Akkusativ Plural 2=die Karnevals\n|Bild=1995 carneval-venezia 1-520x343.jpg|250px|1|''Karneval'' in [[Venedig]] 1995\n}}\n\n{{Worttrennung}}\n:Kar\u00b7ne\u00b7val, {{Pl.1}} Kar\u00b7ne\u00b7va\u00b7le, {{Pl.2}} Kar\u00b7ne\u00b7vals\n\n{{Aussprache}}\n:{{IPA}} {{Lautschrift|\u02c8ka\u0281n\u0259val}}, {{Pl.1}} {{Lautschrift|\u02c8ka\u0281n\u0259val\u0259}}, {{Pl.2}} {{Lautschrift|\u02c8ka\u0281n\u0259vals}}\n:{{H\u00f6rbeispiele}} {{Audio|}}, {{Pl.1}} {{Audio|}}, {{Pl.2}} {{Audio|}}\n\n{{Bedeutungen}}\n:[1] ''Volkstum:'' Zeit ausgelassenen Feierns vor der 40-t\u00e4gigen [[Fastenzeit]].\n\n{{Herkunft}}\n:als Lehnwort von dem italienischen Substantiv ''[[carnevale]]'' im 17. Jahrhundert \u00fcbernommen, und dies von mittellateinisch ''{{\u00dc|la|carnelevarium}}'' \u201eVorfastenzeit\u201c zu lateinisch ''[[carnis|carnem]] [[:la:carnis|(la)]] {{\u00dc|la|levare}}'' \u201edas [[Fleisch]] [[wegnehmen]]\u201c, da zu fr\u00fcherer Zeit ein Fleischverbot zur Fastenzeit herrschte, weitere Herkunft dunkel <ref>{{Lit-Duden: Herkunftsw\u00f6rterbuch|A=4}}, Seite 392.</ref><ref>{{Lit-Kluge: Etymologisches W\u00f6rterbuch|A=24}} Seite 472.</ref>\n\n{{Synonyme}}\n:[1] [[Fastnacht]], [[Fasching]], [[f\u00fcnfte Jahreszeit]], [[tolle Tage]]\n\n{{Beispiele}}\n:[1] \u201eDenn einmal nur im Jahr ist ''Karneval,'' ist ''Karneval'' am Rhein.\u201c<ref>aus einem rheinischen Karnevalslied</ref>\n:[1] \u201eDer ''Karneval'' zeigt, wie unbeholfen, einsam und steif viele Deutsche eigentlich sind.\u201c<ref>{{Literatur|Autor=Hamed Abdel-Samad|Titel=Mein Abschied vom Himmel|TitelErg= Aus dem Leben eines Muslims Deutschland |Verlag=Knaur Taschenbuch Verlag |Ort=M\u00fcnchen|Jahr= 2010|Seiten= 50|ISBN= 978-3-426-78408-2}}.</ref>\n:[1] \u201e''Karneval'' ist auch etwas wie Krieg.\u201c<ref>{{Literatur|Autor=Irmgard Keun|Titel=Kind aller L\u00e4nder|TitelErg=Roman|Verlag=Deutscher Taschenbuch Verlag|Ort= M\u00fcnchen|Jahr=1989|ISBN=3-423-45369-7}}, Seite 102. Erste Ausgabe 1938.</ref>\n\n{{Charakteristische Wortkombinationen}}\n:[1] [[D\u00fcsseldorfer]], [[K\u00f6lner]] Karneval, Karneval in [[Rio]], [[Venedig]]\n\n{{Wortbildungen}}\n:[[Karnevalist]], [[karnevalistisch]], [[Karnevalisierung]], [[Karnevalsgesellschaft]], [[Karnevalshochburg]], [[Karnevalslied]], [[Karnevalssitzung]], [[Karnevalsveranstaltung]], [[Karnevalsverein]], [[Karnevalszug]]\n\n==== \u00dcbersetzungen ====\n{{\u00dc-Tabelle|\u00dc-links=\n*{{zh-tw}}: [1] {{\u00dcxx|zh|ji\u0101ni\u00e1nhu\u00e1hu\u00ec|\u5609\u5e74\u83ef\u6703}}\n*{{zh-cn}}: [1] {{\u00dcxx|zh|ji\u0101ni\u00e1nhu\u00e1hu\u00ec|\u5609\u5e74\u534e\u4f1a}}\n*{{en}}: [1] {{\u00dc|en|carnival}}, {{\u00dc|en|Shrovetide}}\n*{{fi}}: [1] {{\u00dc|fi|karnevaali}}\n*{{fr}}: [1] {{\u00dc|fr|carnaval}} {{m}}\n*{{it}}: [1] {{\u00dc|it|carnevale}} {{m}}\n*{{ca}}: [1] {{\u00dc|ca|carnaval}} {{m}}\n*{{la}}: [1] {{\u00dc|la|sollemnia antequadragesimalia}}, {{\u00dc|la|oblectamenta antequadragesimalia}},  {{\u00dc|la|oblectationes antequadragesimales}}\n*{{nl}}: [1] {{\u00dc|nl|carnaval}}\n*{{no}}: [1] {{\u00dc|no|karneval}} {{n}}\n|\u00dc-rechts=\n*{{oc}}: [1] {{\u00dc|oc|carnaval}} {{m}}\n*{{pl}}: [1] {{\u00dc|pl|karnawa\u0142}} {{m}}\n*{{pt}}: [1] {{\u00dc|pt|carnaval}}\n*{{rm}}: [1] {{\u00dc|rm|tschaiver}}\n*{{ru}}: [1] {{\u00dcxx|ru|karnav\u00e1l|\u043a\u0430\u0440\u043d\u0430\u0432\u0430\u043b}} {{m}}, {{\u00dcxx|ru|maslenica|\u043c\u0430\u0441\u043b\u0435\u043d\u0438\u0446\u0430}}\n*{{sv}}: [1] {{\u00dc|sv|karneval}}\n*{{sc}}: [1] {{\u00dc|sc|Carrasecare}} (nuoresisch), {{\u00dc|sc|segarebetza}} (campidanesisch)\n*{{dsb}}: [1] {{\u00dc|dsb|karnewal}}\n*{{hsb}}: [1] {{\u00dc|hsb|karnewal}}, {{\u00dc|hsb|p\u00f3stnicy}} ''Pl.''\n*{{es}}: [1] {{\u00dc|es|carnaval}} {{m}}\n*{{cs}}: [1] {{\u00dc|cs|karneval}}\n|Dialekttabelle=\n*Alemannisch: [1] [[Fasnet]]\n|D-rechts=\n*Hessisch: [1] [[Fassenacht]]\n}}\n\n{{Referenzen}}\n:[1] {{Wikipedia|Karneval, Fastnacht und Fasching}}\n:[1] {{Ref-Grimm|karneval}}\n:[1] {{Ref-DWDS|Karneval}}\n:[1] {{Ref-Canoo|Karneval}}\n:[1] {{Ref-UniLeipzig|Karneval}}\n\n{{Quellen|}}\n\n[[Kategorie:Fremdwort]]\n\n[[chr:Karneval]]\n[[en:Karneval]]\n[[fi:Karneval]]\n[[fr:Karneval]]\n[[io:Karneval]]\n[[it:Karneval]]\n[[ko:Karneval]]\n[[mg:Karneval]]\n[[pl:Karneval]]\n[[ru:Karneval]]\n[[sv:Karneval]]\n[[zh:Karneval]]"}}}
                  EOT;

                  // Quelle: http://de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json

                  $tmp json_decode($jsonStringtrue);

                  $wikitext $tmp['parse']['wikitext']['*'];

                  $matches = array();

                  preg_match('/{{Wortart\|(.+?)}}/'$wikitext$matches);

                  var_dump($matches[1]); // string(18) "Substantiv|Deutsch" 

                  Kommentar


                  • #10
                    PHP-Code:
                    <?php
                    ini_set
                    ('display_errors''On');
                    error_reporting(-1);    //max. aufgedreht 

                        
                    $url 'de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json';

                        
                    $curl curl_init();
                        
                    $headers = array();
                        
                    curl_setopt($curlCURLOPT_HTTPHEADER$headers);
                        
                    curl_setopt($curlCURLOPT_HEADER0);
                        
                    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
                        
                    curl_setopt($curlCURLOPT_URL$url);
                        
                    curl_setopt($curlCURLOPT_TIMEOUT30);
                        
                    $json curl_exec($curl);
                        
                    curl_close($curl);

                    $data json_decode($json);
                    $data2 $data->parse;

                    echo 
                    $data2->title;

                    /* Wenn dieser Code drin ist, dann funktioniert es nicht mehr
                    $jsonString = <<<'EOT'
                    {"parse":{"title":"Karneval","wikitext":{"*":"== Karneval ({{Sprache|Deutsch}}) ==\n=== {{Wortart|Substantiv|Deutsch}}, {{m}} ===\n\n{{Deutsch Substantiv \u00dcbersicht\n|Nominativ Singular=der Karneval\n|Nominativ Plural 1=die Karnevale\n|Nominativ Plural 2=die Karnevals\n|Genitiv Singular=des Karnevals\n|Genitiv Plural 1=der Karnevale\n|Genitiv Plural 2=der Karnevals\n|Dativ Singular=dem Karneval\n|Dativ Plural 1=den Karnevalen\n|Dativ Plural 2=den Karnevals\n|Akkusativ Singular=den Karneval\n|Akkusativ Plural 1=die Karnevale\n|Akkusativ Plural 2=die Karnevals\n|Bild=1995 carneval-venezia 1-520x343.jpg|250px|1|''Karneval'' in [[Venedig]] 1995\n}}\n\n{{Worttrennung}}\n:Kar\u00b7ne\u00b7val, {{Pl.1}} Kar\u00b7ne\u00b7va\u00b7le, {{Pl.2}} Kar\u00b7ne\u00b7vals\n\n{{Aussprache}}\n:{{IPA}} {{Lautschrift|\u02c8ka\u0281n\u0259val}}, {{Pl.1}} {{Lautschrift|\u02c8ka\u0281n\u0259val\u0259}}, {{Pl.2}} {{Lautschrift|\u02c8ka\u0281n\u0259vals}}\n:{{H\u00f6rbeispiele}} {{Audio|}}, {{Pl.1}} {{Audio|}}, {{Pl.2}} {{Audio|}}\n\n{{Bedeutungen}}\n:[1] ''Volkstum:'' Zeit ausgelassenen Feierns vor der 40-t\u00e4gigen [[Fastenzeit]].\n\n{{Herkunft}}\n:als Lehnwort von dem italienischen Substantiv ''[[carnevale]]'' im 17. Jahrhundert \u00fcbernommen, und dies von mittellateinisch ''{{\u00dc|la|carnelevarium}}'' \u201eVorfastenzeit\u201c zu lateinisch ''[[carnis|carnem]] [[:la:carnis|(la)]] {{\u00dc|la|levare}}'' \u201edas [[Fleisch]] [[wegnehmen]]\u201c, da zu fr\u00fcherer Zeit ein Fleischverbot zur Fastenzeit herrschte, weitere Herkunft dunkel <ref>{{Lit-Duden: Herkunftsw\u00f6rterbuch|A=4}}, Seite 392.</ref><ref>{{Lit-Kluge: Etymologisches W\u00f6rterbuch|A=24}} Seite 472.</ref>\n\n{{Synonyme}}\n:[1] [[Fastnacht]], [[Fasching]], [[f\u00fcnfte Jahreszeit]], [[tolle Tage]]\n\n{{Beispiele}}\n:[1] \u201eDenn einmal nur im Jahr ist ''Karneval,'' ist ''Karneval'' am Rhein.\u201c<ref>aus einem rheinischen Karnevalslied</ref>\n:[1] \u201eDer ''Karneval'' zeigt, wie unbeholfen, einsam und steif viele Deutsche eigentlich sind.\u201c<ref>{{Literatur|Autor=Hamed Abdel-Samad|Titel=Mein Abschied vom Himmel|TitelErg= Aus dem Leben eines Muslims Deutschland |Verlag=Knaur Taschenbuch Verlag |Ort=M\u00fcnchen|Jahr= 2010|Seiten= 50|ISBN= 978-3-426-78408-2}}.</ref>\n:[1] \u201e''Karneval'' ist auch etwas wie Krieg.\u201c<ref>{{Literatur|Autor=Irmgard Keun|Titel=Kind aller L\u00e4nder|TitelErg=Roman|Verlag=Deutscher Taschenbuch Verlag|Ort= M\u00fcnchen|Jahr=1989|ISBN=3-423-45369-7}}, Seite 102. Erste Ausgabe 1938.</ref>\n\n{{Charakteristische Wortkombinationen}}\n:[1] [[D\u00fcsseldorfer]], [[K\u00f6lner]] Karneval, Karneval in [[Rio]], [[Venedig]]\n\n{{Wortbildungen}}\n:[[Karnevalist]], [[karnevalistisch]], [[Karnevalisierung]], [[Karnevalsgesellschaft]], [[Karnevalshochburg]], [[Karnevalslied]], [[Karnevalssitzung]], [[Karnevalsveranstaltung]], [[Karnevalsverein]], [[Karnevalszug]]\n\n==== \u00dcbersetzungen ====\n{{\u00dc-Tabelle|\u00dc-links=\n*{{zh-tw}}: [1] {{\u00dcxx|zh|ji\u0101ni\u00e1nhu\u00e1hu\u00ec|\u5609\u5e74\u83ef\u6703}}\n*{{zh-cn}}: [1] {{\u00dcxx|zh|ji\u0101ni\u00e1nhu\u00e1hu\u00ec|\u5609\u5e74\u534e\u4f1a}}\n*{{en}}: [1] {{\u00dc|en|carnival}}, {{\u00dc|en|Shrovetide}}\n*{{fi}}: [1] {{\u00dc|fi|karnevaali}}\n*{{fr}}: [1] {{\u00dc|fr|carnaval}} {{m}}\n*{{it}}: [1] {{\u00dc|it|carnevale}} {{m}}\n*{{ca}}: [1] {{\u00dc|ca|carnaval}} {{m}}\n*{{la}}: [1] {{\u00dc|la|sollemnia antequadragesimalia}}, {{\u00dc|la|oblectamenta antequadragesimalia}},  {{\u00dc|la|oblectationes antequadragesimales}}\n*{{nl}}: [1] {{\u00dc|nl|carnaval}}\n*{{no}}: [1] {{\u00dc|no|karneval}} {{n}}\n|\u00dc-rechts=\n*{{oc}}: [1] {{\u00dc|oc|carnaval}} {{m}}\n*{{pl}}: [1] {{\u00dc|pl|karnawa\u0142}} {{m}}\n*{{pt}}: [1] {{\u00dc|pt|carnaval}}\n*{{rm}}: [1] {{\u00dc|rm|tschaiver}}\n*{{ru}}: [1] {{\u00dcxx|ru|karnav\u00e1l|\u043a\u0430\u0440\u043d\u0430\u0432\u0430\u043b}} {{m}}, {{\u00dcxx|ru|maslenica|\u043c\u0430\u0441\u043b\u0435\u043d\u0438\u0446\u0430}}\n*{{sv}}: [1] {{\u00dc|sv|karneval}}\n*{{sc}}: [1] {{\u00dc|sc|Carrasecare}} (nuoresisch), {{\u00dc|sc|segarebetza}} (campidanesisch)\n*{{dsb}}: [1] {{\u00dc|dsb|karnewal}}\n*{{hsb}}: [1] {{\u00dc|hsb|karnewal}}, {{\u00dc|hsb|p\u00f3stnicy}} ''Pl.''\n*{{es}}: [1] {{\u00dc|es|carnaval}} {{m}}\n*{{cs}}: [1] {{\u00dc|cs|karneval}}\n|Dialekttabelle=\n*Alemannisch: [1] [[Fasnet]]\n|D-rechts=\n*Hessisch: [1] [[Fassenacht]]\n}}\n\n{{Referenzen}}\n:[1] {{Wikipedia|Karneval, Fastnacht und Fasching}}\n:[1] {{Ref-Grimm|karneval}}\n:[1] {{Ref-DWDS|Karneval}}\n:[1] {{Ref-Canoo|Karneval}}\n:[1] {{Ref-UniLeipzig|Karneval}}\n\n{{Quellen|}}\n\n[[Kategorie:Fremdwort]]\n\n[[chr:Karneval]]\n[[en:Karneval]]\n[[fi:Karneval]]\n[[fr:Karneval]]\n[[io:Karneval]]\n[[it:Karneval]]\n[[ko:Karneval]]\n[[mg:Karneval]]\n[[pl:Karneval]]\n[[ru:Karneval]]\n[[sv:Karneval]]\n[[zh:Karneval]]"}}}
                    EOT;
                    */

                    //### Quelle: http://de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json

                    $tmp json_decode($jsonStringtrue);

                    $wikitext $tmp['parse']['wikitext']['*'];
                    $matches = array();
                    preg_match('/{{Wortart\|(.+?)}}/'$wikitext$matches);

                    var_dump($matches[1]); // string(18) "Substantiv|Deutsch" 

                    ?>
                    Wenn der Code $jsonString drin ist, dann wird nur eine weiße Seite ausgegeben. Ist hier etwa schon das Problem der Fehleranfälligkeit?

                    Ja, es gibt Parser für das Wikitionary, aber die sind für mich als Anfänger leider noch zu kompliziert. Oder sollte ich mich trotzdem daran versuchen bzw. muss ich das, wenn ich nachher die z.B. "test.php?wort=Programm" aufrufen möchte, um dann die Bedeutungen für dieses Wort angezeigt zu bekommen?

                    Kommentar


                    • #11
                      Wenn der Code $jsonString drin ist, dann wird nur eine weiße Seite ausgegeben. Ist hier etwa schon das Problem der Fehleranfälligkeit?
                      Ich definiere da bloß den Inhalt der abgerufenen JSON-Datei kurz als String, damit das ein testbares Beispiel ergibt, ohne immerzu was aus dem Web runterladen zu müssen. Wenn du die Variable anders füllst, kann das natürlich raus.

                      Hintergrund: http://php.net/manual/en/language.types.string.php (Abschnitte Heredoc und Nowdoc)

                      Kommentar


                      • #12
                        Das ist aber die Meldung wenn ich den jsonString rausnehme bzw. ausklammere, und wie gesagt wenn der drin ist, dann kommt eine weiße Seite. Also funktioniert das Beispiel leider nicht, oder habe ich etwas übersehen?

                        Code:
                        Notice: Undefined variable: jsonString in /wort/test.php on line 30
                        
                        Notice: Undefined offset: 1 in /wort/test.php on line 36
                        NULL

                        Kommentar


                        • #13
                          Bei dir hapert es noch so ein wenig am Umgang mit Variablen, fürchte ich.

                          Ich weiß nicht, was ich dazu noch sagen soll, denn eigentlich ist mein Beispiel selbsterklärend.

                          Hier mal eine Variante, die an deinen curl-Code angepasst ist:

                          PHP-Code:
                          <?php
                          ini_set
                          ('display_errors''On');
                          error_reporting(-1);    //max. aufgedreht

                              
                          $url 'de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json';

                              
                          $curl curl_init();
                              
                          $headers = array();
                              
                          curl_setopt($curlCURLOPT_HTTPHEADER$headers);
                              
                          curl_setopt($curlCURLOPT_HEADER0);
                              
                          curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
                              
                          curl_setopt($curlCURLOPT_URL$url);
                              
                          curl_setopt($curlCURLOPT_TIMEOUT30);
                              
                          $jsonString curl_exec($curl); // geändert nach $jsonString
                              
                          curl_close($curl);

                          #$data = json_decode($json); // alles unnötig
                          #$data2 = $data->parse;

                          #echo $data2->title;



                          $tmp json_decode($jsonStringtrue);

                          $wikitext $tmp['parse']['wikitext']['*'];
                          $matches = array();
                          preg_match('/{{Wortart\|(.+?)}}/'$wikitext$matches);

                          var_dump($matches[1]); // string(18) "Substantiv|Deutsch"

                          Kommentar


                          • #14
                            Bei mir hapert es leider noch überall ein wenig Vielen Dank für deine Hilfe!

                            Bisher habe ich schon geschafft aus dem jsonString den Titel zu bekommen. Was ich noch gerne verstehen würde, weshalb ist denn "Wortart" der String Nr. 18, wenn er doch an zweiter Stelle steht?

                            PHP-Code:
                            <?php
                            ini_set
                            ('display_errors''On');
                            error_reporting(-1);    //max. aufgedreht

                                
                            $url 'de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json';

                                
                            $curl curl_init();
                                
                            $headers = array();
                                
                            curl_setopt($curlCURLOPT_HTTPHEADER$headers);
                                
                            curl_setopt($curlCURLOPT_HEADER0);
                                
                            curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
                                
                            curl_setopt($curlCURLOPT_URL$url);
                                
                            curl_setopt($curlCURLOPT_TIMEOUT30);
                                
                            $jsonString curl_exec($curl); // geändert nach $jsonString
                                
                            curl_close($curl);

                            $tmp json_decode($jsonStringtrue);

                            $title $tmp['parse']['title'];
                            $wikitext $tmp['parse']['wikitext']['*'];
                            $matches = array();

                            preg_match('/{{Wortart\|(.+?)}}/'$wikitext$matches);

                            /* Ich denke, die Struktur ab dem "\" ist falsch, aber wie gehört sich z.B. die Struktur für die Synonyme?
                            preg_match('/{{Worttrennung\|(.+?)}}/', $wikitext, $matches);
                            preg_match('/{{Charakteristische Wortkombinationen\|(.+?)}}/', $wikitext, $matches);
                            preg_match('/{{Übersetzungen\|(.+?)}}/', $wikitext, $matches);
                            preg_match('/{{Bedeutungen\|(.+?)}}/', $wikitext, $matches);
                            preg_match('/{{Wortbildungen\|(.+?)}}/', $wikitext, $matches);
                            preg_match('/{{Synonyme\|(.+?)}}/', $wikitext, $matches);
                            */

                            // Funktioniert
                            echo "<h1>".$title."</h1>";
                            echo 
                            "Wortart: ".$matches[1]; // string(18) "Substantiv|Deutsch"
                            //- bis hier hin

                            /*
                            echo "Charakteristische Wortkombinationen: ".$matches[2];
                            echo "Übersetzungen: ".$matches[3];
                            echo "Bedeutungen: ".$matches[4];
                            echo "Wortbildungen: ".$matches[5];
                            echo "Synonyme: ".$matches[6];
                            */
                            ?>

                            Kommentar


                            • #15
                              In deinem Kommentar steht eine Ausgabe von var_dump, obwohl dein Code gar kein var_dump enthält.

                              - http://de1.php.net/manual/en/function.var-dump.php

                              Macht aber nichts. Das string(18) bezeichnet jedenfalls den Datentyp der Variablen und die Größe des Inhalts in Byte.

                              Ich denke, die Struktur ab dem "\" ist falsch, aber wie gehört sich z.B. die Struktur für die Synonyme?
                              Hier ein Ansatz:

                              PHP-Code:
                              <?php

                              /**
                               *
                               * @param string $url
                               * @return string
                               */
                              function download($url)
                              {
                                  
                              $curl curl_init();
                                  
                              $headers = array();
                                  
                              curl_setopt($curlCURLOPT_HTTPHEADER$headers);
                                  
                              curl_setopt($curlCURLOPT_HEADER0);
                                  
                              curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
                                  
                              curl_setopt($curlCURLOPT_URL$url);
                                  
                              curl_setopt($curlCURLOPT_TIMEOUT30);
                                  
                              $data curl_exec($curl);
                                  
                              curl_close($curl);

                                  return 
                              $data;
                              }

                              /**
                               *
                               * @param string $jsonString
                               * @return array
                               */
                              function parseJson($jsonString)
                              {
                                  
                              $ret = array();

                                  
                              $data json_decode($jsonStringtrue);

                                  
                              $ret['title'] = trim($data['parse']['title']);

                                  
                              $wikitext $data['parse']['wikitext']['*'];

                                  
                              $tmp = array();
                                  
                              $tmp2 = array();

                                  
                              preg_match('/{{Wortart\|(.+?)}}/'$wikitext$tmp);
                                  
                              $ret['wordClass'] = trim($tmp[1]);

                                  
                              preg_match('/{{Synonyme}}([^{]+){/'$wikitext$tmp);
                                  
                              preg_match_all('/\[\[([^[]+)\]\]/'$tmp[1], $tmp2);
                                  
                              $ret['synonyms'] = $tmp2[1];

                                  
                              preg_match('/{{Wortbildungen}}([^{]+){/'$wikitext$tmp);
                                  
                              preg_match_all('/\[\[([^[]+)\]\]/'$tmp[1], $tmp2);
                                  
                              $ret['wordFormations'] = $tmp2[1];

                                  
                              preg_match('/{{Charakteristische Wortkombinationen}}([^{]+){/'$wikitext$tmp);
                                  
                              preg_match_all('/\[\[([^[]+)\]\]/'$tmp[1], $tmp2);
                                  
                              $ret['wordCombinations'] = $tmp2[1];

                                  
                              $ret['translations'] = array();
                                  
                              preg_match_all('/{{Ü\|([a-z]+)\|(.+?)}}/'$wikitext$tmpPREG_SET_ORDER);
                                  foreach (
                              $tmp as $match) {
                                      
                              $ret['translations'][trim($match[1])] = trim($match[2]);
                                  }
                                  
                              preg_match_all('/{{Üxx\|([a-z]+)\|(?:.+?)\|(.+?)}}/'$wikitext$tmpPREG_SET_ORDER);
                                  foreach (
                              $tmp as $match) {
                                      
                              $ret['translations'][trim($match[1])] = trim($match[2]);
                                  }
                                  
                              /** @todo
                                   * {{zh-tw}}: [1] {{Üxx|zh|...|...}}
                                   * {{zh-cn}}: [1] {{Üxx|zh|...|...}} <-- zweite Zeile überschreibt erste
                                   */

                                  
                              $ret['meanings'] = array();
                                  
                              preg_match('/{{Bedeutungen}}([^{]+){/'$wikitext$tmp);
                                  
                              $clean str_replace(array("\r\n""\r"), "\n"$tmp[1]);
                                  
                              $tmp explode("\n"$clean);
                                  foreach (
                              $tmp as $line) {
                                      
                              $line trim($line);
                                      if (
                              '' === $line) {
                                          continue;
                                      }
                                      
                              preg_match('/^:\[[0-9]+\](.*?)$/'$line$tmp2);
                                      
                              $ret['meanings'][] = trim(str_replace(array("''"'[['']]'), ''$tmp2[1]));
                                  }

                                  return 
                              $ret;
                              }

                              ini_set('display_errors''On');
                              error_reporting(-1);    //max. aufgedreht

                              $url 'de.wiktionary.org/w/api.php?action=parse&prop=wikitext&page=Karneval&format=json';
                              $jsonString download($url);

                              var_dump(parseJson($jsonString));
                              Code:
                              array(7) {
                                ["title"]=>
                                string(8) "Karneval"
                                ["wordClass"]=>
                                string(18) "Substantiv|Deutsch"
                                ["synonyms"]=>
                                array(4) {
                                  [0]=>
                                  string(9) "Fastnacht"
                                  [1]=>
                                  string(8) "Fasching"
                                  [2]=>
                                  string(18) "fünfte Jahreszeit"
                                  [3]=>
                                  string(10) "tolle Tage"
                                }
                                ["wordFormations"]=>
                                array(10) {
                                  [0]=>
                                  string(11) "Karnevalist"
                                  [1]=>
                                  string(15) "karnevalistisch"
                                  [2]=>
                                  string(16) "Karnevalisierung"
                                  [3]=>
                                  string(21) "Karnevalsgesellschaft"
                                  [4]=>
                                  string(17) "Karnevalshochburg"
                                  [5]=>
                                  string(13) "Karnevalslied"
                                  [6]=>
                                  string(16) "Karnevalssitzung"
                                  [7]=>
                                  string(22) "Karnevalsveranstaltung"
                                  [8]=>
                                  string(15) "Karnevalsverein"
                                  [9]=>
                                  string(12) "Karnevalszug"
                                }
                                ["wordCombinations"]=>
                                array(4) {
                                  [0]=>
                                  string(13) "Düsseldorfer"
                                  [1]=>
                                  string(7) "Kölner"
                                  [2]=>
                                  string(3) "Rio"
                                  [3]=>
                                  string(7) "Venedig"
                                }
                                ["translations"]=>
                                array(20) {
                                  ["la"]=>
                                  string(33) "oblectationes antequadragesimales"
                                  ["en"]=>
                                  string(10) "Shrovetide"
                                  ["fi"]=>
                                  string(10) "karnevaali"
                                  ["fr"]=>
                                  string(8) "carnaval"
                                  ["it"]=>
                                  string(9) "carnevale"
                                  ["ca"]=>
                                  string(8) "carnaval"
                                  ["nl"]=>
                                  string(8) "carnaval"
                                  ["no"]=>
                                  string(8) "karneval"
                                  ["oc"]=>
                                  string(8) "carnaval"
                                  ["pl"]=>
                                  string(9) "karnawał"
                                  ["pt"]=>
                                  string(8) "carnaval"
                                  ["rm"]=>
                                  string(9) "tschaiver"
                                  ["sv"]=>
                                  string(8) "karneval"
                                  ["sc"]=>
                                  string(11) "segarebetza"
                                  ["dsb"]=>
                                  string(8) "karnewal"
                                  ["hsb"]=>
                                  string(9) "póstnicy"
                                  ["es"]=>
                                  string(8) "carnaval"
                                  ["cs"]=>
                                  string(8) "karneval"
                                  ["zh"]=>
                                  string(12) "嘉年华会"
                                  ["ru"]=>
                                  string(18) "масленица"
                                }
                                ["meanings"]=>
                                array(1) {
                                  [0]=>
                                  string(68) "Volkstum: Zeit ausgelassenen Feierns vor der 40-tägigen Fastenzeit."
                                }
                              }
                              Ansatz heißt: Renn nicht mit Fehlern zu mir. Mir ist klar, dass das nur dann funktioniert, wenn die entsprechenden Bereiche vorhanden sind und dergleichen. Das ist aktuell mehr oder weniger für das Wort „Karneval“ geschrieben. Das ist noch keine allgemeingültige Lösung.

                              Ich würde zudem in jedem Fall noch mal suchen, ob Wiktionary nicht eine geeignetere Schnittstelle zum Abruf derartiger Informationen anbietet oder ob es nicht bereits stabile Lösungen gibt, die das Parsen übernehmen.

                              PS: Das "?>" in reinen PHP-Dateien lässt man weg, weil es keinen Zweck erfüllt und sich dahinter noch Whitespace (Zeilenumbruch etwa) sammeln kann, der nicht erwünscht ist.

                              PPS: Ich weiß nicht, ob du mit meinem Code hier schon was anfangen können wirst, aber das kann ich im Zweifel leider nicht ändern. Ich kann/wir können dir wohl einzelne Sachen erklären, aber etwa bei so einem Code-Beispiel nicht auch noch „sämtliche“ Sprachgrundlagen wie Arrays oder Variablen oder Funktionen). Das nimmt sonst einfach kein Ende. Hilfe/Einführungen gibt es zum Beispiel hier: http://php-de.github.io/jumpto/grundlagen-quellen/

                              Kommentar

                              Lädt...
                              X