Google Apps Script @福岡

GASで面白Webサービス&コスト削減や!

Google Apps Script 講座初級編「GASでTwitterのフォローフォロワー数をスクレイピングする」

はじめに

後藤銃士です。5回目となります。今回はスクレイピング、つまりインターネット上に存在するサイト情報を収集する、というチャレンジになります。

このスキルをを獲得すると、正直アイディア1つでいろんなことができるんですよね。私がひっそりやっているのが、某掲示板情報から有用な情報を引っこ抜いてまして、そこから動画情報を集めて整理して、Webサイトとして毎日自動で更新していたります。

今ままで、インターネットでこんな情報集めて集約すれば役に立つのにな、といったことを手動ではなく自動でできるようになるのですから、熱意のある人には是非とも覚えて欲しいテクニックです。

っていっても

汎用的になんでもできる、みたいな講座にすると一筋縄ではいかないんですよ。スクレイピングって要素が2つあって、①指定した URL (URI)からデータを取り出すこと、これは GAS 標準にそのやりとりを簡単に行うクラスがあるのでよいのですが、②今取り出したデータから意中のキーワードや数値を取り出すことが難しいんですね。

具体的には「正規表現」という超絶役に立つけど覚えんのハードルたけーという技術を一部使うこととなるんですが、その説明は正直疲れるので、正規表現は使うけど今回は説明抜きで行きたいと思います。

あのあたりは奥が深い沼のような世界なので、好きな人は自分で調べるといいと思います。おそろしく世界が広がるので。

で、ですね、次回のつなぎも考えて今回は「GASでTwitterのフォローフォロワー数をスクレイピングする」機能を実現する講座となります。

この機能が役に立つのは

超絶役立つ。GAS で遊ぶには何事もまずはデータの取得ありきですからね。まだここでは、ログイン後のデータ取得、みたいな手の混んだスクレイピングは出来ないのですが、普通に URL を叩いて表示できるサイトの情報であれば取得できないものはありません(厳密にはあるけど)。今回は Twitter が対象ですけど、それこそ Google でもなんでもいけます。

今回は初級編「GASでTwitterのフォローフォロワー数をスクレイピングする」

対象

  • 基本ができていればよいかもしれません。

学べること

Google Apps Script によるスクレイピングの基礎テクニック

講座スタート

今回はコピペだけで大丈夫です。

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そして今回はでは1行目の3行目の間に

  var twiiterId = 'taichinakaj'
  var url = 'https://twitter.com/' + twiiterId;
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');  
  var title = html.match(/data-count=(\d.*?)\s/g);
  var follows   = title[1].match(/data-count=(\d.*?)\s/)[1];
  var followers = title[2].match(/data-count=(\d.*?)\s/)[1];
  Logger.log(follows + " " + followers);

をコピペして保存し、実行してみましょう。

f:id:jijyoronn:20181222191528p:plain

表示>ログを選択してみて下さい。

f:id:jijyoronn:20181222191554p:plain

左の数値がフォロー数、右の数値がフォロワー数になります。今回のモデルは、最近お気入りのプロ奢ラレヤーさんの twitterId (@より右側の文字列)を使っています。

f:id:jijyoronn:20181222191625p:plain

凄い。簡単に情報取れましたね?

では解説を少しだけ。

  var twiiterId = 'taichinakaj'
  var url = 'https://twitter.com/' + twiiterId;

1行目に twitterId を設定しています。ご自身でアカウントをお持ちでしたら入れてみて下さい。 2行目で、1行目で設定た値を用いて Twitter へアクセスするための URL を作成しています。この場合(https://twitter.com/taichinakaj)となります。ブラウザで叩いて表示されることを確認してみて下さい。

  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');  

UrlFetchApp.fetch(url) が今回のキモの1つです。URL情報を渡すと、そのURLに沿ってサーバへリクエストしてそのレスポンスを受信してくれます。それが reponse に取り込まれ、こんどは、getContentText('UTF-8') これは取得したレスポンスを UTF-8 形式で返してね、というおまじないで、最近はほぼどこでも UTF-8 で書かれていると思うのですけどね。というか UTF-8 って何?という人はおいていきます(ここではあまり関係ないのでスルーするけど勉強するのはよいです)

  var title = html.match(/data-count=(\d.*?)\s/g);
  var follows   = title[1].match(/data-count=(\d.*?)\s/)[1];
  var followers = title[2].match(/data-count=(\d.*?)\s/)[1];

で、ね…。この match 以降の内容がいわゆる「正規表現」と呼ばれる処理で、取得してきたレスポンスからさらにデータを絞るための処理なんですね。 ここは Twitter が返すレスポンスが変更されると影響を受けるのでいつまでもこのままではいかないかもしれませんが、今はこれで動きます。正規表現の勉強も今後の課題ですよね、って実際正規表現だけで専門書がある世界ですから、本気でやるとやけどするのでほどほどで…。

というわけ今回は出力先をログにしておりますけど、今までの勉強を振り返ればわかりますが、スプレッドシートに書き込むと、この処理を繰り返すだけでどんどんフォロー・フォロワー数を保存されることができますし、さらにトリガーを組み合わると、巷では有料 note で販売されているサービスが無料で出来てしまう、というわけなんですね、これが。

とうわけで次はその「GASで自動でTwitterアカウントをスプレッドシートに記録する」を扱うことにします。今までの集大成になります。

それでは、ご覧いただきありがとうございました。