ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【GAS】Google Docsの内容をはてなブログに投稿する機能を作成してみた

この記事は GAS道場 Advent Calendar 2019 の21日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。

今回はGASからGoogleドキュメントを操作したいと思います。 その例として、Google Docsに書いた内容をはてなブログに投稿するスクリプトを作成してみたので、そちらを紹介したいと思います。

はてなブログへの投稿

スクリプトからはてなブログに投稿する方法はいろいろあるかと思います。 以下のように、AtomPubを使った例を以前紹介しました。

www.pnkts.net

今回はメールでの投稿をしたいと思います。

はてなブログ側の設定

はてなブログのダッシュボード設定詳細設定 を開きます。 表示されたページの下の方に、メール投稿という項目があるので、そちらに書いてあるメールアドレスをメモしておきましょう。 投稿メールアドレスは、そこのメールアドレスに送った内容をそのまま記事として公開してくれます。 下書き投稿メールアドレスは、公開はせず下書き状態にしてくれます。 なので、テスト時には、下書き投稿メールアドレスに送るようにしておくと良いかと思います。

GASのスクリプト

今回は、以前紹介したスプレッドシートに紐づくGASスクリプトのように、Google Docsに紐づくスクリプトを作成しましょう。

www.pnkts.net

同じように、Googleドキュメントを開いて、メニューバーのツールから、スクリプトエディタを選択することで開くことができます。

function onOpen() {
  var ui = DocumentApp.getUi();
  var menu = ui.createMenu('はてなブログ');
  menu.addItem('送信', 'exec');
  menu.addToUi();
}

function exec() {
  var body = DocumentApp.getActiveDocument().getBody().getText();
  var name = DocumentApp.getActiveDocument().getName();
  post(name, body);
  copy();
  init();
}

function post(subject, content) {
  MailApp.sendEmail('[投稿メールアドレス]@blog.hatena.ne.jp', subject, content)
}

function copy() {
  var id = DocumentApp.getActiveDocument().getId();
  var name = DocumentApp.getActiveDocument().getName();
  var tmp = DriveApp.getFileById(id)
  var folder = DriveApp.getFolderById('[保存先のGoogleドライブのID]')
  tmp.makeCopy(name, folder)
}

function init() {
  DocumentApp.getActiveDocument().getBody().clear()
  DocumentApp.getActiveDocument().setName('タイトルをここに入力する')
}

使い方

このスクリプトを貼り付けた状態でドキュメント側をリロードしてみましょう。 f:id:ponkotsu0605:20191221205614p:plain ドキュメントの上のメニューにはてなブログ用のメニューが表示されるかと思います。 f:id:ponkotsu0605:20191221205649p:plain そして、送信ボタンをクリックすると・・・ f:id:ponkotsu0605:20191221205907p:plain 中身が空っぽになり、ファイル名もデフォルトのものに戻ります。 f:id:ponkotsu0605:20191221210013p:plain 同時にはてなブログ側にも投稿されます。 (上の例では下書き投稿メールアドレスに投稿しています) f:id:ponkotsu0605:20191221205947p:plain それと同時に、Googleドライブの指定したところに、バックアップとしてファイルがコピーされます。

これで、Googleドキュメントからはてなブログへの投稿を実現できました。

課題点

ただ、ドキュメント上で書いたスタイルを適用した状態ではてなブログに投稿するところまで実装することができませんでした。。なので、今回はMarkdown形式の入力になってしまっています。 GoogleドキュメントをHTML形式にしてそれをメールで送ればいいんでしょうが、今回のアドベントカレンダーには間に合いませんでした。。ぐぬぬ。。

さいごに

これでGoogleドキュメントをGASで操作することができるようになりました。 ただ、今回間に合わなかった実装は、いつかは実装したいなと思っています!