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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг <![CDATA[ 
V
    Опции темы
Zmiuko
Дата 23.4.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



Народ, помогите пожалуйста.

Нужно распарсить подключаемую html-страничку в массив.

Суть в следущем, необходимо вытянуть данные с кода вида:

...всякой фигни до фига и больше...
Код


//<![CDATA[ 
(function(){ 

...всякой фигни до фига и больше...

 .backgroundImage = "url('http://ссылка_которую_надо_дернуть')"; 
 var flashVars = { 
   overstretch:   'данные_что_надо_дернуть', 
   vid:   'данные_что_надо_дернуть', 
   host:   'данные_что_надо_дернуть', 
   vtag:   'данные_что_надо_дернуть', 
   vkoid:   'данные_что_надо_дернуть', 
   vkid:   'данные_что_надо_дернуть', 
   link:   'данные_что_надо_дернуть', 
   md_title:   'данные_что_надо_дернуть', 
   group_id:   'данные_что_надо_дернуть', 
   md_author:   'данные_что_надо_дернуть', 
   in_process:'false' 
 }; 

...всякой фигни до фига и больше...

}); 
})(); 
//]]> 

...всякой фигни до фига и больше...






Необходимо выдернуть данные в простой массив.

Я пытался находить заключенный в CDATA тег текст, затем по идее удаляю символ каретки и получается строка по которой остается пройти регулярной функцией.

Вот только ничегошеньки не выходит. Не могу вырезать этоту информацию - не вижу ее в скриптах и все тут.

Помогите пожалуйста. Заранее спасибо.

Добавлено через 2 минуты и 46 секунд
Проблема в том, что если резать допустим по  //<![CDATA[ и //]]>, то фиг его знает сколько //]]> внутри его самого, например, указанного в комментариях + возможные ошибки html кода и включения ужасных рекламных баннеров.
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 23.4.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

preg_match_all("#^\s*(\w+):\s*'(.*)',\s*$#um", $str, $out);

PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 23.4.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



А как быть с текстом .backgroundImage = "url('http://ссылка_которую_надо_дернуть')" ? тут получается что текст между url(' и ')

и потом предложенный preg_match_all берет из оставшегося htmvyjuj лишнего наряды с необходимой инфой: парсит из текста и других тегов ..'':';s'+screen.width+'..., например.

Полчучается что едут в получившемся массиве все ключи + лишняя информация парсится.
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 23.4.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ты уверен что в нужном тексте встретится //]]>?
Выбирай все, что между //<!CDATA[  и //]]> и не парься.
Если уверен, что встретится, то доставай другим способом.
Url:
Код

#\s*\.backgroundImage\s*=\s*"url\('(.*)'\)";#ui


Это сообщение отредактировал(а) enof - 23.4.2009, 14:21
PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 23.4.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



Ну я попробывал так, поскольку почему-то вышеуказанный preg_match_all("#^\s*(\w+):\s*'(.*)',\s*$#um", $str, $out); выдал пустой массив (может у мну руки кривые, но не проконало):

if (preg_match("!url\('(.*?)'\)!si",$ret1,$ok)) { echo "Тег найден, текст: $ok[1]"; }

if (preg_match("!host:'(.*?)'!si",$ret1,$ok)) { echo "Тег найден, текст: $ok[1]"; }

и т.д.

верно? или лучше как-то по-другому?

А CDATA действительно втречается один раз, только вот в чем проблема - никак не могу данные из него дернуть, знаний может не хватает.
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 23.4.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

preg_match("#//<!\[CDATA\[\s*(.*)\s*//\]\]>#s", $text, $out);
$text = $out[1];
preg_match_all("#^\s*(\w+):\s*'(.*)',\s*$#m", $text, $out);

проверил, работает.

PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 23.4.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



Я не про то, просто preg_match_all("#^\s*(\w+):\s*'(.*)',\s*$#m", $text, $out); выводит:

Array ( [0] => overstretch [1] => vid [2] => host [3] => vtag [4] => vkoid [5] => vkid [6] => link [7] => md_title [8] => folder_id [9] => md_author [10] => allowfullscreen )

просто список имен, а не данные.

А preg_match_all("#\s*\.backgroundImage\s*=\s*"url\('(.*)'\)";#ui" , ....) выводит Parse error: syntax error, unexpected T_STRING in Z:\home\avaru\www\index.php on line 52

Добавлено через 3 минуты и 22 секунды
Чет мне кажется, либо я недоспал, либо руки стали кривые :(
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 23.4.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Zmiuko @  23.4.2009,  16:07 Найти цитируемый пост)
просто список имен, а не данные.

print_r($out)?
Цитата(Zmiuko @  23.4.2009,  16:07 Найти цитируемый пост)
Parse error: syntax error, unexpected T_STRING in Z:\home\avaru\www\index.php on line 52 

Ну самому что ли кавычки не заэкранировать?
PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 23.4.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



Попытался написать еще вот так:

Код

$pattern = "#\?([^&]*): ([^&]*)#iu";
preg_match_all($pattern, $out[1], $arr);


Получится должно было из 

Код

   host:   'данные_что_надо_дернуть', 
   vtag:   'данные_что_надо_дернуть', 
   vkoid:   'данные_что_надо_дернуть', 
   vkid:   'данные_что_надо_дернуть',


что $arr[1] содержит host, vtag, vkoid, а $arr[2] данные_что_надо_дернуть напротив каждого, соответственно.

Так нет же... Возвращает пустой массив, засранец : ((((((

Добавлено через 2 минуты и 15 секунд
Ой, прошу прощения Enof, я просто запутался. smile

Добавлено через 2 минуты и 50 секунд
СПАСИБО! ВСЕ РАЗРЕШИЛОСЬ! smile

Добавлено через 10 минут и 57 секунд
Вопрос:

        почему 
        preg_match_all("#\s*\.backgroundImage\s*=\s*\"url\('(.*)'\)\";#ui", $out[1], $arr);
    echo $arr[1][0];

        ?

Почему не echo $arr[1]; , а двумерный?
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 23.4.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Потому что preg_match != preg_match_all
PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 23.4.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



Блин  smile извиняюсь.

Вопрос решенный, а то сидел, изобретал велосипед, спасиб те! smile

Добавлено через 1 минуту и 14 секунд
Невнимательный я  smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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