エントリー名 :

JaikuのAPIで投稿をするためのPHP(XML-RPC)メモ。

JaikuのAPIで投稿をするためのPHP(XML-RPC)メモ。

Twitter系のサービスJaikuのAPIの使い方メモ。Jaiku APIでは、情報の取得については、他のサービスを同じような感じでできるのですが、新規の投稿にはXML-RPCを使うみたい。 必要になったので、PHPでXML-RPCを使うときのメモ。

XML-RPCとは

次のページを参考にした。

どうやら、XML-RPCは、HTTP-POSTリクエストで、XMLをやり取りするもののようです。

PEARのXML_RPCを使えば、クライアント側も、サーバー側も簡単に実装できるみたいなので、まずこれを使いました。

以下、PHPのサンプルスクリプトです。

PEARのXML_RPCライブラリを使う場合

$personal_keyと、$userを正しく入力して、$textに投稿したい文字を入れれば、次のスクリプトでJaikuに投稿できます。


<?php
require_once 'XML/RPC.php';
define('JAIKU_SERVER', 'api.jaiku.com');
define('JAIKU_PATH', '/xmlrpc');

$text="Test テスト";
$personal_key="personal_key";
$user="user";

$params = array(new XML_RPC_Value(array(
//"generated" => new XML_RPC_Value(false, 'boolean'),
//"icon" => new XML_RPC_Value(300, 'int'),
//"location" => new XML_RPC_Value('', 'string'),
"message" => new XML_RPC_Value($text, 'string'), 
"personal_key" => new XML_RPC_Value($personal_key, 'string'),
"user" => new XML_RPC_Value($user, 'string'),
),'struct'),);

$msg=new XML_RPC_Message('presence.send',$params);
//print $msg->serialize();
$client=new XML_RPC_Client(JAIKU_PATH,JAIKU_SERVER);

$response=$client->send($msg);
if(!$response->faultCode()){
	print "ok";
}else{
	print $msg->serialize();
	print '<br />Fault Code:' . $response->faultCode() ;
	print '<br />Fault Reason:' . $response->faultString();
}

?>

XML_RPC_Value()や、XML_RPC_Message()で、Jaikuのサーバー側に送るXMLを組み立てています。 実際の中身は、serialize()で見ることができます。

serialize()で送信するXMLを見ると、


<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>presence.send</methodName>
<params>
<param>
<value><struct>
<member><name>message</name>
<value><string>Test テスト</string></value>
</member>
<member><name>personal_key</name>
<value><string>personal_key</string></value>
</member>
<member><name>user</name>
<value><string>user</string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>

のようになっているはずです。

後は、XML_RPC_Client()で、上のXMLをsend()すれば、 Jaikuに新しい記事がポストされます。

(日本語が文字化けして、なかなか、ちゃんと表示されなかった。 php.iniとか,.htaccessも見たけれども、よくわからない。
XML_RPCを新しく入れて、php.iniのinclude_path="~"の順番を変えたら、 なんとか動くようになった。XML_RPCのバージョンが古いとうまくいかないのかも。)

PEARのXML_RPCライブラリを使わない場合

XML_RPCを使わないで、何とかする場合。 前回のDrupalのJaikuモジュール の中身とほとんど同じです。モジュールの方では、drupal_http_request()を使いましたが、 下のサンプルでは、 PEARのHTTP_Request()を使いました。

ここでは、ヒアドキュメントで、送信するXMLを組み立てています。


<?php
require_once "HTTP/Request.php";
$req =& new HTTP_Request();

$text="Test テスト";
$personal_key="personal_key";
$user="user";
$RequestURL="http://api.jaiku.com/xmlrpc";

$data = <<< CALL_DATA
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>presence.send</methodName>
<params>
<param>
<value><struct>
<member><name>message</name>
<value><string>$text</string></value>
</member>
<member><name>personal_key</name>
<value><string>$personal_key</string></value>
</member>
<member><name>user</name>
<value><string>$user</string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>
CALL_DATA;

$req->setURL($RequestURL);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addHeader('Content-Type' ,'text/xml; charset=UTF-8');
$req->addRawPostData($data);

$response = $req->sendRequest();
if (!PEAR::isError($response)) {
	print $req->getResponseBody();
	print_r($req->getResponseHeader());
}else{
	print $response->getMessage();
}

?>

$req->addRawPostData($data, false)で、urlencode()が効くようにもできるのですが、これを 使うと、うまくいかない。

あとは、ブログの記事が、新規投稿か、過去記事更新かを区別できる部分があれば、 これでJaikuとブログの両方にポストできる。

Drupalでは、 jaiku_nodeapi(&$node, $op)の$opに、'insert'とか、'update'が渡されるので、 これを使えばいいらしい。


JaikuのAPIで投稿をするためのPHP(XML-RPC)メモ。の前後の記事

カテゴリー [ メモ・覚え書き ] [ PHP ]



アマゾン(Amazon.co.jp) PHP

子どもが育つ魔法の言葉 (PHP文庫)

1. 本 子どもが育つ魔法の言葉 (PHP文庫)

[2003-09)]作者:ドロシー・ロー ノルト 。レーベル:PHP研究所 。製造:PHP研究所 。出版:PHP研究所 。発売:PHP研究所。関連:0~4歳 わが子の発達に合わせた1日30分間「語りかけ」育児

2022―これから10年、活躍できる人の条件 (PHPビジネス新書)

2. 本 2022―これから10年、活躍できる人の条件 (PHPビジネス新書)

[2012-01-19)]作者:神田 昌典 。レーベル:PHP研究所 。製造:PHP研究所 。出版:PHP研究所 。発売:PHP研究所。関連:10年後に食える仕事、食えない仕事

50歳を超えても30代に見える生き方 「人生100年計画」の行程表 (講談社プラスアルファ新書)

3. 本 50歳を超えても30代に見える生き方 「人生100年計画」の行程表 (講談社プラスアルファ新書)

[2011-10-21)]作者:南雲 吉則 。レーベル:講談社 。製造:講談社 。出版:講談社 。発売:講談社。関連:石垣食品 ごぼう茶 2g×15P

決断する力 (PHPビジネス新書)

4. 本 決断する力 (PHPビジネス新書)

[2012-03-17)]作者:猪瀬 直樹 。レーベル:PHP研究所 。製造:PHP研究所 。出版:PHP研究所 。発売:PHP研究所。関連:突破する力 (青春新書インテリジェンス)

道をひらく

5. 本 道をひらく

[1968-05)]   9歳からでっち奉公に出て、1代で松下グループを築き上げた立志伝中の人物であり、「経営の神様」と呼ばれた松下幸之助は、経営者としては稀有といえるほど多くの著...

目に見えないけれど大切なもの―あなたの心に安らぎと強さを (PHP文庫)

6. 本 目に見えないけれど大切なもの―あなたの心に安らぎと強さを (PHP文庫)

[2003-11)]作者:渡辺 和子 。レーベル:PHP研究所 。製造:PHP研究所 。出版:PHP研究所 。発売:PHP研究所。関連:置かれた場所で咲きなさい

赤ちゃんができる子宝マッサージ―ゆっくり、やさしくさするだけ

7. 本 赤ちゃんができる子宝マッサージ―ゆっくり、やさしくさするだけ

[2011-02)]作者:山田 光敏 。レーベル:PHP研究所 。製造:PHP研究所 。出版:PHP研究所 。発売:PHP研究所。関連:妊娠体質になる! 子宝ヨガ

2

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)



このエントリーのトラックバックURL:

アーカイブ

コメント

トラックバック

広告

あわせて読みたい

あわせて読みたい