FC2ブログに、毎日、自動で投稿したいことが出てきたので、調べてみました。
Googleスプレッドシート(Google Apps Script)とXML-RPCを使って出来そうだったので、やってみました。
この方法のメリットは、
- Google(Gmail)のアカウントがあれば良く、新たにサーバーなどを用意する必要がなく、スケジューリングして自動実行が可能
- スプレッドシートとセットで使えるので投稿する記事や制御するためのリストを簡単に管理できる。
です。
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スプレッドシートを用意し、
“ツール”→”スクリプトエディタ” を選択。
下記の画面が表示された場合は、”空のプロジェク”をクリック
無題のプエジェクトが開かれる
赤枠のコードは削除する。
削除したところ
ここで、
ikikko/Mimic-for-Google-Apps-Script · GitHub
にアクセスし、”mimic-gas.js” のコードを、画面コピー、または、zipダウンロードしてからコピーする。
コピーした、mimic-gas.jsのコードを “無題プロジェクト”にペーストします。
16行目ぐらいに “Mimic (XML-RPC Client for JavaScript) v2.0.1 “と書かれていればOKです。
以下の様に名称変更する
”無題プロジェクト” → “mimic” (クリックして変更)
“コード.gs” → ”mimic-gas.gs” (▼をクリックし、”名前を変更…”で変更)
ライブラリの登録
”ファイル” → ”バージョンを管理” をクリック
”新規作成”などと入力し、”新しいバージョンを保存”をクリック
バージョンが保存されます。
”ファイル” → ”プロジェクトのプロパティ”をクリック
”プロジェクトキー” の値を、コピー します。
ライブラリを使う側の設定
”ファイル”→”新規作成 ”→ ” プロジェクト” で、プロジェクトをもう一つ作ります。
プロジェクトが作成されたら
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 を実行中」 が表示され、実行状態になり、しばらくすると、この表示が消えたら終了です。
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側で改行コードが無くなってしまう。
やタグは有効 - テーマやユーザータグは指定できない
コメント
とても参考になりました!!ありがとうございます!!
wordpress での自動投稿を調べて、このサイトの辿りつきました。もし可能でしたら、wordpres のgoogle apps script での自動投稿の方法を教えて頂けないでしょうか?
まずは、下記を対象のWordpressのものに変更して、ログインできるか確認でしょうか。その後は、対象Wordpressの環境にあわせて調整かと
G.fc2 = {
url: “blog.fc2.com”,
blogid: “”,
username: “FC2ブログのログインユーザー名”, // FC2ブログのログインユーザー名
password: “FC2ブログのパスワード”, // FC2ブログのパスワード
};