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

Publié par Fobec dans news

Bonjour,
la localisation des adresses ip utilise plusieurs algo de recherche de position geographique. La precision du rapport d'analyse correspond la qualite de la localisation:
9/10 la locali...

Publié par Fobec dans java

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

Publié par angelofchaos dans java

Marche très bien , merci beaucoup :)

Publié par Diviciakos dans CMS

Merci ! Bonne continuation

Publié par Sophie dans tuto

Merci pour cette explication claire qui m'aide grandement... JS et moi, on est pas encore copain !