[Google Apps Script] GoogleスプレッドシートからFC2ブログへ投稿する

FC2ブログに、毎日、自動で投稿したいことが出てきたので、調べてみました。

Googleスプレッドシート(Google Apps Script)とXML-RPCを使って出来そうだったので、やってみました。

この方法のメリットは、

  1. Google(Gmail)のアカウントがあれば良く、新たにサーバーなどを用意する必要がなく、スケジューリングして自動実行が可能
  2. スプレッドシートとセットで使えるので投稿する記事や制御するためのリストを簡単に管理できる。

です。

Google Apps Script用のXML-RPC clientは
XML-RPC client on Google Apps Script を作りましたよ – @ikikko のはてなブログ さんのものを使用します。
このページには、「今のGoogle Apps Scriptでは外部JSファイルをインクルードするような機能が多分ないので、コピペするしかないと思います。」と書かれていますが、2012年5月より、Libraries – Google Apps Script — Google Developers が使えるようになっているので、ライブラリの仕組みを使て行い。

ikikko/Mimic-for-Google-Apps-Script · GitHub
からダウンロードしました。

ライブラリの準備

新しい、Googleスプレッドシートを用意し、
“ツール”→”スクリプトエディタ” を選択。
下記の画面が表示された場合は、”空のプロジェク”をクリック

スクリプトを作成

無題のプエジェクトが開かれる
赤枠のコードは削除する。


プロジェク初期画面-2

削除したところ

プロジェク初期画面

ここで、

ikikko/Mimic-for-Google-Apps-Script · GitHub

にアクセスし、”mimic-gas.js” のコードを、画面コピー、または、zipダウンロードしてからコピーする。

mimic-gas コピー

コピーした、mimic-gas.jsのコードを “無題プロジェクト”にペーストします。
16行目ぐらいに  ”Mimic (XML-RPC Client for JavaScript) v2.0.1 “と書かれていればOKです。

mimic-gasペースト

以下の様に名称変更する
”無題プロジェクト” → “mimic”    (クリックして変更)
“コード.gs” → ”mimic-gas.gs”   (▼をクリックし、”名前を変更…”で変更)

mimic-gas名前変更

ライブラリの登録

”ファイル” → ”バージョンを管理” をクリック

バージョンを管理

”新規作成”などと入力し、”新しいバージョンを保存”をクリック

バージョンを管理-1

バージョンが保存されます。

バージョンを管理-2

”ファイル” → ”プロジェクトのプロパティ”をクリック

プロジェクトのプロパティ

”プロジェクトキー” の値を、コピー します。

プロジェクトキーのコピー

ライブラリを使う側の設定

”ファイル”→”新規作成 ”→ ” プロジェクト” で、プロジェクトをもう一つ作ります。

プロジェクト作成

プロジェクトが作成されたら
1.プロジェクト名をクリックして、”FC2ブログ投稿”などに変更
2.コードは削除しておく。
3.”リソース” → ”ライブラリを管理”をクリック

ライブラリを管理

”ライブラリを検索”にライブラリの”プロジェクトのプロパティ”でコピーした ”プロジェクトキー” の値 を貼り付け、”選択”をクリック。

ライブラリ検索

”選択”をクリックすると、ライブラリの情報が表示されます。
”バージョン”を選択(この場合、”1 新規作成”)し、”保存”ボタンをクリック。

識別子はデフォルトでタイトル名がコピーされ、この名称でライブラリ呼び出しを行います。識別子は日本語は使えません。下のコードで、ライブラリを識別子を付けて呼び出しているのは以下の様な部分です。
var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'metaWeblog.newPost');
識別子を変更したら、対応する呼び出しコードも変更剃る必要があります。

ライブラリの設定

下の、スクリプトソースコードをコピー&ペーストし、
username
password
adminEmail
を、自分のものに変更します。

publishは、trueにすると、記事を公開でポストしますので、テスト段階では、falseで下書きになるようにしておいた方がよいです。


コード貼り付けと変更

Ctrl+S または、 ”ファイル” → ”保存” で保存します。
“関数を選択”から”test”を選択。(保存しないと出て来ません)

関数を選択

実行

▶ (実行)ボタンをクリックします。

実行

最初に実行するときに”承認が必要です”画面が表示されます。”承認”をクリックします。

承認

”閉じる”をクリック。

確認画面

「関数 test を実行中」 が表示され、実行状態になり、しばらくすると、この表示が消えたら終了です。

関数 test実行中

FC2ブログで投稿確認

FC2にログインし、投稿を確認します。

FC2ブログ投稿確認

スクリプトソース

var G = new Object();
G.fc2 = {
  url: "blog.fc2.com",
  blogid: "",
  username: "FC2ブログのログインユーザー名",    // FC2ブログのログインユーザー名
  password: "FC2ブログのパスワード",             // FC2ブログのパスワード
};
var adminEmail = 'foo@bar.com';   // エラーが発生した場合にエラーメールを送るアドレス

var publish =  false; // true;   // 記事の公開 trueで公開, falseで下書

function test (){
  fc2Post("テストタイトル", "テスト本文" , "未分類" );  // 最後のcategory名は、存在しているものを指定
}

function fc2Post(title, description, category) {
  var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'metaWeblog.newPost');
  request.addParam('');
  request.addParam(G.fc2.username);
  request.addParam(G.fc2.password);
  request.addParam({title: title, description: description, mt_convert_breaks:true }); // 本文中の改行をbrタグで反映
  request.addParam(publish);  // publish(trueで公開, falseで下書. 省略時は下書)

  var blogid = request.send().parseXML();  // 記事を投稿、記事番号が帰る
  if(blogid.faultCode ){  // 投稿できず
    MailApp.sendEmail(
      adminEmail,                     // To:
      "FC2自動投稿エラー" , // Subject
      "faultCode: " + blogid.faultCode +"\n" +
      "faultString: " + blogid.faultString +"\n"
    );
    return;  // Early exit
  }

  // カテゴリの設定
  var categoryId = fc2GetCategoryId(category); // 投稿するカテゴリ名のID番号を取得
  setCategory(categoryId, blogid);  // カテゴリをセット
}

// カテゴリのセット
function setCategory (categoryId, blogid) {
  var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'mt.setPostCategories');
  request.addParam(blogid);
  request.addParam(G.fc2.username);
  request.addParam(G.fc2.password);
  var yy = new Array({categoryId: categoryId, isPrimary: true});
  request.addParam(yy);
  var r = request.send().parseXML();  // 常にtrueが帰る
}

//カテゴリ名からカテゴリIDを取得
function fc2GetCategoryId(categoryName) {
  var categoryId = 0;
  var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'mt.getCategoryList');
  request.addParam('');
  request.addParam(G.fc2.username);
  request.addParam(G.fc2.password);
  var r = request.send().parseXML();  //

  for(var i in r){
    var name = r[i]['categoryName'];
    if(name == categoryName){
      categoryId = r[i]['categoryId']
    }
  }
  return categoryId;
}

課題

  • fc2側で改行コードが無くなってしまう。
    やタグは有効
  • テーマやユーザータグは指定できない
↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

スポンサーリンク