エントリー名 :

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

悪ノ娘 黄のクロアテュール

1. 本 悪ノ娘 黄のクロアテュール

[2010-08-10)]五段階評価4.0 ニコニコ動画でもおなじみの 悪のシリーズの小説番!かなり細かく書かれていてとても面白かったです。 知っているキャラクターも沢山出てきてます!、最後にまさかの・・・な展開に続編も期待せざるお...

伝える力 (PHPビジネス新書)

2. 本 伝える力 (PHPビジネス新書)

[2007-04-19)]五段階評価4.0 新入大学生にオススメの本 すこし前に話題になった情報リテラシーが、コンピュータを活用して「読み書き」能力だったのに対して、この本のテーマはコンピュータによらない「話す」「書く」「聞く」の...

ほんとうに頭がよくなる「速読脳」のつくり方 (PHP文庫)

3. 本 ほんとうに頭がよくなる「速読脳」のつくり方 (PHP文庫)

[2010-09-02)]五段階評価4.0 本当の「速読法」と、 そして、本当の「速読することの意味」を教えてくれる本です。 本当の「速読法」と、 そして、本当の「速読することの意味」を教えてくれる本です。 ここでは後者の「本当の「速読することの意味」」について、最後の章の中の最後の節...

子どもの心のコーチング―一人で考え、一人でできる子の育て方 (PHP文庫)

4. 本 子どもの心のコーチング―一人で考え、一人でできる子の育て方 (PHP文庫)

[2007-10)]五段階評価4.5 学生から見た本書  (一人で考え一人でできる子の育て方) 私は学生ですが、たまたまコーチングに興味があり本書を読みました。 自分の過去を振り返りながら読んでいました。 本書を読んでいる中で特に私が気に入っているのが、 ...

はじめての新TOEICテスト 完全攻略バイブル

5. 本 はじめての新TOEICテスト 完全攻略バイブル

[2009-10-06)]五段階評価5.0 TOEIC対策のための羅針盤 これは非常に素晴らしい参考書だと思います。 著者はTOEICを受けて20年以上の経験を持ち、厳選しつくした問題を掲載しています。 各パートごとの問題は、実際のテ...

元素周期 萌えて覚える化学の基本

6. 本 元素周期 萌えて覚える化学の基本

[2008-11-01)]五段階評価4.0 『萌え=分かりやすく説明する である』 誰でも、「すいへーりーべーぼくのふね、なまぐあるしぷ...」と元素周期表を覚えようとした経験があるだろう。ところが、【なぜ元素の周期表を発明したのか】、【横軸に...

道をひらく

7. 本 道をひらく

[1968-05)]五段階評価4.5 著者の深い人間性に触れられる本 著者である松下幸之助の深い人間性を垣間見ることができる本です。 大成功者でありながら(大成功者であるがゆえに?)本当に心の広い方であることが分かり、感動しました...

2

コメントを投稿

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



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

アーカイブ

コメント

トラックバック

広告

あわせて読みたい

あわせて読みたい