Now: Tutorial for Web and Software Design > OS > Linux > OS Content
> Indie Podcasting with Open Source [Bookmark it]
Indie Podcasting with Open Source

Indie Podcasting with Open Source

Putting the Files Up

What makes an audio file a podcast? There isn't anything special about the actual file data. It's still an MP3 (or whatever format). What makes it special and what enables people to subscribe to your podcasts is the RSS (Really Simple Syndication, some would say) 2.00 feed. RSS 2.00 added the enclosure tag that makes the whole thing doable.



There are several easy ways to get your podcasts on the web. If you're already a blogger through one of the organized blogging sites, then most likely there's a section where you can simply upload your podcast files and your site will do the rest. Another easy alternative is to use something such as ourmedia.org, which is free and allows you to upload all kinds of video and audio files.

If you're rolling your own, there are a few things to know. (None of it is exactly headache material.)

The first task (assuming you already have web space) is to create a directory for the podcasts. At Mstation, it's podcast_files. You can then use the dircaster PHP script:

<? 

// DirCaster v0.4: Automatic iPodder RSS feed maker Written by Ryan King

// www.shadydentist.com id3 class from frummel No license or warrantee

// expressed, implied, enclosed, etc.



// Drop this script in a directory and it will generate an RSS feed suitable for

// iPodder, etc based off the MP3 files in that directory. To 'cast a new

// file, simply upload it to the directory containing this script.



// Feed information is based on id3 tags, requires PHP4 or better. 

//

// Note: Avoid spaces in your MP3 filenames to avoid ugly filenames coming out

// of iPodder



// Instructions

// 1. Place this file on a server with supports PHP4 or greater.

// 2. Place MP3 files to feed in the same directory, add new files at will

// 3. Point iPodder to the URL of this file.

// ex. http://www.mysite.com/podcast/dircaster.php

// 4. Set the following varibles to match your setup if you wish



// Maximum number of mp3s to offer in a feed

$maxFeed = 10;



//Title of feed/site    Used by iPodder for download subdirectory name

$titleTAG="Your page title";



//iPodder 1.0 seems to ignore everything below

//URL of site feed applies too

$linkTAG="http://your url";

//Description

$descriptionTAG="description";

//Feed language en-us = english USA

$languageTAG="en-us";

//Copyright for feed

$copyrightTAG="various";

//Your email address

$webMasterTAG="podcasts@wherever.org";

//Name of feed generator

$generatorTAG="dirCastv0.4";

// Time to live

$ttlTAG=60;



///////////////

// You should not need to edit anything below this point.

/////////////

// Main Code

///////////

header('Content-type: text/xml', true);

$rootMP3URL = "http://" . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI];

$rootMP3URL =  substr($rootMP3URL, 0, strrpos ($rootMP3URL, "/")); // Trim off script name itself



print "<?xml version=\"1.0\"?>\n";

print "<rss version=\"2.0\">\n";

print"    <channel>\n";

print"        <title>$titleTAG</title>\n";

print"        <link>$linkTAG</link>\n";

print"        <description>$descriptionTAG</description>\n";

print"        <lastBuildDate>" . date("r") ."</lastBuildDate>\n";

print"        <language>$languageTAG</language>\n";

print"        <copyright>$copyrightTAG</copyright>\n";

print"        <generator>$generatorTAG</generator>\n";

print"        <webMaster>$webMasterTAG</webMaster>\n";

print"        <ttl>$ttlTAG</ttl>\n\n";



$dirArray = getDir(".");    // Get a list of the current directory

while (list($filename, $filedate) = each($dirArray)AND $maxFeed > 0) {

    $mp3file = new CMP3File;

    $mp3file->getid3 ($filename);

    print "<item>\n";

    echo ("<title>$mp3file->title</title>\n");

    echo ("<link>$rootMP3URL/". htmlentities(str_replace(" ", "%20", $filename)) ."</link>\n");

    echo ("<description>$mp3file->title - $mp3file->album - $mp3file->artist</description>\n");

    echo ("<pubDate>".date("r",$filedate)."</pubDate>\n");

    echo ("<enclosure url=\"".htmlentities($rootMP3URL)."/". htmlentities(str_replace(" ", "%20", $filename)) ."\" length=\"");

    echo filesize($filename);

    echo ("\" type=\"audio/mpeg\"/>\n");    // Training slash for XML

    print "</item>\n\n";

    $maxFeed--;

}



print "</channel>\n</rss>\n";



// Functions and Classes

