Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обрезать некоторые теги 
:(
    Опции темы
jkffdwitnas
Дата 30.4.2010, 17:18 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



вот так тяну расписание тнт с яндекса, хочу вставить к себе
Код

$file=implode("",file('http://tv.yandex.ru/index.xml?hour=7&period=24&day='.(int)(time()/86400).'&flag=&channel=101&mode=print'));


но там вагоны мусора, во первых все что находится в <head>...</head> не нужно, плюс там есть еще <html> <body>, и всякие подписи
есть вариант делать так с каждой ненужной строкой
Код

$file=str_replace('Copyright <nobr>© 2001—'.Date("Y").' «Яндекс»</nobr>','',$file);


но чувствую - что это шибко криво
помогите плз вырезать оттуда все лишнее, так чтобы осталась только таблица

Код

<table class="channel">
...
</table> 


Спасибо заранее
PM MAIL WWW   Вверх
Mavrun
Дата 30.4.2010, 18:00 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 25.11.2007

Репутация: нет
Всего: 13



надо через регулярные выражения делать. копай в их сторону  и сторону ereg_replace
PM MAIL   Вверх
jkffdwitnas
Дата 30.4.2010, 19:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



все очень правильно говоришь и про регулярки и про ereg_replace, только вот именно в этом мне и нужна помощь. 
читал читал факи да только голову сломал
PM MAIL WWW   Вверх
brother79
Дата 4.5.2010, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: нет
Всего: 6



ereg - вроде как устаревшее, надо использовать preg_replace, и прочие ф-ии на preg, а вот по поводу самих регулярок, помог бы если бы написал конкретно что тебе нужно, не думаешь же, что все пойдут смотреть что там у яндекса и парсить, пожалуйста пример в студию.


--------------------
PM MAIL WWW   Вверх
jkffdwitnas
Дата 4.5.2010, 15:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



прошу прощения, господа, вот пример программы передач с яндекса

по такому адресу http://tv.yandex.ru/index.xml?hour=7&p...&mode=print
есть следующий код, который требует доработки

Код

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Яндекс.Телепрограмма телеканала ТНТ на  4 мая (вторник)</title> 
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> 
<!--[if gt IE 7]><!--><link rel="stylesheet" href="/css/_tv.css?build=2"> 
<!--<![endif]--><!--[if lt IE 8]><link rel=stylesheet href="/css/_tv.ie.css?build=2"><![endif]--><script type="text/javascript" charset="utf-8" src="//js.static.yandex.net/jquery/1.3.2/_jquery.js"></script><script type="text/javascript" charset="utf-8" src="//lego.static.yandex.net/2.0/v-3078/common/js/_common.js"></script><script type="text/javascript" charset="utf-8" src="/js/_tv.js?build=2"></script><script type="text/javascript">Lego.init({login:'',locale:'ru',id:'tv','passport-host':'http:\/\/passport.yandex.ru'})</script><link rel="stylesheet" type="text/css" href="http://css.yandex.ru/css/_yandex-global.css"> 
<link rel="stylesheet" href="http://calendar.yandex.ru/css/_calendar-external.css"> 
<link rel="stylesheet" href="http://calendar.yandex.ru/css/_calendar-external.ie.css"> 
<link rel="shortcut icon" type="image/x-icon" href="//yandex.st/lego/2.2.6/common/block/b-service-icon/_ico/b-service-icon_tv.ico"> 
<style type="text/css"> 
 
                .vevent a i {
                    background: url(http://calendar.yandex.ru/export/favicon.xml) no-repeat top right;
                }
 
                .vevent-active a i {
                    background-image: url(http://calendar.yandex.ru/export/favicon.xml);
                }
            </style> 
<link rel="stylesheet" type="text/css" href="/css/_tv-print.css"> 
</head> 
<body bgcolor="white" link="#0000cc"> 
<table border="0" width="100%" cellspacing="0" cellpadding="25" class="printHeader"><tr valign="top"> 
<td width="16%" class="logo"><h2>Яндекс</h2></td> 
<td width="84%" class="project"><h2>Телепрограмма на  4 мая (вторник)</h2></td> 
</tr></table> 
<br><table width="100%" border="0" cellspacing="0" cellpadding="10" class="channel"><tr valign="top"> 
<td width="16%" class="left" align="center"> 
<img src="/i/logo/101.gif" border="0" alt="ТНТ"><br><b>ТНТ</b><br><br> 
</td> 
<td width="84%"> 
<div>6:00 Такси</div> 
<div>6:35 Котопес. (5-я серия)</div> 
<div>7:00 Так и волшебная сила Жужу. (7-я серия)</div> 
<div>7:30 Комеди Клаб</div> 
<div>8:30 Универ</div> 
<div>9:30 Счастливы вместе. (Трое в тачке, не считая кота)</div> 
<div>10:00 Счастливы вместе. (Небо в клеточку, барон в полосочку)</div> 
<div>10:30 Эй, Арнольд. (69-я серия)</div> 
<div>11:00 Эй, Арнольд. (70-я серия)</div> 
<div>11:30 Губка Боб квадратные штаны. (8-я серия)</div> 
<div>12:00 Губка Боб квадратные штаны. (9-я серия)</div> 
<div>12:30 Губка Боб квадратные штаны. (10-я серия)</div> 
<div>13:00 Саша + Маша</div> 
<div>13:30 Женская лига. Банановый рай</div> 
<div>14:00 Битва экстрасенсов</div> 
<div>15:00 Эон Флакс</div> 
<div>17:00 Универ</div> 
<div>17:30 Универ</div> 
<div>18:00 Интерны</div> 
<div>18:30 Счастливы вместе. (Обрезание 9 на 12)</div> 
<div>19:00 Счастливы вместе. (Смотреть нельзя потрогать)</div> 
<div>19:30 Интерны</div> 
<div>20:00 Вокруг света за 80 дней</div> 
<div>22:20 Дом-2. Город любви</div> 
<div>23:20 Дом-2. После заката</div> 
<div>23:50 Секс с Анфисой Чеховой</div> 
<div>0:20 Комеди Клаб</div> 
<div>1:20 Дом-2. Про любовь</div> 
<div>2:15 Идеальный брак</div> 
<div>4:10 Убойной ночи</div> 
<div>4:45 Шоу комедиантов</div> 
<div>5:00 Необъяснимо, но факт. (Дороги смерти)</div> 
</td> 
</tr></table> 
<br clear="all" class="dump"><br><table width="100%" border="0" cellspacing="0" cellpadding="0" class="footer"><tr valign="top"> 
<td width="75%"><br></td> 
<td width="25%"><div class="copyright" style="padding-left:0">Copyright <nobr>© 2001—2010 «Яндекс»</nobr> 
</div></td> 
</tr></table> 
<br><script type="text/javascript"> 
 
            var g_yandex_email = "@yandex.ru";
            var g_calendar_url = "http://calendar.yandex.ru";
        </script><script type="text/javascript" src="http://img.yandex.net/y5/1.5-os-c/mega-y5.js" charset="utf-8"></script><script type="text/javascript" src="http://calendar.yandex.ru/js/c/calendar-svc-production.js" charset="utf-8"></script> 
</body> 
</html> 



в идеале из него нужно достать вот такой массив
Код

array("6:00"=>"Такси", "6:35"=>"Котопес. (5-я серия)", ...);


но если это слишком, тогда вот так
Код

<div>6:00 Такси</div> 
<div>6:35 Котопес. (5-я серия)</div> 
...
<div>4:45 Шоу комедиантов</div> 
<div>5:00 Необъяснимо, но факт. (Дороги смерти)</div>



В первом случае получается практически идеал: фактически это готовое расписание для любого сайта. ну то есть можно зарядить этот массив в любые дивы, таблицы и придумать подходящее оформление

Второй случай уже не так хорош, но все еще возможно достойно оформить и вывести у себя на сайте

Помогите написать регулярку. Огромное спасибо

Добавлено через 8 минут и 49 секунд
иногда (вот тут например) еще бывают выделения 
http://tv.yandex.ru/index.xml?hour=7&p...&mode=print

Код

<div>10:00 <b>Счастливы вместе. (Лена - язык по колено)</b> 
</div>


PM MAIL WWW   Вверх
ksnk
Дата 4.5.2010, 16:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



если присмотреться внимательно, окажется что все нужные строчки начинаются с <div> и заканчиваются сдледующим </div>. Так что регулярка совершенно простая...

Код

if($preg_match_all('/<div>(\d+:\d+)(.*?)</div>/',$html,$m)) {
  print_r($m);
}

смотреть на массив и выбирать нужные кусочки, складывать из них нужную картинку...

насчет модификаторов не уверен, возможно и без надобности...

чтобы выкинуть лишние теги из текста - можно использовать strip_tags


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
jkffdwitnas
Дата 4.5.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



спасибо огромное, буду делать как написал. 
о результатах отпишусь
PM MAIL WWW   Вверх
jkffdwitnas
Дата 7.5.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



Код

$file=implode("",file('http://tv.yandex.ru/index.xml?hour=7&period=24&day='.(int)(time()/86400).'&flag=&channel=101&mode=print'));
if($preg_match_all('/<div>(\d+:\d+)(.*?)</div>/',$file,$m)) print_r($m);


чистый лист
PM MAIL WWW   Вверх
NLspieler
Дата 7.5.2010, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 1
Всего: 19



У меня ваш скриптик вообще не работает, возникает синтаксическая ошибка. 

Зачем символ $ возле preg_match_all во второй строчке?
Первая строчка вообще приводит меня в ужас. Зачем нужны такие странные манипуляции, если можно
воспользоваться функцией file_get_contents?  


Вот написал простенький скриптик.
Код

<?php
header('Content-Type: text/html; charset=utf-8'); 


$link = 'http://tv.yandex.ru/index.xml?hour=7&period=24&day='.(int)(time()/86400).'&flag=&channel=101&mode=print' ;
$html = file_get_contents ($link) ; //Достать содержимое страницы, в ввиде одной строки. 
$reg = '|<div>(.+)</div>|uU' ; //Регулярочка
preg_match_all ($reg , $html , $matches) ;


print_r ($matches[0]) ; //Массив - результат с дивами
print_r ($matches[1]) ; //Результат без дивов
?>



Это сообщение отредактировал(а) NLspieler - 7.5.2010, 22:03
PM MAIL   Вверх
jkffdwitnas
Дата 7.5.2010, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



спасибо большое, так работает
буду приспосабливать дальше
PM MAIL WWW   Вверх
jkffdwitnas
Дата 7.5.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



пардон, в вашем варианте при парсинге вот такой страницы отсутствуют строки с <b></b>
http://tv.yandex.ru/index.xml?hour=7&p...&mode=print
PM MAIL WWW   Вверх
NLspieler
Дата 8.5.2010, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 1
Всего: 19



В ругулярках нужно учитывать все возможные случаи, попробуй такую. 
Код

$reg = '|<div>\s?(.+)\s?</div>|uU' ; //Регулярочка

Если не нужны теги <b></b> в результатах, можешь их вырезать

Код

$matches[1] = str_replace (array('<b>' , '</b>') , '' , $matches[1]) ;


Это сообщение отредактировал(а) NLspieler - 8.5.2010, 00:53
PM MAIL   Вверх
jkffdwitnas
Дата 8.5.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



NLspieler, спасибо за помощь

результат такой
Код


header('Content-Type: text/html; charset=utf-8');
$link = 'http://tv.yandex.ru/index.xml?hour=7&period=24&day='.(int)(time()/86400).'&flag=&channel=101&mode=print' ;
$html = file_get_contents ($link) ; //Достать содержимое страницы, в ввиде одной строки.
$reg = '|<div>\s?(.+)\s?</div>|uU' ; //Регулярочка
preg_match_all ($reg , $html , $matches) ;
$matches[1] = str_replace (array('<b>' , '</b>') , '' , $matches[1]) ; //убираем жирности, но можно и оставить, тогда и в $rasp останутся

$rasp = array();
foreach ($matches[1] as $k=>$v) {
    $t = strpos($v, ":");
    $rasp[substr ($v,0,$t+3)] = substr ($v,$t+5);
}

итого в $rasp четко пары "время"=>"название", из этого уже можно слепить любую таблицу или дивов своих наделать (чем и займусь)
надеюсь яндекс не изменить формат
PM MAIL WWW   Вверх
noNoMercy
Дата 14.5.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



Извините, но если мы тянем xml файл, не проще было бы работать с SimpleXML?
PM MAIL   Вверх
ksnk
Дата 14.5.2010, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



noNoMercy, 
Цитата

... http-equiv="Content-Type" content="text/html;...

в каком месте тут стоит xml?



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.