Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 20
1

Rss лента

26.03.2018, 10:16. Показов 749. Ответов 1
Метки rss (Все метки)

Начинаю изучать php. Сейчас делаю локальный сайт с rss лентой. Однако выводится только дата поста. Не могу понять в чем проблема. За источник ленты беру сайт 4pda.ru.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 <?php
function print_rss($url_rss,$file_rss,$hclock,$kol_print_news)
  {
    //$url_rss - URL-адрес RSS потока
    //$file_rss - адресс файла для хранения RSS-новостей
    //$hclock - время обновления, в часах
    //$kol_print_news - количество выводимых новостей
        
    if (!file_exists($file_rss) || ( filemtime($file_rss) + $hclock*60*60 < time() ) )//если файл не сохраняли, то сохраняем на локальном сервере или если существует, то проверяем устарел ли файл (не более Х часов назад он записан)
      {
       if (@!copy ($url_rss,$file_rss))
         return (false);
       
       $text_rss=file($file_rss);
       $text_rss=implode("",$text_rss);
       //преобразуем кодировку данных
       //если не нежно конвертировать кодировку, то комментируем ниже идущее условие или редактируем
       if (preg_match('/<?xml[^>]+encoding[\s]*=[\s]*("|\')windows-1251("|\')[^>]+?>/i', $text_rss))
        {
          
          $text_rss = iconv("cp1251", "utf-8", $text_rss);
          file_put_contents($file_rss, $text_rss);//пишем данные обратно в файл
          
         }
      }
          
    $text_rss=file($file_rss);
    $text_rss=implode("",$text_rss);
    
    $url_image = "";
    $image_is=preg_match("#<image>(.*?)</image>#is",$text_rss,$image_m);
    if ( $image_is )
      {
       
       $image_url_is = preg_match("#<url>(.*?)</url>#is",$image_m[0],$image_t);
       
       if ( $image_url_is )
         $url_image = $image_t[1];
      }
    
    $mas_item=array();
    preg_match_all("#<item>.*?</item>#is",$text_rss,$mas_item);
    
    $one_item=array();
    $t="";
    
    $t.=( $url_image ? "<div><img src='".$url_image."'  ></div>" :"");
    
    $kol=0;
    if (sizeof($mas_item)>0)
      {
       
       foreach ($mas_item[0] as $one_item)
         {
          
          $date = "";
          $kol++;
          $t_is=preg_match("#<title>(.*?)</title>#is",$one_item,$title);
          $l_is=preg_match("#<link>(.*?)</link>#is",$one_item,$link);
          $d_is=preg_match("#<description>(.*?)</description>#is",$one_item,$description);
          
          $date_is=preg_match("#<pubDate>(.*?)</pubDate>#is",$one_item,$date_t);
          
          if ($t_is && $l_is)
            {
              $title = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, $title);
              $link = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, $link);
              $description = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, $description);
             
             
             if ( $date_is )
               $date = strtotime($date_t[1]);
             
             
             $t.="<div><a href='".$link[1]."' target='_blank'>".$title[1]."</a> 
              <br>"
              .$description[1]
              .( $date ? "<br>".date("d.n.Y",$date) : "" )
              ."</div>";
             
            }
          if ($kol >= $kol_print_news) break;
         }
      }
    echo ($t);
    return (true);
  }
?>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include_once("write_rss.php");//подключаем файл с функцией вывода RSS-новостей
//адресс новостей (URL-адрес RSS потока)
$url_rss="http://4pda.ru/feed";
 //количество выводимых новостей
$kol_print_news=20;
 //имя файла для хранения RSS-новостей на локальном сервере (то есть кэш-файл)
$file_rss="cache_rss.xml"; 
//время обновления, в часах
$hclock=0.01;
print_rss($url_rss,$file_rss,$hclock,$kol_print_news); //вызываем функцию вывода RSS-новостей
?>
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2018, 10:16
Ответы с готовыми решениями:

RSS лента
Здравствуйте помогите мне пожалуйста. Я хочу сделать RSS ленту для сайта. Как я думаю при...

RSS лента на сайте с другого сайта
Вообщем, покопался в интернете, нашел код который мне нужен, но дело в том, что он выводит все...

Количество новостей rss ленты и подключения несколько rss лент
Здравствуйте, возник такой вопрос, у меня есть rss-лента, одна она работает &lt;?php $rss =...

Лента новостей
В чем же все таки проблема! не могу вывести список новостей с описанием каждой новости вот сам...

