コスパ重視で生きたい人生だった

なるべく楽して生きて行きたい30代サラリーマンのブログ

Google スプレッドシートで株価情報を自動取得・更新する

f:id:dett0826:20170726213209j:plain

どうも。dettです。

みなさん、自分が(あるいは家庭が)所有する株式の管理、リアルタイムにやってますか?
ぼくはぶっちゃけできてませんでした。

いろんな口座なんかに分散していると、いちいちログインして調べるのが面倒。
面倒なので、購入したはいいがしばらく放置、なんてこともしばしば。それによっての機会損失もあったようななかったような。

しかし、それではいかんということで、一覧で管理できるようにGoogleスプレッドシートを活用することにしました。
こいつ、タダながらも結構便利な機能備わってます。

株価を取得する関数が用意されているが・・・日本国内株式には未対応

Googleスプレッドシートには株価を直接表示できる関数”GOOGLEFINANCE”が用意されています。
が、対応しているのは米国株式と各国の株価指数のみ。
日経平均や為替レートは表示できますが、日本の株価は表示できません。
ぼくが欲しいのはこれじゃなかった。

support.google.com

Yahooファイナンスを読み込んで自動で株価を取得する

というわけで、Yahooファイナンスの情報を読み込んで、自動で株価を表示する関数を考えました。
所謂Webスクレイピングっぽい動きをスプレッドシートの関数で実現できます。

使う関数は、”IMPORTXML”
support.google.com

書式は「=IMPORTXML(URL,XPathクエリ)」です。
URLはそのまんま、自分が知りたい株価のURLを入れればOK。
例えば大正義トヨタ自動車様であれば、「https://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203.T
f:id:dett0826:20170728001637j:plain

あとはXPathクエリを正しく指定してやれば、以下の通り最終の株価や高値、安値まで表示できます。
(理屈的には、URL上に表示されている情報は全部表示できます)

f:id:dett0826:20170728001816j:plain


このときに、それぞれのXPathをどう指定するかは以下の通り。

分野

"//div[@class='forAddPortfolio']/dl[@class='stocksInfo clearFix']/dd[@class='category yjSb']"

コード

"//div[@class='forAddPortfolio']/dl[@class='stocksInfo clearFix']/dt"

社名

"//table[@class='stocksTable']/tr/th[@class='symbol']"

日付

substitute(substitute(importxml("https://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203.T","//div[@class='lineFi clearfix'][2]/dl[@class='tseDtl']/dd[@class='ymuiEditLink mar0']/span[@class='date yjSt']"),"(",,),")",,)

※日付は無駄な文字列を”substitute”で削ってます

始値

"//div[@class='lineFi clearfix'][2]/dl[@class='tseDtl']/dd[@class='ymuiEditLink mar0']/strong"

高値

"//div[@class='lineFi clearfix'][3]/dl[@class='tseDtl']/dd[@class='ymuiEditLink mar0']/strong"

安値

"//div[@class='lineFi clearfix'][4]/dl[@class='tseDtl']/dd[@class='ymuiEditLink mar0']/strong"

終値

"//td[@class='stoksPrice']"

出来高

"//div[@class='lineFi clearfix'][5]/dl/dd[@class='ymuiEditLink mar0']/strong"

XPathの指定の仕方

自分も完全に理解できているとはいいがたいけれど、未来の自分へXPathの指定方法をメモとして残しておきます。

作業の前提条件

用するブラウザはChrome(ほかのブラウザでも同じことを調べれますが、やり方は異なってきます)

XPath指定の基本ルール

 ・指定したHTMLタグなんかを上から順番に検索していき、マッチした値を返す。
 ・複数マッチしたものがあれば、全部返す
 ・HTMLタグは複数指定可能
 ・HTMLタグを組み合わせることで情報を一つに絞り込む
 ・複数マッチした場合は、何番目の値かを”[数字]”で指定することで、特定の順番の値を取得可能

XPath指定の考え方

①Chromeで情報を取得したいURLを開く
②知りたい情報をドラッグして選択
③右クリック⇒検証
④知りたい情報のHTMLが表示されればOK。
⑤あとはその前のURLを眺めて、他で使われていなさそうなHTMLタグを探して情報を一意に絞り込む。
 今回のページにおける終値であれば、
  td class=stocksPrice というタグはここでしかでてこなかったので、これだけで終値を取得可能。
 高値であれば、
  ”div class=lineFi clearfix”のうちの2番目⇒その中のdlタグの中のddタグの中のstrongと絞り込み
というイメージ。
説明が難しいし、うまく言語化して説明できないときは自分の理解が浅い時。

のちの自分の参考になりますように。

仕事で使える!Googleスプレッドシート Chromebookビジネス活用術 (仕事で使える!シリーズ(NextPublishing))

仕事で使える!Googleスプレッドシート Chromebookビジネス活用術 (仕事で使える!シリーズ(NextPublishing))