update to current services_mediatomb api
[enigtomb.git] / DreamboxBouqets.php
index e035b6d9ef470b72f1ae6d8f674af0618f5fed5d..3541e6b0bddca6c09000847e0880cbad197d2264 100644 (file)
@@ -10,11 +10,53 @@ class DreamboxBouqets
     /**
     * Fetch radio bouqets
     *
-    * @param string $ip IP-address or hostname of the dreambox
+    * @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)
+    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';
@@ -23,11 +65,8 @@ class DreamboxBouqets
         $url_bouqet_epg      = $host . '/web/epgnow?bRef=';
         $url_stream          = $streamhost . '/';
 
-        //TODO: fetch from dreambox config.js
-        $bouqet_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)FROM BOUQUET "bouquets.radio" ORDER BY bouquet';
 
-
-        $url = $url_getServices . urlencode($bouqet_radio);
+        $url = $url_getServices . urlencode($sql);
         $radiobouqets = new SimpleXMLElement(
             file_get_contents($url)
         );
@@ -46,30 +85,32 @@ class DreamboxBouqets
                     $url
                 )
             );
+
             foreach ($stations->e2service as $station) {
                 $strStationRef = (string)$station->e2servicereference;
                 $arBouqets[$strBouqetName][$strStationRef] = array(
                     'name'     => (string)$station->e2servicename,
-                    'playlist' => $url_stream_playlist . $strStationRef,
-                    'stream'   => $url_stream . $strStationRef
+                    'playlist' => $url_stream_playlist . self::encodeUrl($strStationRef),
+                    'stream'   => $url_stream . self::encodeUrl($strStationRef),
                 );
             }
 
-            $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) {
+                $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;
@@ -77,10 +118,29 @@ class DreamboxBouqets
 
 
 
+    /**
+    * 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(..)
 }
 
 ?>
\ No newline at end of file