Quick Links
Bible Search Christian Links
Online Bibles Link to Us
  Downloads Web Hosting  
  Domain Names  


PDA

View Full Version : Using RSS Feeds


FPG
Dec 14th 2004, 10:41 PM
I'd like to add a business news spot on my page using RSS feeds. To be more specific, I'd like to use Yahoo's Business Feed ( http://rss.news.yahoo.com/rss/business ). My website is validated in HTML 4.01 Trans., so that may be a problem. Would anyone have any idea how to help me out or show me some tutorials on how to get these things working, and how to customize them to my sites style.

bdh
Dec 15th 2004, 08:22 AM
That's pretty easy. All you need to do is to go to a place like RSSDigest (http://www.bigbold.com/rssdigest/) and paste the link you mentioned. After that, you fill out the form with your details and paste the HTML into your pages.

I made an example (http://bibleforums.org/rss.php) for you here using PHP.

The whole thing took about 60 seconds ;)

FPG
Dec 16th 2004, 08:17 AM
Neither one of those links work ... I get an error with both of them. :D

bdh
Dec 16th 2004, 07:25 PM
... then something is broke your side. They do work. Both.

FPG
Dec 16th 2004, 08:30 PM
Ok, I kid you not, neither of them worked last night, but right now they work just fine... eerie.. :D Thanks BDH, I'll check them out later tonight after work!

BTW: Could you post the php code you used?

bdh
Dec 17th 2004, 05:37 AM
The code is URL specific. You get it from the RSS site posted above. (They also give you the option to use java-script)

FPG
Dec 17th 2004, 07:33 AM
Thanks BDH, now I just have to wait till the site is back up after upgrading :D .

guntario
Dec 17th 2004, 10:46 AM
BDH... You're the man!! We love you here!:cool:

FPG
Dec 17th 2004, 10:39 PM
Hey BDH, do you know of any sites other than RSS Digest that could do the job? RSS Digest isn't projected to be back up until January... and I need this site finished in the middle of january.

bdh
Dec 18th 2004, 05:55 AM
Yes, from This site :D ... I'm busy knocking together something very similar to RSS digest and hope to have it online in the next few weeks.

You can also take a look at the big G (http://www.google.com/search?hl=en&lr=&q=put+rss+feeds+on+your+we+page&btnG=Search) for more sites doing this.

Also, if you use one of the CMS apps like PHPNuke etc, most of these have built in RSS feed parsers you can enable, then you don't need a parser from a third party site.

FPG
Dec 20th 2004, 04:38 AM
I ran it through phpNuke and set up the block and it works fine in the nuke area. But how do I get the headlines from the Nuke area to my other site? Or how can I get the headlines from one site to the other basically ..

bdh
Dec 20th 2004, 06:35 AM
Actually, what I meant previously was that if you did your whole site in PHP Nuke, you could do this. To have Nuke installed just for the RSS seems a bit of an overkill.

Not exactly sure how one would do this ... In PHPNuke it probably uses an include directive to pull in the RSS page so you would need to do the same thing in the page you wanted it on.

The page would probably have to be either an IFRAME or php page in order to include the Nuke code.

FPG
Dec 20th 2004, 08:23 PM
Ok well after some more research, I finally figuring out what an RSS feed is, and once I did that, I figured that I could simply search hotscripts and find a PHP script that would take and parse the RSS feed into HTML, similar to what those rss sites do for you, except it wouldn't have any of their advertising on it. So I found this script on hotscripts last night and it looks like it should work, but I'm not sure what's wrong, I included it onto my page via php include.


<?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 &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($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 bull**** 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**** 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;
}
}
}

?>

FPG
Dec 22nd 2004, 07:02 AM
Well after a few days working on it, I found a RSS Parser that worked for me, only to discover that it exports it to XHTML not to HTML. So I decided to give up on RSS feeds and went with cutenews to instead add news to the page manually. Thanks for all your help BDH. One thing has come out of this however, I'd like to write my own feed, though I think I'll wait until my PHP and XML classes are over :D . Again thanks for your help.

bdh
Oct 15th 2005, 06:33 PM
I said it would be a few weeks before I had something ... well actually, it was a bit longer then that. Scroll down to the bottom of this page and click the http://bibleforums.org/rss2.jpg image ... it can read the message board's RSS feed ... it's getting there slowly ;)

FPG
Oct 19th 2005, 01:55 PM
I took an XML over the spring last year and we learned all about RSS. That coupled with my newfound knowledge of PHP allows me to write my own parsers. I've actually built a few of them, as well as converting php generated code into RSS 2.0 feeds. They're so handy!

Gods Creation
Oct 19th 2005, 05:24 PM
Interesting, you have an XML course down in your past High-School? Seems that all High-Schools in my area only have "Computer Applications" and "Advanced typing" class when it comes to computers.

On a sidenote, this RSS feature looks pretty sweet.

FPG
Oct 24th 2005, 04:18 PM
Not exactly. Our highschool allows us to take PSEO (Post Secondary Options). Basically it means I can take college classes at a local college of my choosing and have those credits count as both highschool credit and as college credit. I took XML, Perl, and PHP my last semester of my highschool year. I learned a lot about php and XML so I was able to design my own parser.

My highschool only had basic web design which is what got my started.. but it was the college that really pushed me over the edge.

Gods Creation
Oct 27th 2005, 10:22 PM
That's interesting. Did you get 'elective' credits in High School for doing this? I've taken Biology and Calc down in college when I was in High School, and got credit for both, but I don't think that the school would have given me any elective credit for taking web-design classes.

On a sidenote, you've made a wise step, imo. With AJAX gaining popularity, it's capabilities are pretty scary. Knowing XML will help you a lot in developing AJAX [and integrating a variety of other] applications. Are you majoring in Web Development?

FPG
Oct 28th 2005, 03:20 PM
Yea I got elective credits for Highschool. I really didn't need many classes my senior year, I just needed to have enough credits.

I want to major in web development, but right now I'm going to a christian college that only offers Computer Science or Graphic Design. neither of which offer any web design courses that would help me prepare for a future career in it. I'm thinking of majoring here in Youth Ministry or Education (I've thought about teaching web design in a Tech College) and taking some web classes at a tech college locally and then after school finishing off a degree at a tech college. Currently though I'm a graphic design major.. just getting by with learning about illustrator and photoshop.. though I really have no desire to do that aspect of web design.

bdh
Oct 28th 2005, 07:27 PM
I took an XML over the spring last year and we learned all about RSS. That coupled with my newfound knowledge of PHP allows me to write my own parsers. I've actually built a few of them, as well as converting php generated code into RSS 2.0 feeds. They're so handy!Would be interested to see what you have done. ;)

SA Topsites