いよいよF1シーズンも近づいてきました…と書くと気が早い感じがしますが、近年のF1はシーズンも長くて、終わったらすぐにテスト、年が明ければすぐに新車発表に向けた動きなどがニュースとして流れ出してきます。
このサイトでも、HSPを使ってスクレイピングで公式ページからレース結果とドライバーズランキングを生成(htmlにて)することをしていたりします。
上記の記事で次回は2019年用のプログラムで…なんて書いていたんですが、ここのところのスプレッドシートいじりで
「これF1サイトでもいけるんじゃね?」
なんて思ってしまった次第。
HSPの準備もしないとなーなんて思っていたんですが、その前に物は試しということで、importxmlと簡単なgasを使って、去年2018シーズンのドライバーズランキングを取得してみようと思います。
対象となるページを確認
自分にとってはおなじみのページ。
URLもちょっぴり違和感がある感じですが、わりと単純でして
https://www.formula1.com/en/results.html/2018/drivers.html
仮に2017年の結果を知りたいなら2018を2017にするだけで行けちゃうわけで(*’ω’*)
どんな感じにするかを考える
折角なら各シートごとで年代別にするみたいな感じが良さげですよね?
となるとシート名を「2018」とかにして、その名前を取得してURLに組み込むなんてのがGASの勉強にもなるかもしれません。
…というのも、スプレッドシートにはExcelとちがって、シート名を取得する関数がないっぽいんです(´Д`)
なので、無いなら作ればいいじゃない! ってことでGASで補うことにします。
さて、URLに組み込むには、文字の結合みたいなことをしなければならないですよね?
これはちゃんと関数がありますw
そして出来上がったURLを利用してIMPORTXMLで情報を取り出す流れ。
まとめると
- GASにてシート名を取得する関数を作る
- URLを生成するために文字の結合をする関数をつかう
- IMPORTXMLで情報を取り出すために、本家サイトを調べる
- IMPORTXMLを記述する
という感じでしょうか?
まず土台を用意し、シート名取得関数を用意する
ファイル名は何でもいいと思います(*’ω’*)
A1のセルに土台になるURLを入れました。
これに年数と/drivers.htmlを結合すればURLは完成するはず。
また、セルには半角数字で西暦を記入してます。
土台はこれでOKかな。
次はシート名の取得(*’ω’*)
メニューの「ツール」から「スクリプトエディタ」を開きます。
関数名をSheetName()としました。
で、考え方としてはアクティブなシートの情報を取得して、その名前を取り出す。
コードにすると
こんな感じでしょうか?
これを値として返してあげればいいのでreturn を頭につけてあげます。
これをスクリプトエディタで書いてあげましょう。
保存して(名前は何でもOKですよ)、実際にシート名を取得してみましょう~
保存したらスプレッドシートに戻って
適当なセルに「=SheetName()」と書いてエンターキー!
→
バッチリ取得できてますね(*’ω’*)
まとめ
ちょっと長くなったので、2回にわけてみます。
次回は取得したシート名を利用してURLを生成、そして実際のページにてXMLの記述を考えて実際にIMPORTXMLにて取得してみます。
そんなに難しくないので、興味がある方は実際にトライしてみてください!
「こんな簡単に動くんだ」
ってのが実感できるとおもいます(*’ω’*)
何かの参考になれば幸いです!
今回のコード
return SpreadsheetApp.getActiveSheet().getName();
}