自宅サーバの整理箱

自宅サーバを構築しwordpress,fedora,CentOSの作業メモ

*

外部RSSを取得してWordpPressへ投稿するプラグイン

   

外部RSSを取得してWordPressの記事に表示するプラグインを作成しました。

<?php
/*
Plugin Name: WP-RssTools
Plugin URI: https://log.windows78.net/
Description:外部RSS表示ツール、画像表示、一覧表示
Version: 0.1
Author: KEIKI
Author URI: https://log.windows78.net/
*/

/****************
Active Hook
****************/
function active_wp_rsstools(){
        add_option('wp_rsstools','1','active the plugin');
}

/****************
Deactive Hook
****************/
function deactive_wp_rsstools(){
    delete_option('wp_rsstools');
}

/****************
Main
****************/
/*取得したRSS群を降順でソート*/
function cmp_rsslist($a, $b) {
	if ($a[0] == $b[0]) return 0;
	return ($a[0] > $b[0]) ? -1 : 1;
}

/*外部RSS画像リスト表示*/
function render_rsstools($text) {

	/*環境設定*/
	/*MagPieまでのパスを設定*/
	require_once('/var/www/magpierss/rss_fetch.inc');

	/*最大件数を定義*/
	$num = 12;

	/* RSSリストファイル取得 */
	preg_match_all('|[RSSTOOL](.*?)[/RSSTOOL]|su',$text,$match,PREG_SET_ORDER);

	foreach($match as $val){
		
		$words = $val[0];
		$word = str_replace("[RSSTOOL]", "", $words);
		$word = str_replace("[/RSSTOOL]", "", $word);

		/*rsslist名とスタイルを分離*/
		$wordarray = explode(",",$word);
		$word     = $wordarray[0];
		$style = $wordarray[1];
		
		/* 未設定の場合はサイトIDファイルを開く(Default)*/
		if( $word == '' ){
			/*RSSリストファイルから連想配列へ*/
			$rssfilename= '/var/www/rsslist/rsslist' . $GLOBALS['blog_id'] . '.list';
		}else{
			/*指定されたファイル名称*/
			$rssfilename= '/var/www/rsslist/' . $word;
		}
		
		/* ファイルOPEN */
		if (file_exists($rssfilename)) {
		}else{
			continue;
		}
		$rssUrl = file($rssfilename,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

		//以下メイン処理
		//MagpieRSS
		define('MAGPIE_OUTPUT_ENCODING','UTF-8');
		define('MAGPIE_CACHE_ON', false);
		 
		//配列編集
		foreach ($rssUrl as $no => $rss_url) {
			$rss = @fetch_rss($rss_url);
			if ($rss != NULL) {
				for ($i=0; $i<count($rss->items); $i++) {
				$rss->items[$i]["site_title"] = $rss->channel["title"];
				$rss->items[$i]["site_link"] = $rss->channel["link"];
				}
			$rssItemsArray[] = $rss->items;
			}
		}
		 
		$concatArray = array();
		for($i=0;$i<count($rssItemsArray);$i++)
		{
			$concatArray = array_merge($concatArray,$rssItemsArray[$i]);
		}

		/*連奏配列の初期化 */
		unset($rssArray);
		foreach ($concatArray as $no => $values) 
		{
			//RSSの種類によって日付を取得
			if($values['published'])
			{
				$date = $values['published'];
			}
			elseif($values['dc']['date'])
			{
				$date = $values['dc']['date'];
			}
			elseif($values['pubdate'])
			{
				$date = $values['pubdate'];
			}
			else
			{
			}
			$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'])
			{
				$content=$values["content"]["encoded"];
			}
			elseif($values['description'])
			{
				$content = $values['description'];
			}
			preg_match('/<img.*>/i', $content, $img_all);
			preg_match('/http.*?(.gif|.png|.jpg|.jpeg$|.bmp)/i', $img_all[0], $gazo);
			if (empty($gazo[0])) {
				continue;
			}
			//配列
			$rssArray[]=array($date, $title, $link, $site_title, $site_link,$gazo);

			}
		}
		 
		if(count($rssArray) > $num)
		{
			$count=$num;
		}
		else
		{
			$count=count($rssArray);
		}

		if ($count > 0){
			/* echo $count;*/
		}else{
			continue;
		}

		usort($rssArray, 'cmp_rsslist');

		/* OUTPT START */
		if( $style =='list'){
			$outtable = "<div class='toppage-box'>";
		}else{
			$outtable = "";
		}

		for ($i=0; $i<$count; $i++) {
			$date=date("m/d H:i",strtotime($rssArray[$i][0]));
			$title=mb_substr($rssArray[$i][1],0,30);
			$link=$rssArray[$i][2];
			$site_title=$rssArray[$i][3];
			$site_link=$rssArray[$i][4];
			$gazo=$rssArray[$i][5];
			$gazourl = $gazo[0];
			if( $style =='list'){
$pout = <<< EOD
{$date} <a href='{$link}'>{$title}</a>
<br/>
EOD;


			}else{
$pout = <<< EOD
<div class='entry-toppage'>
<div class='sumbox-toppage'>
<a href='{$link}'><img src='{$gazourl}'></a>
</div>
<div class='entry-content-toppage'>
<a href='{$link}'>{$title}</a>
</div>
</div>
EOD;

			}

			$outtable .= $pout;
		}
		/* OUTPT END */
		$outtable .= "</div><div class='clear'></div>";
		$text = str_replace($words ,$outtable ,$text);
	}
	return $text;
}

/* Content Filtter */
add_filter('the_content', 'render_rsstools', 10);

/* Plugin ON/OFF */
register_activation_hook(__FILE__,'active_wp_rsstools');
register_deactivation_hook(__FILE__,'deactive_wp_rsstools');
?>

表示したい場所へ以下のショートコードを書きます。

[RSSTOOL]RSSのURLが書いてあるファイル名,スタイル[/RSSTOOL]

RSSを記入するファイルパスはソースファイル内で
指定します。ファイルへは、1行1URLで記述します。

スタイルは「list」または「box」を指定します。
listを指定すると、画像なしのタイトルリスト表示。
boxを指定すると、画像月のボックス表示になります。

ファイル名を省略した場合は、「rsslist+(サイトID).list」
ファイルになります。ファイルが存在しない場合は変換されません。
スタイルを省略した場合は「box」となります。
ZIPファイルにまとめたプラグインはこちらから
ダウンロードできます。

ではでは。

サンプル表示はこちら

■リストRSS表示
[RSSTOOL]sample.list,list[/RSSTOOL]
■画像RSS表示
[RSSTOOL]sample.list,box[/RSSTOOL]

 - Word Press, アフィリエイト

 Total 111 views