LoginSignup
3
3

More than 3 years have passed since last update.

[GAS] GoogleSpreadSheet のGASで日本企業上位1000社の時価総額を取得

Last updated at Posted at 2019-09-14

Google SpreadSheet はとても便利にデータをまとめることができます
今回、はじめてGASを利用してデータの取得をしたので、ソースコードとともに使い方の解説を載せておきます

スプレッドシートの準備

GASの利用にあたり、スプレッドシートを用意します
スクリーンショット 2019-09-14 22.40.37.png

ツールを押し、スクリプトエディタを起動します

スクリーンショット 2019-09-14 22.41.45.png

起動させたら、このような画面になっているはずです

スクリーンショット 2019-09-14 22.42.31.png

ここからGASを利用してデータの取得をしていきます

GASの利用

今回用意したスプレッドシートとGASのプログラムを先に載せておきます
簡単な作業の流れの説明の後に、ソースコードの説明をしていきます

スクリーンショット 2019-09-14 23.09.15.png

スクリーンショット 2019-09-14 23.42.40.png

スプレッドシートの中身

順位、業界、コード、市場、名称、時価総額

の順に並んでいます

時価総額以外のところはすでに用意していました

今回やりたいこと

毎日時価総額を自動で更新してくれるスプレッドシートの作成

早速コードの解説と作成の仕方へ

基本的な解説はコメントの中に書いているので、GASでスクレイピングをする際に使用したライブラリの使い方を説明していきます

今回使用したのはスクレイピングを簡単にするライブラリのParserというものです
※詳しい説明はこちらをご覧ください
https://www.kotanin0.work/entry/2019/01/06/200000

まずは リソース > ライブラリ の順に開きます

スクリーンショット 2019-09-14 23.17.13.png

開いたら、下に書いてあるキーを入力します

M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV

スクリーンショット 2019-09-14 23.22.31.png

キーの入力をし、ライブラリを追加したら、バージョンを選んで完了です

前準備が完了したので、コードの解説に入ります

基本的にコード内にコメントとして解説を書いていきます

スクレイピングをするにあたり重要なのは、どこの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;
}

完成したシートがこちらになります

スクリーンショット 2019-09-14 23.47.16.png

これで毎日更新される!!!

(...手作業ならね)

これを自動化したい!!!
どうにか簡単にいかないものか!!

そんな悩める子羊たちもGASは救ってくれます

自動化の流れ

GASエディタに戻り、
左上のタイマーボタンを押します
スクリーンショット 2019-09-14 23.52.22.png

すると、このような画面が出てくるはずです
スクリーンショット 2019-09-14 23.53.35.png

トリガーを作成しましょう!!

トリガーの作成を押して出てきた画面で次のように選択します
スクリーンショット 2019-09-14 23.55.01.png

これでようやく、
「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社分一気にいっても余裕!!という案があればぜひ教えていただきたいです

追記

間違って実行してしまった場合、その処理が終わるまで次の処理には入れないので手動で処理の中断をする術を記しておきます

上記のトリガー設定同様タイマーボタンを押します
スクリーンショット 2019-09-14 23.53.35.png

左の実行数というところをクリックします
スクリーンショット 2019-09-19 16.18.29.png

出てきた画面の実行中という列の右端にある「...」が縦に並んだ場所をクリックするとこの画面になります

スクリーンショット 2019-09-19 16.18.58.png

終了するかの確認画面になるので、そこで「終了」を押します

スクリーンショット 2019-09-19 16.19.08.png

ステータスが「キャンセルされました」に変わっていればOKです!

再度実行したい関数を実行しましょう!

楽しいスクレイピングライフを!

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3