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