日経平均の自動取得

NK225チャート

毎日、日経平均の終値をスプレッドシートに書き込むのは面倒なので、自動化したいと思います

Googlespreadsheetには、現在株価を表示する関数があります

GOOGLEFINANCE - Google ドキュメント エディタ ヘルプ
Google Finance から現在や過去の証券情報を取得します。 使用例 GOOGLEFINANCE("NASDAQ:GOOG", "price", DATE(2014,1,1), DATE(2014,12,31), "DAILY") GOOGLEFINANCE("NASDAQ:GOOG","price",TODA...

日経平均株価のコードは、INDEXNIKKEI:NI225

関数は=GoogleFinance(“INDEXNIKKEI:NI225″,”price”)となります

この情報を使って、chatGPTに以下指示を出します

スプレッドシートに以下の動作をする.gsスクリプトの作成に協力してください 最終行の次の行A列に当日の日付を入力、同行B列に先ほどの日経平均株価を入力する.gsスクリプトを作成してください

返ってきたスクリプトの一部がこれ

function updateStockData() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 現在の最終行を取得し、次の行を計算
  var lastRow = sheet.getLastRow();
  var newRow = lastRow + 1;
  
  // 当日の日付を取得
  var currentDate = new Date();
  
  // 日経平均株価を取得
  var nikkeiPrice = Number(=GoogleFinance("INDEXNIKKEI:NI225","price"));
  

しかしエラーが…

var nikkeiPrice = Number(=GoogleFinance(“INDEXNIKKEI:NI225″,”price”)); エラー表示がありましたが、原因はわかりますか?

chatGPTその返事が

申し訳ありませんが、GoogleFinance 関数をスクリプト内で直接使用することはできません。そのため、スクリプト内で日経平均株価を取得するためには、別の方法を使用する必要があります。

以下に、Google Apps Script内で外部のウェブサイトから株価情報をスクレイピングして取得する方法の一例を示します。ただし、ウェブサイトの構造が変わる可能性があるため、この方法も将来的に動作しなくなる可能性があります。

外部のウェブサイトから株価情報をスクレイピングして取得する方法では、注意が必要です

日経の指数公式サイトの利用規約等見て、スクレイピングOKかどうか記載がないため使えません

見つかりません - Not Found

Yahoo!ファイナンスはダメそうです

色々探してみたところ、以下の記事に

GASで日本株式の株価取得する方法を解説!個別株と上場投資信託の基準価格も | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門
Google Apps Script(GAS)を使って日本の株式市場における株価を取得する方法を紹介します。 GASを使えば東証など上場している個別株の株価取得が簡単に可能です。...

financeのディレクトリについて検索して確認すると、「Allow」となっており、クロールを許可していることが分かりました。

そのため、GoogleファイナンスはGoogle Apps Script(GAS)などでスクレイピング可能であることが確認できました。

とあったので、上記記事を参考にしてコードを書いてみました

function updateStockData() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 最終行を取得
  var lastRow = sheet.getLastRow();

  // 関数を使って当日の日経平均株価を取得
  var NI225Price = getNI225Price();

  // 当日の日付を取得
  var currentDate = new Date();

  // 次の行にデータを記入
  var newRow = lastRow + 1;
  sheet.getRange(newRow, 1).setValue(currentDate);
  sheet.getRange(newRow, 2).setValue(NI225Price);

}

function getNI225Price() {
  // 銘柄コードを変数で定義する(NI225は日経平均のコード)
  var code = "NI225";
  // GoogleファイナンスURLと銘柄コードを組み合わせ、スクレイピング先URLを定義
  var url = "https://www.google.com/finance/quote/" + code + ":INDEXNIKKEI";
  // スクレイピング先URLに対し、フェッチしてHTMLソースを取得
  var html = UrlFetchApp.fetch(url).getContentText();
  // HTMLソースから株価部分を抽出し、変数に格納
  var NI225Price = Parser.data(html)
    .from('<div class="YMlKec fxKbKc">')
    .to('</div>')
    .build();
  // 取得した株価を数値に変換して返す
  return parseFloat(NI225Price.replace(/,/g, ''));
}

これで、日付と日経平均株価を自動入力できるようになりました

コメント

タイトルとURLをコピーしました