投資のポートフォリオ管理ツールの自動化チャレンジ−その2

2021年2月24日

前回、三菱UFJ国際投資顧問のAPIを使って投資信託情報を取得する方法を確認しました。

本日は、Googleスプレッドシートを使ってデータの取得を自動化する方法について着手します。前回試した投信情報のAPIから値を拾って、セルにセットする方法を確認していきます。今回は調べる過程までご紹介していると、逆にわかりにくくなりそうでしたので、調べたこと&試した結果のみをご案内していきたいと思います。

マクロツールを起動する(スクリプトエディタ)

Googleスプレッドシートではマクロを書くためのツールとしてスクリプトエディターなるものが準備されています。ツールメニューからスクリプトエディタを呼び出します。

マクロのプログラムを書く画面が出てきます。Apps Scriptと書いてあります通り、Google Apps Scriptというプログラム言語でした。巷ではGASなどと略されているようですので、調べ物をするときのキーワードはGASでOKでした。

三菱UFJ国際投信の投信APIからデータを取得する方法

GASから外部のWebサービスにアクセスする場合はURLFetchサービスというコマンドを使います。前回ブラウザで取得した情報と同じ情報を取得することができました。初回のみ外部へアクセスしても良いか?という確認が入りますので、許可する必要があります。

念のため現時点の基準価額を確認しましたが、期待通りの結果が得られていそうでした。ファンドコード 250888はeMAXIS TOPIXで、実行時は26,294円でした。

APIから基準価額だけを抜き出す方法

APIから帰ってきた情報はCSVのようですが、JSON形式というらしいです。欲しい情報は基準価額だけですからstandard_priceを抜き出す方法を調べました。そうするとGASの変数でこのテキストをstandard_priceという名前でアクセスすることが可能のようです。

取得した基準価額をセルに入力する

昔エクセルのマクロでセルの操作に苦労した記憶が蘇ってきますが、もう一踏ん張りですので、気力を振り絞って調べてみました。今回はA1のところに取得した値がセットできればOKとします。

このプログラムを実行するときに、スプレッドシートへのアクセス権を要求してきます。シートとかセルの書き方のところがいつもながら呪文のように見えてくるのですが、見よう見まねでgetRange(1,1)のところの指定を変えるとセルを移動できるということくらいは理解できました。実行した結果、以下のようにシートへ値が反映されます。また操作するシートを名前で指定するところがありますので、シート名を変更した場合はここを変えないといけません。

本日のプログラム

function myFunction() {
  //APIから情報を取得
  var response = UrlFetchApp.fetch('http://emaxis.muam.jp/web/api/v1.php?col=asset_default&fd=250888', {method: 'get',headers: {'Accept': 'application/json'}});
  Logger.log(response.getContentText());

  //基準価額を抜き出す
  var standardPrice = JSON.parse(response.getContentText()).standard_price;
  Logger.log(standardPrice);

  //基準価額をセルに書き出す
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  sheet.getRange(1,1).setValue(standardPrice);
}

新しいスプレッドシートを作成して、スクリプトエディターを開き、コピペしたら同じように動かしていただくことができます。赤字の部分が変更可能なところで、ファンドコードはこちらのPDFの最後の方に一覧があります。適宜変えてみてください。

シート1は新しいスプレッドシートのデフォルトシート名称ですので、スプレッドシートのシート名を変更したり、追加したシートで使いたい場合には変更します。

セルを指定する(1,1)の部分ですが、(行,列)になります。もう少しわかりやすく書くと、(縦,横)です。(2,1)ならA2、(1,2)ならB1という指定になります。

まとめ

本日は、APIを使って取ってきたデータを適当な場所に書き出す方法を確認しました。次は、実際に私のポートフォリオの情報を自動的に取ってくるためプログラムを考えてみます。最終的には汎用性の高い形で作ったツールを丸ごと公開してどなたでも使えるようにしたいと思います。ご要望等はコメント欄かこちらからお願いします。