Source of: ./rssify.php

See the PHP manual for instructions on how to display highlighted PHP source code.
<?

if ($url) {
  
parse_html($url);
} else {
  
show_form();
}

function 
show_form() {
  global 
$SERVER_NAME$REQUEST_URI;
?>
   

<html><head><title>RSSify your document</title>
<meta name="description" content="Chris Karakas Online: RSSify your document. Create your own RSS feed from your HTML document.">
<meta name="keywords" content="RSS,RSSify,syndication,RSS feed,create RSS,HTML">
<meta http-equiv="Content-Type" content="text/html;">


<style type="text/css">

<!--
/*
  The original subSilver Theme for phpBB version 2+
  Created by subBlue design
  http://www.subBlue.com

  NOTE: These CSS definitions are stored within the main page body so that you can use the phpBB2
  theme administration centre. When you have finalised your style you could cut the final CSS code
  and place it in an external file, deleting this section to save bandwidth.
*/

/* General page style. The scroll bar colours only visible in IE5.5+ */
body {
        background-color: #FFFFFF;
        scrollbar-face-color: #FFFFFF;
        scrollbar-highlight-color: #FFFFFF;
        scrollbar-shadow-color: #FFFFFF;
        scrollbar-3dlight-color: #D1D7DC;
        scrollbar-arrow-color:  #006699;
        scrollbar-track-color: #FFFFFF;
        scrollbar-darkshadow-color: #98AAB1;
}

/* General font families for common tags */
font,th,td,p { font-family: Verdana, Arial, Helvetica, sans-serif }
a:link,a:active,a:visited { color : #006699; }
a:hover         { text-decoration: underline; color : #DD6900; }
hr      { height: 0px; border: solid #D1D7DC 0px; border-top-width: 1px;}

/* This is the border line & background colour round the entire page */
.bodyline       { background-color: #FFFFFF; border: 1px #98AAB1 solid; }

/* This is the outline round the main forum tables */
.forumline      { background-color: #FFFFFF; border: 2px #006699 solid; }

/* Main table cell colours and backgrounds */
td.row1 { background-color: #FFFFFF; }
td.row2 { background-color: #FFFFFF; }
td.row3 { background-color: #D1D7DC; }

/*
  This is for the table cell above the Topics, Post & Last posts on the index.php page
  By default this is the fading out gradiated silver background.
  However, you could replace this with a bitmap specific for each forum
*/
td.rowpic {
                background-color: #FFFFFF;
                background-image: url(../forum/templates/subSilver/images/cellpic2.jpg);
                background-repeat: repeat-y;
}

/* Header cells - the blue and silver gradient backgrounds */
th      {
        color: #FFA34F; font-size: 11px; font-weight : bold;
        background-color: #006699; height: 25px;
        background-image: url(../forum/templates/subSilver/images/cellpic3.gif);
}

td.cat,td.catHead,td.catSides,td.catLeft,td.catRight,td.catBottom {
                        background-image: url(../forum/templates/subSilver/images/cellpic1.gif);
                        background-color:#D1D7DC; border: #FFFFFF; border-style: solid; height: 28px;
}

/*
  Setting additional nice inner borders for the main table cells.
  The names indicate which sides the border will be on.
  Don't worry if you don't understand this, just ignore it :-)
*/
td.cat,td.catHead,td.catBottom {
        height: 29px; 
        border-width: 0px 0px 0px 0px;
}
th.thHead,th.thSides,th.thTop,th.thLeft,th.thRight,th.thBottom,th.thCornerL,th.thCornerR {
        font-weight: bold; border: #FFFFFF; border-style: solid; height: 28px;
}
td.row3Right,td.spaceRow {
        background-color: #D1D7DC; border: #FFFFFF; border-style: solid;
}

th.thHead,td.catHead { font-size: 12px; border-width: 1px 1px 0px 1px; }
th.thSides,td.catSides,td.spaceRow       { border-width: 0px 1px 0px 1px; }
th.thRight,td.catRight,td.row3Right      { border-width: 0px 1px 0px 0px; }
th.thLeft,td.catLeft      { border-width: 0px 0px 0px 1px; }
th.thBottom,td.catBottom  { border-width: 0px 1px 1px 1px; }
th.thTop         { border-width: 1px 0px 0px 0px; }
th.thCornerL { border-width: 1px 0px 0px 1px; }
th.thCornerR { border-width: 1px 1px 0px 0px; }

/* The largest text used in the index page title and toptic title etc. */
.maintitle      {
        font-weight: bold; font-size: 22px; font-family: "Trebuchet MS",Verdana, Arial, Helvetica, sans-serif;
        text-decoration: none; line-height : 120%; color : #000000;
}

/* General text */
.gen { font-size : 12px; }
.genmed { font-size : 11px; }
.gensmall { font-size : 10px; }
.gen,.genmed,.gensmall { color : #000000; } 
a.gen,a.genmed,a.gensmall { color: #006699; text-decoration: none; }
a.gen:hover,a.genmed:hover,a.gensmall:hover     { color: #DD6900; text-decoration: underline; }

/* The register, login, search etc links at the top of the page */
.mainmenu               { font-size : 11px; color : #000000 }
a.mainmenu              { text-decoration: none; color : #006699;  }
a.mainmenu:hover{ text-decoration: underline; color : #DD6900; }

/* Forum category titles */
.cattitle               { font-weight: bold; font-size: 12px ; letter-spacing: 1px; color : #006699}
a.cattitle              { text-decoration: none; color : #006699; }
a.cattitle:hover{ text-decoration: underline; }

/* Forum title: Text and link to the forums used in: index.php */
.forumlink              { font-weight: bold; font-size: 12px; color : #006699; }
a.forumlink     { text-decoration: none; color : #006699; }
a.forumlink:hover{ text-decoration: underline; color : #DD6900; }

/* Used for the navigation text, (Page 1,2,3 etc) and the navigation bar when in a forum */
.nav                    { font-weight: bold; font-size: 11px; color : #000000;}
a.nav                   { text-decoration: none; color : #006699; }
a.nav:hover             { text-decoration: underline; }

/* titles for the topics: could specify viewed link colour too */
.topictitle,h1,h2       { font-weight: bold; font-size: 11px; color : #000000; }
a.topictitle:link   { text-decoration: none; color : #006699; }
a.topictitle:visited { text-decoration: none; color : #5493B4; }
a.topictitle:hover      { text-decoration: underline; color : #DD6900; }

/* Name of poster in viewmsg.php and viewtopic.php and other places */
.name                   { font-size : 11px; color : #000000;}

/* Location, number of posts, post date etc */
.postdetails            { font-size : 10px; color : #000000; }

/* The content of the posts (body of text) */
.postbody { font-size : 12px; line-height: 18px} 
a.postlink:link { text-decoration: none; color : #006699 }
a.postlink:visited { text-decoration: none; color : #5493B4; }
a.postlink:hover { text-decoration: underline; color : #DD6900}

/* Quote & Code blocks */
.code {
        font-family: Courier, 'Courier New', sans-serif; font-size: 11px; color: #006600;
        background-color: #FAFAFA; border: #D1D7DC; border-style: solid;
        border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px
}

.quote {
        font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #444444; line-height: 125%;
        background-color: #FAFAFA; border: #D1D7DC; border-style: solid;
        border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px
}

/* Copyright and bottom info */
.copyright              { font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #444444; letter-sp
acing: -1px;}
a.copyright             { color: #444444; text-decoration: none;}
a.copyright:hover { color: #000000; text-decoration: underline;}

/* Form elements */
input,textarea, select {
        color : #000000;
        font: normal 11px Verdana, Arial, Helvetica, sans-serif;
        border-color : #000000;
}

/* The text input fields background colour */
input.post, textarea.post, select {
        background-color : #FFFFFF;
}

input { text-indent : 2px; }

/* The buttons used for bbCode styling in message post */
input.button {
        background-color : #FFFFFF;
        color : #000000; 
        font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif;
}

/* The main submit button option */
input.mainoption {
        background-color : #FAFAFA;
        font-weight : bold;
}

/* None-bold submit button */
input.liteoption {
        background-color : #FAFAFA;
        font-weight : normal;
}

/* This is the line in the posting page which shows the rollover
  help line. This is actually a text box, but if set to be the same
  colour as the background no one will know ;)
*/
.helpline { background-color: #FFFFFF; border-style: none; }

/* Import the fancy styles for IE only (NS4.x doesn't use the @import function) */
@import url("../forum/templates/subSilver/formIE.css");
-->

</style>

</head>

<body bgcolor="white"><center>

<table width="100%" cellspacing="0" cellpadding="10" border="0" align="center">
        <tr>
                <td class="bodyline"><table width="100%" cellspacing="0" cellpadding="0" border="0">
                        <tr>
                                <td><a href="services.html"><img src="../images/jupiter2.jpg" border="0" alt="Chris Karakas Online Services" vspace="1" /></a></td>
                                <td align="center" width="100%" valign="middle"><span class="maintitle">Chris Karakas Online</span><br /><span class="gen">My RSS-o-matic<br />&nbsp; </span></td>
                        </tr>
                </table>
        </tr>
</table>
</center>



   <p>This form takes your web page and turns it into RSS 0.92. This is especially useful for Blogger users.</p>
   <p>A tip of the hat from Julian Bond to Aaron Swartz who came up with the idea and <a href="http://logicerror.com/blogifyYourPage" target="_top">the first implementation.</a> Also a tip of the hat from Chris Karakas to Julian Bond who provided this script for others to download on his  <a href="http://www.voidstar.com" target="_top">voidstar.com website</a>.</p>
   <ol>
   <li>Put &lt;span class="rss:item"> ... &lt;/span> round each item in your page.
   <br />In Blogger you'd do this by going to your template in blogger and changing 
<br /><b>&lt;$BlogItemBody$></b>
<br />to 
<br /><b>&lt;span class="rss:item">&lt;$BlogItemBody$>&lt;/span></b>
<br />And then publish something to re-create the page with the new template 
<li>Then put the URL of your new and modified page into the form below.
<li>Check that what you get back looks like RSS.
<li>Now you can make a link to this file like "http://www.karakas-online.de/myServices/rssify.php?url=your_web_page_url"
<li>Finally add a link to it on your web page, something like this:
</ol>
<center><img src="../images/xml.png" alt="XML">
<br /><font size=1>Powered by <br /><a href="http://www.karakas-online.de/myServices/rssify.php">RSSify at karakas-online.de</A></font></center>

   
   <form action="<? print "http://" $SERVER_NAME $REQUEST_URI?>">
     The URL of your web page:
     <br /><input type="text" name="url" size=50> Include a final "/" or a filename.
     <br /><input type="submit" value="Create RSS">
   </form>
   <br /><b>Usage</b>: http://www.karakas-online.de/myServices/rssify.php?your_web_page_url
   <p><B>Notes:</B>
   <ul>
   <li>The item text is put in the description element.
   <li>The first 40 characters of html stripped description are put in the title element.
   <li>The first link in the description is put in the link element. If there isn't one, the web page url is used.
   <li>All tags except &lt;A> &lt;B> &lt;BR> &lt;BLOCKQUOTE> &lt;CENTER> &lt;DD> &lt;DL> &lt;DT> &lt;HR> &lt;I> &lt;IMG> &lt;LI> &lt;OL> &lt;P> &lt;PRE> &lt;U> &lt;UL> are stripped from the description.
   <li>A maximum of 25 items are included in the rss.
   <li>If you have any problems, send me an <a href="mailto:chris@karakas-online.de">email</a>
   <li>if you want more detail about RSS, take a look at the <a href="http://www.voidstar.com/rssfaq" target="_top">RSS FAQ</A> on <a href="http://www.voidstar.com" target="_top">voidstar.com</a>.
   <li>If you want to run your own copy of this: <a href="rssify.php.txt">download RSSify here</a> and  <a href="http://www.karakas-online.de/myServices/showfile.php?highlight=rssify">see the RSSify source code here.</a>.
   </ul>
<?  
}

function 
parse_html($url){
  
$itemregexp "%rss:item *\" *>(.+?)</span>%is";
  
$allowable_tags "<A><B><BR><BLOCKQUOTE><CENTER><DD><DL><DT><HR><I><IMG><LI><OL><P><PRE><U><UL>";

  
$urlparts parse_url($url);
  if (
$urlparts[path] == ""$url .= "/";

  if (
$fp = @fopen($url"r")) {
    while (!
feof($fp)) {
      
$data .= fgets($fp128);
    }
    
fclose($fp);
  }

//  print "<pre>";
//  print htmlentities($data);  

  
eregi("<title>(.*)</title>"$data$title);
  
$channel_title $title[1];

  
$match_count preg_match_all($itemregexp$data$items);
  
$match_count = ($match_count 25) ? 25 $match_count;
  
  
header("Content-Type: text/xml");

  
$output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
  
$output .= "<?xml-stylesheet type=\"text/css\" href=\"rss.css\" ?>\n";
  
$output .= "<!-- generator=\"rssify/0.92\" -->\n";
//  $output .= "<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC \"-//W3C//ENTITIES Latin 1 for XHTML//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">\n";
  
// This is a security risk, according to the validator at 
// http://feeds.archive.org/validator/
//
// Feeds must not contain SYSTEM entities.
// RSS feeds must be self-contained.
//
// O.K., so forget it. I'm literally fed up.
//  
//  $output .= "%HTMLlat1;]>\n";
//  
//  This will not work so:
//  ob_start();
//  include("xhtml-lat1.ent");
//  $lat1 = ob_get_contents();
//  ob_end_clean();
//  $output .= $lat1."\n";

  
$output .= "<rss version=\"0.92\">\n";
  
$output .= "  <channel>\n";
  
$output .= "    <title>"htmlentities(strip_tags($channel_title)) ."</title>\n";
  
$output .= "    <link>"htmlentities($url) ."</link>\n";
  
$output .= "    <description>"htmlentities($url) ." via karakas-online.de</description>\n";
//  $output .= "    <webmaster>". htmlentities("webmaster@karakas-online.de") ."</webmaster>\n";
  
$output .= "    <language>en-us</language>\n";

  for (
$i=0$i$match_count$i++) {

    
$desc $items[1][$i];
    
$title substr(trim(strip_tags($desc)),0,70) . " ...";
    
$item_url get_link($desc$url);
    
$desc strip_tags($desc$allowable_tags);
    
$desc htmlentities($desc);

    
$output .= "    <item>\n";
    
$output .= "      <title>"htmlentities($title) ."</title>\n";
    
$output .= "      <link>"htmlentities($item_url) ."</link>\n";
    
$output .= "      <description>"$desc ."</description>\n";
    
$output .= "    </item>\n";
  }

  
$output .= "  </channel>\n";
  
$output .= "</rss>\n";

  print 
$output;
//  print htmlentities($output);
//  print "</pre>"; 
}

function 
get_link($desc$url) {
  if (
stristr($desc"href")) {
    
$linkurl stristr($desc"href");
    
$linkurl substr($linkurlstrpos($linkurl"\"")+1);
    
$linkurl substr($linkurl0strpos($linkurl"\""));
    
$linkurl trim($linkurl);
    return 
$linkurl;
  } else {
    return 
$url;
  }
}

?>