Publié le 16/11/2012
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
2 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 3861 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Amal dans tuto

pour moi j'ai créé une liste déroulante en liaisant avec la base de donnée déja existant mais la valeur sélectionné ne peut pas etre afficher jamais et...

Publié par pidjey dans php5

J'ai bien lu mais c'est vraiment trop fort et trop dur pour le moment, je sais pas vraiment comprendre vos syntaxes, elles sont enormes et moi, je ne suis qu'encore un debutant en PHP et il faudrait p...

Publié par Broker dans logiciel

C'est impressionnant, ca va devenir difficile de se cacher !

Publié par stam dans tuto

Le code est interessant. Que doit contenir le fichier index ?

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.