Livedoorなどの天気情報配信サービスを使い自分のウェブサイトに天気を表示させる方法で、

本日のある地域の天気アイコンだけを(晴、雨、曇など)を自前で用意した画像で表示させることはできますでしょうか。できる場合はその方法を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/07/15 11:29:37
  • 終了:2007/07/22 11:30:03

回答(1件)

id:ymlab No.1

ymlab回答回数506ベストアンサー獲得回数332007/07/15 13:41:58

ポイント60pt

結論から言うとできます。

方法:

お天気情報プラグインではなく、Weather Hacksを使います。

http://weather.livedoor.com/weather_hacks/

http://weather.livedoor.com/weather_hacks/webservice.html

を参考にしてみてください。

LivedoorからXMLで情報が配信されておりますので、

プログラムの方でXMLをパースして、必要な情報を

取得すればよいだけです。

[sinwa-tokyoさんの場合は、location,area,telopでしょうか]

telopの情報を元に、自分で作成した画像に割り当てればOKです。

私も以前作ったことがありましたので、ソースコードを紹介しておきます。いろんな依存関係があるのでそのままでは動きませんが、少しでも参考になれば幸いです。

http://ymlabo.ddo.jp/~ymlab/blogtest/

の左下の方を見てください。

http://gakkouweblog.yh.land.to/index.php

ここのサイトは設定画面まで見ることができます。

http://gakkouweblog.yh.land.to/admin/otenki.php

