五十嵐貴之/柴田織江/五十嵐大貴 秀和システム 2023年06月17日
点数
83点
感想
Google Apps Scriptの作成方法から、HTMLの取得・解析、POSTデータの送信などが解説されていた。
本書の内容だけで実用的なスクレイピングを行うことはできないと思うが、入門書としては十分な内容だと思う。
Google Apps Scriptとは
- JavaScriptをベースとした言語。
- 主にGoogleのアプリケーションを操作するために使われる。
- DOM操作などのAPIはない。
- Googleのクラウド上で動作する。
- 開発はブラウザ上で行う。
- 実行時間や実行回数に制限がある。
https://qiita.com/kakakaori830/items/84a7dcba2d6119ed320a - スクリプトまたは関数をライブラリとして作成すると再利用可能となる。
- OAuth認証, Slack, スクレイピングなどはライブラリとして公開されている。
- Googleのアプリケーションとの連携はサービスとして用意されている。
Google Apps Scriptのプロジェクト
・プロジェクトはコンテナバインドプロジェクトとスタンドアロンプロジェクトの2種類がある。
コンテナバインドプロジェクト
・スプレッドシートやドキュメントに紐づく。
スタンドアロンプロジェクト
- 独立したアプリ。
- URLでアクセス。
Google Apps Scriptのトリガー
- トリガーにはシンプルトリガーとインストーラブルトリガーの2種類がある。
シンプルトリガー
- 以下の6種類
- onGet
- onPost
- onOpen,
- onEdit
- onSelectionChange
- onInstall
インストーラブルトリガー
- 特定の時間に起動、など。
Google Apps Scriptの作成方法
- GoogleDrive > 新規 > その他 > Google Apps Script
- 以下を入力
function myFunction() {
console.log('hello')
} - プロジェクトを保存
- 実行
実行ログにログが出力される。 - デプロイ > 新しいデプロイ > 種類の選択 > ウェブアプリ
公開する場合は「アクセスできるユーザー」を「全員にする」。
Google Apps ScriptでHTMLを取得・解析
「ライブラリの追加」から以下のIDを入力し、Parserライブラリを追加する。
1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw
コード
const getHtml = () => {
const content = UrlFetchApp.fetch('https://xxx.xx').getContentText('utf-8')
const title = Parser.data(content).from('<title>').to('</title>').build()
console.log(title)
const urls = Parser.data(content).from('<a href="https://').to('"').iterate()
console.log(urls)
const content2 = UrlFetchApp.fetch(`https://${urls[0]}`).getContentText('utf-8')
const title2 = Parser.data(content2).from('<title>').to('</title>').build()
console.log(title2)
}
- build()は最初にヒットしたもの、iterate()は配列、を返す
- from, toは完全一致なので、上記の例ではhrefの前にidやclassがあるとヒットしない
POSTデータの送信
- fetchメソッドの第2引数でmethodやpayloadを指定することができる。
const login = () => {
const content = UrlFetchApp.fetch('https://xxx.xx/login', {
method: 'POST',
payload: {
login_id: 'hoge',
password: 'hogehoge'
},
followRedirects: true
}).getContentText('utf-8')
console.log(content)
}
Google Apps Scriptでスプレッドシートにデータを出力する
const putSpreadSheet= () => {
const sheet = SpreadsheetApp.openById('xxxxxxxxxxxxxxx').getSheetByName('Google App Script')
sheet.getRange(1, 1).setValue('これはGASからsetValueで入力されました。')
sheet.getRange(1, 2, 1, 3).setValues([['これはGASからsetValueで入力されました。', 'これはGASからsetValueで入力されました。']])
}
- スプレッドシートのIDはURLの「/d/xxx/edit」のxxxの部分
- 行番号と列番号は1から始まる
- getRangeメソッドは引数指定方法が4種類ある
- getRange(行番号, 列番号)
- getRange(行番号, 列番号, 行数)
- getRange(行番号, 列番号, 行数, 列数)
- getRange(“A1:E10”)
- setValuesメソッドの引数は二次元配列
スプレッドシートにGASを作成する(コンテナバインドプロジェクト)
- スプレッドシート > 拡張機能 > Apps Script、で以下を作成
function muliple100(x) {
return x * 100
} - セルに
=muliple100(2)
を入力