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 4720 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 263 articles
|BIO_PSEUDO|
Commentaires récents

Publié par dinet dans CMS

merci, chokran, thank you

Publié par Fobec dans logiciel

Souhaitez-vous d'informations sur le logiciel foWhoisClient ou sur l'utilisation des Whois ?

Publié par Broker dans logiciel

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

Publié par Celibataire dans news

Le trustrant est pas clair du tout peu d'informations sont disponibles sur lui!

Publié par Axel dans java

Bonjour Kezouille,
je viens de tester sur notre LAN (serveur Windows 7), la surveillance a l'air de marcher.
De votre cote, s'agit-il d'un serveur sous Windows ou sous Linux ?
Pouvez-vou...