[poo php5] récupération des infos des streams de pulsradio

Contenu du snippet

Hello all ^^

Aparté : je venais d'écrire une très belle introduction et j'étais sur le point d'envoyer la source mais mon ****** de navigateur (FF) a décidé de planter et j'ai donc une flemme monstrueuse de tout recommencer mais pour vous, je vais surmonter ça =)
Bref.

Comme j'écoute presque tout le temps la radio PulsRadio et ses petites sœurs (Puls Version 80, Puls Version 90 et Puls Trance), j'ai eu envie de mettre l'info du stream de chaque radios sur un site web (par info du stream j'entends l'artiste et le titre) avec une mise à jour en direct live. J'ai donc cherché sur le Net un script étant capable d'effectuer ceci mais en vain. J'ai donc envie de citer ceci : on est jamais mieux servit que par soit même ^^
J'ai donc créé une classe PHP5 permettant de récupérer l'info de ces streams.
C'est une petite classe (4 méthodes, 2 variables de classe) mais elle a 2 principales fonctionnalités :
- Récupération de chaînes de caractères contenant les infos du stream des ou de la radio(s) contenu dans un tableau
- Possibilité de trier ces infos dans des sous-tableau (artiste, titre et information optionnelle).

Plutôt qu'un long discours, voici ci-dessous le code de la classe, et plus loin les explication de son utilisation :p

Source / Exemple :


<?php
class PulsRadioStreamInfo {
    private $infoType = NULL;
    private $infos = array();
    
    public function PulsRadioStreamInfo($infoType = 'all') {
        $this->infoType = $infoType;
        
        $this->infos['classique'] = $this->getStringsFromFile('<p align="left">PulsRadio : ', ' </p>');
        $this->infos['80'] = $this->getStringsFromFile('<p align="left">Puls Version 80 : ', ' </p>');
        $this->infos['90'] = $this->getStringsFromFile('<p align="left">Puls Version  90 : ', ' </p>');
        $this->infos['trance'] = $this->getStringsFromFile('<p align="left">Puls Trance : ', ' </p>');
    }
    
    private function getStringsFromFile($openingMarker, $closingMarker) {
        $openingMarkerLength = strlen($openingMarker);
        $closingMarkerLength = strlen($closingMarker);
        $text = file_get_contents('http://wmp.pulsradio.fr/');
        $result = array();
        $position = 0;
        
        while (($position = strpos($text, $openingMarker, $position)) !== FALSE) {
            $position += $openingMarkerLength;
            if (($closingMarkerPosition = strpos($text, $closingMarker, $position)) !== FALSE) {
                $result[] = substr($text, $position, $closingMarkerPosition - $position);
                $position = $closingMarkerPosition + $closingMarkerLength;
            }
        }
        return $result[0];
    }
    
    private function getSecondaryInfos($text) {
        $sec_texts = explode('-', $text, 2);
        $num = count($sec_texts);
        
    	if ($num == 1) {
            return $text;
        } elseif ($num == 2) {
            if (ereg('(.*) \((.*)\)', trim($sec_texts[1]), $regs)) {
                $title = $regs[1];
                $extra = $regs[2];
            } else {
                $title = $sec_texts[1];
                $extra = NULL;
            }
            $return['artist'] = trim($sec_texts[0]);
            $return['title'] = $title;
	        $return['extra'] = $extra;
            
            return $return;
        } else {
            return FALSE;
        }
    }
    
    public function getInfos($getSecondaryInfos = FALSE) {
        switch ($this->infoType) {
            case 'classique':
            case '80':
            case '90':
            case 'trance':
                if ($getSecondaryInfos == TRUE) {
                    return $this->getSecondaryInfos($this->infos[$this->infoType]);
                } else {
                    return $this->infos[$this->infoType];
                }
            case 'all':
            default:
                if ($getSecondaryInfos == TRUE) {
                    $return['PulsRadio'] = $this->getSecondaryInfos($this->infos['classique']);
                    $return['Puls Version 80'] = $this->getSecondaryInfos($this->infos['80']);
                    $return['Puls Version 90'] = $this->getSecondaryInfos($this->infos['90']);
                    $return['Puls Trance'] = $this->getSecondaryInfos($this->infos['trance']);
                } else {
                    $return['PulsRadio'] = $this->infos['classique'];
                    $return['Puls Version 80'] = $this->infos['80'];
                    $return['Puls Version 90'] = $this->infos['90'];
                    $return['Puls Trance'] = $this->infos['trance'];
                }
                
                return $return;
            break;
        }
    }
}
?>

Conclusion :


Utilisation assez simple :

Instantation avec comme unique paramètre :
- 'all' ou rien : retourne les infos de toutes les radios
- 'classique' : PulsRadio
- '80' : Puls Version 80
- '90' : Puls Version 90
- 'trance' : Puls Trance
Ici on veux les infos de toutes les radios.

$PulsRadioStreamInfo = new PulsRadioStreamInfo();

Affichage des infos en chaîne de caractères :

foreach ($PulsRadioStreamInfo->getInfos() as $stream_name => $stream_infos) {
echo $stream_name.' : '.$stream_infos.'<br>';
}

La boucle foreach ci-dessous va par exemple afficher :

PulsRadio : Lolo - Il t Aime (Cut Mix)
Puls Version 80 : Scotch - Disco Band (Extended 12'' Version)
Puls Version 90 : EXCESS - The Night (1994)
Puls Trance : Ferry Corsten - Star Traveller (Hydroid Remix)

Activation des sous-tableaux (ajout du paramètre TRUE à la méthode getInfos) :

print_r($PulsRadioStreamInfo->getInfos(TRUE));

Ceci affiche :

Array
(
[PulsRadio] => Array
(
[artist] => Lolo
[title] => Il t Aime
[extra] => Cut Mix
)

[Puls Version 80] => Array
(
[artist] => Scotch
[title] => Disco Band
[extra] => Extended 12'' Version
)

[Puls Version 90] => Array
(
[artist] => EXCESS
[title] => The Night
[extra] => 1994
)

[Puls Trance] => Array
(
[artist] => Ferry Corsten
[title] => Star Traveller
[extra] => Hydroid Remix
)
)

La clé [extra] peut être vide si aucune information complémentaire n'est donnée par le stream.
Si le stream contient une chaîne de caractère qui ne contient pas d'information d'une musique (fréquent sur les radios de

PulsRadio), cette chaîne sera retourné à la place des informations. Exemple : Un son Made In France toutes les heures

Voilà ^^

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.