むずかしいことはわかりません

いろいろ書いてるみたいな

iGoogleのガジェットはXMLで書く

この辺りは、googleで検索してもらった方が速いので
http://www.google.co.jp/search?q=igoogle+%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88+%E4%BD%9C%E6%88%90&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_ja___JP231&aq=t
こんなリンクを貼っておくことにします。

Googleにもxmlファイルの記載方法などの解説サイトがありました…が、あんまり読んでません。

とりあえず、今回はlastRSS(http://lastrss.oslab.net/)というRSS取得のためのライブラリを使ってRSSに含まれている画像へのURLを抜き出してimgタグで表示することにしました。
関数名と一部しか名残りはありませんが、lastRSSのサンプルソースの一部を改造して使っています。

見たいblogに載っている画像の大きさは大体一緒だったので、width/heightパラメータにサイズ1/6したものを設定して表示させています。それから、imgタグが記載されている場所を決め打ちして処理しているので、他の用途は考えてないため、柔軟性はないです。

以下、XMLファイルとphpソース。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="タイトル" scrolling="true" />
<Content type="url" href="phpスクリプトを設置した場所のURL" />
</Module>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>


<?php
function getIMGURL ( $str ) {
	if ( ereg ( "<img ", $str ) ) {
		$img = split ( "<img ", $str );
		$img = split ( "/>", $img[1] );
		$img = split ( " ", $img[0] );

		$imgblock = Array();
		foreach ( $img as $line ) {
			if ( ereg ( "alt", $line ) ) {
				$keys = split("=", $line );		// alt
				$imgblock['alt'] = preg_replace ( "/\"/","",$keys[1]);
			} else if ( ereg ( "src", $line ) ) {
				$keys = split("=", $line );		// alt
				$imgblock['src'] = preg_replace ( "/\"/","",$keys[1]);
			} else if ( ereg ( "width", $line ) ) {
				$keys = split("=", $line );		// alt
				$imgblock['width'] = preg_replace ( "/\"/","",$keys[1]);
			} else if ( ereg ( "height", $line ) ) {
				$keys = split("=", $line );		// alt
				$imgblock['height'] = preg_replace ( "/\"/","",$keys[1]);
			}
		}
	} else return NULL;

	return $imgblock;
}


function checkLinkItem ( $str ) {
	$checkStr = Array (
		'ot_listing.pl',
	);

	foreach ( $checkStr as $cs ) {
		if ( ereg ( $cs, $str ) ) return false;
	}

	return true;
}

function ShowOneRSS($url,$itemCount) {
	global $rss;

	if ($rs = $rss->get($url)) {
		$iC = sizeof($rs['items']);
		if ( sizeof($rs['items']) > $itemCount ) {
			$iC = $itemCount;
		}

		for ( $i = 0; $i < $iC; ++$i ) {
			$rsbody = $rs['items'][$i];

			$imgbody = getIMGURL($rsbody['description']);

			if ( ( $imgbody != NULL ) ) {
				if ( trim($imgbody['width']) ) {
					$w = intval($imgbody['width']) / 6;
				} else unset($w);

				if ( trim($imgbody['height']) ) {
					$h = intval($imgbody['height']) / 6;
				} else unset($h);

				printf ( "<a href=\"%s\" target=\"%s\">%s</a><br /><img src=\"%s\"%s%s><br />\n",
					$rsbody['link'],
					'_blank',
					$rsbody['title'],
					$imgbody['src'],
					isset($w) ?  'width="'.$w.'" ' : "",
					isset($h) ? 'height="'.$h.'" ' : "" );
			}
		}
	}
}

include "./lastRSS.php";

$rss_list = array(
	'取得したいblogのRSS',
);

$rss = new lastRSS;

$rss->cache_dir = './temp';
$rss->cache_time = 60 * 60 * 60;
$rss->cp = 'UTF-8';
$rss->items_limit = 10;

print '<tr><td class="block">';
foreach ($rss_list as $url) ShowOneRSS($url,5);
print '</td></tr>';
?>

</body>
</html>