function stripJunk ($text) {

// Strip non-text characters

    for ($c=0; $c<strlen($text); $c++) {

        if (ord($text[$c]) >= 32 AND ord($text[$c]) <= 122)

            $outText.=$text[$c];

    }

    return $outText;

}



class CMP3File {

    //properties

    var $title;

    var $artist;

    var $album;

    var $year;

    var $comment;

    var $genre;

    

    function getid3 ($file)

    { // read the ID3 or ID3v2 tag from an MP3 file

        if (file_exists($file))

        { //after verifying the file exists,

            $id_start = filesize($file) - 128;

            

            $fp = fopen($file, "r");

            fseek($fp, $id_start);

            $tag = fread($fp,3);

            if ($tag == "TAG")

            {

                $this->title    = stripJunk(trim(fread($fp, 30)));

                $this->artist    = stripJunk(trim(fread($fp, 30)));

                $this->album    = stripJunk(trim(fread($fp, 30)));

                $this->year        = stripJunk(trim(fread($fp, 4)));

                $this->comment    = stripJunk(trim(fread($fp, 30)));

                $this->genre    = stripJunk(trim(fread($fp, 1)));

                fclose($fp);

                return true;

            }

            else

            { // No ID3 tag

                  fclose($fp);

                return false;

            }

        } else //the file doesn't exist

            return false;

    }

}



function getDir($mp3Dir) {    

// Returns directory as array[file]=date in newest to oldest order

    $dirArray = array();

    $diskdir = "./$mp3Dir/";

    if (is_dir($diskdir)) {

        $dh = opendir($diskdir);

        while (($file = readdir($dh)) != false ) {

            if (filetype($diskdir . $file) == "file" && $file[0]  != ".") {

                if (strrchr(strtolower($file), ".") == ".mp3") {

                    $ftime = filemtime($mp3Dir."/".$file); 

                    $dirArray[$file] = $ftime;

                }

            }

        }

        closedir($dh);

    }

    asort($dirArray);

    $dirArray = array_reverse($dirArray);

    return $dirArray;

}



?>

If you put this in the files directory and head for http://my_url/podcast_files/dircaster.php, you will find a genuine RSS 2.00 feed that people can subscribe to.

The resulting tags that are sent to a browser might look like the following:

<rss version="2.0">



    <channel>

<title>Mstation mmm podcasts</title>

<link>URL</link>

<description>Mstation Podcasts</description>

<lastBuildDate>Mon, 10 Apr 2006 12:01:12 +0100</lastBuildDate>

<language>en-us</language>

<copyright>various</copyright>

<generator>dirCastv0.4</generator>

<webMaster>podcasts*at*mstation.org</webMaster>

<ttl>60</ttl>



    <item>

<title/>



    <link>

http://mstation.org/podcast_files/mstation_dover_st_market.mp3

</link>

<description> -  -</description>

<pubDate>Mon, 20 Mar 2006 11:43:52 +0000</pubDate>

<enclosure url="http://mstation.org/podcast_files/mstation_dover_st_market.mp3" length="12715291" type="audio/mpeg"/>

</item>

At Mstation, we also have a separate Blosxom page where we discuss what the Mstation podcasts are about and how you can subscribe. We've used the Blosxom plugins enclosures, interpolate_fancy, and headlines to produce the layout and enable you to use the Mstation RSS 2.0 Podcast subscription feed with very little work on our part.

Blosxom handles the new m4v format for the TV iPod, while dircaster (at this stage, anyway) does not.

Once you have a subscription URL, you can also register it with iTunes or another feed syndicator such as Wikipedia list of podcast syndicators. On iTunes, you must create an account, but you don't actually have to buy anything to register your feed.

Good luck, and may your mind flow free!

John Littler is chief gopher for Mstation.org.


Return to the Linux DevCenter.

Prev  [1] [2] 

[Bookmark][Print] [Close][To Top]
  • Prev Article-OS:

  • Next Article-OS:
  • Related Materias
    How to Deploy Software Usi
    Top 10 Tips for Using Wind
    Mastering Windows New Fire
    Creating Visual Studio Pro
    Implementing Mandatory Roa
    Better Registry Searching
    Windows XP File Sharing My
    Using Data Compression in 
    Building Photo Uploaders w
    Windows XP File Sharing My
    Topics
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Graphic Design Tutorial
     

    Coreldraw Tutorial

      Illustrator Tutorial
      3D Graphics Articles
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial&Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial&Articles
     

    XML Style Tutorial

      AJAX Tutorial
      XML Mobile
    Flash Tutorial&Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial&Articles
     

    Linux Tutorial

      Symbian Tutorial
      MacOS Tutorial