2014-03-07 3 views
5

ich versuche, mit youtube api v3 php Suche ...youtube daten api v3 php suche paginierung?

erste Mal, dass ich für diese diese api verwende ich Anfänger bin ...

ich habe 3 Frage;

1) Wie kann unten die Suchliste mit den Paginierungsnummern angezeigt werden? (pro Seite 50 Ergebnis)

2) Wie kann die Videodauer in der Liste angezeigt werden? (03.20 min: zweiten)

3) kann, wie Anzahl der Aufrufe

if ($_GET['q']) { 
    require_once 'src/Google_Client.php'; 
    require_once 'src/contrib/Google_YoutubeService.php'; 
    $DEVELOPER_KEY = 'my key'; 

    $client = new Google_Client(); 
    $client->setDeveloperKey($DEVELOPER_KEY); 
    $youtube = new Google_YoutubeService($client); 

    try { 
    $searchResponse = $youtube->search->listSearch('id,snippet', array(
     'q' => $_GET['q'], 
     'maxResults' => 50, 
     'type' => "video", 
    )); 

    foreach ($searchResponse['items'] as $searchResult) { 

    $videos .= '<li style="clear:left"><img src="'.$searchResult['snippet']['thumbnails']['default']['url'].'" style="float:left; margin-right:18px" alt="" /><span style="float:left">'.$searchResult['snippet']['title'].'<br />'.$searchResult['id']['videoId'].'<br />'.$searchResult['snippet']['publishedAt'].'<br />'.$item['contentDetails']['duration'].'</span></li>'; 
} 




$htmlBody .= <<<END 
    <ul>$videos</ul> 
END; 
    } catch (Google_ServiceException $e) { 
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>', 
     htmlspecialchars($e->getMessage())); 
    } catch (Google_Exception $e) { 
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>', 
     htmlspecialchars($e->getMessage())); 
    } 
} 
+0

jede Lösung Sie? Ich habe auch dasselbe Problem? – virus

+0

nicht finden Sie eine Lösung und brechen :(Wenn Sie finden auch mit mir teilen. – gokhan

Antwort

16

1) bestellen, wie unten Suchliste kann zeigt Paginierung Zahlen? (Pro Seite 50 Treffer)

Sie benötigen eine eigene Cachen von Logik zu schreiben um diese Funktion zu implementieren, da mit jedem Ergebnis, das Sie erhalten zwei Token „nextpagetoken“ und „PreviousPageToken“ und nachfolgende Abfrage, dass die Tokennummer enthalten muss nächste Seite zu gelangen oder vorherige Seite Token wie unten.

Wenn also keine Ergebnisse im Cache verfügbar sind, sollten Sie entweder nextpagetoken oder vorherige Seite Token senden.

https://www.googleapis.com/youtube/v3/search?key=API_KEY&part=snippet&q=japan&maxResults=10&order=date&pageToken=NEXT_or_PREVIOUS_PAGE_TOKEN

Insbesondere Ihr Fall, in dem Sie 50 Seiten pro Seite benötigen und Sie zeigen 3 Paginierung wie (1,2, NEXT), dann müssen Sie die Ergebnisse zweimal holen. Beide Ergebnisse werden im Cache gespeichert, sodass die Ergebnisse für Seite 1 und 2 aus dem Cache abgerufen werden. Als Nächstes stellen Sie sicher, dass Sie google erneut abfragen, indem Sie nextPageToken senden.

Um die Paginierung 1-n und jede Seite 50 Ergebnisse anzuzeigen, müssen Sie dann n-1 Anfragen an Google API machen. Aber wenn Sie 10 Ergebnisse pro Seite zeigen, dann machen Sie eine einzige Abfrage von 50 Ergebnissen, mit denen Sie die ersten 5 Seiten (1-5) mit Hilfe der abgerufenen Ergebnisse zeigen können und als nächstes sollten Sie erneut das nächste Seiten-Token wie oben senden.

HINWEIS- Google youtube api bieten 50 Ergebnisse max.

2) Wie kann die Videodauer in der Liste angezeigt werden? (3:20 min: Sekunde)

Youtube API v3 gibt keine Videodauer bei einfacher erster Suchantwort zurück. Um die Videodauer zu erhalten, müssen wir einen weiteren Anruf bei youtube api wie unten geben.

https://www.googleapis.com/youtube/v3/videos?id=VIDEO_ID1%2CVIDEO_ID2&part=contentDetails&key=API_KEY (max 50 IDs)

Dieses Problem wird in "http://code.google.com/p/gdata-issues/issues/detail?id=4294" .Ich hervorgehoben geschrieben auch hier meine Antwort.

Wenn wir also Videodauer anzeigen möchten, müssen wir jedes Mal zwei Anrufe tätigen.

3), wie Anzahl der Aufrufe bestellen

