「Yahoo!天気情報」の版間の差分

提供:MeryWiki
ナビゲーションに移動 検索に移動
編集の要約なし
(→‎Kuro 版: 省略された波括弧の追加)
 
(2人の利用者による、間の8版が非表示)
1行目: 1行目:
2022年3月末でYahoo!天気 RSSの提供が終了したため、Yahoo!天気情報マクロは使用することができなくなりました。
== 概要 ==
Yahoo! 天気情報の地域指定 URL は、「[https://weather.yahoo.co.jp/weather/rss/ 提供RSS - Yahoo!天気・災害]」 のページで各地域のリンクURL末尾 <code>****.xml</code> の部分を調べて、マクロのコード内の URL 書き換えてください。
<br>(※ 各地域のリンク URL <code><nowiki>https://rss-weather.yahoo.co.jp/rss/days/<****>.xml</nowiki></code> の <code><nowiki>https://rss-weather</nowiki></code> を <code><nowiki>http://rss.weather</nowiki></code> に書き換えでもよい)
== Kuro 版 ==
Yahooの天気情報を取得し、カーソル位置に挿入します。
Yahooの天気情報を取得し、カーソル位置に挿入します。
使用前にurlの部分を任意の地域の情報に書き換えてください。
使用前にurlの部分を任意の地域の情報に書き換えてください。


<source lang="javascript">
<syntaxhighlight lang="javascript">
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Yahoo!天気情報
// Yahoo!天気情報
//
//
// Copyright (c) Kuro. All Rights Reserved.
// Copyright (c) Kuro. All Rights Reserved.
// www:    http://www.haijin-boys.com/
// www:    https://www.haijin-boys.com/
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------


23行目: 30行目:
   var children = items[i].childNodes;
   var children = items[i].childNodes;
   for (var j = 0; j < children.length; j++) {
   for (var j = 0; j < children.length; j++) {
     if (children[j].nodeName == "title")
     if (children[j].nodeName == "title") {
       document.selection.Text = children[j].text + "\n";
       document.selection.Text = children[j].text + "\n";
    }
  }
}
</syntaxhighlight>
== Sukemaru 版 ==
<blockquote>
・気象情報がドキュメント内に書きこまれても困りますよね?<br>
・アウトプットバーが開くとジャマじゃないですか?<br>
・メッセージボックスだと警告サウンドがウルサイかもしれません…<br>
→ ポップアップメニューだったら「イイ感じ」じゃん!
</blockquote><br clear=all>
[[ファイル:Yahoo! 天気情報.png|link=|ポップアップメニュー/ダイアログ表示]]
<br clear=all><br>
Kuro 版をベースにして '''<q>ポップアップメニュー</q>、<q>アウトプットバー</q>、<q>メッセージボックス</q>''' のいずれで表示するかを選択できるようにしました。
==== ポップアップメニュー ====
設定項目 <code>outputEnable</code> と <code>alertEnable</code> の '''両方が <span style="color:#c00;">false</span>''' ならポップアップメニューで表示します。
* 「― Yahoo! 天気・災害 ―」の行をクリックすると、気象情報のページをブラウザで開きます。
* 「― Yahoo! 天気・災害 ―」以外の場所をクリックした場合は、ポップアップを閉じます。
* ポップアップメニューは <kbd>Space</kbd> キーでキャンセルできるようにしてあります。
==== アウトプット ====
設定項目 <code>outputEnable</code> が <b style="color:#0000c0;">true</b> ならアウトプットバーに表示します。
==== メッセージボックス ====
設定項目 <code>alertEnable</code> が <b style="color:#0000c0;">true</b> ならメッセージボックスで表示します。
* 設定項目 <code>confirmEnable</code> が <b style="color:#0000c0;">true</b> のときは確認ダイアログ、<b style="color:#c00;">false</b> のときは警告ダイアログで表示します。
* 設定項目 <code>confirmEnable</code> が <b style="color:#0000c0;">true</b> のとき、<kbd>OK</kbd> をクリックすると、気象情報のページをブラウザで開きます。
ピンポイント天気の URL は、「[https://weather.yahoo.co.jp/weather/ Yahoo!天気・災害]」のページ内(左上あたり)にある検索ボックスに郵便番号を入力して、開いたページで取得できます。[https://www.yahoo-help.jp/app/answers/detail/p/616/a_id/44558/~/%E5%B8%82%E5%8C%BA%E7%94%BA%E6%9D%91%E3%81%94%E3%81%A8%E3%81%AE%E5%A4%A9%E6%B0%97%E6%83%85%E5%A0%B1%E3%82%92%E7%9F%A5%E3%82%8A%E3%81%9F%E3%81%84%EF%BC%88%E3%83%94%E3%83%B3%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E5%A4%A9%E6%B0%97%EF%BC%89]
==== ソースコード ====
;ダウンロード >> 「[[ファイル:Yahoo!_天気情報.zip]]」(アイコン入り)
最終更新: 2020/05/11(第2版)
<syntaxhighlight lang="javascript">
#title = "Yahoo! 天気情報..."
#tooltip="Yahoo! 天気・災害"
// #icon="weather.ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",335
/**
* ---------------------------------------------------------
* Yahoo!天気情報
* Original Copyright (c) Kuro. All Rights Reserved.
* www:    http://www.haijin-boys.com/
* ---------------------------------------------------------
* Modified by sukemaru, 2020/01/02 - 2020/05/11
* https://www.haijin-boys.com/wiki/Yahoo!天気情報#sukemaru_版
* 2020/05/11: ダイアログ表示の変更 (警告 ⇒ 確認)
*            現在日時のステータス表示を追加
* ---------------------------------------------------------
*
* 設定 outputEnable と alertEnable の両方が false ならポップアップメニューで表示。
* ポップアップメニューの「― Yahoo! 天気・災害 ―」の行をクリックすると
* 気象情報をブラウザで開きます。
* (※ confirmEnable = true  なら確認ダイアログを出してからブラウザで開く)
* 「― Yahoo! 天気・災害 ―」以外の場所をクリックした場合は、ポップアップを閉じます。
*/
// ---------- ▼ 設定項目 ▼ ----------
// ■ アウトプットバーに表示
var outputEnable = false;
// ■ ダイアログに表示
var alertEnable  = false;
// ■ ブラウザで開くまえに確認ダイアログを表示
var confirmEnable = true;
// ■ 地域を指定 (URL)
var regionURL = "http://rss.weather.yahoo.co.jp/rss/days/4410.xml"; // 東京都
  // Yahoo! 天気情報の地域指定 URL は
  // https://weather.yahoo.co.jp/weather/rss/
  // のページで各地域のリンクURL末尾 "****.xml" の "****" 部分を調べて書き換えること
  // ※ 各地域のリンクURL https://rss-weather.yahoo.co.jp/rss/days/<****>.xml の
  //  "https://rss-weather" を "http://rss.weather" に書き換えでもよい
// ■ ポップアップメニューの「Yahoo! 天気・災害」をクリックしたときに開く URL
var weatherURL = "https://weather.yahoo.co.jp/weather/13/4410/13101.html"; // 千代田区のピンポイント天気
  // weatherURL = ""; //「Yahoo! 天気・災害」トップページ
  // weatherURL = "https://tenki.jp/"; //「日本気象協会 tenki.jp【公式】」
  // weatherURL = "https://www.jma.go.jp/jp/kishojoho/"; //「気象庁 | 気象情報」
// ---------- ▲ 設定項目 ▲ ----------
Status = " " + DateTimeEx( new Date() );
// RSS を取得
var x = new ActiveXObject( "Microsoft.XMLDOM" );
x.async = false;
x.setProperty( "ServerHTTPRequest", true );
x.load( regionURL );
var items = x.getElementsByTagName( "item" );
var a = [],  dateTime = "";
for ( var i = 0, iLen = items.length; i < iLen; i ++ ) {
  var children = items[i].childNodes;
  for ( var j = 0, cLen = children.length, c; j < cLen; j ++ ) {
    c = children[j];
    if ( c.nodeName == "title" ) {
      a.push( c.text );
    }
    if ( ! dateTime && c.nodeName == "pubDate" ) {
      dateTime = DateTimeEx( c.text );
    }
  }
}
var reg = / - Yahoo!天気・災害$/gm;
var url = weatherURL ? weatherURL : "https://weather.yahoo.co.jp/weather/";
var confirmStr = "気象情報をブラウザで開きますか? ";
// アウトプットバーで表示
if ( outputEnable ) {
  OutputBar.Writeln( dateTime + " 更新 \n"
                  + "- Yahoo!天気・災害 - \n"
                  + a.join( "\n" ).replace( reg, "" ) + "\n" );
  OutputBar.Visible = true;
}
// ダイアログで表示
if ( alertEnable ) {
  a.splice( a.length-3, 0, "" );
  var messageStr = " - Yahoo!天気・災害 - \n " + dateTime + " 更新 \n\n"
                + a.join( "\n" ).replace( /(\d+)(?=日)/g, PadSpc )
                                .replace( /【 ([^ ]{2}) 】/g, "【  $1  】" )
                                .replace( /】\s*/g, "】  " )
                                .replace( reg, " " ).replace( / (\S+)$/gm, "\t$1" );
  if ( ! confirmEnable ) {
    Alert( messageStr );
  }
  else if ( Confirm( messageStr + "\n\n" + confirmStr ) ) {
    new ActiveXObject( "WScript.Shell" ).Run( url );
   }
   }
}
}
</source>
 
// ポップアップメニューで表示
if ( ! outputEnable && ! alertEnable ) {
  var menuPos = 1; // ■ 1 ならマウス位置 / 0 ならキャレット位置にポップアップ
  var menu = CreatePopupMenu();
  a.splice( 1, 0, "" );
  a.splice( 9, 0, "" );
  a.unshift( " ― Yahoo! 天気・災害 ― ", " " + dateTime + " 更新& ", "" );
  for ( var i = 0, len = a.length; i < len; i++ ) {
    menu.Add( a[i].replace( reg, "" ).replace( /(\d+)(?=日)/, PadSpc )
                  .replace( /【 ([^ ]{2}) 】/, "【  $1  】" ).replace( /】\s*/g, "】  " )
                  .replace( reg, " " ).replace( / - (\S+)$/, "\t$1" )
              // .replace( /】\s*/, "】  " ).replace( / - /, "\t" )
            , ( i == 0 ) ? 1 : 0
            , a[i] ? 0 : meMenuSeparator );
  }
  if ( menu.Track( menuPos ) == 1 && ( ! confirmEnable || Confirm( confirmStr ) ) ) {
    new ActiveXObject( "WScript.Shell" ).Run( url );
  }
}
 
Status = " " + DateTimeEx( new Date() );
 
 
/**
* 関数 DateTimeEx( date )
* 引数の日時を日本時間  "YYYY年M月D日 h時mm分"  の文字列で返す(秒なし)
*/
function DateTimeEx( dt ) {
  var dd = new Date( Date.parse( dt ) );
  var m = dd.getMinutes(),  mm = m < 10 ? "0" + m : m;
  return dd.getFullYear() + "年" + ( dd.getMonth() + 1 ) + "月" + dd.getDate() + "日 "
      + dd.getHours() + "時" + mm + "分";
}
 
/**
* 関数 PadSpc( str )
* 文字列中の半角1ケタの数字を0埋めして2ケタで返す
* 小数点(半角ドット)以下は0埋めしない
*/
function PadSpc( str ) {
  return String( str ).replace( /[0-9]+/g , function( $0 ) {
    return $0.length < 2 ? "\u2002" + $0 : $0;
  } );
}
</syntaxhighlight>

2023年10月20日 (金) 14:54時点における最新版

2022年3月末でYahoo!天気 RSSの提供が終了したため、Yahoo!天気情報マクロは使用することができなくなりました。

概要[編集]

Yahoo! 天気情報の地域指定 URL は、「提供RSS - Yahoo!天気・災害」 のページで各地域のリンクURL末尾 ****.xml の部分を調べて、マクロのコード内の URL 書き換えてください。
(※ 各地域のリンク URL https://rss-weather.yahoo.co.jp/rss/days/<****>.xml の https://rss-weather を http://rss.weather に書き換えでもよい)

Kuro 版[編集]

Yahooの天気情報を取得し、カーソル位置に挿入します。 使用前にurlの部分を任意の地域の情報に書き換えてください。

// -----------------------------------------------------------------------------
// Yahoo!天気情報
//
// Copyright (c) Kuro. All Rights Reserved.
// www:    https://www.haijin-boys.com/
// -----------------------------------------------------------------------------

// Yahoo!天気情報
// http://weather.yahoo.co.jp/weather/public/rss.html

var url = "http://rss.weather.yahoo.co.jp/rss/days/4410.xml";

var x = new ActiveXObject("Microsoft.XMLDOM");
x.async = false;
x.setProperty("ServerHTTPRequest", true);
x.load(url);
var items = x.getElementsByTagName("item");
for (var i = 0; i < items.length; i++) {
  var children = items[i].childNodes;
  for (var j = 0; j < children.length; j++) {
    if (children[j].nodeName == "title") {
      document.selection.Text = children[j].text + "\n";
    }
  }
}

Sukemaru 版[編集]

・気象情報がドキュメント内に書きこまれても困りますよね?
・アウトプットバーが開くとジャマじゃないですか?
・メッセージボックスだと警告サウンドがウルサイかもしれません…
→ ポップアップメニューだったら「イイ感じ」じゃん!


ポップアップメニュー/ダイアログ表示

Kuro 版をベースにして ポップアップメニューアウトプットバーメッセージボックス のいずれで表示するかを選択できるようにしました。

ポップアップメニュー[編集]

設定項目 outputEnablealertEnable両方が false ならポップアップメニューで表示します。

  • 「― Yahoo! 天気・災害 ―」の行をクリックすると、気象情報のページをブラウザで開きます。
  • 「― Yahoo! 天気・災害 ―」以外の場所をクリックした場合は、ポップアップを閉じます。
  • ポップアップメニューは Space キーでキャンセルできるようにしてあります。

アウトプット[編集]

設定項目 outputEnabletrue ならアウトプットバーに表示します。

メッセージボックス[編集]

設定項目 alertEnabletrue ならメッセージボックスで表示します。

  • 設定項目 confirmEnabletrue のときは確認ダイアログ、false のときは警告ダイアログで表示します。
  • 設定項目 confirmEnabletrue のとき、OK をクリックすると、気象情報のページをブラウザで開きます。

ピンポイント天気の URL は、「Yahoo!天気・災害」のページ内(左上あたり)にある検索ボックスに郵便番号を入力して、開いたページで取得できます。[1]

ソースコード[編集]

ダウンロード >> 「ファイル:Yahoo! 天気情報.zip」(アイコン入り)

最終更新: 2020/05/11(第2版)

#title = "Yahoo! 天気情報..."
#tooltip="Yahoo! 天気・災害"
// #icon="weather.ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",335

/**
 * ---------------------------------------------------------
 * Yahoo!天気情報
 * Original Copyright (c) Kuro. All Rights Reserved.
 * www:    http://www.haijin-boys.com/
 * ---------------------------------------------------------
 * Modified by sukemaru, 2020/01/02 - 2020/05/11
 * https://www.haijin-boys.com/wiki/Yahoo!天気情報#sukemaru_版
 * 2020/05/11: ダイアログ表示の変更 (警告 ⇒ 確認)
 *             現在日時のステータス表示を追加
 * ---------------------------------------------------------
 * 
 * 設定 outputEnable と alertEnable の両方が false ならポップアップメニューで表示。
 * ポップアップメニューの「― Yahoo! 天気・災害 ―」の行をクリックすると
 * 気象情報をブラウザで開きます。
 * (※ confirmEnable = true  なら確認ダイアログを出してからブラウザで開く)
 * 「― Yahoo! 天気・災害 ―」以外の場所をクリックした場合は、ポップアップを閉じます。
 */

// ---------- ▼ 設定項目 ▼ ----------

// ■ アウトプットバーに表示
var outputEnable = false;

// ■ ダイアログに表示
var alertEnable  = false;

// ■ ブラウザで開くまえに確認ダイアログを表示
var confirmEnable = true;

// ■ 地域を指定 (URL)
var regionURL = "http://rss.weather.yahoo.co.jp/rss/days/4410.xml";	// 東京都

  // Yahoo! 天気情報の地域指定 URL は
  // https://weather.yahoo.co.jp/weather/rss/
  // のページで各地域のリンクURL末尾 "****.xml" の "****" 部分を調べて書き換えること
  // ※ 各地域のリンクURL https://rss-weather.yahoo.co.jp/rss/days/<****>.xml の
  //   "https://rss-weather" を "http://rss.weather" に書き換えでもよい

// ■ ポップアップメニューの「Yahoo! 天気・災害」をクリックしたときに開く URL
var weatherURL = "https://weather.yahoo.co.jp/weather/13/4410/13101.html";	// 千代田区のピンポイント天気

  // weatherURL = "";	//「Yahoo! 天気・災害」トップページ
  // weatherURL = "https://tenki.jp/";	//「日本気象協会 tenki.jp【公式】」
  // weatherURL = "https://www.jma.go.jp/jp/kishojoho/";	//「気象庁 | 気象情報」

// ---------- ▲ 設定項目 ▲ ----------

Status = " " + DateTimeEx( new Date() );

// RSS を取得
var x = new ActiveXObject( "Microsoft.XMLDOM" );
x.async = false;
x.setProperty( "ServerHTTPRequest", true );
x.load( regionURL );
var items = x.getElementsByTagName( "item" );
var a = [],  dateTime = "";
for ( var i = 0, iLen = items.length; i < iLen; i ++ ) {
  var children = items[i].childNodes;
  for ( var j = 0, cLen = children.length, c; j < cLen; j ++ ) {
    c = children[j];
    if ( c.nodeName == "title" ) {
      a.push( c.text );
    }
    if ( ! dateTime && c.nodeName == "pubDate" ) {
      dateTime = DateTimeEx( c.text );
    }
  }
}
var reg = / - Yahoo!天気・災害$/gm;
var url = weatherURL ? weatherURL : "https://weather.yahoo.co.jp/weather/";
var confirmStr = "気象情報をブラウザで開きますか? ";

// アウトプットバーで表示
if ( outputEnable ) {
  OutputBar.Writeln( dateTime + " 更新 \n"
                   + "- Yahoo!天気・災害 - \n"
                   + a.join( "\n" ).replace( reg, "" ) + "\n" );
  OutputBar.Visible = true;
}

// ダイアログで表示
if ( alertEnable ) {
  a.splice( a.length-3, 0, "" );
  var messageStr = " - Yahoo!天気・災害 - \n " + dateTime + " 更新 \n\n"
                 + a.join( "\n" ).replace( /(\d+)(?=日)/g, PadSpc )
                                 .replace( /【 ([^ ]{2}) 】/g, "【  $1  】" )
                                 .replace( /】\s*/g, "】  " )
                                 .replace( reg, " " ).replace( / (\S+)$/gm, "\t$1" );
  if ( ! confirmEnable ) {
    Alert( messageStr );
  } 
  else if ( Confirm( messageStr + "\n\n" + confirmStr ) ) {
    new ActiveXObject( "WScript.Shell" ).Run( url );
  }
}

// ポップアップメニューで表示
if ( ! outputEnable && ! alertEnable ) {
  var menuPos = 1;	// ■ 1 ならマウス位置 / 0 ならキャレット位置にポップアップ
  var menu = CreatePopupMenu();
  a.splice( 1, 0, "" );
  a.splice( 9, 0, "" );
  a.unshift( " ― Yahoo! 天気・災害 ― ", " " + dateTime + " 更新& ", "" );
  for ( var i = 0, len = a.length; i < len; i++ ) {
    menu.Add( a[i].replace( reg, "" ).replace( /(\d+)(?=日)/, PadSpc )
                  .replace( /【 ([^ ]{2}) 】/, "【  $1  】" ).replace( /】\s*/g, "】  " )
                  .replace( reg, " " ).replace( / - (\S+)$/, "\t$1" )
               // .replace( /】\s*/, "】  " ).replace( / - /, "\t" )
            , ( i == 0 ) ? 1 : 0
            , a[i] ? 0 : meMenuSeparator );
  }
  if ( menu.Track( menuPos ) == 1 && ( ! confirmEnable || Confirm( confirmStr ) ) ) {
    new ActiveXObject( "WScript.Shell" ).Run( url );
  }
}

Status = " " + DateTimeEx( new Date() );


/**
 * 関数 DateTimeEx( date )
 * 引数の日時を日本時間  "YYYY年M月D日 h時mm分"  の文字列で返す(秒なし)
 */
function DateTimeEx( dt ) {
  var dd = new Date( Date.parse( dt ) );
  var m = dd.getMinutes(),  mm = m < 10 ? "0" + m : m;
  return dd.getFullYear() + "年" + ( dd.getMonth() + 1 ) + "月" + dd.getDate() + "日 "
       + dd.getHours() + "時" + mm + "分";
}

/**
 * 関数 PadSpc( str )
 * 文字列中の半角1ケタの数字を0埋めして2ケタで返す
 * 小数点(半角ドット)以下は0埋めしない
 */
function PadSpc( str ) {
  return String( str ).replace( /[0-9]+/g , function( $0 ) {
    return $0.length < 2 ? "\u2002" + $0 : $0;
  } );
}
スポンサーリンク