過去に、
ping_google
を
Google スプレッドシートと、
そっちに
Google スプレッドシートの
も
移行するに
作成した
Sitemap の ping に ついての 個人的な 理解
まず、
Sitemap を
Seacrh Console 等の Web Master Tool に 登録を して、 その 後に 行う。
Google ウェブマスター向け公式ブログ: サイトマップの送信が 簡単に なりました ping を
打つと、 検索エンジンに Sitemap の 存在を 知らせる ことができるが、 実際見に くるかどうかは、 検索エンジン任せ。 なので、
とりあえず 打って おいた ほうが いい。そして、 とりあえず 打って おくと、 Seacrh Console 上は 見に 来てくれているように 思う。 なので、
打つ 設定は しておく。
という
実際動作動かしていた ping の 仕組みに ついて
以下、
スケジューラ、
プログラム
Mezzanine Sitemap.xmlを
のping_all_search_engines.py (Django 1.10 で<wbr>動作する<wbr>)
に
複数の
スケジューラ
cron で
cron定義は、
を
時間帯
昼の<wbr>12時
に
設定時刻に
1日に
一回は pingして おきたい 平日は
夜に 記事は 更新を 行うので、 その 後まず、 昼には 全ての 更新が 終わっているであろう。
という
移行するに いたる 背景
現状の
サーバーリソースを
なるべく 使いたくない。
たいしたリソースは 使わないとは 思いますが、 貧乏VPS上で 稼働させている ため、
可能な限り、 サーバーリソースを 暇にさせて おきたいと いう 気持ちが 芽生えは じめました。
ping や、cache 作成の ために 全ページに アクセスしに いく 処理等、
別に稼働サーバー上でなくても いい ものは、 この 対象に なるかなと 思っています。 サーバーに
ログインして、 スケジュール設定、 プログラム配布等、 実は 敷居が 高い?
個人で運用する 分には、 全然問題ないのですが、 Web Master な 作業だと、
企業においては、 プログラム経験が ない 人が 担当する 場合も 多いかと 思います。
それ系はなるべく 敷居が 低い ほうが いいのかと
Google スプレッドシートだとVBA 触ってた 人が 触れそうなのと、
機能として スクリプトの スケジュール実行機能が あり、
プログラム経験がない人でもいける 可能性が 高まるかと 思って おります。
作成した スプレッドシートに ついての 説明
こちら
参照オンリーですが、
シート構成
config シート
サイトマップの
以下、
Sitemap url ping 送信対象の
Simtmap の URL を フルパスで 記載します。 Ping target ping 送信対象の
URL を 記載します。
ping 先のURL は sitemap 仕様で 決まっていますが、
どうも仕様通りに 実装されているわけではなさそうだったので、
URL補完とかは行って おりません。 フルパスで 記載します。 Mail to
エラーメールの通知先の メールアドレスを 記載します。
おそらくエラーが 起こるのではないかと いう 処理に 対しての エラーハンドリングで エラーが 発生した 場合、
記載したアドレスに エラー内容を 通知します。
以下のようなメールが 送信されます。 タイトル ----------------------- Ping sitemap error report
本文 ----------------------- Message: DNS エラー: https://www.ydhfhgfjhjhg.com/ping?sitemap=https%3A%2F%2Fwww.monotalk.xzy%2Fsitemap.xml File: main Line: 17 Message: DNS エラー: https://www.ydhfhgfjhjhg.com/ping?sitemap=https%3A%2F%2Fwww.monotalk.xzy%2Fsitemap.xml File: main Line: 17 Message: DNS エラー: https://www.ydhfhgfjhjhg.com/ping?sitemap=https%3A%2F%2Fwww.monotalk.xyz%2Fblog%2Ffeeds%2Frss File: main Line: 17
logs シート
スクリプトの
記録し
スクリプトに ついて
以下、
main.gs
pingSitemap
がメイン処理に なります。
これを後述する トリガーに 設定します。
UrlFetchApp#fetch
に対して エラーハンドリングを 行っています。
サイトマップ通知先の ドメインが なくなった 等あると、 エラーメールが 通知されます。
その 際は、 通知先を 変更するなど、 configシートを 編集してください。 // メイン処理 function pingSitemap() { info("pingSitemap START"); // configシートオブジェクトを取得 var sitemapUrls = getColumValues("config", "A", 1); // ping送信先を取得 var pingTargets = getColumValues("config", "B", 1); // サイトマップ * ping対象domain 数分繰り返す var errors = new Array(); for each (var sitemapUrl in sitemapUrls) { for each (var target in pingTargets) { try { var requestUrl = target + "?sitemap="; var requestUrl = requestUrl + encodeURIComponent(sitemapUrl); info("URL:>>>" + sitemapUrl + "|Target:>>>" + target); // GETリクエスト var response = UrlFetchApp.fetch(requestUrl); info("ResponseCode:>>" + response.getResponseCode()); } catch (ex) { errors.push("Message: " + ex.message + "\r\nFile: " + ex.fileName + "\r\nLine: " + ex.lineNumber + "\r\n"); } } } if(errors.length > 0) { var recipients = getColumValues("config", "C", 1); sendEmails(recipients, "Ping sitemap error report", errors.join("\r\n")); } info("pingSitemap END"); } // 列の値を配列で取得する function getColumValues(sheetName, columnName, startIndex) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(sheetName); var values = sheet.getRange(columnName + ":" + columnName).getValues(); var result = new Array(); for (var i = 0; i < values.length; i++) { if (i >= startIndex) { if(values[i] != null && values[i] != "") { result.push(values[i]); } } } return result; } // メール送付 function sendEmails(recipients, subject, body) { for each (var recipient in recipients) { MailApp.sendEmail(recipient, subject, body); } }
app-logger.gs
ログ記録用のスクリプトに なります。
Google Apps Script カスタムLoggerでログを spreadsheetに 書き出す | Nikushi’s blog からまるっと 拝借させていただいたので、
記載は割愛します。
スケジュール設定
コード > スクリプトエディタ > 編集 > 現在の
トリガーの
私は、
参考
以下、
以上です。
一応使える
何か
気が
コメント