1
ytf
274 / 258 / 184
Регистрация: 15.08.2017
Сообщений: 1,483
30.03.2018, 14:25 2
тайтл и дескрипшн прятались внутри CDATA

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
function print_rss($url_rss,$file_rss,$hclock,$kol_print_news)
  {
    //$url_rss - URL-адрес RSS потока
    //$file_rss - адресс файла для хранения RSS-новостей
    //$hclock - время обновления, в часах
    //$kol_print_news - количество выводимых новостей
        
    if (!file_exists($file_rss) || ( filemtime($file_rss) + $hclock*60*60 < time() ) )//если файл не сохраняли, то сохраняем на локальном сервере или если существует, то проверяем устарел ли файл (не более Х часов назад он записан)
      {
       if (!copy ($url_rss,$file_rss))
         return (false);
       
       $text_rss=file($file_rss);
       $text_rss=implode("",$text_rss);
       //преобразуем кодировку данных
       //если не нежно конвертировать кодировку, то комментируем ниже идущее условие или редактируем
       if (preg_match('/<?xml[^>]+encoding[\s]*=[\s]*("|\')windows-1251("|\')[^>]+?>/i', $text_rss))
        {
          
          $text_rss = iconv("cp1251", "utf-8", $text_rss);
          file_put_contents($file_rss, $text_rss);//пишем данные обратно в файл
          
         }
      }
          
    $text_rss=file($file_rss);
    $text_rss=implode("",$text_rss);
    
    $url_image = "";
    $image_is=preg_match("#<image>(.*?)</image>#is",$text_rss,$image_m);
 
    if ( $image_is )
      {
       
       $image_url_is = preg_match("#<url>(.*?)</url>#is",$image_m[0],$image_t);
       
       if ( $image_url_is )
         $url_image = $image_t[1];
      }
    
    $mas_item=array();
    preg_match_all("#<item>.*?</item>#is",$text_rss,$mas_item);
    
    $one_item=array();
    $t="";
    
    $t.=( $url_image ? "<div><img src='".$url_image."'  ></div>" :"");
    
    $kol=0;
    if (sizeof($mas_item)>0)
      {
       
       foreach ($mas_item[0] as $one_item)
         {
          
          $date = "";
          $kol++;
          $t_is=preg_match("#<title>(.*?)</title>#is",$one_item,$title);
          $l_is=preg_match("#<link>(.*?)</link>#is",$one_item,$link);
          $d_is=preg_match("#<description>(.*?)</description>#is",$one_item,$description);
          
          $date_is=preg_match("#<pubDate>(.*?)</pubDate>#is",$one_item,$date_t);
          
          if ($t_is && $l_is)
            {
              $title = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, $title);
              $title = (preg_match("/<!\[CDATA\[([^\]]+)\]\]\>/", $title[1], $match)) ? $match[1] : $title[1];
              $link = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, $link);
              $link = (preg_match("/<!\[CDATA\[([^\]]+)\]\]\>/", $link[1], $match)) ? $match[1] : $link[1];
              $description = preg_replace_callback('/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, $description);
              $description = (preg_match("/\<\!\[CDATA\[([^\]]+)\[/", $description[1], $match)) ? $match[1] : $description[1];
             
             
             if ( $date_is )
               $date = strtotime($date_t[1]);
             
             
             $t.="<div><a href='".$link."' target='_blank'>".$title."</a> 
              <br>"
              .$description
              .( $date ? "<br>".date("d.n.Y",$date) : "" )
              ."</div>\n";
             
            }
          if ($kol >= $kol_print_news) break;
         }
      }
    echo ($t);
    return (true);
  }
 
//адресс новостей (URL-адрес RSS потока)
$url_rss="http://4pda.ru/feed";
 //количество выводимых новостей
$kol_print_news=20;
 //имя файла для хранения RSS-новостей на локальном сервере (то есть кэш-файл)
$file_rss="cache_rss.xml"; 
//время обновления, в часах
$hclock=0.01;
print_rss($url_rss,$file_rss,$hclock,$kol_print_news); //вызываем функцию вывода RSS-новостей
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2018, 14:25

Лента новостей
Здравствуйте ,нужна помощь с CuteNews - лентой новостей.Не так давно решил сделать сайт почитал...

Скрипт новостная лента
В чем проблема? пишу скрипт для вывода новостей, но выдает ошибку Parse error: syntax error,...

Сайт-лента с фотографиями
Здравствуйте. Только начал знакомство с html/css/php и создавая свой сайт, где планировал ежедневно...

AJAX лента новостей
Помогите кто чем может, хочу на сайт засунуть ленту новостей, чтобы там без перезагрузки страницы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru