人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Livedoorなどの天気情報配信サービスを使い自分のウェブサイトに天気を表示させる方法で、
本日のある地域の天気アイコンだけを(晴、雨、曇など)を自前で用意した画像で表示させることはできますでしょうか。できる場合はその方法を教えてください。

●質問者: shinwa-tokyo
●カテゴリ:インターネット ウェブ制作
✍キーワード:livedoor アイコン ウェブサイト サービス 地域
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ymlab
●60ポイント

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

方法:

お天気情報プラグインではなく、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";
}
/**}}}*/

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