Jump to content

array help


MDanz

Recommended Posts

I've downloaded lastrss.php to get rss feeds to my website.  I've used CNN rss feeds and they display correctly.  The problem i'm having is i can't find the array variable in lastrss.php so i can display just one item out of the feed, instead of all items.

 

e.g. result[1]  would show the second item in the array

 

i don't know what the variable is for the array?

 

 

can you help me spot what the array variable is?  i've tried echo $result[1]; and echo $channeltags[1]; unless i'm doing it wrong??

 

here's the code

 

<?php
/*
======================================================================
lastRSS 0.9.1

Simple yet powerfull PHP class to parse RSS files.

by Vojtech Semecky, webmaster @ webdot . cz

Latest version, features, manual and examples:
	http://lastrss.webdot.cz/

----------------------------------------------------------------------
LICENSE

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License (GPL)
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

To read the license please visit http://www.gnu.org/copyleft/gpl.html
======================================================================
*/

/**
* lastRSS
* Simple yet powerfull PHP class to parse RSS files.
*/
class lastRSS {
// -------------------------------------------------------------------
// Public properties
// -------------------------------------------------------------------
var $default_cp = 'UTF-8';
var $CDATA = 'nochange';
var $cp = '';
var $items_limit = 0;
var $stripHTML = False;
var $date_format = '';

// -------------------------------------------------------------------
// Private variables
// -------------------------------------------------------------------
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');

// -------------------------------------------------------------------
// Parse RSS file and returns associative array.
// -------------------------------------------------------------------
function Get ($rss_url) {
	// If CACHE ENABLED
	if ($this->cache_dir != '') {
		$cache_file = $this->cache_dir . '/rsscache_' . md5($rss_url);
		$timedif = @(time() - filemtime($cache_file));
		if ($timedif < $this->cache_time) {
			// cached file is fresh enough, return cached array
			$result = unserialize(join('', file($cache_file)));
			// set 'cached' to 1 only if cached file is correct
			if ($result) $result['cached'] = 1;
		} else {
			// cached file is too old, create new
			$result = $this->Parse($rss_url);
			$serialized = serialize($result);
			if ($f = @fopen($cache_file, 'w')) {
				fwrite ($f, $serialized, strlen($serialized));
				fclose($f);
			}
			if ($result) $result['cached'] = 0;
		}
	}
	// If CACHE DISABLED >> load and parse the file directly
	else {
		$result = $this->Parse($rss_url);
		if ($result) $result['cached'] = 0;
	}
	// return result
	return $result;
}

// -------------------------------------------------------------------
// Modification of preg_match(); return trimed field with index 1
// from 'classic' preg_match() array output
// -------------------------------------------------------------------
function my_preg_match ($pattern, $subject) {
	// start regullar expression
	preg_match($pattern, $subject, $out);

	// if there is some result... process it and return it
	if(isset($out[1])) {
		// Process CDATA (if present)
		if ($this->CDATA == 'content') { // Get CDATA content (without CDATA tag)
			$out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));
		} elseif ($this->CDATA == 'strip') { // Strip CDATA
			$out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));
		}

		// If code page is set convert character encoding to required
		if ($this->cp != '')
			//$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]);
			$out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]);
		// Return result
		return trim($out[1]);
	} else {
	// if there is NO result, return empty string
		return '';
	}
}

// -------------------------------------------------------------------
// Replace HTML entities &something; by real characters
// -------------------------------------------------------------------
function unhtmlentities ($string) {
	// Get HTML entities table
	$trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
	// Flip keys<==>values
	$trans_tbl = array_flip ($trans_tbl);
	// Add support for ' entity (missing in HTML_ENTITIES)
	$trans_tbl += array(''' => "'");
	// Replace entities by values
	return strtr ($string, $trans_tbl);
}

// -------------------------------------------------------------------
// Parse() is private method used by Get() to load and parse RSS file.
// Don't use Parse() in your scripts - use Get($rss_file) instead.
// -------------------------------------------------------------------
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']; } // This is used in my_preg_match()
		// otherwise use the default codepage
		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 != '') $result['textinput_'.$textinputtag] = $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 != '') $result['image_'.$imagetag] = $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 // Error in opening return False
	{
		return False;
	}
}
}

/* 
======================================================================
lastRSS usage DEMO 1
----------------------------------------------------------------------
This example shows, how to
     - create lastRSS object
    - set transparent cache
    - get RSS file from URL
    - show result in array structure
======================================================================
*/

// include lastRSS


// Create lastRSS object
$rss = new lastRSS;

// Set cache dir and cache time limit (1200 seconds)
// (don't forget to chmod cahce dir to 777 to allow writing)
$rss->cache_dir = '';
$rss->cache_time = 0;
$rss->cp = 'US-ASCII';
$rss->date_format = 'l';

$rssurl = $_POST['website'];




if ($rs = $rss->get($rssurl)) {
    echo '<pre>';
    print_r($rs);	
    echo '</pre>';
    }
else {
    echo "Error: It's not possible to get $rssurl...";
}

?> 

Link to comment
https://forums.phpfreaks.com/topic/189490-array-help/#findComment-1000238
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.