/** 詳細お天気情報.Live Doorのお天気情報Weather Hacksを用いています。
* @param $path db/へのパス
* @param $year本日の年
* @param $month 本日の月
* @param $days 本日の日にち
*/
function putWeather2($path, $year, $month, $days) {/**{{{*/
$fp = fopen("${path}db/weather2.dat", "r") or die;
$pref = trim( fgets( $fp, 20 ) );
$city = trim( fgets( $fp, 20 ) );
fclose( $fp );
$uri = "http://weather.livedoor.com/forecast/rss/";
$uri .= $pref;
$uri .= "/${city}.xml";

$fpin = fopen( $uri, 'r' ) or die;
$buffer = "";
while ( !feof( $fpin ) ) {
	$buffer .= fgets( $fpin, 1024 );
}
fclose( $fpin);
$array = XML_unserialize( $buffer );

print "\t\t\t\t\t \n";//これを入れないと画面が乱れる
//タイトル抽出
$title = mb_convert_encoding( $array['rss']['channel']['title'], "sjis-win", "UTF-8" );
$a = strpos($title,'livedoor');
$title = substr( $title, 0, $a );
for ( $iCnt = 1; $iCnt < count($array['rss']['channel']['item']); $iCnt++ ) {
	//本日
	$today[$iCnt] = mb_convert_encoding( $array['rss']['channel']['item'][$iCnt]['title'], "sjis-win", "UTF-8" );
	$a = strrpos($today[$iCnt], '月');
	$b = strrpos($today[$iCnt], '日');
	$today[$iCnt] = preg_replace("/[^0-9]+/", "", substr($today[$iCnt], $a, $b))."<font size = \"1\">日</font>";
	$url[$iCnt] = mb_convert_encoding( $array['rss']['channel']['item'][$iCnt]['image']['url'], "sjis-win", "UTF-8" );
	$description[$iCnt] = mb_convert_encoding( $array['rss']['channel']['item'][$iCnt]['description'], "sjis-win", "UTF-8" );
	$maxtemperature[$iCnt] = $description[$iCnt];//最高気温
	$a = mb_strpos($maxtemperature[$iCnt], "最高気温");
	$maxtemperature[$iCnt] = mb_substr($maxtemperature[$iCnt], $a, 10);
	$maxtemperature[$iCnt] = preg_replace("/[^0-9]+/", "", $maxtemperature[$iCnt])+1-1;

	$mintemperature[$iCnt] = $description[$iCnt];//最低気温
	$a = mb_strpos($mintemperature[$iCnt], "最低気温");
	$mintemperature[$iCnt] = mb_substr($mintemperature[$iCnt], $a, 10);
	$mintemperature[$iCnt] = preg_replace("/[^0-9]+/", "", $mintemperature[$iCnt])+1-1;
}


$globalweathertitle = str_replace("\n", "",nl2br(mb_convert_encoding( $array['rss']['channel']['description'], "sjis-win", "UTF-8" )));

//注意報・警報
$uri = "http://weather.livedoor.com/forecast/rss/warn/";
$uri .= $pref;
$uri .= ".xml";

$fpin = fopen( $uri, 'r' ) or die;
$buffer = "";
while ( !feof( $fpin ) ) {
	$buffer .= fgets( $fpin, 1024 );
}
fclose( $fpin);
$array = XML_unserialize( $buffer );
$isAttension = $isAlert = -1;
for ( $iCounter = 1; $iCounter < count( $array['rss']['channel']['item'] ); $iCounter++ ) {
	//注意報チェック
	if ( $array['rss']['channel']['item'][$iCounter]['image'][1]['width']-1 != -1 ) {
		$isAttension = $iCounter;//$iCounter = 0は、説明文だからなりえない
	}
	//警報チェック
	if ( $array['rss']['channel']['item'][$iCounter]['image'][0]['width']-1 != -1 ) {
		$isAlert = $iCounter;
	}
	
}



print "\t\t\t\t\t<div class=\"sidebarbox-border\">\n";
print "\t\t\t\t\t\t<div class=\"sidebarbox-title-shading bg-yellow07\">\n";
print "\t\t\t\t\t\t\t<small>".$title."</small><br />\n";
print "\t\t\t\t\t\t</div>\n";

?>
						<script type = "text/javascript">
							var flag="";
							/** 天気予報の一言メッセージを表示する*/
							function show(mes) {
								var message = document.getElementById("message");
								var textdata = "";
								if (mes == "hitokoto") {
									//一言がクリックされた
									message.innerHTML = "";
									textdata = '<?php print trim($globalweathertitle);?>';
									textdata = textdata.replace(/&/g, "&");
								} else if ( mes == "attention" ) {
									//注意報がクリックされた。

								}
								if ( flag == false || flag == "") {
									message.innerHTML = textdata;
									flag = true;
								} else {
									message.innerHTML = "";
									flag = false;
								}
							}
						</script>
<?php

print <<<EM
						<table summary = "詳細お天気情報">
							<tr>
								<td colspan = "3">
									<small><small>
									<a href = "javascript:show('hitokoto');">一言</a>
									</small></small>
									 
EM;
	$uri = "http://weather.livedoor.com/warn/";
	$uri .= $pref;
	$uri .= ".html";

   	if ( $isAttension != -1 ) {
		print "\t\t\t\t\t\t\t\t\t<a href = \"".$uri."\">";
		print "\t\t\t\t\t\t\t\t\t\t<img src = \"";
		print $array['rss']['channel']['item'][$isAttension]['image'][1]['url'];
		print "\" alt = \"注意報\" width = \"15\" height = \"15\" />";
		print "</a>";
	}
	print " ";
	if ( $isAlert != -1 ) {
		print "<a href = \"".$uri."\">";
		print "<img src = \"";
		print $array['rss']['channel']['item'][$isAlert]['image'][0]['url'];
		print "\" alt = \"警報\" width = \"15\" height = \"15\" />\n";
		print "</a>\n";
	}
print<<<EM
							</td>
						</tr>
						<tr>
							<td colspan = "3">
								<div id = "message">
									<small><small>
									</small></small>
								</div>
							</td>
						</tr>
EM;
$aryYoubi = array("(<span style = \"color:#FF0000\">日</span>)", "(月)", "(火)", "(水)", "(木)", "(金)", "(<span style = \"color:#0000ff\">土</span>)");
$plusday = 1;
for ( $i = 1; $i < 8; $i++ ) {
$offset = 0;
//$nowday = $today[1]+$i-1;
$nowday = $days+$i-1+$offset;
$nowday++;$nowday--;
$nowmonth = $month;
if ( checkdate( $month, $nowday, $year ) != true ) {
	//無効な年月日
	if ( $month == 12 ) {
		$nowmonth = 1;$year++;$offset = -1*($nowday);
	} else {
		$nowmonth = $month + 1;
		$offset = -1 * ( $nowday ) + $plusday;
		$plusday++;
	}
} else {
	//有効な日だったら、offsetを設定する理由がない.
	$offset = 0;
}
$outputDay = $nowday + $offset;
//print "$year/$nowmonth/$outputDay";
//$ddd = getdate( mktime( 0, 0, 0, $month, $days+$i-1, $year ) );
$ddd = getdate( mktime( 0, 0, 0, $nowmonth, $outputDay, $year ) );
$yb = $ddd['wday'];
//$outputDay .= '日';
$outputDay .= $aryYoubi[$yb];
print<<<EM
						<tr>
							<td>
								$outputDay
							</td>
							<td>
								<img src = "$url[$i]" width = "50" height = "31" alt = "本日の天気" />
							</td>
							<td>
								<span class = "red">
									<small>
										$maxtemperature[$i]
									</small>
								</span>
								<small><small>/</small></small>
								<span class = "blue">
									<small><small>
										$mintemperature[$i]
									</small></small>
								</span>
							</td>
						</tr>\n
EM;
}
print "\t\t\t\t\t</table>\n";
print "\t\t\t\t</div>\n";
}
/**}}}*/

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません