diff options
Diffstat (limited to 'common/app/classes/Opml.php')
| -rw-r--r-- | common/app/classes/Opml.php | 70 | 
1 files changed, 70 insertions, 0 deletions
diff --git a/common/app/classes/Opml.php b/common/app/classes/Opml.php new file mode 100644 index 0000000..ae9e8b1 --- /dev/null +++ b/common/app/classes/Opml.php @@ -0,0 +1,70 @@ +<?php + +class Opml +{ +    var $_xml = null; +    var $_currentTag = ''; + +    var $title = ''; +    var $entries = array(); +    var $map  = +        array( +            'URL'         => 'website', +            'HTMLURL'     => 'website', +            'TEXT'        => 'name', +            'TITLE'       => 'name', +            'XMLURL'      => 'feed', +            'DESCRIPTION' => 'description', +            'ISDOWN'      => 'isDown' +        ); + + +    function parse($data) +    { +        $this->_xml = xml_parser_create('UTF-8'); +        //xml_parser_set_option($this->_xml, XML_OPTION_CASE_FOLDING, false); +        //xml_parser_set_option($this->_xml, XML_OPTION_SKIP_WHITE, true); +        xml_set_object($this->_xml, $this); +        xml_set_element_handler($this->_xml,'_openTag','_closeTag'); +        xml_set_character_data_handler ($this->_xml, '_cData'); + +        xml_parse($this->_xml,$data); +        xml_parser_free($this->_xml); +        return $this->entries; +    } + + +    function _openTag($p,$tag,$attrs) +    { +        $this->_currentTag = $tag; + +        if ($tag == 'OUTLINE') +        { +            $i = count($this->entries); +            foreach (array_keys($this->map) as $key) +            { +                if (isset($attrs[$key])) { +                    $this->entries[$i][$this->map[$key]] = $attrs[$key]; +                } +            } +        } +    } + +    function _closeTag($p, $tag){ +        $this->_currentTag = ''; +    } + +    function _cData($p, $cdata){ +        if ($this->_currentTag == 'TITLE'){ +            $this->title = $cdata; +        } +    } + +    function getTitle(){ +        return $this->title; +    } + +    function getPeople(){ +        return $this->entries; +    } +}
\ No newline at end of file  | 
