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

いろいろポンコツだけど、気にするな。プログラム&ロボット大好きなポンコツが日々の記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【GAS】ブログ記事の自動投稿も簡単に実現!はてなブログにGASから投稿しよう。

今回はGoogle Apps Script(以降、GAS)を用いて、はてなブログに投稿するスクリプトを紹介したいと思います。

はじめに

実装の紹介をする前に、まずは今回使用するもろもろの紹介をしたいなと思います。

GASとは

Googleアカウントを持っている人であれば誰でも簡単に利用できるサーバのようなもの。 JavaScriptのようなスクリプトを書くことで、ボットを作成したり、Googleのサービスと簡単に連携したり、いろんな自動化をしたりすることができるもの。 なので、今回のようにはてなブログへの自動投稿も簡単に実現できるようになります。

はてなブログAtomPub

自分はしっかり理解はしていないですが、なんとなくの認識だと、はてなブログが提供するAPIみたいな感じ。これを利用すれば、はてなブログのエントリ(記事)の参照(習得)、投稿、編集、削除ができる、という夢が広がるもの。

こちらが公式で公開しているドキュメントになるはず。 はてなブログAtomPub - Hatena Developer Center

実際の実装

投稿部分

function post(title, content, category) {
  var hatenaId = '<はてなIDをここにいれる>';
  var blogId = '<ブログIDをここにいれる>';
  var token = '<APIキーをここにいれる>';
  
  
  var url = 'https://blog.hatena.ne.jp/' + hatenaId + '/' + blogId + '/atom/entry'
  var xml = '<?xml version="1.0" encoding="utf-8"?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"><title>' + title + '</title><author><name>' + hatenaId + '</name></author><content type="text/plain">' + content + '</content><category term="' + category + '" /><app:control><app:draft>no</app:draft></app:control></entry>'
  
  var headers = {
    'Authorization' : 'Basic ' + Utilities.base64Encode(hatenaId + ':' + token),
    blogId: token,
  };
  var options = {
    'method' : 'post',
    'contentType' : 'application/xml',
    'headers' : headers,
    'payload' : xml
  };
  UrlFetchApp.fetch(url,options);
}

上の方に書いてあるもろもろのパラメータを紹介します。

はてなIDとブログID

はてなのIDとブログIDをそれぞれ入力してください。 このブログの場合、

  • はてなID: ponkotsu0605
  • ブログID: pnkts.hatenablog.com

のようになります。 簡単な確認方法としては、 はてなブログの管理ページから、設定 -> 詳細設定 -> AtomPub のところに書いてある ルートエンドポイント に書いてあるところで、自分の場合は、 https://blog.hatena.ne.jp/ponkotsu0605/pnkts.hatenablog.com/atom と書いてあり、それぞれ

https://blog.hatena.ne.jp/<はてなID>/<ブログID>/atom

このように対応しています。なので、このエンドポイントがどのようになっているかを見ることで、簡単に確認できるかと思います。

APIキー

はてなブログの管理ページから、設定 -> 詳細設定 -> AtomPub のところに書いてあるAPIキーになります。こちらをコピペしてください。

呼び出し部分

あとは、上記で設定したメソッドを呼ぶだけです。

function main() {
  post(
  'テスト投稿です',
  'こちらはテスト投稿です\n'
  + '\n## テスト\n'
  + '\nGASから投稿できるかのテストです',
  'test')
}

例えば、上のようなスクリプトだと、

  • タイトル: テスト投稿です
  • カテゴリ: test

になります。

また、実際の投稿結果は以下のような画像になります。

f:id:ponkotsu0605:20190923014554p:plain

上の方に空白ができていますが、こちらはGoogleアドセンスの広告部分なので気にしないでください。

このように、しっかりと投稿することができています。また、自分の場合はmarkdownで投稿するように設定しているので、スクリプト内の本分の書き方もマークダウンっぽく書いています。

さいごに・別手法

GASを利用しているということで、Gmailから投稿メールアドレスに投稿する、という別の手法でも実現はできるかと思います。

help.hatenablog.com

ただ、個人的にAtomPubというものを利用してみたかったので、こちらの手法を今回は紹介させていただきました。 これで、記事の投稿も自動化できますね!