Publié le 16/11/2012
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Afficher des videos a partir de Youtube.com

Le service de vidéo en ligne Youtube.com dispose d'une API permettant de faire ses propres recherches dans l'immense base de donnée. Voyons comment charger le flux et afficher une sélection de vidéos sur une page web.

Conception de la class YoutubeFeed

La class PHP regroupe la communication entre notre script et l'API de Youtube. La liste de vidéo est obtenue en 2 étapes:
- transmettre les paramètres de la recherche à l'API,
- analyser le fichier retour, au format Json dans notre cas.

Pour faciliter son utilisation, la class intègre les fonctions:
- setOrderBy(): fixer l'ordre de tri des vidéos,
- getFeed(): retourner un tableau associatif du flux de recherche.
- sampleView(): afficher la liste de videos dans une page HTML.
<?php
/**
 * Youtube.com API, rechercher et afficher des videos
 *
 * @author Fobec 11/2012 
 * @copyright http://www.fobec.com/php5/1119/afficher-videos-partir-youtube-com.html
 */
 
class YoutubeFeed {
 
    const URL_API="http://gdata.youtube.com/feeds/api/videos?max-results=10&v=2&alt=json&orderby=";
 
    const ORDER_NEWEST='published';
    const ORDER_POPULAR='viewCount';
    const ORDER_RATING='rating';
    const ORDER_RELEVANCY='relevance';
 
    private $orderby='published';
    private $nfeed=array();
 
/**
 * Executer une requete vers l'API Youtube V2 
 * Réponse au format json
 * @param string $keywords 
 */
    public function query($keywords) {
        $url=self::URL_API.$this->orderby.'&q='.urlencode($keywords);
        $feed=@file_get_contents($url);
        if ($feed==false) {
            throw new Exception("Youtube API unavailable !!!");
        }
        $this->nfeed = json_decode($feed, TRUE);
    }
/**
 * Fixer l'ordre de tri
 * @param string $order 
 */
    public function setOrderBy($order) {
        $this->orderby=$order;
    }
/**
 * Retourner le tableau des videos
 * @return array
 */
    public function getFeed() {
        return $this->nfeed;   
    }
/**
 * Exemple d'affichage des videos
 */
    public function sampleView() {
        $buf='';
        foreach ($this->nfeed['feed']['entry'] as $entry) {
            $item=self::HTML_ITEM;
            //tumb
            $item=str_replace('{URL_THUMB}', $entry['media$group']['media$thumbnail'][0]['url'],
                $item);
            //link
            $link='<a href="'.$entry['link'][0]['href'].'">'.$entry['title']['$t'].'</a>';
            $item=str_replace('{URL_YOUTUBE}', $link, $item);
            //descr
            $s=trim(substr($entry['media$group']['media$description']['$t'],0,100));
            $item=str_replace('{DESCR}', $s, $item);
            //publié par
            $author=$entry['author'][0]['name']['$t'];
            $item=str_replace('{AUTHOR}', $author, $item);
            //date
            $dt=strtotime($entry['updated']['$t']);
            $item=str_replace('{DATE}', date("d/m/Y H:m:s",$dt), $item);
 
            $buf.=$item;
 
        }
 
        $page=self::HTML_PAGE;
        $page=str_replace('{ROWS}', $buf, $page);
        echo $page;
 
    }
/** code HTML d'une video */
    const HTML_ITEM='<div><table><tr>
        <td rowspan="3">
        <img src="{URL_THUMB}"></td>
        <td>{URL_YOUTUBE}</td>
      </tr>
      <tr>
        <td><span>{DESCR}</span></td>
      </tr>
      <tr>
        <td><span>Ajouté par</span> {AUTHOR} <span>le</span> {DATE}</td>
      </tr></table></div>';
 
/** code HTML de la page **/
    const HTML_PAGE='<!DOCTYPE HTML>
    <html lang="fr-FR">
        <head>
            <meta charset="UTF-8">
            <title>Afficher des videos à partir de Youtube.com - Fobec.com</title>
            <style type="text/css">
            table{border:0px;width:500px}
            img{border:0px;height:90px;width:120px;padding-right:20px}
            a{color:#005C9C;text-decoration:none;font-weight:bold}
            a:hover{color:#005C9C;text-decoration:underline;font-weight:bold}
            span{font-size:0.8em;color:#666666}
            div{padding:10px;border-bottom:1px solid #c0c0c0;width:520px}
            </style>
        </head>
        <body>    
        {ROWS}
        </body>
    </html>';
}
?>

Exemple de recherche et d'affichage des videos

Le script ci-dessous affiche les vidéos youtube pour les mots clés 'marché noel' et filtré suivant la pertinence de la recherche.
<?php
$YoutubeFeed=new YoutubeFeed();
try {
    $YoutubeFeed->setOrderBy(YoutubeFeed::ORDER_RELEVANCY);
    $YoutubeFeed->query('marche noel');
    $YoutubeFeed->sampleView();
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

1119_youtubeL'affichage choisi est minimaliste, à savoir:
- vignette de la vidéo,
- titre et lien vers le YouTube,
- description,
- date et auteur de la video.

En fait, le flux comporte de nombreuses données au sujet de chaque vidéo. La liste complete peut etre obtenue avec print_r($YoutubeFeed->getFeed()).

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
16/11/2012
Visualisation
vu 4736 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 264 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Fobec dans php5

Bonjour,
vous pouvez poster un message sur le forum, la communaut vous donnera un coup de main pour la mise en place du script.

Publié par Souti dans php5

Merci pour ce code. Trs utile.

Pour mon cas, il a fallu que j'ajoute une } avant ?> le pour fermer le for each.

Publié par Fobec dans java

oups quelques lignes manquent sur ce code ! ... l'exemple est corrige et complet
Merci Tom

Publié par Daxentuut dans java

Avec les imports c'est mieux :

import java.awt.AWTException
import java.awt.Robot
import java.awt.event.KeyEvent
import java.io.IOException
import java.util.logging.Level
import...

Publié par Outsourcing dans news

Le PageRank n'a plus une reelle importance a mon humble avis mais bcp de mes clients continue a juger de la qualite de ma prestation en referencement avec la barre verte!