フォノクラフト株式会社:作業メモや備忘録など » XML http://121.50.42.205/note 作業メモや備忘録など... Fri, 05 Jul 2013 05:17:27 +0000 ja hourly 1 http://wordpress.org/?v=3.1.3 [wp] wordpressテンプレート内でRSS(XML)を読み込む際の日付ズレ対処法 http://121.50.42.205/note/wp-wordpress%e5%86%85%e9%83%a8%e3%81%a7rssxml%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%80_1109 http://121.50.42.205/note/wp-wordpress%e5%86%85%e9%83%a8%e3%81%a7rssxml%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%80_1109#comments Wed, 14 Mar 2012 13:39:17 +0000 admin http://phono.co.jp/note/?p=1109

wordpress内部でRSS(XML)を読み込む際には注意が必要

普通であれば下記ソースの様にすることでXMLを簡単に読み込むことができます。

参考:http://www.ibm.com/developerworks/jp/xml/library/x-simplexml.html

※曜日は日本語で日〜土と表示するようにしています。

» サンプルダウンロードはこちらから。

	<?php 
	//参考:http://www.ibm.com/developerworks/jp/xml/library/x-simplexml.html
	// simplexml_load_file関数はPHP 5.1 以降で使用可能です。
	$rss =  simplexml_load_file('rss.xml');
	$title =  $rss->channel->title;
	?>

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><?php echo $title; ?></title>
</head>
<body>

<h1><?php echo $title; ?></h1>

	<?php
	foreach ($rss->channel->item as $item) {
	$pubDate= $item->pubDate;
	$time=strtotime($pubDate);
	$week = Array('日','月','火','水','木','金','土');//曜日を日本語にする「w」は曜日を0〜6で出力しています。
	$week_day=date("w",$time);
	$pubDate=date("Y年n月j日",$time);
		echo "<h2>" . $pubDate . "(" . $week[$week_day] . ")<a href='" . $item->link . "'>" . $item->title . "</a></h2>";
		echo "<p>" . $item->description . "</p>";
	}
	?>

</body>
</html> 

しかし、wordpressではwp-settings.php内でタイムゾーンがUTCに固定されている為、data関数もつられて日本時間と9時間のズレが生じてしまうのです。

修正するには、日付をstrtotime関数でUnixタイムスタンプ形式に変換した後「$●●●● + 3600 * get_option(‘gmt_offset’);」で処理してあげます。

実際にwordpressテンプレート内に書く場合のサンプルは以下です。ご参考まで。

<?php
$rss =  simplexml_load_file('rss.xml');
foreach ($rss->channel->item as $item) {
	$pubDate = $item->pubDate;
	$time = strtotime($pubDate);
	$time = $time + 3600 * get_option('gmt_offset');//wordpressで外部のリソース(RSSやファイルのタイムスタンプなど)から日付を取得して処理する際には、この3600のおまじないをする必要がある。
	$week = Array('日','月','火','水','木','金','土');//曜日を日本語にする「w」は曜日を0〜6で出力しています。
	$week_day=date("w",$time);
	$pubDate=date("Y年n月j日",$time);
?>
	<div class="left">
		<?php echo $pubDate ?><?php echo "(" . $week[$week_day] . ")"; ?>
	</div>
	<div class="right">
		<h4><a href="<?php echo $item->link ?>" target="_blank"><?php echo $item->title ?></a></h4>
		<p><?php echo $item->description ?></p>
	</div>

<?php } ?>
]]>
http://121.50.42.205/note/wp-wordpress%e5%86%85%e9%83%a8%e3%81%a7rssxml%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%80_1109/feed 0
[PHP] ソースを整形して出力する参考 http://121.50.42.205/note/%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%92%e6%95%b4%e5%bd%a2%e3%81%97%e3%81%a6%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b%e5%8f%82%e8%80%83_637 http://121.50.42.205/note/%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%92%e6%95%b4%e5%bd%a2%e3%81%97%e3%81%a6%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b%e5%8f%82%e8%80%83_637#comments Fri, 28 Oct 2011 03:55:15 +0000 admin http://phono.co.jp/note/?p=637 使い道

このサンプルではXML内にあるimg src属性とlink属性“だけ”を取得し、ベタなhtmlタグとしてインクルードするパターン

preg_match_all関数で取得したい値を正規表現『\”(.*)\”』でごっそりゲットし、変数に渡す。
(つまり必要な要素だけ、preg_match_allと対応する変数を列挙するばよい。)

ソース

取得するXML

┗ 置き場所の例:/var/www/○○○○/html/user_data/○○○○/packages/default/xml/img.xml

<?xml version="1.0" encoding="UTF-8"?>
<data>
<img src="○○1○○.jpg" link="http://○○1○○.jp/aaaa/" />
<img src="○○2○○.jpg" link="http://○○2○○.jp/bbbb/" />
<img src="○○3○○.jpg" link="http://○○3○○.jp/cccc/" />
<img src="○○4○○.jpg" link="http://○○4○○.jp/dddd/" />
<img src="○○5○○.gif" link="http://○○5○○.jp/eeee/" />
</data>

処理するPHP

$file = file_get_contents("/var/www/○○○○/html/user_data/○○○○/packages/default/xml/img.xml");
preg_match_all("<img src=\"(.*)\">",	$file, $img, PREG_SET_ORDER);
preg_match_all("< link=\"(.*)\" >", $file, $url, PREG_SET_ORDER);
$cnt = 0;
foreach ($img as $elm)
{
	list($item, $dummy) = explode('" ', $elm[1]);
	list($urls, $dummy) = explode('" ', $url[$cnt][1]);
	echo "<a href=\"" . $urls . "\"><img src=\"" . $item . "\" /></a>\n";
	$cnt++;
}

処理出力されるHTML

<a href="http://○○1○○.jp/aaaa/"><img src="○○1○○.jpg" /></a>
<a href="http://○○2○○.jp/bbbb/"><img src="○○2○○.jpg" /></a>
<a href="http://○○3○○.jp/cccc/"><img src="○○3○○.jpg" /></a>
<a href="http://○○4○○.jp/dddd/"><img src="○○4○○.jpg" /></a>
<a href="http://○○5○○.jp/eeee/"><img src="○○5○○.gif" /></a>
]]>
http://121.50.42.205/note/%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%92%e6%95%b4%e5%bd%a2%e3%81%97%e3%81%a6%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b%e5%8f%82%e8%80%83_637/feed 0