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

Last change on this file since 289 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

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.