diff options
| author | Philip Wittamore <philip@wittamore.com> | 2025-10-22 11:03:17 +0200 |
|---|---|---|
| committer | Philip Wittamore <philip@wittamore.com> | 2025-10-22 11:03:17 +0200 |
| commit | 3f329dca654337da17a03ef1bde4b63abee7f1d1 (patch) | |
| tree | b2ea74cfc63a05bfafce5487372da5fe8b6145e4 | |
| parent | f888cb15e8f1be5ca69fa5cfbaeb21bcf3b53c31 (diff) | |
| download | scripts-3f329dca654337da17a03ef1bde4b63abee7f1d1.tar.gz scripts-3f329dca654337da17a03ef1bde4b63abee7f1d1.tar.bz2 scripts-3f329dca654337da17a03ef1bde4b63abee7f1d1.zip | |
update
| -rw-r--r-- | getfeeds.php | 117 |
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); +} + +?> + + + + + + + + + |
