array-push und Youtube API3

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • array-push und Youtube API3

    Hi@all

    brauche mal dringend Hilfe bitte.
    Versuche schon den ganzen Tage eine Liste meiner YoutubeVideos auszulesen.
    Da das Ausleseergebniss über die Youtube APi auf maxResult 50 begrenzt ist muss ich das über erneuten Aufruf des Links mittel PageToken machen.
    Bis hierher klappt das auch ganz gut.

    Nun wollte ich die Ergebnisse in einem einzigen Array zusammenfassen um eine Gesamtliste ausgeben zu können.
    Aber irgendwie funktioniert das zusammenfügen der Daten nicht, es wird mir immer nur der erste Array-Inhalt angezeigt.

    Ich hoffe ich hab mich verständlich ausgedrückt.

    PHP Code:
    <?php
    //YouTube API v3.0

    //for debugging purposes
    $time_start microtime(true); 

    # Link Data
    $api_key "___"//your public access API key from google's developer console, enable youtube data api v3
    $playlist_id "___"//replace with a youtube playlist ID, eg: PLOU2XLYxmsIJQhUeN9S2kQ-3PWzPZVZD0
    $maxResults "50"//max JSON results
    $path getPath();
    $inhalt_gesamt="";

    # Link umwandeln
    #$feed = json_decode(file_get_contents($path));
    //Speichern der API Abfrage im JSON Format
    $api getSslPage($path);
    //Umwandeln des JSON Format in einen PHP Array
    $feed json_decode($apitrue);

    # Info Ausgabe
    echo "<b>Playlist id:</b> ".$playlist_id."<br>";
    echo 
    "<b>Max Results:</b> ".$maxResults."<br>";
    echo 
    "<b>Feed URL:</b> <a href='".$path."' target='_blank'>".$path."</a><br><br>"//output the path used
    echo "<hr>";

    # Daten zusammenfassen
    $inhalt_gesamt $feed;

    # Ausgabe erste Seite (0-50)
    parseJSON($inhalt_gesamt);
    # prüfen ob weitere Daten vorhanden
    nextToken();
    # Ausgabe
    parseJSON($inhalt_gesamt);


    # Funktion Next Page
    function nextToken()
    {
     global 
    $playlist_id$api_key$maxResults$feed$inhalt_gesamt;
    if(isset(
    $feed['nextPageToken'])) 
    {
     
    $nextToken $feed['nextPageToken']; //get the next token
     
    echo "<b>Next page token:</b> ".$nextToken."<br><br>";
     echo 
    "<hr>";
     echo 
    "<i>Using the next page token, we can retrieve the next set of results.</i><br><br>";
     
    # Link zur nächsten Seite (51-100 usw.) erzeugen
     
    $path getPath($nextToken);
     
    # Link umwandeln
     #$feed = json_decode(file_get_contents($path));
     //Speichern der API Abfrage im JSON Format
     
    $api getSslPage($path);
     
    //Umwandeln des JSON Format in einen PHP Array
     
    $feed json_decode($apitrue);
     
    # Info Ausgabe
     
    echo "<b>Feed URL:</b> <a href='".$path."' target='_blank'>".$path."</a><br><br>"//output the path used
     # Ausgabe
     
    array_push($inhalt_gesamt$feed); // ??? - funktioniert nicht ??? 
     
    parseJSON($feed);
     
    # Prüfen ob weitere Seiten vorhanden
     
    nextToken();
     
     
    # Letzte Seite
     
    if(isset($feed['nextPageToken'])) 
     {
      
    //check for last page
      
    $nextToken $feed['nextPageToken'];
      echo 
    "<b>Next page token:</b> ".$nextToken."<br>";
     }
     else 
     {
      echo 
    "No more next page token!<br>";
     }
     
    $prevToken $feed['prevPageToken']; //we can also retrieve a previous token
     
    echo "<b>Previous page token:</b> ".$prevToken."<br><br>";
    }
    else 
    {
     
    //if playlist is shorter than max results
     
    echo "<b>Next page token doesn't exist because playlist is too short!<br>Please choose a playlist longer than your max results: </b>".$maxResults;
    }
    }
    echo 
    "<hr>";


    # Funktion Pfad erzeugen
    function getPath($nextToken FALSE
    {
     if(
    $nextToken === FALSE
     {
      
    //check for next page token
      
    $nextPageToken "";
      }
      else 
      {
       
    $nextPageToken "&pageToken=".$nextToken."";
      }
      global 
    $playlist_id$api_key$maxResults;
      
    $path "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=".$maxResults."&playlistId=".$playlist_id."".$nextPageToken."&key=".$api_key."";
      return 
    $path;
    }

    # Funktion Ausgabe
    function parseJSON($feed

     global 
    $maxResults
     echo 
    "<br><br>";
     for(
    $i 0$i 1000$i++) 
     { 
      if(isset(
    $feed['items'][$i])) 
      {
       
    //if result exist 
       //retrieve video information 
       
    $video_title $feed['items'][$i]['snippet']['title']; 
       
    $video_description $feed['items'][$i]['snippet']['description']; 
       
    //output the results 
       
    echo ($i+1)." <b>Title: </b>".$video_title."<br>"
       
    #echo "<b>Description: </b>".$video_description."<br><br>"; 
      

     } 


    # Funktion zum Auslesen einer Datei mit cURL
    function getSslPage($url
    {
     
    $ch curl_init();
     
    curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
     
    curl_setopt($chCURLOPT_HEADERfalse);
     
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
     
    curl_setopt($chCURLOPT_URL$url);
     
    curl_setopt($chCURLOPT_REFERER$url);
     
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
     
    $result curl_exec($ch);
     
    curl_close($ch);
     return 
    $result;
    }

    //for debugging purposes
    $time_end microtime(true); 
    $time $time_end $time_start;
    echo 
    "<br>Loading time: ".$time;
    ?>
    Thx@all for help

  • #2
    das Script arbeitet auf jeden Fall zu viel mit globals und Funktionen ohne Rückgabewert, das ist extrem schlecht les- und wartbar. Müsste da nicht irgendwo eine Schleife sein, die so lange Ergebnisse zieht bis nichts mehr kommt? Was wird denn überhaupt an die API geschickt?

    Comment


    • #3
      Ich würde es erst mal lesbar formatieren (Einrückungstiefe von mehr als einem Space, vier wären ein guter Wert; Funktionsdeklarationen vor normalen Code schreiben und nicht dahinter) und dann Debugging betreiben.

      - https://php-de.github.io/jumpto/faq/#debugging

      Erster Kandidat wäre für mich nextToken.

      Als Außenstehender ohne YouTube-API-Key kann man dabei nicht helfen.

      Comment

      Working...
      X