Skip to content

Instantly share code, notes, and snippets.

@bazooka07
Last active September 21, 2018 09:08
Show Gist options
  • Save bazooka07/6003b65feb62eca47a520ce26cbfaf09 to your computer and use it in GitHub Desktop.
Save bazooka07/6003b65feb62eca47a520ce26cbfaf09 to your computer and use it in GitHub Desktop.
Convert m3u playlist in Ka-Radio format
#EXTM3U
# Hello, mostly webradios from France.
# They are independant radios. Support them !
# Ferarock network. Mostly rock music
# http://ferarock.org/
#EXTINF: -1, 666
http://radio666.net:8000/666.mp3
#EXTINF: -1, BEAUB’FM
http://beaubfm2.ice.infomaniak.ch/beaubfm2-96.mp3
#EXTINF: -1, C’ROCK Radio
http://stric6.streamakaci.com/crock.mp3
#EXTINF: -1, CANAL B
http://stream.levillage.org/canalb?13623084951917.mp3
#EXTINF: -1, CIBL
http://stream02.ustream.ca:80/cibl128.mp3
#EXTINF: -1, CISM
http://stream03.ustream.ca/cism128.mp3
#EXTINF: -1, EQUINOXE
http://live.equinoxenamur.be:8000/Equinoxe.mp3
#EXTINF: -1, FMR
http://www.giss.tv:8000/radio-fmr.mp3
#EXTINF: -1, FRÉQUENCE MUTINE
http://icecast.infini.fr:8000/mutine
#EXTINF: -1, L’EKO DES GARRIGUES
http://91.121.159.124:8000/eko-des-garrigues-128k.mp3
#EXTINF: -1, RADIO ACTIV’
http://151.80.115.65:8000/activ.mp3
#EXTINF: -1, RADIO ALPA
http://www.radioalpa.com:8000/
#EXTINF: -1, RADIO BALLADE
http://149.202.186.120/Ballade
#EXTINF: -1, RADIO BÉTON
http://51.254.220.198:8000/stream
#EXTINF: -1, RADIO COTEAUX
http://str80.streamakaci.com:7960/;stream.mp3
#EXTINF: -1, RADIO DIO
http://live.francra.org:8000/RadioDio
#EXTINF: -1, RADIO EN CONSTRUCTION
http://str0.creacast.com:80/rec
#EXTINF: -1, RADIO PANIK
http://streaming.domainepublic.net:8000/radiopanik.ogg
#EXTINF: -1, RADIO PFM
http://178.33.237.20:8000/stream.mp3.m3u
#EXTINF: -1, RADIO PRIMITIVE
http://www.radioprimitive.fr:8000/live
#EXTINF: -1, RADIO PULSE
http://media.radiopulse.fr:8080/pulse
#EXTINF: -1, RCV
http://www.radioking.com/play/rcv99fm
#EXTINF: -1, RQC
http://5.39.80.55:8000/flux.mp3
#EXTINF: -1, SOL FM
http://stric6.streamakaci.com/solfm64.mp3
# Bretagne
#EXTINF:-1,Radio Kreizh Breizh
http://rkb.online.stalig.net/live.mp3
#EXTINF:-1,Radio Evasion
http://radioevasion.fr:8020/
#EXTINF:-1,Radio Bro Gwened
http://rbg.online.radiobreizh.bzh/live.mp3
#EXTINF:-1,Arvoriz FM
http://arvorig-fm.online.radiobreizh.bzh/live.mp3
#EXTINF:-1,Radio Kerne
http://kerne.online.radiobreizh.bzh/live.mp3
#EXTINF:-1,Plum' FM
http://plumfm.online.stalig.net/live.mp3
# Rhône-Alpes, mostly FRANCRA network
# http://live.francra.org:8000/
#EXTINF:-1,Radio Canut
http://live.francra.org:8000/radiocanut
#EXTINF:-1,Déclic Radio - Tournon
http://live.francra.org:8000/DeclicRadio
#EXTINF:-1,Radio Alto
http://live.francra.org:8000/Radio-Alto
#EXTINF:-1,Radio Mega
http://live.francra.org:8000/Radio-Mega
#EXTINF:-1,Couleurs FM
http://live.francra.org:8000/CouleursFM
#EXTINF:-1,Fréquence 7
http://live.francra.org:8000/Frequence7
#EXTINF:-1,R-Dwa
http://live.francra.org:8000/R-Dwa
#EXTINF:-1,Radio Grésivaudan
http://live.francra.org:8000/Radio-Gresivaudan
#EXTINF:-1,Radio M Montélimar
http://live.francra.org:8000/Radio-M-Montelimar
#EXTINF:-1,Radio M Nyons
http://live.francra.org:8000/Radio-M-Nyons
#EXTINF:-1,Radio New's Fm
http://live.francra.org:8000/RadioNewsFM
#EXTINF:-1,Radio Saint-Affrique
http://live.francra.org:8000/RadioSaintAffrique
#EXTINF:-1,Radio Saint-Férreol
http://live.francra.org:8000/RadioSaintFerreol
#EXTINF:-1,Radio d'Ici
http://live.francra.org:8000/Radiodici
#EXTINF:-1,Radio Royans
http://live.francra.org:8000/radioroyans
#EXTINF:-1,RVR Radio
http://live.francra.org:8000/rvrradio
#EXTINF:-1,Tropiques FM
http://live.francra.org:8000/TropiquesFM
#EXTINF:-1,Radio Chartreuse
http://live.francra.org:8000/chartreuse.ogg
#EXTINF:-1,Radio RDB
http://sv3.vestaradio.com:9450
#EXTINF:-1,Radio Pluriel
http://mp3.live.tv-radio.com/plurielfm/all/plurielfm.mp3
#EXTINF:-1,Radio ZIG-ZAG
http://188.165.237.167:8020/
#EXTINF:-1,Radio Pytagor
http://streaming.radiopytagor.net:8000/fever-128.mp3
# Fédération des radios associatives du Nord de la France
# http://franf.fr/
#EXTINF:-1,Radio Boomerang
http://109.190.81.136:8000/radioboomerang.mp3
#EXTINF:-1,Radio SCARPE SENSEE
http://217.16.3.147:8000/radioscarpesensee.mp3
#EXTINF:-1,Banquise FM
http://94.23.21.126:10050
#EXTINF:-1,Canal FM
http://mp3lg3.tdf-cdn.com/4532/canalfmhd.mp3
#EXTINF:-1,Radio Club
http://radio-shoutcast2.cyber-streaming.com:8128
#EXTINF:-1, Planète FM Arras
http://ice4.infomaniak.ch:80/planetefm-64.aac
#EXTINF:-1,Radio UYLENSPIEGEL
http://serveur.wanastream.com:43100/
#EXTINF:-1,Transat FM
http://91.121.62.121:9700/
#EXTINF:-1,Radio Plus
http://91.121.62.121:7500/
{"Name":"666","URL":"radio666.net","File":"/666.mp3","Port":"8000","ovol":"0"}
{"Name":"BEAUB’FM","URL":"beaubfm2.ice.infomaniak.ch","File":"/beaubfm2-96.mp3","Port":"80","ovol":"0"}
{"Name":"C’ROCK Radio","URL":"stric6.streamakaci.com","File":"/crock.mp3","Port":"80","ovol":"0"}
{"Name":"CANAL B","URL":"stream.levillage.org","File":"/canalb?13623084951917.mp3","Port":"80","ovol":"0"}
{"Name":"CIBL","URL":"stream02.ustream.ca","File":"/cibl128.mp3","Port":"80","ovol":"0"}
{"Name":"CISM","URL":"stream03.ustream.ca","File":"/cism128.mp3","Port":"80","ovol":"0"}
{"Name":"EQUINOXE","URL":"live.equinoxenamur.be","File":"/Equinoxe.mp3","Port":"8000","ovol":"0"}
{"Name":"FMR","URL":"www.giss.tv","File":"/radio-fmr.mp3","Port":"8000","ovol":"0"}
{"Name":"FRÉQUENCE MUTINE","URL":"icecast.infini.fr","File":"/mutine","Port":"8000","ovol":"0"}
{"Name":"L’EKO DES GARRIGUES","URL":"91.121.159.124","File":"/eko-des-garrigues-128k.mp3","Port":"8000","ovol":"0"}
{"Name":"RADIO ACTIV’","URL":"151.80.115.65","File":"/activ.mp3","Port":"8000","ovol":"0"}
{"Name":"RADIO ALPA","URL":"www.radioalpa.com","File":"/","Port":"8000","ovol":"0"}
{"Name":"RADIO BALLADE","URL":"149.202.186.120","File":"/Ballade","Port":"80","ovol":"0"}
{"Name":"RADIO BÉTON","URL":"51.254.220.198","File":"/stream","Port":"8000","ovol":"0"}
{"Name":"RADIO COTEAUX","URL":"str80.streamakaci.com","File":"/;stream.mp3","Port":"7960","ovol":"0"}
{"Name":"RADIO DIO","URL":"live.francra.org","File":"/RadioDio","Port":"8000","ovol":"0"}
{"Name":"RADIO EN CONSTRUCTION","URL":"str0.creacast.com","File":"/rec","Port":"80","ovol":"0"}
{"Name":"RADIO PANIK","URL":"streaming.domainepublic.net","File":"/radiopanik.ogg","Port":"8000","ovol":"0"}
{"Name":"RADIO PFM","URL":"178.33.237.20","File":"/stream.mp3.m3u","Port":"8000","ovol":"0"}
{"Name":"RADIO PRIMITIVE","URL":"www.radioprimitive.fr","File":"/live","Port":"8000","ovol":"0"}
{"Name":"RADIO PULSE","URL":"media.radiopulse.fr","File":"/pulse","Port":"8080","ovol":"0"}
{"Name":"RCV","URL":"www.radioking.com","File":"/play/rcv99fm","Port":"80","ovol":"0"}
{"Name":"RQC","URL":"5.39.80.55","File":"/flux.mp3","Port":"8000","ovol":"0"}
{"Name":"SOL FM","URL":"stric6.streamakaci.com","File":"/solfm64.mp3","Port":"80","ovol":"0"}
{"Name":"Radio Kreizh Breizh","URL":"rkb.online.stalig.net","File":"/live.mp3","Port":"80","ovol":"0"}
{"Name":"Radio Evasion","URL":"radioevasion.fr","File":"/","Port":"8020","ovol":"0"}
{"Name":"Radio Bro Gwened","URL":"rbg.online.radiobreizh.bzh","File":"/live.mp3","Port":"80","ovol":"0"}
{"Name":"Arvoriz FM","URL":"arvorig-fm.online.radiobreizh.bzh","File":"/live.mp3","Port":"80","ovol":"0"}
{"Name":"Radio Kerne","URL":"kerne.online.radiobreizh.bzh","File":"/live.mp3","Port":"80","ovol":"0"}
{"Name":"Plum' FM","URL":"plumfm.online.stalig.net","File":"/live.mp3","Port":"80","ovol":"0"}
{"Name":"Radio Canut","URL":"live.francra.org","File":"/radiocanut","Port":"8000","ovol":"0"}
{"Name":"Déclic Radio - Tournon","URL":"live.francra.org","File":"/DeclicRadio","Port":"8000","ovol":"0"}
{"Name":"Radio Alto","URL":"live.francra.org","File":"/Radio-Alto","Port":"8000","ovol":"0"}
{"Name":"Radio Mega","URL":"live.francra.org","File":"/Radio-Mega","Port":"8000","ovol":"0"}
{"Name":"Couleurs FM","URL":"live.francra.org","File":"/CouleursFM","Port":"8000","ovol":"0"}
{"Name":"Fréquence 7","URL":"live.francra.org","File":"/Frequence7","Port":"8000","ovol":"0"}
{"Name":"R-Dwa","URL":"live.francra.org","File":"/R-Dwa","Port":"8000","ovol":"0"}
{"Name":"Radio Grésivaudan","URL":"live.francra.org","File":"/Radio-Gresivaudan","Port":"8000","ovol":"0"}
{"Name":"Radio M Montélimar","URL":"live.francra.org","File":"/Radio-M-Montelimar","Port":"8000","ovol":"0"}
{"Name":"Radio M Nyons","URL":"live.francra.org","File":"/Radio-M-Nyons","Port":"8000","ovol":"0"}
{"Name":"Radio New's Fm","URL":"live.francra.org","File":"/RadioNewsFM","Port":"8000","ovol":"0"}
{"Name":"Radio Saint-Affrique","URL":"live.francra.org","File":"/RadioSaintAffrique","Port":"8000","ovol":"0"}
{"Name":"Radio Saint-Férreol","URL":"live.francra.org","File":"/RadioSaintFerreol","Port":"8000","ovol":"0"}
{"Name":"Radio d'Ici","URL":"live.francra.org","File":"/Radiodici","Port":"8000","ovol":"0"}
{"Name":"Radio Royans","URL":"live.francra.org","File":"/radioroyans","Port":"8000","ovol":"0"}
{"Name":"RVR Radio","URL":"live.francra.org","File":"/rvrradio","Port":"8000","ovol":"0"}
{"Name":"Tropiques FM","URL":"live.francra.org","File":"/TropiquesFM","Port":"8000","ovol":"0"}
{"Name":"Radio Chartreuse","URL":"live.francra.org","File":"/chartreuse.ogg","Port":"8000","ovol":"0"}
{"Name":"Radio RDB","URL":"sv3.vestaradio.com","File":"/","Port":"9450","ovol":"0"}
{"Name":"Radio Pluriel","URL":"mp3.live.tv-radio.com","File":"/plurielfm/all/plurielfm.mp3","Port":"80","ovol":"0"}
{"Name":"Radio ZIG-ZAG","URL":"188.165.237.167","File":"/","Port":"8020","ovol":"0"}
{"Name":"Radio Pytagor","URL":"streaming.radiopytagor.net","File":"/fever-128.mp3","Port":"8000","ovol":"0"}
{"Name":"Radio Boomerang","URL":"109.190.81.136","File":"/radioboomerang.mp3","Port":"8000","ovol":"0"}
{"Name":"Radio SCARPE SENSEE","URL":"217.16.3.147","File":"/radioscarpesensee.mp3","Port":"8000","ovol":"0"}
{"Name":"Banquise FM","URL":"94.23.21.126","File":"/","Port":"10050","ovol":"0"}
{"Name":"Canal FM","URL":"mp3lg3.tdf-cdn.com","File":"/4532/canalfmhd.mp3","Port":"80","ovol":"0"}
{"Name":"Radio Club","URL":"radio-shoutcast2.cyber-streaming.com","File":"/","Port":"8128","ovol":"0"}
{"Name":"Planète FM Arras","URL":"ice4.infomaniak.ch","File":"/planetefm-64.aac","Port":"80","ovol":"0"}
{"Name":"Radio UYLENSPIEGEL","URL":"serveur.wanastream.com","File":"/","Port":"43100","ovol":"0"}
{"Name":"Transat FM","URL":"91.121.62.121","File":"/","Port":"9700","ovol":"0"}
{"Name":"Radio Plus","URL":"91.121.62.121","File":"/","Port":"7500","ovol":"0"}
#!/usr/bin/env php
<?php
# Under Linux, make "chmod a+x m3u.php"
$filename = 'french-radios.m3u';
// $content = mb_convert_encoding(file_get_contents($filename), 'UTF-8', 'windows-1251');
$content = file_get_contents($filename);
// echo $content;
const MASK = '@^#EXTINF:\s*-1,\s*(.*)\nhttps?://([^/:]*)(?::(\d+))?(/?.*)$@m';
const FMT = <<< FMT
{"Name":"%s","URL":"%s","File":"%s","Port":"%s","ovol":"0"}
FMT;
if(preg_match_all(MASK, $content, $matches, PREG_SET_ORDER)) {
// var_dump($matches);
$output = array_map(function($radio) {
// $radio[1] is the title, $radio[2] is the hostname
$port = (!empty($radio[3])) ? $radio[3] : '80';
$script = (!empty($radio[4])) ? $radio[4] : '/';
$record = sprintf(FMT, str_replace('"', '\'', $radio[1]), $radio[2], $script, $port);
echo "$record\n";
return $record;
}, $matches);
$new_filename = preg_replace('@\.\w+$@', '.txt', $filename);
file_put_contents($new_filename, implode("\r\n", $output));
printf('%d radios in "%s" file'.PHP_EOL, count($output), $new_filename);
} else {
printf('No record in "%s" file'.PHP_EOL, $filename);
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment