Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.06.2018, 08:13
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 25.06.2018, 08:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну не знаете вы языка, но то что данный вопрос к JS отношения не имеет это же понятно. Есть же раздел для вопросов по серверным языкам.

Функция date не поддерживает локаль, вместо нее нужно использовать strftime - $pubDate = strftime("%a, %d %m %Y %H:%M:%S %Z", strtotime($pubDate)). И перед использованием этой функции установить русскую локаль.
Ответить с цитированием
  #3 (permalink)  
Старый 25.06.2018, 23:18
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

laimas,
Здравствуйте!

Я точно ничего не знаю а в каких строчках кода что нужно заменить?

Подскажите пожалуйста.

Я просто хотел сделать страницу с новостями и если в них есть картинка и всё. С ссылкой заголовка на новость. Это наверно легче чем курс валют.
Ответить с цитированием
  #4 (permalink)  
Старый 26.06.2018, 06:19
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

laimas,

Здравствуйте я подумал может поможите сделать типа как с курсом валют вот тут? ссылка
Ответить с цитированием
  #5 (permalink)  
Старый 26.06.2018, 10:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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) также зависит от системы.
Ответить с цитированием
  #6 (permalink)  
Старый 27.06.2018, 00:01
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 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 сделать как курс валют?
Ответить с цитированием
  #7 (permalink)  
Старый 27.06.2018, 00:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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 на сайт. Скажите это тяжёлая нагрузка на сайт?
Серверу ка-то по боку во фрейм ли это будет грузиться или нет, нагрузка определяется не этим.
Ответить с цитированием
  #8 (permalink)  
Старый 27.06.2018, 00:46
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 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?
Ответить с цитированием
  #9 (permalink)  
Старый 27.06.2018, 05:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Можно. Оставить из всего только РНР код парсера и вместо вывода сформировать массив:

$json = [
    'title' = $item->title,
    'text' = mb_substr(strip_tags($full_text), 0, 9250, 'UTF-8'),
    и так далее   
];


который по запросу отдать клиенту - json_encode($json); Как делается, пример у вас уже есть.
Ответить с цитированием
  #10 (permalink)  
Старый 27.06.2018, 22:09
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

laimas,
А можно более подробно?
Я просто js и php знаю на 1%
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
парсер xml на js Vlad777 Общие вопросы Javascript 21 02.03.2018 16:41
Вызов emit в nodejs, через отправку CURL на стороне PHP Ваяс AJAX и COMET 0 30.10.2017 08:36
PHP XML кодировка aleks_lv Серверные языки и технологии 3 01.05.2013 02:36
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36