2013年09月10日 追記・変更

MagpieRSSを利用すると、RSSの作成が簡単に行える

MagpieRSSを利用しているので、このプログラムを参考にする際はMagpieRSSを用意する必要がある。
また、画像は一度サーバーに取得保存後にサイズ圧縮をしている。
このRSSプログラムは、jsファイルとして保存している。使用の際はjsファイルを読み込みという形で使っていた。
<?php
//基本設定
$num = 40;
 
$rssUrl=array(
'サイトURL1',//サイト名
'サイトURL2',//サイト名
'サイトURL3'//サイト名
);
 
//RSSの読み込みプログラム
require_once('../magpierss/rss_fetch.inc');  //MagpieRSSロード
define('MAGPIE_OUTPUT_ENCODING','UTF-8');
 
if($datacount !== 0){
foreach ($rssUrl as $no => $rss_url) {
    if ($rss_url != '') {
    //URLからRSSを取得
    $rss   = @fetch_rss($rss_url);
        if ($rss != NULL) {
            for ($i=0; $i<count($rss->items); $i++) {
            //サイトのタイトルをitemsに格納
            $rss->items[$i]["site_title"] = $rss->channel["title"];
            $rss->items[$i]["site_link"] = $rss->channel["link"];
            }
    //itemsだけ別配列に格納
    $rssItemsArray[] = $rss->items;
        }
    }
}//--▲foreach--
 
$concatArray = array();
if (is_array($rssItemsArray)) {
    for($i=0;$i<count($rssItemsArray);$i++){
    //配列を統合する
    $concatArray = array_merge($concatArray,$rssItemsArray[$i]);
    }
 
foreach ($concatArray as $no => $values) {
 
//RSSの種類によって日付を取得
if($values['published']){$date = $values['published'];}
elseif($values['created']){$date = $values['created'];}
elseif($values['pubdate']){$date = $values['pubdate'];}
elseif($values['dc']['date']){$date = $values['dc']['date'];
}
$date=date("Y-m-d H:i:s",strtotime($date));
 
//Filter
$nowtime = date("Y-m-d H:i:s",strtotime( "now" ));//現在時刻の取得
if($date > $nowtime){
}elseif(preg_match("/AD/", $values["title"])){
}elseif(preg_match("/PR/", $values["title"])){
}else{
 
//値の定義
$title=$values["title"];
$link=$values["link"];
$site_title=$values["site_title"];
$site_link=$values["site_link"];
 
//画像取得
if($values['content']){
    $pre_content=$values["content"];
    $content=$pre_content["encoded"];
}
elseif($values['description']){
    $content = $values['description'];
}
//画像がある場合とない場合
if(preg_match('/<img .*?src ?= ?[\'"].*?[\'"]/i', $content)){
preg_match('/<img .*?src ?= ?[\'"].*?[\'"]/i', $content, $img_all);
$img_src = preg_replace('/<img .*?src ?= ?[\'"]/', '', $img_all);
$gazo = preg_replace('/[\'"]/', '', $img_src);
}else{
$gazo = "画像が存在しない時に表示する画像URL";
}
 
//記事ごとに必要な項目を抽出
$rssArray[]=array($date, $title, $link, $site_title, $site_link,$gazo);
}//--▲if--Filter--
}//--▲foreach--
 
//多次元配列ソート用比較関数
//この場合は配列の1番目の項目を降順にソート
function cmp($a, $b) {
    if ($a[0] == $b[0]) return 0;
    return ($a[0] > $b[0]) ? -1 : 1;
}
 
//配列をユーザー定義関数でソート
if ($rssArray) { usort($rssArray, 'cmp'); }
if (count($rssArray) > $num) {
$count=$num;
} else {
$count=count($rssArray);
}
 
//必要な件数分だけHTML整形
for ($i=0; $i<$count; $i++) {
$date=date("m/d H:i",strtotime($rssArray[$i][0]));
$title=$rssArray[$i][1];
$link=$rssArray[$i][2];
$site_title=$rssArray[$i][3];
$site_link=$rssArray[$i][4];
$gazo=$rssArray[$i][5];
            if(!empty($gazo[0])){
	$imgdata = file_get_contents($gazo[0]);
	file_put_contents("./download/rssp${i}.jpg",$imgdata);
// 画像処理開始
    $file1 = "./download/rssp${i}.jpg";                        // 元画像ファイル
    $file2 = "./download/rssp_ok${i}.jpg";                                // 画像保存先
    $in = ImageCreateFromJPEG($file1);                        // 元画像ファイル読み込み
    $size = GetImageSize($file1);                            // 元画像サイズ取得
    $width = 255;                                // 生成する画像サイズ(横)
$rate = $size[0] / $width;    //圧縮比
$height = $size[1] /  $rate;  //リサイズ後縦幅
    $out = ImageCreateTrueColor($width, $height);                    // 画像生成
    ImageCopyResampled($out, $in, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);    // サイズ変更・コピー
    ImageJPEG($out, $file2);                            // 画像保存




        $gazolink = "<a target='_blank' href='$link'><img src='./download/rssp_ok${i}.jpg' alt='$title' width='255px' /></a><p><a target='_blank' href='$link'>$title</a></p>";

            }
            else{
        $gazolink = "";
            }
        $site_titlelink = "<p class='sideboxlinktxt'>$date<br /><a target='_blank' href='$site_link'>[$site_title]</a></p>";
        $mix="<div class='sidebox'>$gazolink$site_titlelink</div>";
    $output = $output.$mix;//ループさせるための自己読み込み
        }
 
}//--▲for--
}//--▲if--
// 念のため、改行とか消す
$output = str_replace(array("\r\n","\r","\n"), '', $output);
// シングルコーテーションによるエラー対策 \ をシングルコーテーションの前に
$output = str_replace('"', '\"', $output);
//仕上げ
$step1 = 'document.write("';
$step2 = '");';
$more_str = $step1 . $output .$step2;
$more_str = mb_convert_encoding($more_str, "SJIS", "UTF-8");
	// 置き換え用のjsファイル生成
	file_put_contents("pickup.js",$more_str);
?>

この記事が気に入ったら下のボタンをクリック

  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • LINEで送る


Leave a Reply