format('Y-m-d H:i:s')."\n\n", FILE_APPEND); }else{ echo "$root/$hs not found, aborting"; exit; } // iterate through feed directories // each directory contains the feed url and title // and receives the constructed gophermap foreach ($dir as $subdir) { # if config files missing go to next 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; $rssstring = ""; 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; $youtube=false; 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 item title found"; // build item link if ($gopher==1) { $host = parse_url($itemlink, PHP_URL_HOST); $port = parse_url($itemlink, PHP_URL_PORT); if ((int)$port < 70) $port="70"; $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{ // if (str_contains($itemlink,"youtu")) { // convert rss youtube url to youtu.be url $youtube=true; $itemlink = str_replace("www.youtube.com/watch?v=", "youtu.be/", $itemlink); } $itemlist .= "U".$itemdate." ".$itemtitle."\tURL:".$itemlink."\n"; } $x++; } // build list of feed items if ($x==0) { // gopher error tag if ( str_starts_with($rssstring,"3")) { $itemlist .= "$rssstring\t/errors.txt\tspike.nagatha.fr\t70\n"; }else{ $itemlist .= $rssstring; } } file_put_contents("$subdir/gophermap", $itemlist); file_put_contents("$subdir/gophermap", str_repeat("\n ", 30), FILE_APPEND); // build list of feeds $feedname = "1".$feeditemtitle."\t".basename($subdir)."\n"; file_put_contents("$root/gophermap", $feedname, FILE_APPEND); // reset unset($rssstring); unset($rssdata); unset($sfeed); unset($itemlist); } // add empty lines to gophermap file_put_contents("$root/gophermap", str_repeat("\n ", 30), FILE_APPEND); ?>