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;
}
Je viens d'essayer avec cette url :
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" ;)
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.
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
Merci de ta réponse ;) tu viens de résoudre un problème qui me faisait ch*** depuis un bon moment ^^