Парсер xml через php подскажите ?
Есть мастера PHP ? (Парсер RSS)
Помогите: 1.Вывести картинку у новостей (у меня получилось вывести простую ссылку) 2.Заголовок сделать ссылкой на оригинальную новость на сайте. 3.Дату на Русском (Вывел но она на Английском языке) демо: страница http://h116641.s08.test-hf.su/rss/rss.php Вот рабочий код (Может в нём полно ошибок, но не много) - знаний не хватает. <?php header('Content-Type: text/html; charset=UTF-8'); $path = 'https://62.xn--b1aew.xn--p1ai/news/rss';; $ctx = stream_context_create(array('http' => array('timeout' => 6))); $file = file_get_contents($path, 0, $ctx); if ($file) { $rss = simplexml_load_string($file); foreach ($rss->channel->image as $image){ $image = $image->url; echo "$image"; } foreach ($rss->channel->item as $item){ $namespaces = $item->getNameSpaces(true); $yandex = $item->children($namespaces['yandex']); $full_text = (string)$yandex->{'full-text'}; $full_text = mb_substr(strip_tags($full_text), 0, 9250, 'UTF-8'); $title = $item->title; $pubDate = $item->pubDate; $pubDate = date("D, d M Y H:i:s T", strtotime($pubDate)); echo "<div style='margin-bottom: 20px;font-weight: bold;'>{$title}</div>"; echo "<div style='margin-bottom: 20px;'>{$pubDate}</div>"; echo "<div style='margin-bottom: 20px;'>{$full_text}</div>"; if (isset($item->enclosure)) { echo $item->enclosure["url"].'<br>'; } } } ?> |
Ну не знаете вы языка, но то что данный вопрос к JS отношения не имеет это же понятно. Есть же раздел для вопросов по серверным языкам.
Функция date не поддерживает локаль, вместо нее нужно использовать strftime - $pubDate = strftime("%a, %d %m %Y %H:%M:%S %Z", strtotime($pubDate)). И перед использованием этой функции установить русскую локаль. |
laimas,
Здравствуйте! Я точно ничего не знаю а в каких строчках кода что нужно заменить? Подскажите пожалуйста. Я просто хотел сделать страницу с новостями и если в них есть картинка и всё. С ссылкой заголовка на новость. Это наверно легче чем курс валют. |
|
Заменить строку 28 кода на приведенный код. Но нужно еще установить локаль, а есть небольшие "капризы" ее установки, которые зависят от системы. Но функция установки локали может принимать массив локалей, поэтому что-то из приведенного должно сработать:
setlocale(LC_TIME, 'ru_RU.UTF8', 'rus_RUS.UTF8', 'Russian_Russia.UTF8'); $pubDate = strftime("%a, %d %b %Y %H:%M:%S %Z", strtotime($pubDate)); Формат вывода временной зоны (%Z или %z) также зависит от системы. |
laimas,
Всё верно? <!DOCTYPE html> <meta name="viewport" content="width=device-width; initial-scale=0.85; maximum-scale=0.85; user-scalable=0;" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php /* Ссылка на заколовки RSS(echo "<h2><a href='". $item->link. "'>". $item->title. "</a></h2>";); */ ?> <style> body { margin: 0; padding: 0; font-family: 'Open Sans', Tahoma, sans-serif; font-size: 15px; line-height: 1.55em; width: 100%; overflow-x: hidden; } h1, .h1 {display:block;padding-bottom:5px;color:#1d1d1d;font-size:16px;font-weight:normal;margin-top:0} h2, .h2 {display:block;margin:0;padding: 0px 0px 10px 0px;font-size:16px;color:#1d1d1d;font-weight:bold;text-align: center;} h3, .h3 {display:block;margin:0;padding:0;font-size:16px;color:#1d1d1d;font-weight:bold} h4, .h4 {display:block;margin:0;padding:0;font-size:12px;color:#1d1d1d;font-weight:bold} a {color:#173a51;text-decoration:underline} a:hover, a:active {color:#f84040;text-decoration:underline} </style> <body> <?php header('Content-Type: text/html; charset=UTF-8'); $path = 'https://62.xn--b1aew.xn--p1ai/news/rss'; $ctx = stream_context_create(array('http' => array('timeout' => 6))); $file = file_get_contents($path, 0, $ctx); if ($file) { $rss = simplexml_load_string($file); foreach ($rss->channel->item as $item){ $namespaces = $item->getNameSpaces(true); $yandex = $item->children($namespaces['yandex']); $full_text = (string)$yandex->{'full-text'}; $full_text = mb_substr(strip_tags($full_text), 0, 9250, 'UTF-8'); $title = $item->title; $pubDate = $item->pubDate; $pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate)); echo "<h2><div style='margin-bottom: 20px;font-weight: bold;'>{$title}</div></h2>"; echo "<div style='text-align: center;'><img src='". $item->enclosure["url"]. "'></div>"; echo "<p>". $item->description. "</p>"; echo "<div style='margin-bottom: 20px;'>{$pubDate}</div>"; echo "<div style='margin-bottom: 20px;'>{$full_text}</div>"; echo '<hr align="center" width="50%" size="2" color="#ff0000" /></br></br></br>'; } } ?> </body> Эту страницу я вставляю через ifraim на сайт. Скажите это тяжёлая нагрузка на сайт? Может есть вариант через Json сделать как курс валют? |
Цитата:
На русском это значит Январь, Февраль, ... В коде формат даты определялся как "D, d M Y H:i:s T". Что все эти буковки для функции date() означают я пояснять не буду, читать тут. И не будет на русском, так как функция date этого не сделает, о чем было сказано, а чтобы на русском, то нужна функция strftime(). Ее формат даты для аналогичного вывода будет таким - "%a, %d %b %Y %H:%M:%S %Z", что эти буковки означают читать тут. Теперь оказывается, что нужно просто дату/время без текста "%Y-%m-%d %H:%M:%S". Зачем тогда strftime, хотя можно и ее нагрузить. Цитата:
|
laimas,
Вставлял два ваших варианта не работало setlocale(LC_TIME, 'ru_RU.UTF8', 'rus_RUS.UTF8', 'Russian_Russia.UTF8'); $pubDate = strftime("%a, %d %b %Y %H:%M:%S %Z", strtotime($pubDate)); подумал нечего мучится и оставил просто числа. А можно перевести всё в json и вывести на сайте через js? |
Можно. Оставить из всего только РНР код парсера и вместо вывода сформировать массив:
$json = [ 'title' = $item->title, 'text' = mb_substr(strip_tags($full_text), 0, 9250, 'UTF-8'), и так далее ]; который по запросу отдать клиенту - json_encode($json); Как делается, пример у вас уже есть. |
laimas,
А можно более подробно? Я просто js и php знаю на 1% |
Часовой пояс GMT +3, время: 01:39. |