2 ? 2 : $period; else : printError("default_fetch_limit는 1, 2, 3, 4, 5, 6, 7만 가능합니다."); exit; endif; endif; if(is_null($default_icon_url) == True) : printError("epg2xml.json 파일의 default_icon_url항목이 없습니다."); exit; else : $IconUrl = $default_icon_url; endif; if(empty($default_rebroadcast)) : printError("epg2xml.json 파일의 default_rebroadcast항목이 없습니다."); exit; else : if(in_array($default_rebroadcast, array("y", "n"))) : $addrebroadcast = $default_rebroadcast; else : printError("default_rebroadcast는 y, n만 가능합니다."); exit; endif; endif; if(empty($default_episode)) : printError("epg2xml.json 파일의 default_episode항목이 없습니다."); exit; else : if(in_array($default_episode, array("y", "n"))) : $addepisode = $default_episode; else : printError("default_episode는 y, n만 가능합니다."); exit; endif; endif; if(empty($default_verbose)) : printError("epg2xml.json 파일의 default_verbose항목이 없습니다."); exit; else : if(in_array($default_verbose, array("y", "n"))) : $addverbose = $default_verbose; else : printError("default_verbose는 y, n만 가능합니다."); exit; endif; endif; } catch(Exception $e) { printError($e->getMessage()); exit; } endif; } catch(Exception $e) { printError($e->getMessage()); exit; } endif; if($output == "display") : $fp = fopen('php://output', 'w+'); if ($fp === False) : printError(DISPLAY_ERROR); exit; else : try { getEpg(); fclose($fp); } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; elseif($output == "file") : if($default_xml_file) : $fp = fopen($default_xml_file, 'w+'); if ($fp === False) : printError(FIEL_ERROR); exit; else : try { getEpg(); fclose($fp); } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; else : printError("epg2xml.json 파일의 default_xml_file항목이 없습니다."); exit; endif; elseif($output == "socket") : if($default_xml_socket) : $default_xml_socket = "unix://".$default_xml_socket; $fp = @fsockopen($default_xml_socket, -1, $errno, $errstr, 30); if ($fp === False) : printError(SOCKET_ERROR); exit; else : try { getEpg(); fclose($fp); } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; else : printError("epg2xml.json 파일의 default_xml_socket항목이 없습니다."); exit; endif; endif; function getEPG() { $fp = $GLOBALS['fp']; $MyISP = $GLOBALS['MyISP']; $Channelfile = __DIR__."/Channel.json"; $IconUrl = ""; $ChannelInfos = array(); try { $f = @file_get_contents($Channelfile); if($f === False) : printError("Channel.".JSON_FILE_ERROR); exit; else : try { $Channeldatas = json_decode($f, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception("Channel.".JSON_SYNTAX_ERROR); } catch(Exception $e) { printError($e->getMessage()); exit; } endif; } catch(Exception $e) { printError($e->getMessage()); exit; } header("Content-Type: application/xml; charset=utf-8"); fprintf($fp, "\n"); fprintf($fp, "\n\n"); fprintf($fp, "\n", VERSION); foreach ($Channeldatas as $Channeldata) : #Get Channel & Print Channel info if($Channeldata['Enabled'] == 1) : $ChannelId = $Channeldata['Id']; $ChannelName = htmlspecialchars($Channeldata['Name'], ENT_XML1); $ChannelSource = $Channeldata['Source']; $ChannelServiceId = $Channeldata['ServiceId']; $ChannelIconUrl = htmlspecialchars($Channeldata['Icon_url'], ENT_XML1); if($MyISP != "ALL" && $Channeldata[$MyISP.'Ch'] != Null): $ChannelInfos[] = array($ChannelId, $ChannelName, $ChannelSource, $ChannelServiceId); $Channelnumber = $Channeldata[$MyISP.'Ch']; $ChannelISPName = htmlspecialchars($Channeldata[$MyISP." Name"], ENT_XML1); fprintf($fp, " \n", $ChannelId); fprintf($fp, " %s\n", $ChannelName); fprintf($fp, " %s\n", $ChannelISPName); fprintf($fp, " %s\n", $Channelnumber); fprintf($fp, " %s\n", $Channelnumber." ".$ChannelISPName); if($IconUrl) : fprintf($fp, " \n", $IconUrl, $ChannelId); else : fprintf($fp, " \n", $ChannelIconUrl); endif; fprintf($fp, " \n"); elseif($MyISP == "ALL"): $ChannelInfos[] = array($ChannelId, $ChannelName, $ChannelSource, $ChannelServiceId); fprintf($fp, " \n", $ChannelId); fprintf($fp, " %s\n", $ChannelName); if($IconUrl) : fprintf($fp, " \n", $IconUrl, $ChannelId); else : fprintf($fp, " \n", $ChannelIconUrl); endif; fprintf($fp, " \n"); endif; endif; endforeach; # Print Program Information foreach ($ChannelInfos as $ChannelInfo) : $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ChannelSource = $ChannelInfo[2]; $ChannelServiceId = $ChannelInfo[3]; if($GLOBALS['debug']) printLog($ChannelName.' 채널 EPG 데이터를 가져오고 있습니다'); if($ChannelSource == 'EPG') : GetEPGFromEPG($ChannelInfo); elseif($ChannelSource == 'KT') : GetEPGFromKT($ChannelInfo); elseif($ChannelSource == 'LG') : GetEPGFromLG($ChannelInfo); elseif($ChannelSource == 'SK') : GetEPGFromSK($ChannelInfo); elseif($ChannelSource == 'SKB') : GetEPGFromSKB($ChannelInfo); elseif($ChannelSource == 'SKY') : GetEPGFromSKY($ChannelInfo); elseif($ChannelSource == 'NAVER') : GetEPGFromNaver($ChannelInfo); elseif($ChannelSource == 'TBROAD') : GetEPGFromTbroad($ChannelInfo); elseif($ChannelSource == 'ISCS') : GetEPGFromIscs($ChannelInfo); elseif($ChannelSource == 'MBC') : GetEPGFromMbc($ChannelInfo); elseif($ChannelSource == 'MIL'): GetEPGFromMil($ChannelInfo); elseif($ChannelSource == 'IFM'): GetEPGFromIfm($ChannelInfo); elseif($ChannelSource == 'KBS'): GetEPGFromKbs($ChannelInfo); endif; endforeach; fprintf($fp, "\n"); } // Get EPG data from epg.co.kr function GetEPGFromEPG($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $epginfo = array(); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://www.epg.co.kr/epg-cgi/extern/cnm_guide_type_v070530.cgi"; $day = date("Ymd", strtotime("+".($k - 1)." days")); $params = array( 'beforegroup' => '100', 'checkchannel' => $ServiceId, 'select_group' => '100', 'start_date' => $day ); $params = http_build_query($params); $method = "POST"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : $response = str_replace("charset=euc-kr", "charset=utf-8", $response); $dom = new DomDocument; libxml_use_internal_errors(true); $dom->loadHTML(mb_convert_encoding($response, "UTF-8", "EUC-KR")); $xpath = new DomXPath($dom); for($i = 2; $i < 5; $i++) : $thisday = $day; $query = "//table[contains(@style,'margin-bottom:30')][".$i."]//td[contains(@colspan,'2')]/following::td[1]/table[1]//td[2]"; $programs = $xpath->query($query); foreach($programs as $program) : $hour = $xpath->query("parent::*/parent::*/parent::*/parent::*/td[1]", $program)->item(0); $hour = str_replace("시", "", trim($hour->nodeValue)); $minute = $xpath->query("preceding-sibling::td[1]", $program)->item(0); $hour = $hour.":".str_replace(array("[", "]"), array("",""), trim($minute->nodeValue)); switch ($i) : case 2 : $hour = $hour." AM"; break; case 3 : $hour = $hour." PM"; break; case 4 : if($hour > 5 && $hour < 12) : $hour = $hour." PM"; elseif($hour <5 || $hour == 12) : $hour = $hour." AM"; $thisday = date("Ymd", strtotime($day." +1 days")); endif; break; endswitch; $startTime = date("YmdHis", strtotime($thisday." ".$hour)); $programName = ""; $subprogramName = ""; $rating = 0; $episode = ""; $rebroadcast = False; preg_match('/?(.*)?(.*?)\s*(<(.*)>)?\s*(\(재\))?\s*(\(([\d,]+)회\))?()?\s*<\/td>/', trim($dom->saveHTML($program)), $matches); if ($matches != NULL) : if(isset($matches[2])) $programName = trim($matches[2]) ?: ""; if(isset($matches[4])) $subprogramName = trim($matches[4]) ?: ""; if(isset($matches[5])) $rebroadcast = $matches[5] ? True : False; if(isset($matches[7])) $episode = $matches[7] ?: ""; if(isset($matches[8])) : $image = $matches[8] ? $matches[8] : ""; preg_match('/.*schedule_([\d,]+)?.*/', $image, $grade); if($grade != NULL) $rating = $grade[1]; endif; endif; //programName, startTime, rating, subprogramName, rebroadcast, episode $epginfo[] = array($programName, $startTime, $rating, $subprogramName, $rebroadcast, $episode ); endforeach; endfor; endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; $zipped = array_slice(array_map(NULL, $epginfo, array_slice($epginfo,1)),0,-1); foreach($zipped as $epg) : $programName = $epg[0][0] ?: ""; $subprogramName = $epg[0][3] ?: ""; $startTime = $epg[0][1] ?: ""; $endTime = $epg[1][1] ?: ""; $desc = ""; $actors = ""; $producers = ""; $category = ""; $rebroadcast = $epg[0][4]; $episode = $epg[0][5] ?: ""; $rating = $epg[0][2] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; } // Get EPG data from KT function GetEPGFromKT($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $epginfo = array(); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://tv.olleh.com/renewal_sub/liveTv/pop_schedule_week.asp"; $day = date("Ymd", strtotime("+".($k - 1)." days")); $params = array( 'ch_name' => '', 'ch_no' => $ServiceId, 'nowdate'=> $day, 'seldatie' => $day, 'tab_no' => '1' ); $params = http_build_query($params); $method = "GET"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : $response = str_replace("charset=euc-kr", "charset=utf-8", $response); $dom = new DomDocument; libxml_use_internal_errors(true); $dom->loadHTML(mb_convert_encoding($response, "UTF-8", "EUC-KR")); $xpath = new DomXPath($dom); $query = "//table[@id='pop_day']/tbody/tr"; $rows = $xpath->query($query); foreach($rows as $row) : $cells = $row->getElementsByTagName('td'); #programName, startTime, rating, category $startTime = date("YmdHis", strtotime($day." ".trim($cells->item(0)->nodeValue))); $rating = str_replace("all", 0, str_replace("세 이상", "", trim($cells->item(2)->nodeValue))); $epginfo[]= array(trim($cells->item(1)->nodeValue), $startTime, $rating, trim($cells->item(4)->nodeValue)); endforeach; endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; $zipped = array_slice(array_map(NULL, $epginfo, array_slice($epginfo,1)),0,-1); foreach($zipped as $epg) : $programName = ""; $subprogramName = ""; preg_match('/^(.*?)( <(.*)>)?$/', $epg[0][0], $matches); if ($matches != NULL) : if(isset($matches[1])) $programName = $matches[1] ?: ""; if(isset($matches[3])) $subprogramName = $matches[3] ?: ""; endif; $startTime = $epg[0][1] ?: ""; $endTime = $epg[1][1] ?: ""; $desc = ""; $actors = ""; $producers = ""; $category = $epg[0][3] ?: ""; $rebroadcast = False; $episode = ""; $rating = $epg[0][2] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; } // Get EPG data from LG function GetEPGFromLG($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $epginfo = array(); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://www.uplus.co.kr/css/chgi/chgi/RetrieveTvSchedule.hpi"; $day = date("Ymd", strtotime("+".($k - 1)." days")); $params = array( 'chnlCd' => $ServiceId, 'evntCmpYmd' => $day ); $params = http_build_query($params); $method = "POST"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : $response = ''.$response; $dom = new DomDocument; libxml_use_internal_errors(true); $response = mb_convert_encoding($response, "UTF-8", "EUC-KR"); $response = str_replace(array('<재>', ' [..', ' (..'), array('<재>', '', ''), $response); $dom->loadHTML($response); $xpath = new DomXPath($dom); $query = "//div[@class='tblType list']/table/tbody/tr"; $rows = $xpath->query($query); foreach($rows as $row) : $cells = $row->getElementsByTagName('td'); $programName = trim($cells->item(1)->childNodes->item(0)->nodeValue); $startTime = date("YmdHis", strtotime($day." ".trim($cells->item(0)->nodeValue))); $spans = $cells->item(1)->getElementsByTagName('span'); $rating = trim($spans->item(1)->nodeValue)=="All" ? 0 : trim($spans->item(1)->nodeValue); //programName, startTime, rating, category $epginfo[]= array($programName, $startTime, $rating, trim($cells->item(2)->nodeValue)); endforeach; endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; $zipped = array_slice(array_map(NULL, $epginfo, array_slice($epginfo,1)),0,-1); foreach($zipped as $epg) : preg_match('/(<재>?)?(.*?)(\[(.*)\])?\s?(\(([\d,]+)회\))?$/', $epg[0][0], $matches); $programName = ""; $subprogramName = ""; $episode = ""; $rebroadcast = False; if ($matches != NULL) : if(isset($matches[2])) $programName = trim($matches[2]) ?: ""; if(isset($matches[4])) $subprogramName = trim($matches[4]) ?: ""; if(isset($matches[6])) $episode = trim($matches[6]) ?: ""; if(isset($matches[1])) $rebroadcast = trim($matches[1]) ? True: False; endif; $startTime = $epg[0][1] ?: ""; $endTime = $epg[1][1] ?: ""; $desc = ""; $actors = ""; $producers = ""; $category = $epg[0][3] ?: ""; $rating = $epg[0][2] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; } // Get EPG data from SK function GetEPGFromSK($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $today = date("Ymd"); $lastday = date("Ymd", strtotime("+".($GLOBALS['period'] - 1)." days")); $url = "http://m.btvplus.co.kr/Common/Inc/IFGetData.asp"; $params = array( 'variable' => 'IF_LIVECHART_DETAIL', 'pcode' => '|^|start_time='.$today.'00|^|end_time='.$lastday.'24|^|svc_id='.$ServiceId ); $params = http_build_query($params); $method = "POST"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if($data['channel'] == NULL) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : $programs = $data['channel']['programs']; foreach ($programs as $program) : $programName = ""; $subprogramName = ""; $episode = ""; $rebroadcast = False; preg_match('/^(.*?)(?:\s*[\(<]([\d,회]+)[\)>])?(?:\s*<([^<]*?)>)?(\((재)\))?$/', str_replace('...', '>', $program['programName']), $matches); if ($matches != NULL) : if(isset($matches[1])) $programName = trim($matches[1]) ?: ""; if(isset($matches[3])) $subprogramName = trim($matches[3]) ?: ""; if(isset($matches[2])) $episode = str_replace("회", "", $matches[2]) ?: ""; if(isset($matches[5])) $rebroadcast = $matches[5] ? True : False; endif; $startTime = date("YmdHis",$program['startTime']/1000); $endTime = date("YmdHis",$program['endTime']/1000); $desc = $program['synopsis'] ?: ""; $actors =trim(str_replace('...','',$program['actorName']), ', ') ?: ""; $producers = trim(str_replace('...','',$program['directorName']), ', ') ?: ""; if ($program['mainGenreName'] != NULL) : $category = $program['mainGenreName']; else: $category = ""; endif; $rating = $program['ratingCd'] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } } // Get EPG data from SKB function GetEPGFromSKB($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $epginfo = array(); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://www.skbroadband.com/content/realtime/Channel_List.do"; $day = date("Ymd", strtotime("+".($k - 1)." days")); $params = array( 'key_depth2' => $ServiceId, 'key_depth3' => $day, 'tab_gubun' => 'lst' ); $params = http_build_query($params); $method = "POST"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : $response = str_replace('charset="euc-kr"', 'charset="utf-8"', $response); $dom = new DomDocument; libxml_use_internal_errors(True); $response = mb_convert_encoding($response, "UTF-8", "EUC-KR"); $dom->loadHTML($response); $xpath = new DomXPath($dom); $query = "//tr[@class='".$day."']"; $rows = $xpath->query($query); foreach($rows as $row) : $cells = $row->getElementsByTagName('td'); $pattern = '/^(.*?)(\(([\d,]+)회\))?(<(.*)>)?(\((재)\))?$/'; preg_match($pattern, trim($cells->item(0)->nodeValue), $matches); if ($matches != NULL) : if(isset($matches[1])) $programName = trim($matches[1]) ?: ""; if(isset($matches[5])) $subprogramName = trim($matches[5]) ?: ""; if(isset($matches[3])) $episode = $matches[3] ?: ""; if(isset($matches[7])) $rebroadcast = $matches[7] ? True : False; endif; preg_match('/.*\s*([\d,]+)\s*.*/', $cells->item(1)->nodeValue, $rating); $startTime = $row->getElementsByTagName('th')->item(0)->nodeValue; $startTime = date("YmdHis", strtotime($day." ".$startTime)); $rating = $rating[1]; //programName, startTime, rating, subprogramName, rebroadcast, episode $epginfo[]= array($programName, $startTime, $rating, $subprogramName, $rebroadcast, $episode); endforeach; endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; $zipped = array_slice(array_map(NULL, $epginfo, array_slice($epginfo,1)),0,-1); foreach($zipped as $epg) : $programName = trim($epg[0][0]) ?: ""; $subprogramName = trim($epg[0][3]) ?: ""; $episode = $epg[0][5] ?: ""; $rebroadcast = $epg[0][4] ? True: False; $startTime = $epg[0][1] ?: ""; $endTime = $epg[1][1] ?: ""; $desc = ""; $actors = ""; $producers = ""; $category = ""; $rating = $epg[0][2] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; } // Get EPG data from SKY function GetEPGFromSKY($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://www.skylife.co.kr/channel/epg/channelScheduleListJson.do"; $day = date("Y-m-d", strtotime("+".($k - 1)." days")); $params = array( 'area' => 'in', 'inFd_channel_id' => $ServiceId, 'inairdate' => $day, 'indate_type' => 'now' ); $params = http_build_query($params); $method = "POST"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if(count($data['scheduleListIn']) == 0) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : $programs = $data['scheduleListIn']; foreach($programs as $program) : $programName = htmlspecialchars_decode($program['program_name']) ?: ""; $subprogramName = str_replace(array('lt;', 'gt;', 'amp;'), array('<', '>', '&'),$program['program_subname']) ?: ""; $startTime = $program['starttime']; $endTime = $program['endtime']; $actors = trim(str_replace('...', '',$program['cast']), ', ') ?: ""; $producers = trim(str_replace('...', '',$program['dirt']), ', ') ?: ""; $description = str_replace(array('lt;', 'gt;', 'amp;'), array('<', '>', '&'),$program['description']) ?: ""; $summary = str_replace(array('lt;', 'gt;', 'amp;'), array('<', '>', '&'),$program['summary']) ?: ""; $desc = $description ?: ""; if($summary) : $desc = $desc."\n".$summary; endif; $category = $program['program_category1']; $episode = $program['episode_id'] ?: ""; $rebroadcast = $program['rebroad']== "Y" ? True : False; $rating = $program['grade'] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; } // Get EPG data from Naver function GetEPGFromNaver($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $epginfo = array(); $totaldate = array(); foreach(range(1, $GLOBALS['period']) as $k) : $url = "https://search.naver.com/p/csearch/content/batchrender_ssl.nhn"; $day = date("Ymd", strtotime("+".($k - 1)." days")); $totaldate[] = $day; endforeach; $params = array( '_callback' => 'epg', 'fileKey' => 'single_schedule_channel_day', 'pkid' => '66', 'u1' => 'single_schedule_channel_day', 'u2' => join(",", $totaldate), 'u3' => $day, 'u4' => $GLOBALS['period'], 'u5' => $ServiceId, 'u6' => 1, 'u7' => $ChannelName."편성표", 'u8' => $ChannelName."편성표", 'where' => 'nexearch' ); $params = http_build_query($params); $method = "GET"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $response = str_replace('epg( ', '', $response ); $response = substr($response, 0, strlen($response)-2); $response = preg_replace("/\/\*.*?\*\//","",$response); $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if($data['displayDates'][0]['count'] == 0) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : for($i = 0; $i < count($data['displayDates']); $i++) : for($j = 0; $j < 24; $j++) : foreach($data['schedules'][$j][$i] as $program) : //programName, startTime, episode, rebroadcast, rating $startTime = date("YmdHis", strtotime($data['displayDates'][$i]['date']." ".$program['startTime'])); $epginfo[] = array($program['title'], $startTime, str_replace("회","", $program['episode']), $program['isRerun'], $program['grade']); endforeach; endfor; endfor; $zipped = array_slice(array_map(NULL, $epginfo, array_slice($epginfo,1)),0,-1); foreach($zipped as $epg) : $programName = htmlspecialchars_decode($epg[0][0], ENT_XML1) ?: ""; $subprogramName = ""; $startTime = $epg[0][1] ?: ""; $endTime = $epg[1][1] ?: ""; $desc = ""; $actors = ""; $producers = ""; $category = ""; $rebroadcast = $epg[0][3] ? True: False; $episode = $epg[0][2] ?: ""; $rating = $epg[0][4] ?: 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } } // Get EPG data from Tbroad function GetEPGFromTbroad($ChannelInfo) { $url='https://www.tbroad.com/chplan/selectRealTimeListForNormal.tb'; } // Get EPG data from Iscs function GetEPGFromIscs($ChannelInfo) { $url='http://service.iscs.co.kr/sub/channel_view.asp'; $params = array( 'chan_idx'=>'242', 'source_id'=>'203', 'Chan_Date'=>'2017-04-18' ); } // Get EPG data from MBC function GetEPGFromMbc($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $dayofweek = array('일', '월', '화', '수', '목', '금', '토'); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://miniunit.imbc.com/Schedule"; $day = date("Y-m-d", strtotime("+".($k - 1)." days")); $params = array( 'rtype' => 'json' ); $params = http_build_query($params); $method = "GET"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if(count($data['Programs']) == 0) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : $programs = $data['Programs']; foreach($programs as $program) : if($program['Channel'] == "CHAM" && $program['LiveDays'] == $dayofweek[date("w", strtotime($day))]) : $programName = ""; $rebroadcast = False; preg_match('/^(.*?)(\(재\))?$/', htmlspecialchars_decode($program['ProgramTitle']), $matches); if ($matches != NULL) : $programName = $matches[1]; $rebroadcast = $matches[2] ? True : False; endif; $subprogramName = ""; $startTime = $day." ".$program['StartTime']; $startTime = date("YmdHis", strtotime($startTime)); $endTime = date("YmdHis", strtotime("+".$program['RunningTime']." minutes", strtotime($startTime))); $desc = ""; $actors = ""; $producers = ""; $category = "음악"; $episode = ""; $rating = 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endif; endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; } // Get EPG data from MIL function GetEPGFromMil($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://radio.dema.mil.kr/web/fm/quick/ajaxTimetableList.do"; $day = date("Y-m-d", strtotime("+".($k - 1)." days")); $params = array( 'program_date' => date("Ymd", strtotime($day)) ); $params = http_build_query($params); $method = "GET"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if(count($data['resultList']) == 0) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : $programs = $data['resultList']; foreach($programs as $program) : $programName = ""; $rebroadcast = False; preg_match('/^(.*?)(\(재\))?$/', htmlspecialchars_decode($program['program_title']), $matches); if ($matches != NULL) : $programName = $matches[1]; $rebroadcast = $matches[2] ? True : False; endif; $subprogramName = htmlspecialchars_decode($program['program_subtitle']); $startTime = $day." ".$program['program_time']; $startTime = date("YmdHis", strtotime($startTime)); $endTime = $day." ".$program['program_end_time']; $endTime = date("YmdHis", strtotime($endTime)); $desc = ""; $actors = htmlspecialchars_decode($program['movie_actor']); $producers = htmlspecialchars_decode($program['movie_director']); $category = ""; $episode = ""; $rating = 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; } // Get EPG data from IFM function GetEPGFromIfm($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $dayofweek = array('1', '2', '3', '4', '5', '6', '7'); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://mapp.itvfm.co.kr/hyb/front/selectHybPgmList.do"; $day = date("Y-m-d", strtotime("+".($k - 1)." days")); $params = array( 'outDay' => $dayofweek[(date("w", strtotime($day)+1))%7], 'viewDt' => $day ); $params = http_build_query($params); $method = "GET"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if(count($data['hybMusicInfoList']) == 0) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : $programs = $data['hybMusicInfoList']; foreach($programs as $program) : $programName = htmlspecialchars_decode($program['pgmTitle']) ?: ""; $subprogramName = ""; $startTime = $day." ".$program['pgmStime']; $startTime = date("YmdHis", strtotime($startTime)); $endTime = $day." ".$program['pgmEtime']; $endTime = date("YmdHis", strtotime($endTime)); $desc = ""; $actors = htmlspecialchars_decode($program['pgmDj']); $producers = htmlspecialchars_decode($program['pgmPd']); $category = ""; $episode = ""; $rebroadcast = False; $rating = 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; } // Get EPG data from KBS function GetEPGFromKbs($ChannelInfo) { $ChannelId = $ChannelInfo[0]; $ChannelName = $ChannelInfo[1]; $ServiceId = $ChannelInfo[3]; $epginfo = array(); foreach(range(1, $GLOBALS['period']) as $k) : $url = "http://world.kbs.co.kr/include/wink/_ajax_schedule.php"; $day = date("Y-m-d", strtotime("+".($k - 1)." days")); $params = array( 'channel'=>'wink_11' ); $params = http_build_query($params); $method = "GET"; try { $response = getWeb($url, $params, $method); if ($response === False && $GLOBALS['debug']) : printError($ChannelName.HTTP_ERROR); else : try { $data = json_decode($response, TRUE); if(json_last_error() != JSON_ERROR_NONE) throw new Exception(JSON_SYNTAX_ERROR); if(count($data['schedule']) == 0) : if($GLOBALS['debug']) : printError($ChannelName.CHANNEL_ERROR); endif; else : $dom = new DomDocument; libxml_use_internal_errors(true); $dom->loadHTML($data['schedule']); $xpath = new DomXPath($dom); $query = "//li"; $rows = $xpath->query($query); foreach($rows as $row) : $cells = $row->getElementsByTagName('span'); $programName = trim($cells->item(2)->childNodes->item(0)->nodeValue); $programName = str_replace(array("[","]", " Broadcast"), array("", "", ""), $programName); $startTime = $day." ".trim($cells->item(0)->childNodes->item(0)->nodeValue); //programName, startTime, rating, category $epginfo[]= array($programName, $startTime); endforeach; endif; } catch(Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endif; } catch (Exception $e) { if($GLOBALS['debug']) printError($e->getMessage()); } endforeach; $zipped = array_slice(array_map(NULL, $epginfo, array_slice($epginfo,1)),0,-1); foreach($zipped as $epg) : $programName = $epg[0][0] ?: ""; $subprogramName = ""; $startTime = $epg[0][1] ?: ""; $startTime = date("YmdHis", strtotime($startTime)); $endTime = $epg[1][1] ?: ""; $endTime = date("YmdHis", strtotime($endTime)); $desc = ""; $actors = ""; $producers = ""; $category = ""; $rebroadcast = False; $episode = ""; $rating = 0; $programdata = array( 'channelId'=> $ChannelId, 'startTime' => $startTime, 'endTime' => $endTime, 'programName' => $programName, 'subprogramName'=> $subprogramName, 'desc' => $desc, 'actors' => $actors, 'producers' => $producers, 'category' => $category, 'episode' => $episode, 'rebroadcast' => $rebroadcast, 'rating' => $rating ); writeProgram($programdata); endforeach; } function writeProgram($programdata) { $fp = $GLOBALS['fp']; $ChannelId = $programdata['channelId']; $startTime = $programdata['startTime']; $endTime = $programdata['endTime']; $programName = trim(htmlspecialchars($programdata['programName'], ENT_XML1)); $subprogramName = trim(htmlspecialchars($programdata['subprogramName'], ENT_XML1)); preg_match('/(.*) \(?(\d+부)\)?/', $programName, $matches); if ($matches != NULL) : if(isset($matches[1])) $programName = trim($matches[1]) ?: ""; if(isset($matches[2])) $subprogramName = trim($matches[2]." ".$subprogramName) ?: ""; endif; if($programName == NULL): $programName = $subprogramName; endif; $actors = htmlspecialchars($programdata['actors'], ENT_XML1); $producers = htmlspecialchars($programdata['producers'], ENT_XML1); $category = htmlspecialchars($programdata['category'], ENT_XML1); $episode = $programdata['episode']; $rebroadcast = $programdata['rebroadcast']; if($episode && $GLOBALS['addepisode'] == 'y') $programName = $programName." (".$episode."회)"; if($rebroadcast == True && $GLOBALS['addrebroadcast'] == 'y') $programName = $programName." (재)"; if($programdata['rating'] == 0) : $rating = "전체 관람가"; else : $rating = sprintf("%s세 이상 관람가", $programdata['rating']); endif; if($GLOBALS['addverbose'] == 'y') : $desc = htmlspecialchars($programdata['programName'], ENT_XML1); if($subprogramName) $desc = $desc."\n부제 : ".$subprogramName; if($episode) $desc = $desc."\n회차 : ".$episode."회"; if($category) $desc = $desc."\n장르 : ".$category; if($actors) $desc = $desc."\n출연 : ".$actors; if($producers) $desc = $desc."\n제작 : ".$producers; $desc = $desc."\n등급 : ".$rating; else: $desc = ""; endif; if($programdata['desc']) $desc = $desc."\n".htmlspecialchars($programdata['desc'], ENT_XML1); $contentTypeDict = array( '교양' => 'Arts / Culture (without music)', '만화' => 'Cartoons / Puppets', '교육' => 'Education / Science / Factual topics', '취미' => 'Leisure hobbies', '드라마' => 'Movie / Drama', '영화' => 'Movie / Drama', '음악' => 'Music / Ballet / Dance', '뉴스' => 'News / Current affairs', '다큐' => 'Documentary', '라이프' => 'Documentary', '시사/다큐' => 'Documentary', '연예' => 'Show / Game show', '스포츠' => 'Sports', '홈쇼핑' => 'Advertisement / Shopping' ); $contentType = ""; foreach($contentTypeDict as $key => $value) : if(!(strpos($category, $key) === False)) : $contentType = $value; endif; endforeach; fprintf($fp, " \n", $startTime, $endTime, $ChannelId); fprintf($fp, " %s\n", $programName); if($subprogramName) : fprintf($fp, " %s\n", $subprogramName); endif; if($GLOBALS['addverbose']=='y') : fprintf($fp, " %s\n", $desc); if($actors || $producers): fprintf($fp, " \n"); if($actors) : foreach(explode(',', $actors) as $actor): if(trim($actor)) fprintf($fp, " %s\n", trim($actor)); endforeach; endif; if($producers) : foreach(explode(',', $producers) as $producer): if(trim($producer)) fprintf($fp, " %s\n", trim($producer)); endforeach; endif; fprintf($fp, " \n"); endif; endif; if($category) fprintf($fp, " %s\n", $category); if($contentType) fprintf($fp, " %s\n", $contentType); if($episode) fprintf($fp, " %s\n", $episode); if($rebroadcast) fprintf($fp, " \n"); if($rating) : fprintf($fp, " \n"); fprintf($fp, " %s\n", $rating); fprintf($fp, " \n"); endif; fprintf($fp, " \n"); } function getWeb($url, $params, $method) { $ch = curl_init(); if($method == "GET"): $url = $url."?".$params; elseif($method == "POST"): curl_setopt ($ch, CURLOPT_POST, True); curl_setopt ($ch, CURLOPT_POSTFIELDS, $params); endif; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,True); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); curl_setopt($ch, CURLOPT_HEADER, False); curl_setopt($ch, CURLOPT_FAILONERROR,True); curl_setopt($ch, CURLOPT_USERAGENT, $GLOBALS['ua']); $response = curl_exec($ch); if(curl_error($ch) && $GLOBALS['debug']) printError($url." ".curl_error($ch)); curl_close($ch); return $response; } function printLog($string) { header("Content-Type: text/plain; charset=utf-8"); print($string."\n"); } function printError($string) { header("Content-Type: text/plain; charset=utf-8"); print("Error : ".$string."\n"); } ?>