CodeVault (ユーザ投稿コードライブラリ) ポータルトップ | phpspot

  一覧 | コード登録画面
前のページに戻る
RSS1.0 [ 2005年10月25日 ]
<?php
/**
 * rss1.0モジュール?
 * 概要
 *  RSS1.0のニュースフィードに必要なRDFドキュメントを返すクラス
 *  RDFドキュメントの一部を返すだけなので出力先はユーザー任せです。
 *
 * @since PHP4.0.6
 * @Autho kousaku
 *
 * [usage]
 * 1. HTTPヘッダーを出力
 *    header(rss10::httpHeader());
 *
 * 2. xmlヘッダー( ? etc. ???)を出力
 *    echo rss10::header(string about, string title, string link, string description);
 *        :about データーの参照元?たぶんURL rdf:about=http://sample.com/rss10 ってなる
 *        :title ニュースフィード全体のタイトル。rss10::liの時にcreatorを指定しなければこれが送信者になる
 *        :link  よく分からん
 *        :description 紹介文?何か書きたければどうぞ。
 *
 * 3. 記事をrdfリストに変換
 *    echo rss10::li(string resource, int timestomp, string title, [string creator, string description])
 *        :resource 更新(?)された記事のURL
 *        :timestomp 更新日時のタイムスタンプ(秒)
 *        :title タイトル、件名
 *        :creator 作者、送信者?
 *        :description 本文?
 *
 * 4. タグを閉じておわり
 *    echo rss10::footer();
 *
 * 終わり
 */
if(!defined("RSS_ENCODING")) define("RSS_ENCODING","UTF8");
if(!
defined("SOURCE_ENCODING")) define("SOURCE_ENCODING","auto");
class 
rss10
{
    function 
httpHeader(){
        return 
'Content-type: application/xml; charset='.RSS_ENCODING;
    }
    
    function 
header($about$title$link NULL$description NULL)
    {
        
$buffer '<?xml version="1.0" encoding="'.RSS_ENCODING.'"?>'."\n\n<rdf:RDF";
        
$buffer .= "  xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
        
$buffer .= "  xmlns=\"http://purl.org/rss/1.0/\">\n\n";
        
//channel
        
rss10::amp($about);
        
$buffer .= ' <channel rdf:about="'.$about.'">'."\n";
        
        
//link
        
if (is_null($link)) {
            
$link $about;
        } else {
            
rss10::amp($link);
        }
        
$buffer .= "  <link>".$link."</link>\n";
        
        
//title
        
rss10::convert($title);
        
$buffer .= "  <title>".$title."</title>\n";
        
        
//description
        
if ($description)
        {
            
rss10::convert($desvription);
            
$buffer .= "  <description>".$desvription."</description>";
        }
        return 
$buffer."  <items>\n   <rdf:Seq>\n";
    }
    
    function 
li($resource$time$title$creator NULL$description NULL)
    {
        
//変換
        
rss10::formatDate($time);
        
rss10::convert($title);
        if(
$creatorrss10::convert($creator);
        if(
$descriptionrss10::convert($description);
        
rss10::amp($resource);
        
        
//return RDF:li
        
return <<<EOD
    <rdf:li rdf:resource="$resource" />
    <item rdf:about="
$resource">
     <title>
$title</title>
     <link>
$resource</link>
     <dc:date>
$time</dc:date>
     <dc:creator>
$creator</dc:creator>
     <description>
$description</description>
    </item>
EOD;
    }

    function 
footer()
    {
        return 
"   </rdf:Seq>\n  </items>\n </channel>\n</rdf:RDF>";
    }
    
    function 
amp(&$str)
    {
        
$str ereg_replace('&','&amp;',$str);
    }
    
    function 
convert(&$str)
    {
        
$str = @mb_convert_encoding($strRSS_ENCODINGSOURCE_ENCODING);
    }
    
    function 
formatDate(&$time)
    {
        
$time substr_replace(date('Y-m-d\TH:i:sO',$time),':',-2,0);
    }    
}
?>

投稿者:ach