9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Apps Scriptを実例交えて基礎からざっくり学ぶAdvent Calendar 2017

Day 14

【Google Apps Script】その14 SEO用にタイトルとディスクリプションを収集する

Last updated at Posted at 2017-12-16

この記事はGoogle Apps Scriptを実例交えて基礎からざっくり学ぶ Advent Calendar 2017 14日目の記事です。

本アドベントカレンダーは@rt_pの個人プロジェクトですが、筆者はAteam Brides Inc. Advent Calendar 2017にも参加しています。そちらでも出張版記事を書いているので、覗いていただけると嬉しいです。

はじめに

SEOで重要なタイトルやdescription、URLの一覧を元に自動的に取得したいですよね。
まぁ正直、無料で同じようなツールはあったりするわけですが、今回はGASの勉強も兼ねてスプレッドシート上で作成してみたいと思います。

meta2.png

収集したいURLのスプレッドシートを作成する

1行目は説明行としてURL タイトル description h1と入力。

1列目に、調べたいURLを入力していきましょう。
サンプルは動画サイトのURLですが、特に深い意味はないです。
最初はFacebookやYahoo、Google、Amazon等をサンプルに使う予定でしたが、どこも地味に取得しづらい形に加工されておりうまく取得ができませんでした…

meta1.png

スクリプトエディタを開き、以下コードに置き換えて実行します。
スクリプトエディタの開き方や承認が必要ですメッセージが出た際の対処法が分からない場合は
アドベントカレンダー1日目のHello, world!記事をご参照ください。

get_meta.gs
function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();

  try {
    for (var i = 1; i < values.length; i++) { // 1行目は説明行なので2行目であるkey1から開始
      checkTitleDescription(sheet, values[i], i);
    }
  } catch (e) {
    Browser.msgBox(e);
  }
}

function checkTitleDescription(sheet, value, i) {
  var response = UrlFetchApp.fetch(value[0]); // 一番左のセルにURLの値が入っている
  var text = response.getContentText();
  var titleMatch  = text.match(/<title>([\s\S]*)<\/title>/i);
  var title       = getFirstValue(titleMatch);
  var descMatch   = text.match(/meta\s+name=['"]description['"]\s+content=['"](.+)['"]/i);
  var description = getFirstValue(descMatch);
  var h1Match     = text.match(/<h1.+?>([\s\S]*)<\/h1>/i);
  var h1          = getFirstValue(h1Match);
  sheet.getRange(i + 1, 2, 1, 3).setValues([[title, description, h1]]);
}

// マッチする最初の要素を返す
function getFirstValue(values) {
  return values && values.length > 1 ? values[1] : '';
}

実行すると以下結果になるはずです。

meta2.png

特に今までと違う目新しいことはしていないはずです。
正規表現でマッチする文字列を抽出し、setValuesしているだけです。

もし対象URLが大量の場合は処理に時間がかかるので、1行ずつsetValuesする方式ではなく配列を返し、最後に1回でsetValuesするのがスマートな気がしますね。

おわりに

応用すれば競合のTDを監視して変わった時に通知したり、特定の文字列がある/ないでアラートを出す等の仕組みが考えられそうですね。

明日

【Google Apps Script】その15 Execution APIを使い、外部からAPIとして叩く
となります。
今回のアドベントカレンダーで最も肝になる機能を、遂に実装します!!お楽しみに。

前の記事
【Google Apps Script】その13 スプレッドシート上のグラフを画像として保存やメール送信する
次の記事
【Google Apps Script】その15 Execution APIを使い、外部からAPIとして叩く

9
8
0

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
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?