atom rss を同じ形式の配列で返す関数
phpからいろんなブログを扱うと、rssやatom形式の扱いが大変になってきますね。
そこで、せっかくだからatomやrss形式を意識せずきまったフォーマットでデータを返す関数を作成しました。
返値として、title,url,comment,time,image(※画像がある場合、代表画像1枚のみ)を返します。
ブログのサムネイル付き一覧を作成するにはもってこいだと思います。
サンプル
atom rss を同じ形式の配列で返す関数
<?php //atom rss を同じ形式の配列で返す関数 function get_rssdata( $rssurl ){ //HTMLSQLのインクルード(タグの中の文字を選択しやすくする) //ダウンロードはこちらhttp://www.jonasjohn.de/lab/htmlsql.htm include_once( "htmlsql-v0.5/htmlsql.class.php" ) ; //Magpierssのインクルード(RSSの解析を簡単にする) //ダウンロードはこちらhttp://sourceforge.net/project/showfiles.php?group_id=55691 include_once( "magpierss/rss_fetch.inc" ); define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); //rssゲット $rss = fetch_rss( $rssurl ); mb_convert_variables( "SJIS" , "UTF-8" , $rss ); //アイテムの取り出し $i = 0; $in = array(); foreach ($rss->items as $item ) { //atom や rssによって振り分け+文字のケア if( $item["pubdate"] != "" ){ //rss 1.0 $in[$i]['title'] = $item['title']; $in[$i]['comment'] = $item["summary"]; $in[$i]['url'] = $item['link']; $in[$i]['time'] = date("Y-m-d H:i:s", $item['date_timestamp'] ); // "Thu, 10 Jan 2008 19:00:56 +0900" }elseif( $item["dc"]["date"] != "" ){ //atom $in[$i]['title'] = $item['title']; $in[$i]['comment'] = $item['content']['encoded']; $in[$i]['url'] = $item['link']; $in[$i]['time'] = date("Y-m-d H:i:s", strtotime( $item["dc"]["date"] ) ); //"2008-01-10T19:29:10+09:00" } //HTMLSQL作成 $wsql = new htmlsql(); if (!$wsql->connect( 'string' , $in['comment'] ) ){ print 'Error while connecting: ' . $wsql->error; exit; } //画像のURLをゲット if (!$wsql->query( 'SELECT src FROM img ' ) ){ print "Query error: " . $wsql->error; exit; } //画像のサイズを測定 foreach( $wsql->fetch_array() as $row){ $size = getimagesize( $row['src'] ); if( $size['0'] >= 100 ){ $in[$i]['image'] = $row['src']; } } $i++; } return $in; }
出力部分
<?php //出力部分 $items = get_rssdata( $rssurl ); foreach( $items as $num => $item ){ if( $item['image'] == "" ){ $image = "http://moeten.info/image/top/nophoto.gif"; }else{ $image = $item['image']; } echo <<<EOD <li style="border:1px solid #ffccff;margin:4px;"><img src="{$image}" width="30" align="left">{$item['time']}<br><a href="{$item['url']}">{$item['title']}</a><br clear="all"></li> EOD; } ?>