diff options
| author | Hannah Isopod <me@bathynomus.xyz> | 2025-05-10 03:03:58 -0600 |
|---|---|---|
| committer | Hannah Isopod <me@bathynomus.xyz> | 2025-05-10 03:03:58 -0600 |
| commit | eb61c1bae2ffad114e17393d91d86fb00d7ac8cd (patch) | |
| tree | 4f997d73e0843dab760e5d988679a1a86b76f5da /stuff/firefoxrss | |
| parent | 4b9500ddeedbea21f80f41dfe4149cf3bf9be4c3 (diff) | |
Initialer commit
Just remade the repo because I don't *need* need a comprehensive source history for my personal website and this is easier than getting filter-repo to work good
Diffstat (limited to 'stuff/firefoxrss')
| -rw-r--r-- | stuff/firefoxrss/feed.php | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/stuff/firefoxrss/feed.php b/stuff/firefoxrss/feed.php new file mode 100644 index 0000000..0f7cb17 --- /dev/null +++ b/stuff/firefoxrss/feed.php @@ -0,0 +1,62 @@ +<?php +// This is a simple RSS bridge type script intended to generate a basic RSS feed for Firefox releases by scraping https://mozilla.org/firefox/notes/ +// TODO: Add the contents of the page to the RSS entry + +if($_GET['downloadsource'] == 'yes') { // just serve the source code as plain text and exit + header('Content-Type: text/plain'); + echo file_get_contents('feed.php'); + die(); +} + +// In order to reduce the load this puts on both Mozilla's servers and mine, I cache the output of this script for 1 hour. (3600 seconds) +// I could cache it for longer, say a day, but that would significantly increase my chances of updating my browser before +// the release notes appear in my RSS reader, which is simply unacceptable. +$fname = "feed_cached.xml"; +$cacheperiod = 3600; +$cache_too_old = (time() - filemtime($fname) > $cacheperiod); + +if($cache_too_old) { + $url = "https://mozilla.org/firefox/notes/"; + if(function_exists('curl_init')) { + $ch = curl_init($url); + + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, 0); + + $str = curl_exec($ch); + if(curl_error($ch)) { + echo curl_error($ch); + die(); + } + curl_close($ch); + } else { // If the cURL library isn't installed, just use file_get_contents() + $str = file_get_contents($url); + } + + preg_match('/(<div class="c-release-version">([0-9]|\.)+<\/div>)/', $str, $rcs); // extract the element containing the version number + preg_match('/([0-9]|\.)+/', $rcs[0], $rs); // extract the version number from that + $rel = $rs[0]; + + $link = "https://www.mozilla.org/en-US/firefox/".$rel."/releasenotes"; // construct a permalink to the patch notes for the current latest release in particular + + preg_match('/(<p class="c-release-date">.+<\/p>)/', $str, $odcs); // extract the element containing the release date + $origdate = str_replace('</p>', "", str_replace('<p class="c-release-date">', "", $odcs[0])); // extract the date string + $udate = strtotime($origdate) + 43200; // convert said date string to the unix timestamp for noon GMT on that date + $rssdate = "D, d M Y H:i:s"; + $date = date($rssdate, $udate); // convert unix timestamp to the date format RSS uses + + $updatetime = date($rssdate, filemtime($fname)); // generating some data to fill out optional elements of the RSS feed. + $ttl = $cacheperiod / 60; // This is the sole reason why a few variables exist. + + $output = "<rss version=\"2.0\"><channel><title>Firefox Release Notes</title><link>https://www.mozilla.org/firefox/releases/</link><description>Release notes for new versions of Firefox, updated every $ttl minutes</description><language>en-us</language><pubDate>$date</pubDate><lastBuildDate>$updatetime</lastBuildDate><docs>https://www.rssboard.org/rss-specification</docs><generator>niceopod's Firefox release notes RSS feed bridge</generator><ttl>$ttl</ttl><image><url>https://upload.wikimedia.org/wikipedia/commons/8/84/Mozilla_Firefox_3.5_logo.png</url><title>Firefox Release Notes</title><link>https://www.mozilla.org/firefox/releases/</link></image><item><title>Firefox $rel</title><pubDate>$date</pubDate><description>Release $rel of Firefox, from $origdate</description><link>$link</link><guid>$link</guid></item></channel></rss>"; + // Outputs an RSS feed with one entry. I wanted to do the latest ten, but the releases weren't in + // chronological order on the release list page and I couldn't be bothered trying to reorder them, + // plus I would have had to scrape all those pages for the release date too and fuck that lol + file_put_contents($fname, $output); +} else { + $output = file_get_contents($fname); +} + +header('Content-Type: text/xml'); // Not sure if this is necessary but it feels like good practice and it gets Chromium to display it all pretty +echo $output;
\ No newline at end of file |
