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

Publié par mohinfo dans CMS

je vous demande un mini projet delphi pour gérer la base de donnée

Publié par fffffff dans php5

comment est-ce que les joueurs s'inscrivent, utilisez-vous PHP ?

Publié par ali dans logiciel

it is very good i am very happy becose for hand cap helpn tha is a good work

Publié par titi dans tuto

test de ce truc! eh ben exigeant en plus

Publié par Neoray dans java

Ce tuto m'a bien depanne. Par contre pour une utilisation avec les heures, il me semble qu'il y a une notion de GTM a mettre en plus.
Merci ;)