Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 RSS class
Автор  Mutatos (11.02.2006 12:06) съобщение до автора
Погледнат  2902 пъти добави към любими
Оценка добави коментар
Гласове  2 изпрати на приятел
Коментари  (4) абонирай се за PHP
     
Mutatos
     
 

Това е един примерен клас, който намерих в интернет за създаване на RSS  четец. Използвал съм го няколко пъти и при мен работи.

CODE
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
class rss_parser {

   
function rss_parser()
    {
     
$this->error = '';
     
$this->file = '';
     
     
$this->channel = array();
     
$this->data = '';
     
$this->stack = array();
     
$this->num_items = 0;
   
     
$this->xml_parser = xml_parser_create();
     
xml_set_element_handler($this->xml_parser, "rss_start_element", "rss_end_element");
     
xml_set_character_data_handler($this->xml_parser, "rss_character_data");
   
}

   
function character_data($parser, $data)
    {
     
if (empty($this->data)) $this->data = trim($data);
     
else $this->data .= ' '.trim($data);              
   
}

   
function start_element($parser, $name, $attrs)
    {
     
switch($name)
      {
       
case 'RSS':
         
break;
     
       
case 'CHANNEL':
         
break;
     
       
case 'IMAGE':
         
array_push($this->stack, $name);
         
break;
       
       
case 'ITEM':
         
array_push($this->stack, $name);
         
array_push($this->stack, $this->num_items); // push item index.
         
$this->item[$this->num_items] = array();
         
$this->num_items++;
         
break;
   
       
case 'TEXTINPUT':
         
array_push($this->stack, $name);
         
break;
         
       
default:
         
array_push($this->stack, $name);
         
break;
   
     

    }

   
function end_element($parser, $name)
    {
     
switch ($name)
      {
       
case 'RSS':
         
break;
         
       
case 'CHANNEL':
         
break;
          
       
case 'IMAGE':
         
array_pop($this->stack);
         
break;
       
       
case 'ITEM':
         
array_pop($this->stack);
         
array_pop($this->stack);
         
break;
         
       
case 'TEXTINPUT':
         
array_pop($this->stack);
         
break;
         
       
default:
         
$element = (implode("']['",$this->stack));    
         
eval("$this->channel['$element']=$this->data;");
         
array_pop($this->stack);
         
$this->data = '';
         
break;
     
}
    }

   
function parse()
    {
     
if (!($fp = @fopen($this->file, "r")))
      {
       
$this->error = "Could not open RSS source "$this->file".";
       
return false;
     
}
     
while ($data = fread($fp, 4096))
      {
       
if (!xml_parse($this->xml_parser, $data, feof($fp)))
        {
         
$this->error = sprintf("XML error: %s at line %d.",
           
xml_error_string(xml_get_error_code($this->xml_parser)),
           
xml_get_current_line_number($this->xml_parser));
         
return false;
       
}
      }
     
xml_parser_free($this->xml_parser);
     
return true;
   
}
}


function rss_start_element($parser, $name, $attributes)
{
 
global $rss;
 
$rss->start_element($parser, $name, $attributes);
 
if( $description )
  {
   
print "<h2>$description</h2>";
 
}
}

function rss_end_element($parser, $name)
{
 
global $rss;
 
$rss->end_element($parser, $name);
}

function rss_character_data($parser, $data)
{
 
global $rss;
 
$rss->character_data($parser, $data);
}
?>

Използване на класа:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include($_SERVER['DOCUMENT_ROOT']."/xxxxx/RSS_Parser.class.php");

$rss = new rss_parser();
$rss->file = 'http://xxxxxxxxxxxxx';
$rss->parse() or die($rss->error);
if ($rss->error) print $rss->error;

$allrssfeed = $rss->channel;
$itemfeed = $allrssfeed['ITEM'];

print_r($itemfeed);
?>



Ключови думи: PHP rss class клас xml четец




 За автора: Mutatos  
Николай Николов се занимава с програмиране на PHP/MySQL повече от 6 години. Заедно с разработката на уеб приложения на PHP, се занимава с Java, XML и Webservices.
   
 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Кода може да не работи поради много причини. Важна е идеята!

Поздрави!

  Mutatos на 26.11.2007 23:58

Регистрирах се в сайта само за да Ви кажа едно, за 2-ри път попадам в сайта и се опитвам да ползвам код от него и оставам крайно разочарован, а аз съвсем не паса трева. Много е благородна идеята и евала, че се опитвате да помагате, но моля преди да поствате пробвайте кода.

Относно RSS:

Класа на blowfish, е много добър! Ползвайте него :)

  bbhsoft на 26.11.2007 20:03

