ある程度の数のリストをごにょごにょするときには、Googleスプレッドシートはとても便利です。正規表現が使えたり、AppsScriptが使えたりと、EXCELよりも軽快に処理が行えます。
こんにちは、カグア!です。EXCELほど大量にはデータを扱えませんけれど、Googleスプレッドシートはほんと便利ですよね。
ちょっとURLを大量に処理することがあったので、ソースを共有しますー。
追記:13時43分 UrlFetchApp.fetchで文字化けする問題について追記しました。
何をするスクリプトなの?
とりあえず、URL一覧があって、それを1個1個どんなWebページなのかって知りたいときありますよね。
これを・・・、
こうしてくれるAppsスクリプトです。
タイトルアグリゲーター
ほぼこちらのソースをお借りしています。感謝です。ありがとうございます。
>>Google Apps Scriptでスクレイピングする方法 – Qiita
あとは、タイトルの文字を置換するとか、クレンジングするとかいろいろとリプレースすると良いかと思います。ただ、エラー対応や例外処理とかぜんぜんしてません。ごめんなさい。
function myFunction() { var KKsp = SpreadKKactveetApp.getActiveSpreadKKactveet(); var KKactv = KKsp.getActiveSheet(); var KKcell = KKactv.getActiveCell(); var y = 0; var KKval = KKcell.offset(0, -1).getValue(); while(KKcell.offset( y , -1 ).getValue() != ""){ var response = UrlFetchApp.fetch(KKval); var KKReg = /<title>([sS]*?)</title>/i; var match = KKReg.exec(response.getContentText()); var title = match[1]; title = title.replace(/(^s+)|(s+$)/g, ""); KKcell.offset( y , 0 ).setValue(title); y++; KKval = KKcell.offset(y, -1).getValue(); } }
Appsスクリプトの解説
AppsScriptは、基本的にはJavaScriptと似たような構造です。オブジェクトを生成して、それらにどんどんメソッドやプロパティ操作していけばOKです。
Google Apps Script は、お約束の構文と、offset()の使い方を覚えると、すぐに書けるようになりますよ。ほんと便利。
.offset( y , x )
カレントセルの上下yxに対して処理ができる。xyではないので注意。
.getValue()と.setValue()
値をセットしたり取得したりします。
お約束
var app = SpreadKKactveetApp.getActiveSpreadKKactveet();
var sheet = app.getActiveSheet();
var cell = sheet.getActiveCell();
上から、アクティブなファイルからアクティブなシートを生成し、アクティブなセルを読み込む、という流れ。
UrlFetchApp.fetch();
URLを指定すればその先のデータを持ってこれます。実行時には一回認証する必要があります。
追記:Amazonのようにunicodeじゃないとき
UrlFetchApp.fetchは便利なのですが、たまに文字化けすることがあります。黒いダイヤに白抜きの???とかになるケース。アマゾンで遭遇しました。
charsetをUTF-8にしても、Shift-JISにしてもダメでした。で、調べますと以下のページが。どうやらそもそもUTF-8などのunicode(ユニコード)で出力してくれてなかったみたい。
>>レビューコンテスト | ベジタリアンのお買いもの – 楽天ブログ
結論としては、UrlFetchApp.fetchするときに、unicode変換するスクリプトを別途書かないとイケナイっぽいです。Google Apps Script ではunicode変換のメソッドや関数がないため、PHPなど何かしら自作する必要がありそうです。
Google Apps Scriptビギナーズガイド: Googleをプログラミングせよ! PRIMERシリーズ (libroブックス) 電子書籍: 掌田津耶乃: Kindleストア
・ ・ ・ ・ ・
>>安っ!アマゾンで半額以下になっている食品タイムセール
セール特設ページを見る
↓↓↓無料のニュースレターを配信中です