Home > スポンサー広告 > PEAR XML_RPC2を使用してMovabletypeに外部から記事を投稿してみました PHP > PEAR XML_RPC2を使用してMovabletypeに外部から記事を投稿してみました

[ スポンサー広告 ] はてなブックマーク - スポンサーサイト
スポンサーサイト

  • -------- :
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ PHP ] はてなブックマーク - PEAR XML_RPC2を使用してMovabletypeに外部から記事を投稿してみました
PEAR XML_RPC2を使用してMovabletypeに外部から記事を投稿してみました

MovableTypeにはXML-RPCインターフェースが準備されていて、外部から記事の投稿、更新等を行うことができます。
phpでXML-RPCプロトコルを利用するにはPEAR::XML_RPC2というライブラリを使うとよいそうです。
PEARはPHPのクラスライブラリを集めたものです。
1.PEAR::XML_RPC2をインストールする。

PEAR Package Information: XML_RPC2 download
http://pear.php.net/package/XML_RPC2/download
バージョンのリンクをクリックするとでダウンロードできます。

中にあるXMLフォルダを任意の場所に配置します。



2.php.iniでcURL拡張モジュールが有効になっているか確認する。

無効だった場合は有効にします。
phpinfo() を実行してphp.iniのパスを確認
---------------
 <?php
   phpinfo();
 ?>
---------------
php.ini を開き、extention=php_curl.dll の行のコメントアウトを解除
再起動してphp.ini を再読み込み
phpinfo()を実行して有効になっているかどうか確認



3.MTに記事を投稿する。

投稿用ユーザ名とパスワードが必要です。ログインパスワードでは無いので注意。
MovableType 管理画面の
ユーザー → 一覧 → ユーザーの管理 → Webサービスパスワード からパスワードを取得できます。

<html>
<head>
<title>XML-RPC Client</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>XML-RPC Client</h1>
<?php

set_include_path('C:\test\path'); //XMLフォルダを置いたパスを指定
require_once('./XML/RPC2/Client.php');

$encoding = 'UTF-8';                   // 文字エンコーディング
$uri      = 'http://~/mt-xmlrpc.cgi'; //mt-xmlrpc.cgiの場所

$user     = 'userid';                  // ユーザーID
$pass     = 'password';                // パスワード

//投稿データを作成  
$blog_id        =  '1';                    // ブログID
$cat_id         =  '5';                    // カテゴリID
$entry_title    =  'test title';           // タイトル
$entry_date     =  '2011-07-07';           // 日付
$entry_keywords =  'keyword1, keyword2';   // キーワード
$entry_tags     =  'tag1, tag2' ;          // タグ
$entry_body     =  'test body';            // 本文
                                           // 追記とカスタムフィールド
$entry_mor      =  "entry more\n"."custom1=aaa\n"."custom2=bbb";

$contents = array(   'title'       => $entry_title
                   ,'description'  => $entry_body 
                   ,'dateCreated'  => $entry_date
                   ,'mt_keywords'  => $entry_keywords
                   ,'mt_tags'      => $entry_tags
                   ,'mt_text_more' => $entry_mor
                  );

// 公開設定 ※注意!mt-config.cgi に NoPublishMeansDraft 1 の記載がないと公開、非公開の設定はできません。
$publish = true;

// 記事投稿用 metaWeblog. XML-RPXクライアントの生成
$metaWeblogoptions = array(  'escaping' => 'markup'
                            ,'prefix'   => 'metaWeblog.'
                            ,'encoding' => $encoding     );

$metaWeblogClient  = XML_RPC2_Client::create($uri, $metaWeblogoptions); 

// 投稿を実行 $resultには記事IDが返ってくる
$result = $metaWeblogClient->newPost($blog_id, $user, $pass, $contents, $publish);


// 記事再構築用 mt. XML-RPXクライアントの生成
$mtoptions  = array(  'prefix'   => 'mt.'
                     ,'encoding' => $encoding   );

$mtClient   = XML_RPC2_Client::create($uri, $mtoptions);

if($cat_id != ''){
    //カテゴリを付与
    $category   = array('categoryId' => $cat_id , 'isPrimary' => 1 );
    $categories = array($category);
    $mtClient->setPostCategories($result, $user, $pass, $categories);
}

//再構築 成功なら1がが返ってくる
$status = $mtClient->publishPost($result, $user, $pass);

echo $status;

?>

</body>
</html>


つまずいたところとその対処法:

・カスタムフィールドが追記にそのまま入ってしまってカスタムフィールドとして読み込んでくれない。
追記とカスタムフィールド部分をダブルクォーテーションでくくると読み込んでくれました。

・MTに投稿した記事を確認すると文字化けしていて何が書いてあるのかわからない。
記事投稿用のmetaWeblog. XML-RPXクライアントの生成時のオプションに 'escaping'=> 'markup' を追加すると文字化けしなくなりました。

  PEARのXML_RPC2が文字化けする件
  オプションの詳細 $escaping- PEAR XML_RPC2ドキュメント Class: XML_RPC2_Client

・記事の公開設定を false にてみても、おもいっきし公開されている。
mt-config.cgi に NoPublishMeansDraft 1 の記載がないと公開、非公開の設定はできず、すべて公開されるそう。
なので mt-config.cgi に NoPublishMeansDraft 1 を記載したら非公開にすることができました。

  Movable Type ドキュメント 付録 環境変数リファレンス NoPublishMeansDraft



参考:
小粋空間 PHPでXML-RPCを利用する方法

XML-RPCを使ってMovableTypeに投稿する(PHP版)

PEAR XML_RPC2ドキュメント Class: XML_RPC2_Client


こちらの記事も合わせてご覧ください



コメントの投稿

非公開コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

サイト内検索

カテゴリ
最新記事
RSS
最新トラックバック
最新コメント
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。