вид его примерно такой:
<item>
<title>EA готовит плацдарм для анонса Medal of Honor 2 [48]</title>
<link>http://news.playground.ru/35371/</link>
<pubDate>Tue, 07 Feb 2012 21:11:00 +0400</pubDate>
<guid isPermaLink="true">http://news.playground.ru/35371/</guid>
<description>Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...</description>
<fulltext>Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться. </fulltext>
<enclosure url="http://www.playground.ru/images/news/35371.jpg" type="image/jpeg" />
</item>
При использовании регулярки вида
<?php
set_time_limit(0);
$url = '';
$rss = file_get_contents($url);
preg_match_all("@<item>(.*?)</item>@iuUs",$rss, $regs);
echo '<pre>'.htmlspecialchars(print_r($regs, 1)).'</pre>';
?>
В получаемом коде обрезает item почему?
Спустя 13 минут, 54 секунды (18.02.2012 - 08:41) #8bit написал(а):
потому что ты запоминаеш выражение в скобках -(.*?) - в переменную 1, а item стоит за скобками. Если надо выдернуть все вместе с итемами просто убери скобки
Спустя 3 часа, 5 минут, 53 секунды (18.02.2012 - 11:47) Эли4ка написал(а):
#8bit
а понятно,спасибо,сейчас попробую.
а понятно,спасибо,сейчас попробую.
Спустя 23 минуты, 51 секунда (18.02.2012 - 12:11) Эли4ка написал(а):
а как с помощью цикла foreach мне разобрать массив на отдельные данные и выполнить далее какие-нибудь действия?а то конструкция вида
foreach ($regs as $material) {что-то неработает.. :(
echo $material;
}
Спустя 1 час, 44 минуты, 55 секунд (18.02.2012 - 13:56) #8bit написал(а):
В массиве $regs что-нибудь есть? Посмотри через var_dump($regs)
Спустя 17 минут, 39 секунд (18.02.2012 - 14:13) walerus написал(а):
Эли4ка - Ты парсишь RSS я так вижу? если да, то вот функция, самописная, если чего - подредактируй для себя. Или выложи полностью вариант того что нужно распарсить, допилим вместе.
<?php
static function get_field( $data )
{
$result = array();
$result_title = array();
preg_match('~<title>(.*)</title>~iUs', $data, $match_title);
if ( !isset( $match_title[1] ) )
{
echo " No TITLE";
return array();
}
$match_title = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_title[1]));
preg_match('~<link>(.*)</link>~iUs', $data, $match_link);
if ( !isset( $match_link[1] ) )
{
echo " No LINK";
return array();
}
$match_link = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_link[1]));
preg_match('~<description>(.*)</description>~iUs', $data, $match_description);
if ( !isset( $match_description[1] ) )
{
echo " No DESCRIPTION";
return array();
}
$match_description = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_description[1]));
$result_title = array( 'title' => trim($match_title), 'link' => trim($match_link), 'description' => trim($match_description) );
// посты
preg_match_all('~<item>(.*)</item>~iUs', $data, $all_post);
foreach($all_post[1] as $post)
{
preg_match('~<title>(.*)</title>~iUs', $post, $match_title_post);
$match_title_post = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_title_post[1]));
preg_match('~<link>(.*)</link>~iUs', $post, $match_link_post);
$match_link_post = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_link_post[1]));
$match_link_post = trim(preg_replace(array('~<a href="~iUs', '~">.*$~'), '' ,$match_link_post));
preg_match('~<description>(.*)</description>~iUs', $post, $match_description_post);
$match_description_post = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_description_post[1]));
preg_match('~<category>(.*)</category>~iUs', $post, $match_category_post);
if (isset($match_category_post[1]) && trim($match_category_post[1]) != '')
$match_category_post = trim(str_replace(array('<![CDATA[', ']]>'), array('', '') ,$match_category_post[1]));
else
$match_category_post = '';
$result[] = array(
'url' => trim( $match_link_post ),
'ancore' => trim($match_title_post),
'description' => trim($match_description_post),
'category' => trim($match_category_post)
);
}
return array( 'data_of_rss' => $result_title, 'links_of_rss' => $result );
}
Спустя 25 минут, 38 секунд (18.02.2012 - 14:39) walerus написал(а):
Или конкретно твой случай...
Входящие данные: Размножил текст и сменил вид ссылок и текста, чтоб было видно как парсит.
Сам код:
Результат:
Входящие данные: Размножил текст и сменил вид ссылок и текста, чтоб было видно как парсит.
Свернутый текст
$text = '<item>
<title>EA готовит плацдарм для анонса Medal of Honor 1</title>
<link>http://news.playground.ru/1/</link>
<pubDate>Tue, 07 Feb 2012 21:11:00 +0400</pubDate>
<guid isPermaLink="true">http://news.playground.ru/1/</guid>
<description>1111 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...</description>
<fulltext>1111 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться. </fulltext>
<enclosure url="http://www.playground.ru/images/news/1.jpg" type="image/jpeg" />
</item>
<item>
<title>EA готовит плацдарм для анонса Medal of Honor 2</title>
<link>http://news.playground.ru/2/</link>
<pubDate>Tue, 07 Feb 2012 21:11:00 +0400</pubDate>
<guid isPermaLink="true">http://news.playground.ru/2/</guid>
<description>2222 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...</description>
<fulltext>2222 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться. </fulltext>
<enclosure url="http://www.playground.ru/images/news/2.jpg" type="image/jpeg" />
</item>
<item>
<title>EA готовит плацдарм для анонса Medal of Honor 3</title>
<link>http://news.playground.ru/3/</link>
<pubDate>Tue, 07 Feb 2012 21:11:00 +0400</pubDate>
<guid isPermaLink="true">http://news.playground.ru/3/</guid>
<description>3333 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...</description>
<fulltext>3333 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться. </fulltext>
<enclosure url="http://www.playground.ru/images/news/3.jpg" type="image/jpeg" />
</item>
';
Сам код:
Свернутый текст
function parseRSS( $text )
{
// Ищем все <item>
preg_match_all( '~<item>(.*)</item>~iUs', $text, $all_post );
// Проверяем есть ли посты
if ( !isset( $all_post[1] ) )
return array( 'error' => true, 'msg' => 'Не найдены посты' );
$result = array();
foreach( $all_post[1] as $all_post_value )
{
// Проверяем есть ли тайтл
preg_match('~<title>(.*)</title>~iUs', $all_post_value, $match_title_post );
$tmp_title = '';
if ( isset( $match_title_post[1] ) )
$tmp_title = trim( $match_title_post[1] );
// Проверяем есть ли link
preg_match('~<link>(.*)</link>~iUs', $all_post_value, $match_link_post );
$tmp_link = '';
if ( isset( $match_link_post[1] ) )
$tmp_link = trim( $match_link_post[1] );
// Проверяем есть ли pubDate
preg_match('~<pubDate>(.*)</pubDate>~iUs', $all_post_value, $match_pubDate_post );
$tmp_pubDate = '';
if ( isset( $match_pubDate_post[1] ) )
$tmp_pubDate = trim( $match_pubDate_post[1] );
// Проверяем есть ли guid
preg_match('~<guid.*>(.*)</guid>~iUs', $all_post_value, $match_guid_post );
$tmp_guid = '';
if ( isset( $match_guid_post[1] ) )
$tmp_guid = trim( $match_guid_post[1] );
// Проверяем есть ли description
preg_match('~<description>(.*)</description>~iUs', $all_post_value, $match_description_post );
$tmp_description = '';
if ( isset( $match_description_post[1] ) )
$tmp_description = trim( $match_description_post[1] );
// Проверяем есть ли fulltext
preg_match('~<fulltext>(.*)</fulltext>~iUs', $all_post_value, $match_fulltext_post );
$tmp_fulltext = '';
if ( isset( $match_fulltext_post[1] ) )
$tmp_fulltext = trim( $match_fulltext_post[1] );
$result[] = array(
'title' => $tmp_title,
'link' => $tmp_link,
'pubDate' => $tmp_pubDate,
'guid' => $tmp_guid,
'description' => $tmp_description,
'fulltext' => $tmp_fulltext,
);
}
return array( 'error' => false, 'msg' => 'Найдены посты', 'result' => $result );
}
$result = parseRSS( $text );
if ( $result['error'] )
{
echo "Ошибка - " . $result['msg'] . "<br>\n";
}
else
{
echo $result['msg'] . "<br>\n";
print_r( $result['result'] );
}
Результат:
Свернутый текст
Найдены посты<br>
Array
(
[0] => Array
(
[title] => EA готовит плацдарм для анонса Medal of Honor 1
[link] => http://news.playground.ru/1/
[pubDate] => Tue, 07 Feb 2012 21:11:00 +0400
[guid] => http://news.playground.ru/1/
[description] => 1111 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...
[fulltext] => 1111 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться.
)
[1] => Array
(
[title] => EA готовит плацдарм для анонса Medal of Honor 2
[link] => http://news.playground.ru/2/
[pubDate] => Tue, 07 Feb 2012 21:11:00 +0400
[guid] => http://news.playground.ru/2/
[description] => 2222 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...
[fulltext] => 2222 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться.
)
[2] => Array
(
[title] => EA готовит плацдарм для анонса Medal of Honor 3
[link] => http://news.playground.ru/3/
[pubDate] => Tue, 07 Feb 2012 21:11:00 +0400
[guid] => http://news.playground.ru/3/
[description] => 3333 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно,...
[fulltext] => 3333 Похоже, что гадание на кофейной гуще отменяется. Давеча Electronic Arts начала рассылать западным журналистам приглашения, украшенные подозрительно знакомой эмблемой и аббревиатурой MOH, на специальное мероприятие для прессы, которое пройдет шестого марта этого года. Все правильно, шестого марта – в один день с поступлением в продажу свежего номера PSM3, тизер-страничка которого в разнузданной манере возвещает об анонсе какого-то «загадочного» и очень «горячего» шутера.
В том, что им окажется именно Medal of Honor 2, теперь нет никаких сомнений. Осенняя линейка проектов Electronic Arts сейчас состоит из одного вакуума, так что в ближайшие несколько месяцев компания просто обязана начать заполнение пробелов. Как видно, Medal of Honor 2 выпала честь возглавить осенний игровой парад «Электроников» образца 2012-го года. В свете отсутствия следующей флагманской игры в серии Battlefield этому сложно удивляться.
)
)
Спустя 42 минуты, 10 секунд (18.02.2012 - 15:21) Winston написал(а):
Чем не подходит simplexml или DOM?
Спустя 14 часов, 8 минут, 45 секунд (19.02.2012 - 05:30) Эли4ка написал(а):
Winston
я как раз на это в гугле наткнулась..ничего так..проще да и поудобнее вроде.
walerus
ничего себе,спасибо за код..но я нашла вариант попроще..
я как раз на это в гугле наткнулась..ничего так..проще да и поудобнее вроде.
walerus
ничего себе,спасибо за код..но я нашла вариант попроще..
Спустя 10 часов, 16 минут, 26 секунд (19.02.2012 - 15:46) walerus написал(а):
Эли4ка - Ну выложила бы вариант "попроще", я бы себе тоже код поправил, и занес бы в архив нужностей
Спустя 16 часов, 59 минут, 23 секунды (20.02.2012 - 08:46) Эли4ка написал(а):
walerus
Вам надо чисто спарсить новость? :huh: ,если да то вот
Только его функцией iconv адо подправить.а то кракозябры выводит.. :rolleyes:
Вам надо чисто спарсить новость? :huh: ,если да то вот
<?
set_time_limit(0);
$url = 'http://news.yandex.ru/politics.rss'; //адрес RSS ленты
$rss = simplexml_load_file($url); //Интерпретирует XML-файл в объект
//цикл для обхода всей RSS ленты
foreach ($rss->channel->item as $item) {
echo $item->title.'<br>';
echo $item->link.'<br>';
echo $item->description.'<br>';
}
?>
Только его функцией iconv адо подправить.а то кракозябры выводит.. :rolleyes:
Спустя 2 часа, 19 минут, 41 секунда (20.02.2012 - 11:05) walerus написал(а):
Эли4ка - Окей ), спасибо )