Google SpreadSheet はとても便利にデータをまとめることができます
今回、はじめてGASを利用してデータの取得をしたので、ソースコードとともに使い方の解説を載せておきます
#スプレッドシートの準備
ツールを押し、スクリプトエディタを起動します
起動させたら、このような画面になっているはずです
ここからGASを利用してデータの取得をしていきます
#GASの利用
今回用意したスプレッドシートとGASのプログラムを先に載せておきます
簡単な作業の流れの説明の後に、ソースコードの説明をしていきます
##スプレッドシートの中身
順位、業界、コード、市場、名称、時価総額
の順に並んでいます
時価総額以外のところはすでに用意していました
##今回やりたいこと
毎日時価総額を自動で更新してくれるスプレッドシートの作成
##早速コードの解説と作成の仕方へ
####基本的な解説はコメントの中に書いているので、GASでスクレイピングをする際に使用したライブラリの使い方を説明していきます
今回使用したのはスクレイピングを簡単にするライブラリのParserというものです
※詳しい説明はこちらをご覧ください
https://www.kotanin0.work/entry/2019/01/06/200000
まずは リソース > ライブラリ の順に開きます
開いたら、下に書いてあるキーを入力します
M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV
キーの入力をし、ライブラリを追加したら、バージョンを選んで完了です
####前準備が完了したので、コードの解説に入ります
基本的にコード内にコメントとして解説を書いていきます
スクレイピングをするにあたり重要なのは、どこのwebサイトから情報を引っ張ってくるか、です
今回はみんかぶさんから情報を引っ張ってきています
理由として、Yahoo!ファイナンスはスクレイピングを禁止しているため、こちらのサイトを選びました
スクレイピングをやりすぎたら罪に問われることもあるので注意!!
では、コードと一緒に解説をしていきます
//今回は二つの関数を使用しています
//まずはJikaを実行します
function Jika() {
// 取得した株価を出力するBookを定義
const book = SpreadsheetApp.getActiveSpreadsheet()
// 出力先のBookのシートを定義
const sheet = book.getSheetByName("シート1");
//シート名を間違えるとエラーが出るので注意
//証券コードの読み込み
var bango = sheet.getRange('c2:c1001').getValues();
//今回はc列に証券コードを集めているので、証券コードが書かれている1行目から範囲指定しています
var array = [];
//1000社分のループを回す
for(var i = 0; i < 1000; i++) {
//下のurlと繋げるため、文字列にする
var num = bango[i].toString();
//stokPrice関数を呼び出す
var marketValue = [stockPrice(num)];
//二次元配列として格納していく
array.push(marketValue);
}
//最後にf列に時価総額を反映させる
sheet.getRange('f2:f1001').setValues(array);
}
function stockPrice(code) {
//証券コードごとにurlを作る
var url = 'https://minkabu.jp/stock/' + code;
//ページ全てを取得する
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
//fromとtoにタグを書き、その間にあるデータを取得する
//今回はテーブル内のデータだったのでfromとtoの中身に日本語が入っていますが、これで大丈夫です
var data = Parser.data(html).from('時価総額</th><td class="tar wsnw">').to('百万円</td>').build();
return data;
}
これで毎日更新される!!!
(...手作業ならね)
これを自動化したい!!!
どうにか簡単にいかないものか!!
そんな悩める子羊たちもGASは救ってくれます
###自動化の流れ
GASエディタに戻り、
左上のタイマーボタンを押します
トリガーを作成しましょう!!
これでようやく、
「Jikaを毎日、朝の3~4時に自動で実行して時価総額を引っ張ってくる」
ようになりました!!!!
ぱちぱちぱち
##最後に
こちらのサイトには大変お世話になりました
1日でGASを使えるようになったのもこのサイトのおかげです
ありがとうございます!
https://tonari-it.com/gas-script-editor/
####注意
ソースコードは、1000社分の証券コードを抜いて実行するぞ!!
という形になっていますが、GASさんは6分たつと自動でプログラムを終了してしまいます
僕のコードだと、100社で1分ほどかかります
なので、僕はスクリプトエディタを二つ作り、1~500と501~1000に分けて使っています
(1~500を朝の3~4時に、501~1000を朝の4~5時に実行する設定にしています)
もし、1000社分一気にいっても余裕!!という案があればぜひ教えていただきたいです
##追記
間違って実行してしまった場合、その処理が終わるまで次の処理には入れないので手動で処理の中断をする術を記しておきます
出てきた画面の実行中という列の右端にある「...」が縦に並んだ場所をクリックするとこの画面になります
終了するかの確認画面になるので、そこで「終了」を押します
ステータスが「キャンセルされました」に変わっていればOKです!
再度実行したい関数を実行しましょう!
楽しいスクレイピングライフを!