Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсер - tv.mail.ru

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Парсер телепрограммы на неделю
vectorserver
Отправлено: 28 Декабря, 2011 - 05:59:05
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




Создавал ранее тему в вопросах для новичков, вот решил сам написать парсер ТВ програм на неделю, на все федеральные и спутниковые каналы.
Писал как говорится на коленке, но работает.
Может кто и оптимизирует код Радость
Пасер работает с временными зонами, из нужно указать в перемененной $gmt

Список временных зон:
Спойлер (Отобразить)


Собственно сам код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?PHP
  2.         header('Content-Type: text/html; charset=utf-8');
  3.         //Jumi
  4.         $jumi = "";
  5.         //По умолчанию кажем первый канал
  6.         if ($_GET['ch']){$chanel = $_GET['ch'];} else {$chanel = '244';}
  7.        
  8.         //Смещение по времени
  9.         $gmt = "120";
  10.        
  11.         //Список каналов
  12.         $chanels_ID = array(
  13.    '244' => 'Первый',
  14.         '247' => 'Россия 1',
  15.         '273' => 'ТВ Центр - Урал',
  16.         '1139' => 'НТВ',
  17.         '266' => 'Культура',
  18.         '235' => 'Россия 2',
  19.         '566' => '5 канал',
  20.         '715' => 'РЕН ТВ',
  21.         '1394' => 'СТС',
  22.         '1401' => 'ТНТ',
  23.         '1408' => 'Семёрка (7ТВ)',
  24.         '1409' => 'ТВ3',
  25.         '1422' => 'ЗВЕЗДА',
  26.         '1447' => 'ДОМАШНИЙ',
  27.         '676' => 'Россия 24',
  28.         '276' => '2x2',
  29.         '1263' => 'MTV',
  30.         '108' => 'МУЗ',
  31.         '1449' => 'ПЕРЕЦ',
  32.         '692' => '24 Техно',
  33.         '646' => '3 канал +',
  34.         '556' => '365',
  35.         '258' => 'AB Moteurs',
  36.         '277' => 'Ajara TV',
  37.         '227' => 'Amazing Life',
  38.         '214' => 'Animal Planet',
  39.         '697' => 'AXN Sci-Fi',
  40.         '219' => 'BBC World',
  41.         '220' => 'Bloomberg',
  42.         '211' => 'Cartoon Network',
  43.         '221' => 'CNN',
  44.         '651' => 'Deutsche Welle',
  45.         '226' => 'Discovery Channel',
  46.         '224' => 'Discovery Science',
  47.         '223' => 'Discovery World',
  48.         '295' => 'ESPN classic',
  49.         '208' => 'EuroNews',
  50.         '376' => 'Eurosport 2',
  51.         '259' => 'Extreme Sports',
  52.         '228' => 'Fashion TV',
  53.         '568' => 'HD Life',
  54.         '629' => 'HD Спорт',
  55.         '683' => 'Luxe HD',
  56.         '229' => 'Mezzo',
  57.         '294' => 'MGM',
  58.         '284' => 'National Geographic',
  59.         '218' => 'Nickelodeon',
  60.         '636' => 'Ocean TV',
  61.         '549' => 'Private Spice (для взрослых)',
  62.         '230' => 'Reality',
  63.         '681' => 'SyFy',
  64.         '233' => 'ТСМ',
  65.         '501' => 'TV club',
  66.         '288' => 'TV1000',
  67.         '552' => 'TV1000 Русское кино',
  68.         '289' => 'TV21',
  69.         '231' => 'TV5',
  70.         '698' => 'Universal Channel',
  71.         '324' => 'Viasat Explorer',
  72.         '325' => 'Viasat History',
  73.         '685' => 'World Fashion Channel',
  74.         '213' => 'Zone Romantica',
  75.         '553' => 'Авто Плюс',
  76.         '554' => 'Боец',
  77.         '621' => 'Время',
  78.         '696' => 'Детский',
  79.         '216' => 'Детский мир',
  80.         '623' => 'Дом кино',
  81.         '663' => 'Зоо ТВ',
  82.         '659' => 'Иллюзион +',
  83.         '541' => 'Индия',
  84.         '584' => 'Интересное ТВ',
  85.         '212' => 'Канал Disney',
  86.         '201' => 'Киноклуб',
  87.         '666' => 'Кинопоказ',
  88.         '448' => 'Киносоюз',
  89.         '298' => 'Кинохит',
  90.         '291' => 'Комедия ТВ',
  91.         '585' => 'Кухня ТВ',
  92.         '557' => 'Ля-Минор',
  93.         '655' => 'Мать и дитя',
  94.         '558' => 'Много ТВ',
  95.         '550' => 'Моя Планета',
  96.         '622' => 'Музыка Первого',
  97.         '631' => 'Настоящее Смешное Телевидение',
  98.         '650' => 'Настоящее Страшное Телевидение',
  99.         '202' => 'Наше кино',
  100.         '447' => 'Наше Новое Кино',
  101.         '630' => 'Ностальгия',
  102.         '369' => 'О2ТВ',
  103.         '530' => 'Охота и рыбалка',
  104.         '203' => 'Премьера',
  105.         '595' => 'Радость Моя',
  106.         '326' => 'РБК',
  107.         '658' => 'Русский Иллюзион',
  108.         '540' => 'Русский Экстрим',
  109.         '657' => 'Сарафан',
  110.         '222' => 'Спас ТВ',
  111.         '940' => 'Спорт 1',
  112.         '887' => 'Страна',
  113.         '586' => 'ТВ Бульвар',
  114.         '620' => 'Телекафе',
  115.         '292' => 'Телеклуб',
  116.         '662' => 'Телепутешествия',
  117.         '665' => 'Тин ТВ',
  118.         '563' => 'ТНВ',
  119.         '432' => 'Усадьба',
  120.         '682' => 'Феникс+ Кино',
  121.         '677' => 'Эксперт-ТВ',
  122.         '945' => '24 ДОК',
  123.         '949' => 'BBC',
  124.         '950' => 'BBC Entertainment',
  125.         '951' => 'BizTV',
  126.         '952' => 'Blue Hustler',
  127.         '953' => 'C Music TV',
  128.         '954' => 'CNBC',
  129.         '955' => 'Da Vinci',
  130.         '956' => 'Daring!TV',
  131.         '958' => 'English Club TV',
  132.         '959' => 'Fine Living Network',
  133.         '960' => 'Fox Crime',
  134.         '961' => 'Fox Life',
  135.         '962' => 'France 24',
  136.         '963' => 'Gulli',
  137.         '964' => 'HD Медиа',
  138.         '968' => 'Первый метео',
  139.         '969' => 'ЧП.Info',
  140.         '980' => 'Домашние животные',
  141.         '981' => 'Еврокино',
  142.         '985' => 'High Life',
  143.         '986' => 'Investigation Discovery',
  144.         '987' => 'JimJam',
  145.         '989' => 'KidsCo',
  146.         '990' => 'Киномания',
  147.         '991' => 'Комеди ТВ',
  148.         '993' => 'Кинопоказ HD-1',
  149.         '994' => 'Кинопоказ HD-2',
  150.         '996' => 'Luxe.TV',
  151.         '997' => 'Man TV',
  152.         '998' => 'MCM POP',
  153.         '999' => 'MCM TOP',
  154.         '1000' => 'Mezzo Live HD',
  155.         '1001' => 'Мир сериала',
  156.         '1003' => 'MusicBox RU',
  157.         '1004' => 'MusicBox TV',
  158.         '1005' => 'Мужской',
  159.         '1008' => 'myZen.tv',
  160.         '1009' => 'Viasat Nature CEE',
  161.         '1010' => 'Недвижимость',
  162.         '1011' => 'NewsOne',
  163.         '1013' => 'Nat Geo WILD',
  164.         '1014' => 'Футбол',
  165.         '1015' => 'Hustler TV Europe',
  166.         '1016' => 'Мультимания',
  167.         '1017' => 'Кино плюс',
  168.         '1021' => 'Охотник и Рыболов',
  169.         '1022' => 'Открытый Мир',
  170.         '1023' => 'Парк развлечений',
  171.         '1024' => 'Playboy TV',
  172.         '1026' => 'Propoker',
  173.         '1028' => 'Психология 21',
  174.         '1029' => 'Дождь',
  175.         '1030' => 'Russian Travel Guide',
  176.         '1035' => 'Rusong TV',
  177.         '1036' => 'Russia Today',
  178.         '1057' => 'Style TV',
  179.         '1058' => 'Телепутешествия HD',
  180.         '1059' => 'Top Shop TV',
  181.         '1060' => 'ТурИнфо',
  182.         '1061' => 'TV1000 Action',
  183.         '1063' => 'Успех',
  184.         '1064' => 'VH1 Classic',
  185.         '1065' => 'VH1 European',
  186.         '1066' => 'Viasat_Sport',
  187.         '1068' => 'Война и мир',
  188.         '1069' => 'Вопросы и ответы',
  189.         '1070' => 'Всегда с тобой',
  190.         '1071' => 'Оружие',
  191.         '1072' => 'Wedding TV',
  192.         '1073' => 'Кто есть кто',
  193.         '1074' => 'Женский мир',
  194.         '1075' => 'World Music Channel',
  195.         '1076' => 'XXL',
  196.         '1077' => 'Загородный',
  197.         '1078' => 'Загородная жизнь',
  198.         '1080' => 'Zee-TV',
  199.         '1083' => 'Тонус-ТВ',
  200.         '1093' => 'РТВ - Любимое кино',
  201.         '1094' => 'РТВ - Наше кино',
  202.         '1128' => 'Совершенно секретно',
  203.         '1134' => 'TV Sale',
  204.         '1150' => 'TDK',
  205.         '1151' => 'TiJi',
  206.         '1160' => 'ТВ АРМ РУ',
  207.         '1177' => 'MTV Dance',
  208.         '1178' => 'MTV Hits',
  209.         '1179' => 'MTV Rocks',
  210.         '1216' => 'TLC',
  211.         '332' => 'Первый образовательный',
  212.         '290' => 'Ru.TV',
  213.         '660' => 'Юмор BOX',
  214.         '1285' => 'Fashion TV HD',
  215.         '1286' => 'Nat Geo Wild HD',
  216.         '1287' => 'National Geographic HD',
  217.         '503' => 'A-ONE',
  218.         '984' => 'Раз ТВ',
  219.         '1299' => 'Дискотека ТВ',
  220.         '1027' => 'Pro все',
  221.         '1354' => 'Спорт 2',
  222.         '293' => 'Travel Channel',
  223.         '1081' => 'Zooпарк',
  224.         '528' => 'Драйв',
  225.         '529' => 'Здоровое ТВ',
  226.         '329' => 'Ретро',
  227.         '661' => 'BRIDGE TV',
  228.         '206' => 'Eurosport',
  229.         '1019' => 'КХЛ',
  230.         '1025' => 'Pro Dеньги',
  231.         '1170' => 'ТРО',
  232.         '560' => 'МИР',
  233.         '672' => 'ЖИВИ!',
  234.         '215' => 'DIVA Universal',
  235.         '555' => 'Русская ночь',
  236.         '1037' => 'Шансон-TB',
  237.         '1482' => 'ТВСАМ',
  238.         '1161' => 'Знание',
  239.         '1493' => 'Outdoor Channel',
  240.         '400' => 'Союз',
  241.         '204' => 'НТВ-ПЛЮС Спорт Плюс',
  242.         '504' => 'НТВ-ПЛЮС Наш футбол',
  243.         '1018' => 'НТВ-ПЛЮС Спорт',
  244.         '205' => 'НТВ-ПЛЮС Футбол',
  245.         '207' => 'НТВ-ПЛЮС Спорт Онлайн',
  246.         '632' => 'НТВ-ПЛЮС Баскетбол',
  247.         '455' => 'НТВ-ПЛЮС Теннис',
  248.         '689' => 'SONY ТВ',
  249.         '946' => '8 Канал',
  250.         '1615' => 'Shopping Live',
  251.         '1641' => 'Ночной клуб'
  252. );
  253.  
  254. $select = '
  255.         <form name="setupzone" action="" method="GET"/>
  256.         <select size="1" name="ch" onchange="this.form.submit()">'."\r\n";
  257.  
  258. foreach($chanels_ID as $key => $value){
  259.                         $selected = "".($key==$chanel)?" selected":""."";
  260.                         $select .= "\t".'<option '.$selected.' value="'.$key.'">' . $value.'</option>'."\r\n";
  261.    
  262. }
  263.  
  264. $select .= '
  265.         </select>
  266.         <noscript><input type="submit" value="Submit"></noscript>
  267.         </form>';
  268.  
  269.  
  270.        
  271. //Определяем понедельник текущего месяца
  272. $today = date('w');
  273. $mon  = mktime(0, 0, 0, date("m")  , date("d")-$today+1, date("Y"));
  274. $mon2  = mktime(0, 0, 0, date("m")  , date("d")+(8-$today), date("Y"));
  275. //Массив дней
  276. $days = array(
  277. '0'=>'<span style="color:#FF0000;">Вс</span>',
  278. '1'=>'<span style="color:#000000;">Пн</span>',
  279. '2'=>'<span style="color:#000000;">Вт</span>',
  280. '3'=>'<span style="color:#000000;">Ср</span>',
  281. '4'=>'<span style="color:#000000;">Чт</span>',
  282. '5'=>'<span style="color:#000000;">Пт</span>',
  283. '6'=>'<span style="color:#FF0000;">Сб</span>');
  284.  
  285. for($time=$mon; $time<=$mon+518400; $time+=86400){
  286.    $day = date('w', $time);
  287.         $ofsetdays = date('Y-m-d',$time);
  288.         $sele = "".($ofsetdays!=$_GET['day'])?"class=actlink":""."class=cureitlink";
  289.         //Ввывод ссылок на дни недели
  290.         $dates[] =  "<a ".$sele."  href=\"".$jumi."?day=".$ofsetdays."&dt=".$_GET['dt']."&ch=".$chanel."\"> ".$days[$day]." </a>";
  291. }
  292. $date = $_GET['day'];
  293.  
  294. ///////////////////////////////////////////////////////////////////////////////////////
  295. //Парсер контента
  296. ///////////////////////////////////////////////////////////////////////////////////////
  297.  
  298. // Кодируем в UTF, Удалаям все лишние пробелы переносы и табы
  299. $url = iconv("cp1251", "UTF-8//TRANSLIT",str_replace( array( "\n", "\r", "\t" ), "", file_get_contents("http://tv.mail.ru/print_p.html?date=".$date."&zone=".$gmt."&period=3&channel=".$chanel."")));
  300. $text = "/<!-- content -->(.*?)<!-- \/content -->/";
  301. preg_match_all($text,$url,$res);
  302. $content_parser = $res[1][0];
  303.         /*Получаем заголовок -(Телевизионная программа на 28 декабря, среда)*/
  304. preg_match("/<h2 class=mb10>(.*?)<\/h2>/i", $content_parser, $title);
  305. $title = $title[1];
  306.         //Название канала
  307. preg_match("/<h2 class=chna>(.*?)<\/h2>/i",$content_parser,$chna);
  308. $chna = $chna[1];
  309.  
  310.         //Постер канала
  311. preg_match_all("/src=\"(.*?)\/(.*?)\/(.*?)\"/", $content_parser, $image);
  312. $image = "chimg/".$image[3][0];
  313.         //Закачиваем картинки
  314. $person = file_get_contents("http://tv.mail.ru/pic/channel/$image");
  315. file_put_contents("chimg/".$image, $person, LOCK_EX);
  316.  
  317.  
  318.         //Контент
  319. $content =  strip_tags(preg_replace (array("/<h2 class=mb10>(.*?)<\/h2>/","/<img[^>]+\>/i","/<h2 class=chna>(.*?)<\/h2>/i"),array("", "",""),$content_parser),"<table><tr><td>");
  320.  
  321. ?>
  322.  
  323. <style>
  324. a.actlink span{
  325.         background-color:#bab5b5;
  326.         padding:5px;
  327.         -moz-border-radius-topleft: 3px;
  328. -moz-border-radius-topright: 3px;
  329. -moz-border-radius-bottomright: 0px;
  330. -moz-border-radius-bottomleft: 0px;
  331. -webkit-border-radius: 3px 3px 0px 0px;
  332. border-radius: 3px 3px 0px 0px;
  333. }
  334. a.actlink span:hover{
  335.         background-color:#d6d4d4;
  336.         color:bab5b5;
  337. }
  338. .titleCh{
  339.         color:#fff;
  340.         background-color:#a72496;
  341.         -webkit-border-radius: 3px;
  342.         -moz-border-radius: 3px;
  343.         border-radius: 3px;
  344.         text-align: center;
  345.         padding:5px;
  346. }
  347. .titleCh2
  348. {background-color:#009bdb;
  349. padding:5px;
  350. }
  351.  
  352. a.cureitlink span{
  353.         background-color:#a0bbc7;
  354.         padding:5px;
  355.         -moz-border-radius-topleft: 3px;
  356. -moz-border-radius-topright: 3px;
  357. -moz-border-radius-bottomright: 0px;
  358. -moz-border-radius-bottomleft: 0px;
  359. -webkit-border-radius: 3px 3px 0px 0px;
  360. border-radius: 3px 3px 0px 0px;
  361. }
  362. td.time{
  363.         padding-right:5px;
  364.         color:black;;
  365. }
  366. </style>
  367. <!-- Вывод данных CONVEX.RU -->
  368. <table border="0" cellspacing="2" cellpadding="2" style="width: 99%;">
  369. <tbody>
  370. <tr>
  371. <td align="right" valign="top" style="width: 200px;"><h2 class="titleCh"><?php echo $chna;?></h2></td>
  372. <td align="center" valign="top">        <h3 class="titleCh titleCh2"><?php echo $title;?></h3></td>
  373. <td align="left" style="width: 250px;" valign="top"><?php echo implode (" " ,$dates); ?><br><?php echo $select; ?></td>
  374. </tr>
  375. <tr>
  376. <td align="left" valign="top"><img src="<?php echo $image;?>" width="48" height="48" alt="happy" class="kartinka" style="float: right;" /></td>
  377. <td align="left" valign="top" colspan="2">  
  378.         <?php echo $content;?>
  379. </td>
  380. </tr>
  381. </tbody>
  382. </table>
  383. <!-- Конец вывода данных CONVEX.RU -->

Все изображения качаются по умолчанию в папку chimg Улыбка

ЗЫ - Ваши предложения по оптимизации, пример работы тут

(Отредактировано автором: 28 Декабря, 2011 - 06:00:32)

 
 Top
bleackhell
Отправлено: 31 Июля, 2012 - 16:20:55
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




спс, отличный скрипт

можете обновить до новой версии, как на вашем сайте
 
 Top
Okula
Отправлено: 31 Июля, 2012 - 17:33:04
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




vectorserver, для удобства редактирования списка каналов я бы вынес их в отдельный файл.
Для работы с датой предпочтительнее использовать объект DateTime, он более удобный чем обычные структурные функции, к тому же сделает код более читаемым.
Для получения информации со стороннего ресурса лучше использовать соединение через CURL. С помощью данной библиотеки можно слёгкостью сэмитировать браузер, обойти проблеммы при загрузке страницы и т.д.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB