diff --git a/bassofeed.php b/bassofeed.php index 87c81e2..bff14df 100644 --- a/bassofeed.php +++ b/bassofeed.php @@ -1,4 +1,5 @@ show = $show; - $this->cachefile = "./cache/{$this->show}.txt"; - $this->cachetime = 900; - + + function __construct($show) { + $this->show = $show; + $this->cachefile = "./cache/{$this->show}.txt"; + $this->cachetime = 900; + $this->generate(); } - + /** * generate - * + * * The action sequence of the script. * Used to run the process: * * cache verification * * scraping - * * gets + * * gets * * @return void * @author Ismo Vuorinen - **/ - function generate() - { + * */ + function generate() { // Load the data - $data = $this->cache(); - + $data = $this->cache(); + // Process the data - $this->showinfo = $this->get_showinfo($data); - $this->showtimes = $this->get_showtimes($data); - + $this->showinfo = $this->get_showinfo($data); + $this->showtimes = $this->get_showtimes($data); + // Echo the iCal $this->get_ical(); } - + /** * cache * Fetches the page to a cachefile and returns it * * @return mixed * @author Ismo Vuorinen - **/ - function cache() - { + * */ + function cache() { $filemtime = 0; - if( is_readable($this->cachefile) ) { - $filemtime = filemtime($this->cachefile); + if (is_readable($this->cachefile)) { + $filemtime = filemtime($this->cachefile); } - if( - !$filemtime || (time() - $filemtime >= $this->cachetime) + if ( + !$filemtime || (time() - $filemtime >= $this->cachetime) ) { $fetch = file_get_html( - "http://www.basso.fi/radio/".$this->show + "http://www.basso.fi/radio/" . $this->show ); file_put_contents($this->cachefile, $fetch); $this->from_cache = false; @@ -115,71 +108,67 @@ class BassoFeed return file_get_html($this->cachefile); } } - + /** * get_showtimes * Process loaded showpage and find our showtimes * @param mixed $fetch * @uses simple_html_dom::find|simple_html_dom::innertext */ - function get_showtimes($fetch) - { + function get_showtimes($fetch) { // Find our sidebar columns and get the insides - foreach($fetch->find('div.column_entry') as $m) { + foreach ($fetch->find('div.column_entry') as $m) { $div = $m->innertext; $items[] = $div; } - + // List of finnish daynames for elimination from the strings $finnish_dates = array( "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai", "Sunnuntai" ); - + // Take the found broadcast times, strip tags and explode it $items = $items[1]; $items = str_replace("
", "|", $items); $items = str_replace("Tulevia lähetysaikoja", "", $items); $items = explode("|", strip_tags($items)); - + // Take the processed showtimes and mangle to right format - foreach ($items as $n => $item) - { + foreach ($items as $n => $item) { $item = trim($item); - if( !empty($item) && strlen($item) > 2 ) - { + if (!empty($item) && strlen($item) > 2) { // Remove finnish daynames $item = str_replace($finnish_dates, "", $item); // Split into 2 vars; start and end times $dates = explode("-", trim($item)); $dates2 = explode(" ", $dates[0]); - - $dates_from = $dates[0]; - $dates_to = $dates2[0]." ".$dates[1]; - + + $dates_from = $dates[0]; + $dates_to = $dates2[0] . " " . $dates[1]; + $date = $dates2[0]; list($day, $month, $year) = explode(".", $date); $date = "20{$year}-$month-$day"; // We are on the 21st cent. - // Unix timestamps - $time_f = strtotime($date." ".$dates2[1]); - $time_t = strtotime($date." ".$dates[1]); - + $time_f = strtotime($date . " " . $dates2[1]); + $time_t = strtotime($date . " " . $dates[1]); + // We take -2 as timezone info 'coz the times are in +2 - $date_f = $this->unixToiCal( $time_f, -2 ); - $date_t = $this->unixToiCal( $time_t, -2 ); - - $stuff[$n]["time_f"] = $time_f; - $stuff[$n]["time_t"] = $time_t; - $stuff[$n]["date_f"] = $date_f; - $stuff[$n]["date_t"] = $date_t; + $date_f = $this->unixToiCal($time_f, -2); + $date_t = $this->unixToiCal($time_t, -2); + + $stuff[$n]["time_f"] = $time_f; + $stuff[$n]["time_t"] = $time_t; + $stuff[$n]["date_f"] = $date_f; + $stuff[$n]["date_t"] = $date_t; } } return $stuff; } - + /** * get_showinfo * Parses the show info from fetched data @@ -187,44 +176,42 @@ class BassoFeed * @return array * @todo Document me * @author Ismo Vuorinen - **/ - function get_showinfo($fetch) - { - foreach($fetch->find('div#main_column_1') as $m) { + * */ + function get_showinfo($fetch) { + foreach ($fetch->find('div#main_column_1') as $m) { $div = $m->innertext; - + $items[] = $div; } - + $title = $fetch->find("h1", 0); $title = $title->plaintext; - + $cleaned = $items[0]; $cleaned = str_replace(" ", " ", $cleaned); $cleaned = strip_tags($cleaned, "

"); $clean_array = explode("\n", $cleaned); foreach ($clean_array as $clean) { - $clean = trim( strip_tags($clean, "

") ); - - if( - strlen( $clean ) > 10 && - !preg_match('/\/i', $clean) ) - { + $clean = trim(strip_tags($clean, "

")); + + if ( + strlen($clean) > 10 && + !preg_match('/\/i', $clean)) { $c[] = $clean; } } - + $cleaned = $c; - + $desc = $cleaned[2]; - - + + $data = array( - "title" => $title, - "desc" => $desc, - "url" => "http://www.basso.fi/radio/" . $this->show + "title" => $title, + "desc" => $desc, + "url" => "http://www.basso.fi/radio/" . $this->show ); - + return $data; } @@ -235,40 +222,52 @@ class BassoFeed * @return str * @todo Document me * @author Ismo Vuorinen - **/ - function get_ical() - { - $cal = "BEGIN:VCALENDAR\n" - ."VERSION:2.0\n" - ."PRODID:-//basso/feed//NONSGML v1.0//EN\n"; - - foreach( $this->showtimes as $i ) - { + * */ + function get_ical() { + $cal = "BEGIN:VCALENDAR\n" + . "VERSION:2.0\n" + . "PRODID:BASSOFEED\n" + . "CALSCALE:GREGORIAN\n" + . "X-WR-TIMEZONE:Etc/GMT\n" + . "METHOD:PUBLISH\n" + . "BEGIN:VTIMEZONE\n" + . "TZID:GMT\n" + . "BEGIN:STANDARD\n" + . "DTSTART:20100101T010000\n" + . "TZOFFSETTO:+0000\n" + . "TZOFFSETFROM:+0000\n" + . "END:STANDARD\n" + . "END:VTIMEZONE\n"; + + foreach ($this->showtimes as $i) { + $cal .= "BEGIN:VEVENT\n" - ."UID:".md5($this->show . $i["date_f"])."@basso.fi\n" - ."DTSTAMP:{$i["date_f"]}\n" - ."DTSTART:{$i["date_f"]}\n" - ."DTEND:{$i["date_t"]}\n" - ."SUMMARY:{$this->showinfo["title"]}\n" - ."DESCRIPTION:{$this->showinfo["desc"]}\n" - ."END:VEVENT\n"; + . "SUMMARY:{$this->showinfo["title"]}\n" + . "DESCRIPTION:{$this->showinfo["desc"]}\n" + . "LOCATION:Basso Radio 102.8 FM\n" + . "UID:{$this->show}-{$i["date_f"]}/basso.fi\n" + . "URL:http://basso.fi/radio/{$this->show}\n" + . "DTSTART;VALUE=DATE-TIME;TZID=GMT:{$i["date_f"]}\n" + . "DTEND;VALUE=DATE-TIME;TZID=GMT:{$i["date_t"]}\n" + . "DTSTAMP:{$i["date_f"]}\n" + . "END:VEVENT\n"; } - + $cal .= "END:VCALENDAR\n"; - - return $cal; + + return str_replace("\n", "\r\n", $cal); } - + /** * unixToiCal * Unix timestamp to iCal spec format * @author chubby at chicks dot com * @see http://fi.php.net/manual/en/function.date.php#83429 * @return str - **/ + * */ function unixToiCal($uStamp = 0, $tzone = 0.0) { $uStampUTC = $uStamp + ($tzone * 3600); - $stamp = date("Ymd\THis\Z", $uStampUTC); + $stamp = date("Ymd\THis\Z", $uStampUTC); return $stamp; }