source: Dev/branches/rest-dojo-ui/jQueryUI/server/rdfapi/syntax/RssParser.php @ 312

Last change on this file since 312 was 312, checked in by jkraaijeveld, 13 years ago
File size: 6.9 KB
Line 
1<?php
2
3// ----------------------------------------------------------------------------------
4// Class: RSS/ATOM Parser
5// ----------------------------------------------------------------------------------
6
7
8/**
9 * RSS/ATOM Parser
10 *
11 * This class uses the MagpieRSS Parser by Kellan Elliott-McCrea <kellan@protest.net>. MagpieRSS is
12 * compatible with RSS 0.9 through RSS 1.0. Also parses RSS 1.0's modules, RSS 2.0, and Atom (with a few exceptions).
13 * Magpie is distributed under the GPL license. (http://magpierss.sourceforge.net/)
14 *
15 *
16 *
17 * @author Tobias Gauß <tobias.gauss@web.de>
18 * @version $Id: RssParser.php 301 2006-06-26 10:22:25Z tgauss $
19 * @package syntax
20 * @access public
21 **/
22
23class RssParser extends Object {
24        var $type;
25       
26        /**
27        * Main function
28        *
29        * @param $url location of the document
30        * @return parsed model
31        */
32        function generateModel($url){
33                $rss = null;
34                if(substr($url,0,7)=="http://"){
35                        $rss = fetch_rss($url);
36                }else{
37                                $string = file_get_contents($url);
38                                $rss = new MagpieRSS($string); 
39                }
40               
41                $modelFactory = new ModelFactory();
42                $model = $modelFactory->getMemModel(); 
43                $bn = new Resource($url);
44               
45                $this->type = $rss->feed_type;
46                $version = $rss->feed_version;
47               
48                $nmsp = null;
49                if($version == "1.0")
50                                $nmsp = "http://purl.org/rss/1.0/";
51                if($version == "0.91")
52                                $nmsp = "http://my.netscape.com/publish/formats/rss-spec-0.91.html#";
53                if($version == "2.0")
54                                $nmsp = "http://purl.org/rss/1.0/";
55                if($this->type == "Atom")
56                                $nmsp = "http://www.w3.org/2005/Atom";
57                 
58                if($this->type == "Atom")
59                        $this->channel($model,$rss,$bn,$nmsp,"feed");
60                else
61                        $this->channel($model,$rss,$bn,$nmsp,"channel");
62                $this->image($model,$rss,$bn,$nmsp);
63                $this->items($model,$rss,$bn,$nmsp);
64                $model->addNamespace("rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#");
65                if($nmsp!= null)
66                        $model->addNamespace($this->type,$nmsp);
67                return $model;
68        }
69
70        /**
71        * Parses the image if there is one.
72        *
73        * @param $model the model
74        * @param $rss the magpie parser object
75        * @param $bnOrg the node which represents the channel
76        * @param $nmsp the
77        */
78        function image(&$model,&$rss,&$bnOrg,&$nmsp){           
79                if(count($rss->image)>0){
80                        if(isset($rss->image['about'])){
81                                $bn = new Resource($rss->image['about']);
82                        }else if(isset($rss->image['url'])){
83                                $bn = new Resource($rss->image['url']);
84                        }else{
85                                $bn = new BlankNode("image");
86                        }
87                        $model->add(new Statement($bnOrg,new Resource($nmsp."image"),$bn));
88                        $model->add(new Statement($bn,new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),new Resource($nmsp."image")));
89                }
90                foreach($rss->image as $key => $value){
91                $statement = null;     
92                switch($key){
93                                        case "dc":
94                                                $this->dc($bn,$model,$value);
95                                        break;
96                                        case "sy":
97                                                $this->sy($bn,$model,$value);
98                                        break;
99                                        default :
100                                                $statement = new Statement($bn,new Resource($nmsp.$key), new Literal($value));
101                                        break;
102                                }
103                        if($statement != null){
104                                $model->add($statement);
105                        }
106                }
107       
108        }
109       
110        /**
111        * Parses the rss items/ atom entries.
112        *
113        * @param $model the model
114        * @param $rss the magpie parser object
115        * @param $bnOrg the node which represents the channel
116        * @param $nmsp the
117        */
118        function items(&$model,&$rss,&$bnOrg,&$nmsp){           
119                $items = new BlankNode("items");
120                $model->add(new Statement($bnOrg,new Resource($nmsp."items"),$items));
121                $model->add(new Statement($items,new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq")));
122                $i = 1;
123                foreach($rss->items as $outerKey => $outerValue){
124                        if(isset($outerValue['about'])){
125                                $bn = new Resource($outerValue['about']);
126                        }else if(isset($outerValue['guid'])){
127                                $bn = new Resource($outerValue['guid']);
128                        }else if(isset($outerValue['id'])){
129                                $bn = new Resource($outerValue['id']);
130                        }else{
131                                $bn = new Blanknode("item".$i);
132                        }
133                        $model->add(new Statement($items,new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#_".$i),$bn));
134                        if($this->type == "Atom"){
135                                $model->add(new Statement($bn,new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),new Resource("http://www.w3.org/2005/Atomentry")));
136                        }else{
137                                $model->add(new Statement($bn,new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),new Resource("http://purl.org/rss/1.0/item")));
138                        }
139                        foreach($outerValue as $key => $value){
140                                $statement = null;
141                                switch($key){
142                                        case "about":
143                                                break;
144                                        case "guid":
145                                                break;
146                                        case "dc":
147                                                $this->dc($bn,$model,$value);
148                                        break;
149                                        case "sy":
150                                                $this->sy($bn,$model,$value);
151                                        break;
152                                        default :
153                                                if($value != null)
154                                                $statement = new Statement($bn,new Resource($nmsp.$key), new Literal($value));
155                                        break;
156                                }
157                                if($statement != null){
158                                        $model->add($statement);
159                                }
160                        }
161                        $i++;
162                }
163               
164        }
165       
166        /**
167        * Adds the dc namespace.
168        *
169        * @param $node the node
170        * @param $model the model
171        * @param $dc Array which contains the dc objects
172        */
173        function dc(&$node,&$model,&$dc){
174                $model->addNamespace("dc","http://purl.org/dc/elements/1.1/");
175                foreach($dc as $key => $value){
176                                $statement = null;
177                                $statement = new Statement($node,new Resource("http://purl.org/dc/elements/1.1/".$key), new Literal($value));
178                        if($statement != null){
179                                $model->add($statement);
180                        }
181                }
182        }
183       
184        /**
185        * Adds the sy namespace.
186        *
187        * @param $node the node
188        * @param $model the model
189        * @param $sy Array which contains the sy objects
190        */
191        function sy(&$node,&$model,&$sy){
192                $model->addNamespace("sy","http://purl.org/rss/1.0/modules/syndication/");
193                foreach($sy as $key => $value){
194                                $statement = null;
195                                $statement = new Statement($node,new Resource("http://purl.org/rss/1.0/modules/syndication/".$key), new Literal($value));
196                        if($statement != null){
197                                $model->add($statement);
198                        }
199                }
200               
201        }
202       
203       
204        /**
205        * Parses the rss channel/ atom feed.
206        *
207        * @param $model the model
208        * @param $rss the magpie parser object
209        * @param $node the node which represents the channel
210        * @param $nmsp the
211        */
212        function channel(&$model,&$rss,&$node,&$nmsp,$type){
213                // Channel
214                $statement = new Statement($node,new Resource('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), new Resource($nmsp.$type));
215                $model->add($statement);
216               
217                foreach($rss->channel as $key => $value){
218                        $statement = null;     
219                        switch($key){
220                                                case "dc":
221                                                        $this->dc($node,$model,$value);
222                                                break;
223                                                case "sy":
224                                                        $this->sy($node,$model,$value);
225                                                break;
226                                                case "items":   
227                                                break;
228                                                case "tagline":
229                                                break;
230                                                case "items_seq":
231                                                break;
232                                                default :
233                                                        $statement = new Statement($node,new Resource($nmsp.$key), new Literal($value));
234                                                break;
235                                        }
236                        if($statement != null){
237                                $model->add($statement);
238                }
239        }
240}
241
242 
243 
244} //end: RssParser
245
246?>
Note: See TracBrowser for help on using the repository browser.