Skip to content

Instantly share code, notes, and snippets.

@vsoch
Last active February 15, 2024 05:20
Show Gist options
  • Star 44 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save vsoch/4898025919365bf23b6f to your computer and use it in GitHub Desktop.
Save vsoch/4898025919365bf23b6f to your computer and use it in GitHub Desktop.
Generate RSS feed for files in a directory folder. Put this file in a folder with files, modify the $allowed_ext variable to customize your extensions, and $feedName, $feedDesc, $feedURL, and $feedBaseURL. Then navigate to the folder on the web to see the xml feed. Done!
<?php
header('Content-type: text/xml');
/*
Runs from a directory containing files to provide an
RSS 2.0 feed that contains the list and modification times for all the
files.
*/
$feedName = "My Audio Feed";
$feedDesc = "Feed for the my audio files in some server folder";
$feedURL = "http://www.mysite.com/audio";
$feedBaseURL = "http://www.mysite.com/audio/"; // must end in trailing forward slash (/).
$allowed_ext = ".mp4,.MP4,.mp3,.MP3";
?><<?= '?'; ?>xml version="1.0"<?= '?'; ?>>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><?=$feedName?></title>
<link><?=$feedURL?></link>
<description><?=$feedDesc?></description>
<atom:link href="http://gogglesoptional.com/bloopers" rel="self" type="application/rss+xml" />
<?php
$files = array();
$dir=opendir("./");
while(($file = readdir($dir)) !== false)
{
$path_info = pathinfo($file);
$ext = strtoupper($path_info['extension']);
if($file !== '.' && $file !== '..' && !is_dir($file) && strpos($allowed_ext, $ext)>0)
{
$files[]['name'] = $file;
$files[]['timestamp'] = filectime($file);
}
}
closedir($dir);
// natcasesort($files); - we will use dates and times to sort the list.
for($i=0; $i<count($files); $i++) {
if($files[$i] != "index.php") {
if (!empty($files[$i]['name'])) {
echo " <item>\n";
echo " <title>". $files[$i]['name'] ."</title>\n";
echo " <link>". $feedBaseURL . $files[$i]['name'] . "</link>\n";
echo " <guid>". $feedBaseURL . $files[$i]['name'] . "</guid>\n";
echo " <pubDate>". date(DATE_RSS, $files[$i]['timestamp']) ."</pubDate>\n";
// echo " <pubDate>". date("D M j G:i:s T Y", $files[$i]['timestamp']) ."</pubDate>\n";
// echo " <pubDate>" . $files[$i]['timestamp'] ."</pubDate>\n";
echo " </item>\n";
}
}
}
?>
</channel>
</rss>
@kzar
Copy link

kzar commented Oct 4, 2022

How can Limit number of items?
Example: Show last 10Feed (datatime)

Well, if you're using my script there's an array $book_details that contains all the book details, that's then passed to the outputRSS function (see the outputRSS($book_details); line). You could just use array_slice (or similar) to shorten that array before passing it through to outputRSS.

@strukturart
Copy link

does anyone know of an ompl editor written in php?

@hvdkooij
Copy link

I tried the script but I have some very odd thing.
The key thing is that the timestamp is always now() instead of the file timestamp.

And I don't seem to understand how the array is working. Adding something like $files[]['comment'] always returns an empty value.

Not much PHP work done the last few years so I need a reminder of somethings that might seem too silly to mention.

@dewijones92
Copy link

@olentulen
Copy link

Hello! After switching from Apache to Caddy web server, I can't get rss to work. Podcast app sees files, but it always gives an error when i try to downloader the file. Is it possible that I am missing some specific part of php engine?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment