Ankündigung

Einklappen
Keine Ankündigung bisher.

Skript: Abfrage von Daten, Eintrag in Array, Ausgabe in .csv-Datei

Einklappen

Neue Werbung 2019

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

  • Skript: Abfrage von Daten, Eintrag in Array, Ausgabe in .csv-Datei

    Hey!
    Habe ein Problem mit meinem PHP-Code. Ich habe versucht einen String in eine existierende Internetseite einzufügen und aus der dabei entstehenden url die IMDB ID auszulesen.

    Gut zu wissen wäre, dass es sich um diese Webseite handelt: http://www.omdbapi.com/ und ich gerne bei "Titel:" eine .csv-datei abarbeiten möchte.


    Es wäre echt wenn mir jemand einen kleinen Leitfaden schicken könnte, zumal ich mich schon sogut wie durch jedes Forum geklickt habe..


    Vielen Dank!
    LG Hasel

  • #2
    Hast du denn ein paar Test-URLs und hast du denn auch schon Ansätze?

    Kommentar


    • #3
      Ehrlich gesagt nein. Da ich ein relativ guter Techniker bin und mich schon an neue Materie anpasse traue ich mir das zu. In meinem xampp server läuft nur eine index.php datei mit dem Inhalt "<?php ?>".
      Das ist der Grund warum ich mich hier im Einsteiger Forum melde.

      Eine Test-url wäre http://www.omdbapi.com/?t=Sex+Tape&y=&plot=short&r=json
      Code:
      {"Title":"Sex Tape","Year":"2014","Rated":"R","Released":"18 Jul 2014","Runtime":"94 min","Genre":"Comedy","Director":"Jake Kasdan","Writer":"Kate Angelo (screenplay), Jason Segel (screenplay), Nicholas Stoller (screenplay), Kate Angelo (story)","Actors":"Cameron Diaz, Jason Segel, Rob Corddry, Ellie Kemper","Plot":"A married couple wake up to discover that the sex tape they made the evening before has gone missing, leading to a frantic search for its whereabouts.","Language":"English","Country":"USA","Awards":"1 nomination.","Poster":"http://ia.media-imdb.com/images/M/MV5BNDYzMzg5OTA0Ml5BMl5BanBnXkFtZTgwNjQzNzExMjE@._V1_SX300.jpg","Metascore":"36","imdbRating":"5.1","imdbVotes":"47,226","imdbID":"tt1956620","Type":"movie","Response":"True"}
      Mein Ziel wäre die dbID zu erkennen und in einer .csv-datei auszugeben.

      Kommentar


      • #4
        Sieht für mich wie eine JSON Repräsentation aus.

        Folgende Zutaten werden benötigt:

        - file_get_contents() oder cURL, um den Content auszulesen.
        - json_decode(), um aus der JSON Repräsentation eine verwendbare Datenstruktur wie einen Array zu erstellen.
        - Im Array auf den Index "imdbID" zugreifen und damit weiterarbeiten.

        Versuche es-.. wenn du nicht weiter weißt, hier deine bisherigen Ansätze posten. Viel Glück

        Kommentar


        • #5
          1.
          Zitat von Chris. Beitrag anzeigen
          - file_get_contents() oder cURL, um den Content auszulesen.
          Link hierzu: http://php.net/manual/de/function.file-get-contents.php


          2.
          Zitat von Chris. Beitrag anzeigen
          - json_decode(), um aus der JSON Repräsentation eine verwendbare Datenstruktur wie einen Array zu erstellen.
          Link hierzu: http://php.net/manual/de/function.json-decode.php


          3.
          Zitat von Chris. Beitrag anzeigen
          - Im Array auf den Index "imdbID" zugreifen und damit weiterarbeiten.
          Das findet sich weiter unten in "// Get IMDb ID" wieder.

          Mein Code bis jetzt:
          PHP-Code:
              // Per line one movie name
              
          $input array_map('str_getcsv'file('input.csv'));
              
              
          // Get IMDb ID
              
          $outputsrc array_map(file_get_contents('http://www.omdbapi.com/?t='$input'&y=&plot=short&r=json'));
              
              
          // Write to .csv
              
          $output fopen("output.csv","w");

              foreach ($
          $outputsrc as $line)
                  {
                  
          fputcsv($output,explode(',',$line));
                  }

              
          fclose($output); 
          "// Per line one movie name" Das dürfte soweit klappen.
          "// Get IMDb ID" Schwierigkeiten dürfte es geben aus dem array dem den jeweiligen Titel zu bekommen. Da hänge ich.
          "// Write to .csv" Fast fertig. Wie ist es möglich nun einen Download, nach Beendigung aufzurufen? http://www.w3schools.com/php/func_fi...em_fputcsv.asp

          Kommentar


          • #6
            Du erhältst doch mittels file_get_contents() den Inhalt der Seite. Dann kannst du doch diesen Content decoden und auf die IMDB-ID zugreifen. Oder nicht?

            PHP-Code:
            <?php

            $content 
            file_get_contents('...');
            $content json_decode($contenttrue);
            $imdb_id $content['imdbID'];

            # Add to .csv file...

            Kommentar


            • #7
              Nein.. Sorry du weist gar nicht was mein Ziel des Skripts ist..

              - input.csv (Pro Zeile ein Titel) -in-> array
              - aus array in URL eintragen
              - Rückgabe auslesen -in-> array
              - outputarry -in-> output.csv ausgeben

              War das verständlich? Sorry..


              Zitat von Chris. Beitrag anzeigen
              PHP-Code:
              <?php

              $content 
              file_get_contents('...');
              $content json_decode($contenttrue);
              $imdb_id $content['imdbID'];

              # Add to .csv file...
              Ja genau diese imdb_id will ich erhalten und dann Zeile für Zeile in einen array eintragen, der dann zum Schluss als output.csv ausgegeben wird.

              Kommentar


              • #8
                Ja, dann wirst du nur noch um den Quellcode herum das Lesen und Schreiben einbauen müssen.

                PHP-Code:
                # Lesen der gegebenen .csv-Datei
                $rows array_map('str_getcsv'file('input.csv'));

                # Verarbeiten der Daten
                $results = array();
                if(
                is_array($rows)) {
                    foreach(
                $rows as $row) {
                        
                # Falls nötig hier noch für $row Validierungs-Statements einbauen.
                        # Und darauf achten, dass eine valide URL gebildet wird!
                        
                $content file_get_contents('...');
                        
                $content json_decode($contenttrue);
                        if(
                array_key_exists('imdbID'$content)) {
                            
                $results[] = array($row$content['imdbID']);
                        }
                    }
                }

                # Schreiben der neuen .csv-Datei
                $fp fopen('result.csv''w');
                foreach (
                $results as $result) {
                    
                fputcsv($fp$result);
                }

                fclose($fp); 
                Ungetestet, ich hoffe es sind nicht all zu viele Fehler enthalten und ich hoffe auch, dass es in etwa deinem Vorhaben entspricht.

                Kommentar


                • #9
                  Danke vielmals! Ich habe mir Deinen Code angesehen und nicht verstandene Punkte makiert.

                  PHP-Code:
                  $rows array_map('str_getcsv'file('input.csv'));
                  // Das verstehe ich. Die Roh-Datei wird in den array $rows gespeichert.

                  $results = array();
                  // Hier wird ein array für die Enddatei erzeugt. 

                  if(is_array($rows)) {
                  // Überprüft ob $rows auch wirklich ein array ist.

                      
                  foreach($rows as $row) {
                          
                  $content file_get_contents('...');
                  // Bis hier hin verstehe ich Dein Vorgehen. Woran ich hängen bleibe ist das Bilden der source URL. Wie spreche ich den Array so an dass er immer in die nächste Zeile geht?
                  // Ich würde es so machen:
                  $content file_get_contents('http://www.omdbapi.com/?t='$rows[]'&y=&plot=short&r=json');
                  // Geht leider nicht.


                          
                  $content json_decode($contenttrue);
                  // Hier dekodiert das skript die json datei und schreibt sie wieder in $content
                          
                  if(array_key_exists('imdbID'$content)) {
                              
                  $results[] = array($row$content['imdbID']);
                  // Das $row sollte an dieser Stelle raus, da es nur eine .csv datei mit imdbIDs erzeugen soll
                          
                  }
                      }
                  }



                  $fp fopen('result.csv''w');
                  foreach (
                  $results as $result) {
                      
                  fputcsv($fp$result);
                  }
                  fclose($fp);
                  // Zum exportieren der .csv 
                  Ich danke Dir wirklich dass du mir so toll weiterhilfst!

                  Kommentar


                  • #10
                    foreach geht für dich durch den $rows Array, welcher den Zeilen in der .csv-Datei entspricht. Somit wird mit jedem Schleifendurchlauf die nächste Zeile in $row stehen. Da ich nicht weiß, was wie und wo in der .csv-Datei steht, musst du das selbst lösen bzw. hier den Inhalt posten.

                    PHP-Code:
                    foreach($rows as $row) {
                        
                    # Zeileninhalt ausgeben...
                        
                    var_dump($row);

                        
                    #...

                    Bzw. direkt komplett $rows ausgeben...

                    Kommentar


                    • #11
                      Danke! Nun wie aber baue ich die URL ein?

                      Kommentar


                      • #12
                        Zitat von HaselnuesseTo Beitrag anzeigen
                        Danke! Nun wie aber baue ich die URL ein?
                        Wie gesagt, dazu muss man wissen, was in dem Array steht. Du musst eben den richtigen Wert korrekt in die URL einbauen. Du kannst auch Funktionen wie http_build_query verwenden, die dir den Query String zusammenbauen.

                        Kommentar


                        • #13
                          Zitat von Chris. Beitrag anzeigen
                          Wie gesagt, dazu muss man wissen, was in dem Array steht. Du musst eben den richtigen Wert korrekt in die URL einbauen. Du kannst auch Funktionen wie http_build_query verwenden, die dir den Query String zusammenbauen.
                          Mit http_build_query() komme ich gar nicht weiter.. Wie genau spreche ich den Array auf immer eine Zeile weiter an? Das ist es doch was ich zwischen
                          PHP-Code:
                          file_get_contents('http://www.omdbapi.com/?t='$rows[]'&y=&plot=short&r=json'); 

                          Kommentar


                          • #14
                            - Schaue dir an, was für ein Datentyp in $row steht, nicht $rows. Du willst ja nicht alle Zeilen in die URL auf einmal einbauen.
                            - Lerne, wie String Concatenation funktioniert.
                            - Schaue dir an, was der Query String einer URL ist.
                            - Wende das Gelernte auf http_build_query an. Die Dokumentation zu lesen erleichtert das Leben auch ungemein.

                            Kommentar

                            Lädt...
                            X