| 
	| 
	
	| 
		
	| 
			
			 
			
				25.06.2018, 08:13
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 02.05.2016 
						Сообщений: 390
					 
		
 |  |  
	| 
				Парсер 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>';
}
}
}
?>
			 Последний раз редактировалось spinastr, 25.06.2018 в 23:26.
 |  |  
	| 
		
	| 
			
			 
			
				25.06.2018, 08:52
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Ну не знаете вы языка, но то что данный вопрос к JS отношения не имеет это же понятно. Есть же раздел для вопросов по серверным языкам.
 Функция date не поддерживает локаль, вместо нее нужно использовать strftime - $pubDate = strftime("%a, %d %m %Y %H:%M:%S %Z", strtotime($pubDate)). И перед использованием этой функции установить русскую локаль.
 |  |  
	| 
		
	| 
			
			 
			
				25.06.2018, 23:18
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 02.05.2016 
						Сообщений: 390
					 
		
 |  |  
	| laimas,Здравствуйте!
 
 Я точно ничего не знаю а в каких строчках кода что нужно заменить?
 
 Подскажите пожалуйста.
 
 Я просто хотел сделать страницу с новостями и если в них есть картинка и всё. С ссылкой заголовка на новость. Это наверно легче чем курс валют.
 |  |  
	| 
		
	| 
			
			 
			
				26.06.2018, 06:19
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 02.05.2016 
						Сообщений: 390
					 
		
 |  |  
	| laimas,
  
Здравствуйте я подумал может поможите сделать типа как с курсом валют вот тут? ссылка |  |  
	| 
		
	| 
			
			 
			
				26.06.2018, 10:37
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Заменить строку 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) также зависит от системы. |  |  
	| 
		
	| 
			
			 
			
				27.06.2018, 00:01
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 02.05.2016 
						Сообщений: 390
					 
		
 |  |  
	| 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 сделать как курс валют? 
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				27.06.2018, 00:14
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| 
	
 
	| Сообщение от spinastr |  
	| Всё верно? |  
	
 Что именно? Вопрос был таков - 3.Дату на Русском (Вывел но она на Английском языке) 
На русском это значит Январь, Февраль, ... В коде формат даты определялся как "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, хотя можно и ее нагрузить.
 
	
 
	| Сообщение от spinastr |  
	| Эту страницу я вставляю через ifraim на сайт. Скажите это тяжёлая нагрузка на сайт? |  
	
 Серверу ка-то по боку во фрейм ли это будет грузиться или нет, нагрузка определяется не этим. |  |  
	| 
		
	| 
			
			 
			
				27.06.2018, 00:46
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 02.05.2016 
						Сообщений: 390
					 
		
 |  |  
	| 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? |  |  
	| 
		
	| 
			
			 
			
				27.06.2018, 05:47
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Можно. Оставить из всего только РНР код парсера и вместо вывода сформировать массив:  
$json = [
    'title' = $item->title,
    'text' = mb_substr(strip_tags($full_text), 0, 9250, 'UTF-8'),
    и так далее   
];
который по запросу отдать клиенту - json_encode($json); Как делается, пример у вас уже есть. |  |  
	| 
		
	| 
			
			 
			
				27.06.2018, 22:09
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 02.05.2016 
						Сообщений: 390
					 
		
 |  |  
	| laimas,А можно более подробно?
 Я просто js и php знаю на 1%
 |  |  
 
 
 
 |  |