* @license LGPL http://www.gnu.org/copyleft/lesser.html */ class DreamboxBouqets { /** * Fetch radio bouqets * * @param string $ip IP-address or hostname of the dreambox * @param boolean $bEpgData If EPG data shall be fetched, too * * @return array Array of bouqets and the items */ public static function fetchRadioBouqets($ip, $bEpgData = true) { return self::fetchBouqets( $ip, //TODO: fetch from dreambox config.js '1:7:2:0:0:0:0:0:0:0:(type == 2)FROM BOUQUET "bouquets.radio" ORDER BY bouquet', $bEpgData ); }//public static function fetchRadioBouqets(..) /** * Fetch TV bouqets * * @param string $ip IP-address or hostname of the dreambox * @param boolean $bEpgData If EPG data shall be fetched, too * * @return array Array of bouqets and the items */ public static function fetchTvBouqets($ip, $bEpgData = true) { return self::fetchBouqets( $ip, //TODO: fetch from dreambox config.js '1:7:2:0:0:0:0:0:0:0:(type == 2)FROM BOUQUET "bouquets.tv" ORDER BY bouquet', $bEpgData ); }//public static function fetchTvBouqets(..) /** * Fetch bouqets * * @param string $ip IP-address or hostname of the dreambox * @param string $sql SQL query to fetch bouqet from database * @param boolean $bEpgData If EPG data shall be fetched, too * * @return array Array of bouqets (name is key) and the items (sub arrays) */ public static function fetchBouqets($ip, $sql, $bEpgData = true) { $host = 'http://' . $ip; $streamhost = 'http://' . $ip . ':8001'; $url_getServices = $host . "/web/getservices?sRef="; $url_stream_playlist = $host . '/web/stream.m3u?ref='; $url_bouqet_epg = $host . '/web/epgnow?bRef='; $url_stream = $streamhost . '/'; $url = $url_getServices . urlencode($sql); $radiobouqets = new SimpleXMLElement( file_get_contents($url) ); $arBouqets = array(); foreach ($radiobouqets->e2service as $bouqet) { $strBouqetName = self::properBouqetName($bouqet->e2servicename); $arBouqets[$strBouqetName] = array(); $strRef = $bouqet->e2servicereference; $url = $url_getServices . urlencode($strRef); $epgurl = $url_bouqet_epg . urlencode($strRef); $stations = new SimpleXMLElement( file_get_contents( $url ) ); foreach ($stations->e2service as $station) { $strStationRef = (string)$station->e2servicereference; $arBouqets[$strBouqetName][$strStationRef] = array( 'name' => (string)$station->e2servicename, 'playlist' => $url_stream_playlist . self::encodeUrl($strStationRef), 'stream' => $url_stream . self::encodeUrl($strStationRef), ); } if ($bEpgData) { $epgs = new SimpleXMLElement( file_get_contents($epgurl) ); foreach ($epgs->e2event as $epg) { $strStationRef = (string)$epg->e2eventservicereference; $arBouqets[$strBouqetName][$strStationRef] = array_merge( $arBouqets[$strBouqetName][$strStationRef], array( 'epgtitle' => (string)$epg->e2eventtitle, 'epgdescription' => (string)$epg->e2eventdescription, 'epgdescription2' => (string)$epg->e2eventdescriptionextendet, ) ); } }//if $bEpgData } return $arBouqets; }//public static function fetchRadioBouqets(..) /** * Fix the given bouqet name, make it a nice readable one. * Removes some special chars and spaces. * * @param string $name Bouqet name * * @return string Fixed bouqet name */ protected static function properBouqetName($name) { return trim(preg_replace('#\(.+\)$#', '', $name)); }//protected static function properBouqetName(..) protected static function encodeUrl($strUrl) { return str_replace( array(' ', '"'), array('%20', '%22'), $strUrl ); }//protected static function encodeUrl(..) } ?>