Jump to content

Recommended Posts

Problem I am having is that a feed I pull off of my Wordpress blogs is getting dumb characters in the html output using this script I use.  For example... I am trying to take and use the rss feed at http://www.GeraldineAlabama.com/news/feed  to post to http://www.GeraldineAlabama.com home page as news.  I am using a free third party script called RSS Fetch 0.4.3 found at

www.neoprogrammers.com  It has worked fine on news feeds for most part but on the Wordpress Blog Feeds it seems to insert characters like  and € and I dont want it to be messed up like . Here is code... Is there something I can do make sure this does not happen???  Anyone like to fix this for me?  I can code some but I am very very green.  THanks! 

<?php

/************************************************************

RSS Fetch 0.4.3 (23 July 2005)

RSS Feed Reader

Author: Drew Phillips

www.neoprogrammers.com

Copyright 2005 Drew Phillips

Please rate this script at http://www.hotscripts.com/rate/48456.html

Then it will remain popular and others will be able to find it easier.

Thanks

This program is free software; you can redistribute it and/or

modify it under the terms of the GNU General Public License

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.

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.





************************************************************/





class rss_parser {

var $update_interval = 60; 

/* How often to fetch the rss file

A cached version will be used between updates */

var $data_directory = "/home/neoprog/www/code/rss";

/* Where to store the rss data from the feeds

Note: an absolute path is better than a relative path here

unless you plan on keeping the script to display the feeds

in the same folder as this file and the feeds. */





/* NO NEED TO EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING */



var $rss_url;

var $num_to_show;

var $offset; //added in version 0.4.3

var $do_update;

var $tags = array();

var $content;

var $rss = array();

var $feed_title;

var $feed_link;

var $feed_description;

var $my_html;

function rss_parser($url, $numtoshow = 10, $html = "", $update = FALSE, $offset = 1)

{

$this->rss_url = $url;

$this->num_to_show = $numtoshow;

$this->do_update = $update;

$this->my_html = preg_replace("/(#{.*?).*?})/", "\\1__\\2", $html); //xx:xx tag workaround

$this->offset = --$offset;

$this->content = $this->fetch_feed();

$this->parse_feed();

$this->show();

}



/* string */

function fetch_feed()

{ 

$url_parts = parse_url($this->rss_url);

$filename = $url_parts['host'] . str_replace("/", ",", $url_parts['path']) . "_" . @$url_parts['query'];

if(file_exists($this->data_directory . "/$filename")) {

$last = filemtime($this->data_directory . "/$filename");

$create = 0;

if(time() - $last > $this->update_interval * 60 || $this->update_interval == 0) {

$update = 1;

} else {

$update = 0;

}

} else {

$create = 1;

$update = 1;

}

if($create == 1 || ($this->do_update == TRUE && $update == 1)) {

$fp = @fsockopen($url_parts['host'], 80, $errno, $errstr, 5);

if (!$fp) {

echo "Couldn't open rss feed {$this->feed_url} in {$_SERVER['PHP_SELF']}<br />\n";

return;

}

fputs($fp, "GET {$this->rss_url} HTTP/1.0\r\n"

."Host: " . $url_parts['host'] . "\r\n"

."User-Agent: Drew's RSS Reader 0.1\r\n"

."Connection: Close\r\n\r\n");

while(!feof($fp)) {

$rss_data .= @fread($fp, 1024);

}

list(, $rss_data) = explode("\r\n\r\n", $rss_data, 2);

$output = @fopen($this->data_directory . "/$filename", "w+b");

if(!$output) {

return $rss_data;

} else {

flock($output, LOCK_EX);

fputs($output, $rss_data);

flock($output, LOCK_UN);

fclose($output);

}

} //update

return file_get_contents($this->data_directory . "/$filename");

}

/* void */

function parse_feed()

{

preg_match("/<title>(.*?)<\/title>/", $this->content, $title);

$this->feed_title = @$title[1];

preg_match("/<link>(.*?)<\/link>/", $this->content, $link);

$this->feed_link = @$link[1];

preg_match("/<description>(.*?)<\/description>/", $this->content, $description);

$this->feed_description = @$description[1];

preg_match_all("/<item[^>]*>(.*?)<\/item>/s", $this->content, $items);

if (sizeof($items[0]) == 0) {

echo "No item elements found in rss feed.<br />\n";

}

for($i = 0; $i < sizeof($items[0]); ++$i) {

preg_match_all("/(?:<([\w:]*)[^>]*>\s*(?:<!\[CDATA\[)?(.*?)(?:]]>)?\s*<\/\\1>)+?/si", preg_replace("/<item[^>]*>/", "", $items[0][$i]), $elements);

for($j = 0; $j < sizeof($elements[0]); ++$j) {

$elements[1][$j] = str_replace(":", "__", $elements[1][$j]); //regex fix for items with : like dc:date

$this->rss[$i][$elements[1][$j]] = trim($this->unhtmlentities($elements[2][$j]));

}

}

}


/* void */

function show()

{

if($this->my_html == "") {

$this->show_html();

} else {

$this->show_user_html();

}

}

function show_html()

{

$show = (sizeof($this->rss) > $this->num_to_show ? $this->num_to_show : sizeof($this->rss));

for($i = $this->offset; $i < $this->offset + $show; ++$i) {

echo "- <a href=\"{$this->rss[$i]['link']}\" target=\"_new\">{$this->rss[$i]['title']}</a><br />\n";

}

}

function show_user_html()

{

$show = (sizeof($this->rss) > $this->num_to_show + $this->offset ? $this->num_to_show : sizeof($this->rss));

$show = ($this->offset + $this->num_to_show > sizeof($this->rss) ? sizeof($this->rss) - $this->offset : $this->num_to_show);

for($i = $this->offset; $i < $this->offset + $show; ++$i) {

extract($this->rss[$i]);

$item = preg_replace("/#\{([^}]+)}/e", "$\\1", $this->my_html);

echo $item;

}

}

function unhtmlentities($string)

{

// replace numeric entities

$string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);

$string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);

// replace literal entities

$trans_tbl = get_html_translation_table(HTML_ENTITIES);

$trans_tbl = array_flip($trans_tbl);

return strtr($string, $trans_tbl);

}

} // end class



?>

 

Thanks! 

Chris

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.