ページ

2014年4月24日木曜日

Visual Studio 2010 C#.NET で WordPress に自動投稿するプログラム


Visual Studio 2010 C#.NET で WordPress に自動投稿するプログラムを作るべく調査しまいた。


以下のサイトを参考にしました。
http://www.moonmile.net/blog/archives/1284


XML-RPCを使います。
参考サイトに従ってC#のプロジェクトをダウンロードしてコンパイルしました。

コンパイルを試した結果、.NET Framework 4ではうまくいきません。
.NET Framework 3.5で動作確認ができました。

現時点でのxml-rpc.netのバージョンは.2.5.0でした。


参考サイトのソースを少し変更して、コマンドプロンプトからすべて引数で動くように改修しました。


  • サンプルコード


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CookComputing.XmlRpc;

namespace WP_Post
{
    class Program
    {
        static void Main(string[] args)
        {
            Program pg = new Program();
            try
            {
                pg.url = args[0];   //<投稿先のURL/xmlrpc.php/>
                pg.username = args[1];  //ブログのユーザー名
                pg.password = args[2];  //ブログのパスワード
                string title = args[3]; //タイトル
                string content = args[4];   //記事内容
                pg.categoryID = int.Parse(args[5]);//カテゴリID
                // 投稿
                pg.BllogerNewPost(title, content);
            }
            catch (Exception ex)
            {
                Console.WriteLine("エラー:" + ex.Message);
                return;
            }
        }
        // ユーザー名
        string username = "<ブログのユーザー名>";
        // パスワード
        string password = "<ブログのパスワード>";
        // 投稿先のURL
        string url = "<投稿先のURL>";
        // 投稿カテゴリID
        int categoryID = 0;

        public void BllogerNewPost(string title, string content)
        {
            //プロキシクラスのインスタンスを作成
            IBlogger proxy =
                CookComputing.XmlRpc.XmlRpcProxyGen.Create<IBlogger>();
            //URLを指定
            proxy.Url = url;

            int id = 0;
            // content を生成
            content = string.Format("<title>{0}</title>", title)
                + string.Format("<category>{0}</category>", categoryID)
                + content;

            //blogger.getRecentPostsを呼び出す
            id = proxy.newPost(
                "",             // WordPressの場合は無視
                "1",            // 念のため1にしておく
                username,
                password,
                content,
                false);
            //結果を表示する
            Console.WriteLine("id: " + id);
        }
    }

    public interface IBlogger : IXmlRpcProxy
    {
        /// <summary>
        /// 新規投稿
        /// </summary>
        /// <param name="appkey">無視</param>
        /// <param name="blogid">無視</param>
        /// <param name="username">ユーザー名</param>
        /// <param name="password">パスワード</param>
        /// <param name="content">本文</param>
        /// <param name="publish">公開するかどうか</param>
        /// <returns>エントリのIDを返す</returns>
        [XmlRpcMethod("blogger.newPost")]
        int newPost(
            string appkey,
            string blogid,
            string username,
            string password,
            string content,
            bool publish);
    }
}





0 件のコメント:

コメントを投稿