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について書きます。

Source: https://habr.com/ru/post/J80361/


All Articles