私はお気に入りの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 .
パラメーターの配列をコンストラクターに渡しました。パラメーターが何であるかを把握しましょう。
- ユーザー名-ユーザー名
- auth_method-認証方法
- auth_challenge-私たちが得た挑戦
- auth_response-LJからの暗号化されたパスワードとともにmd5チャレンジ関数で暗号化
- イベント-トピックのテキスト
- 件名-トピックのタイトル
- 次の5つのパラメーターは、トピックが公開された日付を示します(はい、遡って入力できます:))
小道具-これらはトピックのパラメーターであり、多くの記事を長い間読むことができます 。 - セキュリティ-アクセス権はパブリック、プライベート、およびusemaskにできます;後者を使用する場合は、allowmaskパラメーターを指定する必要があります。 フォーマットとタグを保持する必要があることを示しました。
このパラメーターも構造体です。
これで、リクエストを作成して実行することができます。
$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について書きます。