TP-Docs
HTML5 Icon HTML5 Icon HTML5 Icon
TP on Social Media

Recent

Welcome to TinyPortal. Please login or sign up.

June 25, 2024, 09:00:49 AM

Login with username, password and session length
Members
Stats
  • Total Posts: 195,280
  • Total Topics: 21,227
  • Online today: 190
  • Online ever: 3,540 (September 03, 2022, 01:38:54 AM)
Users Online
  • Users: 0
  • Guests: 130
  • Total: 130

Updated RSS feed Block...

Started by nite0859, March 25, 2007, 08:00:33 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

nite0859

If you stream your news from Yahoo or Google with the current RSS block, you have no control whether of not images are included with your story. You also can't lose the little graphic from Yahoo or Google.

However, using lastRSS inside a phpblock will allow you to do just this.

Download lastRSS.
Create a directory "Temp" and chmod it to 777.
Put "lastRSS.php" in the root directory of your forum, parallel with the ./Themes, ./Sources, etc. directories. --> http://forum.midessa.net/lastRSS.php ...

Contents of my lastRSS.php

<?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 $stripHTML True;
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$serializedstrlen($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_ENTITIESENT_QUOTES);
// Flip keys<==>values
$trans_tbl array_flip ($trans_tbl);
// Add support for &apos; entity (missing in HTML_ENTITIES)
$trans_tbl += array('&apos;' => "'");
// 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($f4096);
}
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 bull[censored] 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 bull[censored] 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;
}
}
}

?>


And the contents of my phpblock ::

// include lastRSS
include "./lastRSS.php";

// 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 = './temp';
$rss->cache_time = 1200; // (5 seconds)
$rss->cp = 'UTF-8';
$rss->items_limit = 6;

// Try to load and parse RSS file
if ($rs = $rss->get('http://news.google.com/news?hl=en&ned=us&q=Permian+Basin&ie=UTF-8&output=rss'))
{
    // Show last published articles (title, link, description)
    echo "<ul>\n";
    foreach($rs['items'] as $item) {
        echo "\t<li><b><a href=\"$item[link]\">".$item['title']."</a></b><br />".$item['description']."</li>\n";
        }
    echo "</ul>\n";
    }
else {
    echo "Error: It's not possible to reach RSS file...\n";
}


Of course, all I did was modify the example provided on lastRSS examples ...

<?php
/* 
 ======================================================================
 lastRSS usage DEMO 2
 ----------------------------------------------------------------------
 This example shows, how to
     - create lastRSS object
    - set transparent cache
    - get RSS file from URL
    - access and show fields of the result
 ======================================================================
*/

// include lastRSS
include "./lastRSS.php";

// 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 './temp';
$rss->cache_time 1200;

// Try to load and parse RSS file
if ($rs $rss->get('http://www.freshfolder.com/rss.php')) {
    
// Show website logo (if presented)
    
if ($rs[image_url] != '') {
        echo 
"<a href=\"$rs[image_link]\"><img src=\"$rs[image_url]\" alt=\"$rs[image_title]\" vspace=\"1\" border=\"0\" /></a><br />\n";
        }
    
// Show clickable website title
    
echo "<big><b><a href=\"$rs[link]\">$rs[title]</a></b></big><br />\n";
    
// Show website description
    
echo "$rs[description]<br />\n";
    
// Show last published articles (title, link, description)
    
echo "<ul>\n";
    foreach(
$rs['items'] as $item) {
        echo 
"\t<li><a href=\"$item[link]\">".$item['title']."</a><br />".$item['description']."</li>\n";
        }
    echo 
"</ul>\n";
    }
else {
    echo 
"Error: It's not possible to reach RSS file...\n";
}
?>



I'm not a guru. I just found something that worked. Perhaps the TP coders can take some cues from lastRSS and allow embedded rss-images images/descriptions/URLs, etc., to become selectable. I think right now, TP allows descriptions to be be turned on and off...

I'm also using similar methodology to embed rss into a static webpage, http://www.midessa.net, and into my shopping mall, http://permian-mall.midessa.net ... Since the search engines love for your pages to change, I figured it'd be good to change 'em with news ...

Shellius

I have installed SMF Blogger but I'm having no luck getting an RSS feed off the blog page within the TP forum.  Will last RSS work for that? 


nite0859

Quote
I have installed SMF Blogger but I'm having no luck getting an RSS feed off the blog page within the TP forum.

Is there even an RSS created by SMF blogger in the first place? I don't know..

lastRSS grabs feeds that already exist.

GravuTrad