Аууууу, кода ми се прецака защото PHP експертите от it-place.net викат htmlspecialchars() по два пъти върху входните данни. Срам!

  blowfish на 11.07.2006 01:48

Този RSS клас е по-добър защото можете да променяте таговете които да се парсват чрез член променливата $itemtags и функцията parse() директно ви връща резултата във формата на PHP масив:

CODE
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

class
rss_processor
{
   
var $default_cp = 'UTF-8';
   
var $CDATA = 'nochange';
   
var $cp = '';
   
var $items_limit = 0;
   
var $strip_html = false;
   
var $date_format = '';

   
var $channeltags = array ('title', 'link', 'description', 'language', 'copyright', 'managingEditor', 'webMaster', 'lastBuildDate', 'rating', 'docs');
   
var $itemtags = array('title', 'link', 'description', 'author', 'category', 'comments', 'enclosure', 'guid', 'pubDate', 'source');
   
var $imagetags = array('title', 'url', 'link', 'width', 'height');
   
var $textinputtags = array('title', 'description', 'name', 'link');

   
function parse ($rss_url)
    {
       
if ($rss_content = @file_get_contents($rss_url)) {
           
$result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content);

           
if ($result['encoding'] != '')
               
$this->rsscp = $result['encoding'];
           
else
               
$this->rsscp = $this->default_cp;

           
preg_match("'<channel.*?>(.*?)</channel>'si", $rss_content, $out_channel);

           
foreach($this->channeltags as $channeltag) {
               
$temp = $this->my_preg_match("'<$channeltag.*?>(.*?)</$channeltag>'si", $out_channel[1]);
               
if ($temp != '') $result[$channeltag] = $temp;
           
}

           
if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !== -1)
               
$result['lastBuildDate'] = date($this->date_format, $timestamp);

           
preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si", $rss_content, $out_textinfo);

           
if (isset($out_textinfo[2])) {
               
foreach($this->textinputtags as $textinputtag) {
                   
$temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)</$textinputtag>'si", $out_textinfo[2]);

                   
if ($temp != '')
                       
$result['textinput_' . $textinputtag] = $temp;
               
}
            }

           
preg_match("'<image.*?>(.*?)</image>'si", $rss_content, $out_imageinfo);

           
if (isset($out_imageinfo[1])) {
               
foreach($this->imagetags as $imagetag) {
                   
$temp = $this->my_preg_match("'<$imagetag.*?>(.*?)</$imagetag>'si", $out_imageinfo[1]);

                   
if ($temp != '')
                       
$result['image_' . $imagetag] = $temp;
               
}
            }

           
preg_match_all("'<item(| .*?)>(.*?)</item>'si", $rss_content, $items);
           
$rss_items = $items[2];
           
$i = 0;
           
$result['items'] = array();

           
foreach ($rss_items as $rss_item) {
               
if ($i < $this->items_limit || $this->items_limit == 0) {
                   
foreach($this->itemtags as $itemtag) {
                       
$temp = $this->my_preg_match("'<$itemtag.*?>(.*?)</$itemtag>'si", $rss_item);

                       
if ($temp != '')
                           
$result['items'][$i][$itemtag] = $temp;
                   
}

                   
if ($this->strip_html && $result['items'][$i]['description'])
                       
$result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description'])));

                   
if ($this->strip_html && $result['items'][$i]['title'])
                       
$result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title'])));

                   
if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !== -1)
                       
$result['items'][$i]['pubDate'] = date($this->date_format, $timestamp);

                   
$i++;
               
}
            }

           
$result['items_count'] = $i;
           
return $result;
       
} else {
           
return false;
       
}
    }

   
function my_preg_match ($pattern, $subject)
    {
       
preg_match($pattern, $subject, $out);

       
if (isset($out[1])) {
           
if ($this->CDATA == 'content')
               
$out[1] = strtr($out[1], array('<![CDATA[' => '', ']]>' => ''));
           
elseif ($this->CDATA == 'strip')
               
$out[1] = strtr($out[1], array('<![CDATA[' => '', ']]>' => ''));

           
if ($this->cp != '')
               
$out[1] = iconv($this->rsscp, $this->cp . '//TRANSLIT', $out[1]);

           
return trim($out[1]);
       
} else {
           
return '';
       
}
    }

   
function unhtmlentities ($str)
    {
       
$trans_tbl = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
       
$trans_tbl = array_flip($trans_tbl);
       
return strtr($str, $trans_tbl);
   
}
}


?>

  blowfish на 11.07.2006 01:45

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 



IT-PLACE.NET © 2004 - 2008