aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--getfeeds.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/getfeeds.php b/getfeeds.php
new file mode 100644
index 0000000..8da7390
--- /dev/null
+++ b/getfeeds.php
@@ -0,0 +1,117 @@
+<?php
+
+require_once('/root/bin/SimplePie.compiled.php');
+
+// iterate through feed directories
+
+$root = "/srv/gopher/feeds";
+$cache= "/srv/gopher/cache";
+$fs = "feed";
+$ts = "title";
+$hs = "header";
+$dir = glob($root . '/*' , GLOB_ONLYDIR);
+
+if (file_exists("$root/$hs")) {
+ copy("$root/$hs", "$root/gophermap");
+ $dt = new DateTime("now", new DateTimeZone('Europe/Paris'));
+ file_put_contents("$root/gophermap", "last update: ".$dt->format('Y-m-d H:i:s')."\n\n", FILE_APPEND);
+}
+
+foreach ($dir as $subdir) {
+ # get feed settings from directory
+ if (!file_exists("$subdir/$fs")) continue;
+ if (!file_exists("$subdir/$ts")) continue;
+
+ $feeditemtitle = fgets(fopen("$subdir/$ts", 'r'));
+ $feeditemtitle = str_replace("\n", '', $feeditemtitle);
+
+ $feedurl = fgets(fopen("$subdir/$fs", 'r'));
+ $feedurl = str_replace("\n", '', $feedurl);
+
+ // feed list header
+ $itemlist = "RSS feed : " . $feedurl."\n\n";
+
+ // new instance of simplepie
+ $feed = new SimplePie();
+
+ // simplepie can't recuperate a gopher url
+ // so we use curl in this case
+ $gopher = 0;
+ if (str_starts_with($feedurl, "gopher")) {
+ exec("curl $feedurl", $rssdata, $retval);
+ if (!empty($rssdata)) {
+ $rssstring=implode($rssdata);
+ $feed->set_raw_data($rssstring);
+ $gopher=1;
+ }else{
+ $itemlist .= "Error $retval retrieving $feedurl\n";
+ }
+ }else{
+ $feed->set_feed_url($feedurl);
+ }
+
+ // initialise simplepie
+ $feed->set_cache_location($cache);
+ $feed->enable_order_by_date(true);
+ $feed->handle_content_type();
+ $feed->init();
+
+ // extract each feed item
+ $x=0;
+ foreach ($feed->get_items(0, 30) as $item) {
+
+ $itemlink = $item->get_permalink();
+ $itemtitle = $item->get_title();
+ $itemdate = $item->get_date("Y-m-d");
+
+ if (empty($itemtitle)) $itemtitle="No itemtitle found";
+
+ // build item link
+ if ($gopher==1) {
+ $host = parse_url($itemlink, PHP_URL_HOST);
+ $port = parse_url($itemlink, PHP_URL_PORT);
+ $path = parse_url($itemlink, PHP_URL_PATH);
+ if (pathinfo($path, PATHINFO_EXTENSION)) {
+ $itemlist .= "0".$itemdate." ".$itemtitle."\t".substr($path,2)."\t".$host."\t".$port."\n";
+ }else{
+ $itemlist .= "1".$itemdate." ".$itemtitle."\t".substr($path,2)."\t".$host."\t".$port."\n";
+ }
+ }else{
+ // convert rss youtube url to youtu.be url
+ $itemlink = str_replace("www.youtube.com/watch?v=", "youtu.be/", $itemlink);
+ $itemlist .= "h".$itemdate." ".$itemtitle."\tURL:".$itemlink."\n";
+ }
+ $x++;
+ }
+
+ // build list of feed items
+ if ($x==0) {
+ $itemlist .= "! Error - No items found\n\n";
+ $itemlist .= "DEBUG\n";
+ $itemlist .= "curl $feedurl\n";
+ $itemlist .= "result:\n";
+ $itemlist .= $rssstring;
+ $itemlist .= "\nEOF\n";
+ }
+ file_put_contents("$subdir/gophermap", $itemlist);
+
+ // build list of feeds
+ $feedname = "1".$feeditemtitle."\t".basename($subdir)."\n";
+ file_put_contents("$root/gophermap", $feedname, FILE_APPEND);
+
+ unset($rssstring);
+ unset($rssdata);
+ unset($sfeed);
+ unset($itemlist);
+}
+
+?>
+
+
+
+
+
+
+
+
+