Bonjour. ;)

Depuis un petit je cherche à comprendre comment récupérer le statut d'un live sur Dailymotion

J'ai d'abord tester les requêtes via l'API explorer

Ensuite j'ai crée une petite une petite fonction pour récupérer les données :

function getLiveData() { // Récuperation des données
        /* Gestion du cache */
        $cache = LIBRARY . "cache/livestream.tmp";
        if (time() - filemtime($cache) > 300) { // On vérifie si le cache date de plus de 2min
            /* Dailymotion */
            $force_cache = false;
            try {
                $json_daily = json_decode(file_get_contents("https://api.dailymotion.com/user/exitedprotek/videos?fields=broadcasting,title&filters=all-live&sort=recent"), true);
            } catch (Exception $e) {
                $force_cache = true;
            }
            // On crée un tableau avec le contenu des 2 tableaux JSON
            if ($force_cache) {
                $data = unserialize(file_get_contents($cache));
            }
            else {
                $data = $json_daily;
                file_put_contents($cache, serialize($data));
            }
        }
        else { // Si le cache est plus récent on récupère le cache
            $data = unserialize(file_get_contents($cache));
        }
        return $data;
    }

Le problème c'est que l'API ne retourne que "false" pour le champs "broadcasting", j'ai tout essayé mais c'est sans espoir :(

Exemple:

$data = getLiveData();
    echo $data'list'][0]'broadcasting'];

Il me retourne"false" tout le temps :/

EDIT:

Voici la solution ;)

public static function getLiveData($force_update = false) { // Récuperation des données
        /* Gestion du cache */
        $cache = LIBRARY . "cache/livestream.tmp";
        $api_request = "https://api.dailymotion.com/user/exitedprotek/videos?fields=embed_url,onair%2Ctitle%2Curl&search=en+live&sort=old";
        if (time() - filemtime($cache) > 120 || $force_update) { // On vérifie si le cache date de plus de 2min
            $force_cache = false;
            try {
                $json_response = json_decode(file_get_contents($api_request), true);
            } catch (Exception $e) {
                $json_response = unserialize(file_get_contents($cache));;
            }
            $data = $json_response;
            file_put_contents($cache, serialize($data));
        }
        else { // Si le cache est plus récent on récupère le cache
            $data = unserialize(file_get_contents($cache));
        }
        return $data;
    }

7 réponses


Luminus
Réponse acceptée

Je viens d'essayer avec cette url :

https://api.dailymotion.com/user/exitedprotek/videos?fields=broadcasting,title&filters=live&sort=recent

Et j'ai bien aucune vidéo, étant donné que tu ne streames pas actuellement.
J'ai essayé la même chose avec une chaîne qui a un live actif, j'ai bien seulement la vidéo du live qui sort.

EDIT : Trouvé. Tu peux utiliser le champ "onair", c'est exactement ce qu'il te faut, et plus propre que d'utiliser le filtre "live" ;)

ProTeK
Auteur

Up :)

Salut ProTeK,

Je viens de regarder rapidement l'API, et je crois que tu peux utiliser "filters=live" pour récupérer seulement les live en cours.

ProTeK
Auteur

Même en essayant le filtre il me sort la vidéo qui est considérée comme un "live" même si je ne stream pas actuellement :/

PS: J'ai vu qu'il existait un argument "event_video_live_onair" et "event_video_live_offair" qui me retourne un truc du genre "user.x1dyyih.video.live.onAir et "user.x1dyyih.video.live.offAir". Je ne sais pas si il y a un moyen de pouvoir "écouter" cet event

ProTeK
Auteur

Merci de ta réponse ;) tu viens de résoudre un problème qui me faisait ch*** depuis un bon moment ^^

ProTek Tu peut mettre la solution au finals s'il te plait ! je galère la :/

ProTeK
Auteur

J'ai édité mon post ;)