lastRSS::Parse PHP Method

Parse() public method

-------------------------------------------------------------------
public Parse ( $rss_url )
    function Parse($rss_url)
    {
        // Open and load RSS file
        if ($f = @fopen($rss_url, 'r')) {
            $rss_content = '';
            while (!feof($f)) {
                $rss_content .= fgets($f, 4096);
            }
            fclose($f);
            // Parse document encoding
            $result->encoding = $this->my_preg_match("'encoding=[\\'\"](.*?)[\\'\"]'si", $rss_content);
            // if document codepage is specified, use it
            if ($result->encoding != '') {
                $this->rsscp = $result->encoding;
            } else {
                $this->rsscp = $this->default_cp;
            }
            // This is used in my_preg_match()
            // Parse CHANNEL info
            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;
                }
                // Set only if not empty
            }
            // If date_format is specified and lastBuildDate is valid
            if ($this->date_format != '' && ($timestamp = strtotime($result->lastBuildDate)) !== -1) {
                // convert lastBuildDate to specified date format
                $result->lastBuildDate = date($this->date_format, $timestamp);
            }
            // Parse TEXTINPUT info
            preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si", $rss_content, $out_textinfo);
            // This a little strange regexp means:
            // Look for tag <textinput> with or without any attributes, but skip truncated version <textinput /> (it's not beggining tag)
            if (isset($out_textinfo[2])) {
                foreach ($this->textinputtags as $textinputtag) {
                    $temp = $this->my_preg_match("'<{$textinputtag}.*?>(.*?)</{$textinputtag}>'si", $out_textinfo[2]);
                    if ($temp != '') {
                        $k = 'textinput_' . $textinputtag;
                        $result->{$k} = $temp;
                        // Set only if not empty
                    }
                }
            }
            // Parse IMAGE info
            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 != '') {
                        $k = 'image_' . $imagetag;
                        $result->{$k} = $temp;
                        // Set only if not empty
                    }
                }
            }
            // Parse ITEMS
            preg_match_all("'<item(| .*?)>(.*?)</item>'si", $rss_content, $items);
            $rss_items = $items[2];
            $i = 0;
            $result->items = array();
            // create array even if there are no items
            foreach ($rss_items as $rss_item) {
                // If number of items is lower then limit: Parse one 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;
                        }
                        // Set only if not empty
                    }
                    // Strip HTML tags and other bullshit from DESCRIPTION
                    if ($this->stripHTML && $result->items[$i]->description) {
                        $result->items[$i]->description = strip_tags($this->unhtmlentities(strip_tags($result->items[$i]->description)));
                    }
                    // Strip HTML tags and other bullshit from TITLE
                    if ($this->stripHTML && $result->items[$i]->title) {
                        $result->items[$i]->title = strip_tags($this->unhtmlentities(strip_tags($result->items[$i]->title)));
                    }
                    // If date_format is specified and pubDate is valid
                    if ($this->date_format != '' && ($timestamp = strtotime($result->items[$i]->pubDate)) !== -1) {
                        // convert pubDate to specified date format
                        $result->items[$i]->pubDate = date($this->date_format, $timestamp);
                    }
                    // Item counter
                    $i++;
                }
            }
            $result->items_count = $i;
            return $result;
        } else {
            return False;
        }
    }