Auslöser unten Abfrage wird es die Ergebnisse nach Ansicht Zahl bestellt liefern.

https://www.googleapis.com/youtube/v3/search?key=KEY&part=snippet&q=japan&maxResults=5&order=viewCount

Für Detail bitte diese beziehen - https://developers.google.com/youtube/v3/docs/search/list#order

+0

möglich Beispiel teilen? – gokhan

+0

verwenden Sie bitte Ihre API-Token in obigen URLs. – virus

+0

Ich benutze api, localhost search.php Arbeit, wenn ich Server. Geben Fehler 'code' Warnung: require_once (contrib/Google_YoutubeService.php): Fehler beim Öffnen des Streams: Keine solche Datei oder Verzeichnis in /var/www/vhosts/domain.com/httpdocs/youtube/y.php on line 26 Schwerwiegender Fehler: require_once(): Fehlgeschlagenes Öffnen erforderlich 'contrib/Google_YoutubeService.php' (include_path = '/ var/www/vhosts/domain.com/httpdocs/youtube/google-api-php-client/src: google-api -php-client/src ') in /var/www/vhosts/domain.com/httpdocs/youtube/y.php on line 26 'code' – gokhan

2

Die youTube API V3 ist irgendwie kompliziert API V2 vergleichen.

Bei der obigen Frage ist mein Ansatz nicht für das Suchergebnis, sondern für das Abrufen der vom Nutzer hochgeladenen Videos. Ich glaube, das

nützlich sein kann

References

Die Art und Weise Sie Paginierung in v3 erstellen nicht das gleiche wie in v2 ist, wo Sie Ihren Anruf einfach wie

$youtube = "http://gdata.youtube.com/feeds/api/users/Qtube247/uploads?v=2&alt=jsonc&start-index=1&max-results=50"; 

In v3 machen können Sie vornehmen müssen zwei oder drei Anrufe der erste wird sein, um die Kanal-Detail und zweiten Aufruf wird sein, um Wiedergabeliste von wo wir die Kanal-Playlist-ID erhalten und schließlich einzelne Videodaten abrufen.

Ich benutze Php ROTATION

$youtube = “https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&id=yourChannelIdgoeshere&key=yourApiKey”; 

Hier wir Benutzer Abspiellisten-ID

$result = json_decode($return, true); 
$playlistId=$result['items'][0]['contentDetails']['relatedPlaylists']['uploads']; 

wir definieren token abrufen

$pageToken=’’; 

Bei jedem Benutzer klicken Steuertaste wir token von Sitzung abrufen [] und füttere die Curl-URL und erzeugt dann nextpagetoken oder prevpagetoken. Was auch immer Sie die URL der Api füttern wissen, welche Liste der Liste zu füllen.

if(isset($_REQUEST['ptk']) && $_REQUEST['ptk’]!==''){ 
$pageToken=$_REQUEST['ptk’]; 

} 

Hier rufen wir Benutzer Playlist

$ playlistItems =”https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken=”.$pageToken.”&maxResults=50&playlistId=$playlistId&key= yourApiKey”; 

Wenn Benutzer mehr als maxResult hat, sollten wir nextpagetoken haben, nehmen Sie für ein Beispiel Benutzer 200 Videos hochgeladen hat, die erste token CDIQAA sein kann und Das nächste Seitentoken kann CGQQAA sein, während zuvor CDIQAQ sein kann, so etwas ist also keine Nummer.

Hier sparen wir die token

if(isset($result['nextPageToken'])) { $_SESSION[nextToken]=$result['nextPageToken']; 
} 

if(isset($result['prevPageToken'])) { $_SESSION[prevToken]=$result['prevPageToken']; 
} 

wir unsere Steuertaste dann erstellen <>

$next=$_SESSION[nextToken]; 

$prev=$_SESSION[prevToken]; 

Die Steuertaste hier

<a href=”?ptk=<?php echo $prev?>” ><<prev</a> 

<a href=”?ptk=<?php echo $next?>” >next>></a> 

Von hier aus, wenn der Benutzer klicken Link es setze entweder die nächste oder die vorherige Seite in der Sitzungsvariablen (gehe nach oben, um zu sehen, wie das funktioniert)

Um Videodauer zu erhalten wir verwenden gleichen Php

kräuseln
$videoDetails="https://www.googleapis.com/youtube/v3/videos?part=id,snippet,contentDetails,statistics,status&id=videoIdHere&key=yourApiKey"; 

$ = json_decode Videodaten ($ return, true);

$ duration = $ videoData ['items'] [0] ['contentDetails'] ['duration'];

$ viewCount = $ videoData ['items'] [0] ['statistics'] ['viewCount'];

können Sie so etwas wie dieses ('PT2H34M25S')

Ich habe bekommen eine Frage Here beantworten, die Ihnen zeigen, wie die Dauer-Daten konvertieren

See Working Demo Here