Zend_XmlRpc_ClientとLiveJournalのクロスポスト

新しい年に、ある親切な人が私にドメインを与えてくれました。 ドメインがある場合は、何かがあるはずです。 自分をブログにすることにしました。 しかし、過去2年間はlivejournalを使用していたため、メッセージをLJと同期させたいと考えていました。

私はお気に入りのZend Frameworkでプログラムしています。



ライブロギングAPIの一部はXML-RPCプロトコルに基づいています 。このAPIの説明はここにあります

LJに新しい投稿を追加するには、最初に課題を取得する必要があります。

Zend FrameworkのZend_XmlRpc_Clientコンポーネントを使用します。

オブジェクトを作成します-

$xmlRpcClient = new Zend_XmlRpc_Client( 'http://www.livejournal.com/interface/xmlrpc' );







入力パラメーターは、接続先のサーバーです;この場合、LJサーバーが指定されています。

サーバーにリクエストを送信します。



$chalengeResponse = $xmlRpcClient->call( 'LJ.XMLRPC.getchallenge' );









このリクエストはサーバーへの応答を返します-これはチャレンジが示される配列であり、LJからのパスワードでハッシュされてサーバーに送信されます-パスワードを転送する方が安全だからです。 また、この配列では、LJサーバーの時間とチャレンジの有効期限が切れる時間を受け取ります。 有効期限が切れるまで待機せず、すぐに投稿します。

ただし、最初に、リクエストを正しく作成する必要があります。

ここを見ると、送信したいxmlファイルの例があります。また、タイプstructの単一のパラメーターが含まれていることに注意してください。



Zend_XmlRpc_Client-phpのすべてのデータ型は、XML-RPCに必要なデータ型に自動的に変換されます。

念のため、別のコンポーネントZend_XmlRpc_Valueを取り上げます。つまり、このケースではZend_XmlRpc_Value_Structです。 Zend_XmlRpc_Valueのように、このコンポーネントには、phpに含まれているDOMDocumentクラスのオブジェクトを返すgetAsDOM()メソッドがあります。 saveXML()メソッドもあります。これを使用して、xmlを取得できます。 この例では、例との違いを確認して修正できるものを表示できます。

コンストラクターZend_XmlRpc_Value_Structは連想配列を受け入れます。

たとえば、次のようなことをします。



$postOptions = new Zend_XmlRpc_Value_Struct(

array(

'username' => $ljUsername,

'auth_method' => 'challenge' ,

'auth_challenge' => $chalengeResponse[ 'challenge' ],

'auth_response' => md5($chalengeResponse[ 'challenge' ] . md5($ this ->_ljPassword)),

'ver' => '1' ,

'event' => ' xml-rpc' ,

'subject' => 'xml-rpc test' ,

'year' => 2010,

'mon' => 1,

'day' => 3,

'hour' => 4,

'min' => 33,

'props' => array(

'opt_preformatted' => true ,

'taglist' => 'tag1, tag2, tag3'

),

'security' => 'public'

));




* This source code was highlighted with Source Code Highlighter .








パラメーターの配列をコンストラクターに渡しました。パラメーターが何であるかを把握しましょう。





これで、リクエストを作成して実行することができます。



$request = new Zend_XmlRpc_Request();

$request->setMethod( 'LJ.XMLRPC.postevent' );

$request->addParam($postOptions);

$xmlRpcClient->doRequest($request);










要求オブジェクトZend_XmlRpc_Requestを作成し、そのオブジェクトにLJ.XMLRPC.posteventメソッドを設定し、パラメーターを追加して、サーバーに要求を実行しました。

Zend_XmlRpc_Requestクラスには、生成されたxmlを返すtoXmlメソッドもあります。たとえば、保存して友人にメモリを与えるなど、他の場所で使用する必要がある場合に備えてです。



また、LiveJournalの投稿のIDとそのリンクを取得したい

getLastResponse()メソッドを使用してから、サーバーがgetReturnValue()メソッドで応答したものを取得します

$newPost = $xmlRpcClient->getLastResponse()->getReturnValue();









$ newPost配列には、LiveJournal投稿へのリンクとそのIDを含むサーバーの応答がありました。



Zend_XmlRpc_Clientに関係する他のコンポーネントを示すために、私は意図的にすべてを複雑にしました。

次のようになります。

$newPost = $xmlRpcClient->call( 'LJ.XMLRPC.getchallenge' , array( /* */ ));







パラメーターの配列に、必要なすべてのパラメーターを入れることができます

データ型はphpからxml-rpcに変換される方法を覚えておく価値があります。これらのデータ型は、このプレートに従って自動的に変換されるためです。

PHPを入力 XML-RPCを入力
整数 int
ダブル ダブル
ブール値 ブール値
ひも ひも
配列 配列
配列(連想) 構造
対象 配列




投稿を編集するには、投稿を追加するときと同じパラメーターでリクエストLJ.XMLRPC.editeventを送信するだけで、投稿を追加するときに返される別のアイテムIDを追加するだけです。

また、投稿を削除するには、件名とイベントなしで編集する必要があります。



みんなありがとう、誰かが役に立つといいな。 次回使用する理由がわかったら、次回Zend_XmlRpc_Serverについて書きます。



All Articles