[PHP] Podcastで使えるRSS作成関数

2020年3月5日

PHP テクノロジー プログラミング

ポッドキャスター、ナンチャッテ・エンジニアのユゲタです。 この間スタートした、「ナンチャッテ・ラジオ」ですが、 サイト構築の際に、ポッドキャスト用にRSSを作成する手順があったので、その時に作った関数が、他のサイトでも使えそうだったので、公開しておきたいと思います。 これからpodcastを始めるという人で、自らサイト構築をしている場合にお使いください。

ソース

<?php namespace rss; /** * データ * rss_url : rss-xmlのURL * title : podcastタイトル * url : podcast URL * description : podcast 説明 * docs : メモ * author : 管理者 * banner : バナーURL(大) * email : サービス用メールアドレス * category : main-category * category_sub : sub-category * * program_title : 番組タイトル(毎回) * program_url : 番組詳細URL * program_mp3 : 番組ファイル(mp3) * program_date : 番組公開日 * prigram_description : 番組説明 * */ class podcast{ public static function xml($header=array() , $items=array()){ $path_podcast = __DIR__."/podcast.txt"; $path_header = __DIR__."/podcast_header.txt"; $path_item = __DIR__."/podcast_item.txt"; if(!is_file($path_podcast) || !is_file($path_header) || !is_file($path_item)){return null;} $txt_podcast = file_get_contents($path_podcast); $txt_header = file_get_contents($path_header); $txt_item = file_get_contents($path_item); $header = array_merge($header , self::getBaseInfo()); $txt_header = self::conv($txt_header , $header); $txt_items = self::items($txt_item , $items , $header); $txt_podcast = self::conv($txt_podcast , $header); $txt_podcast = str_replace("{{header}}" , $txt_header , $txt_podcast); $txt_podcast = str_replace("{{items}}" , $txt_items , $txt_podcast); // return $txt_podcast; $xml = new \SimpleXMLElement($txt_podcast); return $xml->asXML(); } public static function getBaseInfo(){ return array( "url" => \mynt::exec('\lib\url\common','getUrl') ); } public static function conv($txt="" , $datas=array()){ if(!$txt){return "";} foreach($datas as $key => $value){ $value = htmlspecialchars($value , ENT_XML1 , "UTF-8"); $txt = str_replace("{{".$key."}}" , $value , $txt); } return $txt; } public static function items($tmp="" , $datas=array() , $header=array()){ if(!$tmp){return "";} $newTxt = ""; foreach($datas as $data){ $current = $tmp; $current = self::conv($current , $data); $current = self::conv($current , $header); $newTxt .= $current; } return $newTxt; } }

使い方

$header = array( "rss_url" => $, // prss_urloscastのrss-url "url" => $url, "title" => $title, "description" => $discription "docs" => $document "author" => $author "banner" => $banner_image, "email" => $mail, "category" => $category_1, "category_sub" => $category_2 ); $datas = array( array( "program_title" => $title "program_url" => $url, "program_mp3" => $mp3, "prigram_description" => $comment, "program_date" => $date ) ); header('Content-Type: text/xml'); echo rss::podcast($header , $datas); 必要な情報を上記のように送ってあげることで、rss(xml)データが表示されます。 ヘッダをつけてechoすると、そのまま表示できるという使い方です。 ファイルに保存して、使うことも可能です。 $datasの箇所は、podcastの番組一覧を配列で登録してください。

最後に

さほど難しい処理ではないのですが、appleのpodcast登録でエラーが出た項目を足していきながら調整して完成したので、 これからpodcastを始めるという方に使ってもらえると有り難いです。 最近仕様が変わったのか分からないですが、他のpodcastのrssを見ながら作った項目なのに、appleの登録サイトで項目が足りないというエラーが出る事態があったので、今後もこの仕様が陳腐化する可能性もありますが、見つける度に更新していこうと思ってます。