The RSS Reader

Created Sunday 05 April 2020


Code begins below. You may want to copy and paste into a real editor like jedit to explore and get the syntax highlighting. Note that you must have https://www.simplepie.org/ correctly installed for this to do anything.



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN">
<head>
	<title>Mah RSS</title>

<meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> 

<?php
Hey, lets put the file variables here:
$simplepieloader = $_SERVER['DOCUMENT_ROOT'] . '/simplepie/autoloader.php';



#COLOR PICKER
function genColorCodeFromText($text)
{

$numberstring = crc32($text);
 
$hue = $numberstring % 360;
$saturation = $numberstring % 40 + 10;
$lightness = $numberstring % 25 + 65; 
    return "hsl($hue, $saturation%, $lightness%)";
    
}

function genColorCodeFromText2($text)
{

$numberstring = crc32($text);
 
$hue = $numberstring % 360;
$saturation = $numberstring % 40;
$lightness = $numberstring % 25 + 55; 
    return "hsl($hue, $saturation%, $lightness%)";
    
}



if (isset($_GET['rssfile'])) {
	$cssbgcolor = genColorCodeFromText($_GET['rssfile']);
} else {
	$cssbgcolor = "white";
}

$css2 = genColorCodeFromText2($_GET['rssfile']);
?>


<!--  THE MAIN CSS - the majority of the styles for the app are here, in fact, I believe the only one that is not is for adding the
color of the categories for the dropdown, which took some hackery -->


<style>

	body {
		font-family: 'Cabin','Lato', Fallback, sans-serif;
		color:Black;
		background-color:<?php echo $cssbgcolor ?>;
		/* width:700px; */
		margin:50px auto;
		padding:10px;
	}
 
	a {
		text-decoration:none;
		color:Black;
		padding:0 1px
	}
 
	a:hover {
		background-color:#333;
		coloir:#fff;
		text-decoration:none;
	}
 

	div.header {
		background-color: Black;
		color:<?php echo $cssbgcolor ?>;
		height: 75px;
		text-align: left;
		margin-bottom: 20px;
		margin-right: 4px;
	}
 
	div.item {
		/* font-size:90%; */
		color:White;
		padding-bottom: 10px;
		padding-top: 5px;
		border-spacing:1px; /* this is for firefox android i think? */
		margin-bottom:1px;
		margin-right:4px;
		padding-left:20px;
		font-size:120%;
	}
	
div.item:nth-of-type(2n+1) {
	background-color: <?php echo $css2 ?>;
}

div.block {
	margin-bottom:40px;
}

/* favicons are the only images (for now) */

	img {
		height: 30px;
		padding: 10px;
		}






</style>


</head>
<body>


<!-- and now, the content.  



<?php

require_once($simplepieloader);



// Given a file, parses the feeds out line by line, then feeds the feeds into SimplePie and prints them out. //
function getfeed($feedfile) {

	$feedArray = explode("\n", file_get_contents($feedfile));


	foreach ($feedArray as $feedurl){
		$feed = new SimplePie();
		$feed->set_feed_url($feedurl);
		$feed->init();
		$feed->handle_content_type();

/*------ FIRST THE TITLE STUFF ----------------*/		

		$fpermalink = $feed->get_permalink();
		$ftitle = $feed->get_title();
		$fdesc = $feed->get_description();

/*---- simplepie's favicon grabber is broken. stupidly trying to write my own. I think google can do one too, but no.  ---*/

	$urlData = parse_url($feedurl);
	$host = $urlData['host'];
	
	$ficon = "http://" . $host . "/favicon.ico";
	
		
		
/* ---- here is the text, echo it RIGHT AFTER -- This is HEREDOC!!! */ 
$titlethang =<<<TITLETHANG

	<div class="block"> 
	<div class="header">



		<h1>
		<a style="color:inherit;" href=$fpermalink>$ftitle</a>

		<img src="$ficon" ALIGN=RIGHT></h1>
	</div>

TITLETHANG;


echo $titlethang;
	

/*-- now for the feed items */

	foreach($feed->get_items() as $item){

		$itemlink = $item->get_permalink();
		$itemtitlepre = $item->get_title();

		$itemtitle=htmlspecialchars_decode($itemtitlepre);

                $itemthang =<<<ITEMTHANG

                        <div class="item">
                        <a href=$itemlink>$itemtitle</a>
                        </div>
ITEMTHANG;

                echo $itemthang;
	}

	echo "</div>";
	}

}


/* ----------  generate dropdown from files, right? 
 * Note that I've also called that genColorCode function again here, to color in the background of the dropdown
 *
 * (which tells us how crappy the dropdown colors currently are
 *
 *
 * ---- */



function rssmenu() { 

	echo '<form method="get" action="index.php">';
	echo '<select name="rssfile">';

	$rssfiles = glob("./rss/*");

	foreach ($rssfiles as $file) {
		$basefile = basename($file);
		$bgcolor = genColorCodeFromText($file);				
		echo "<option ";
                if ($_GET['rssfile'] == $file){echo "selected ";} 
		echo "value=$file ";
			echo "style=\"background-color: $bgcolor\" >$basefile";
			echo "</option>";
                        echo "\r\n";

	}
		echo '</select> <input type="submit" name="submit" value="Select" />';
		echo '</form>';
}


function addfeedform ($currentfeedfile) {
	echo '<form method="post" action="addfeed.php">';
	echo 'Add feed: <input name="feed" type="text" />';
	echo ' to ';
	$basefile = basename($currentfeedfile);
	echo '<input name="feedfile" value="';
	echo $basefile;
	echo '">';

	echo '<input type="submit">';
}
// --- FUNNY ENOUGH, the CODE DOESN'T ACTUALLY BEGIN RUNNING UNTIL RIGHT NOW ---


// Make the dropdown menu
rssmenu();



// If we've selected an rss file, GREAT, gimme them feeds. If not, CHOOSE SOME FEEDS, MAN.
if (isset($_GET['rssfile'])) { 
	getfeed($_GET['rssfile']);
	addfeedform($_GET['rssfile']);
} else {
echo "choose above";
}


?>


Backlinks: FSU Courses:LIS5364