はてなブックマークAtomAPIを使う
まずは必要最低限のコードをPHPで書いてみた。コードについて変なところがあったらコメントをお願いします。
「ブックマークする」の画面をまねる
ブックマークするための情報を登録する。bmk.phpという名前にしよう。
<html> <head> <title>Set the Bookmark</title> <META http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> </head> <body> <?php $href_data = $_REQUEST["href_data"]; $title = $_REQUEST["title"]; print "<FORM name="form1" method="post" action="setbmk.php">"; print "TITLE : "; print "<INPUT type="text" name="title" value="" . $title . ""><br>"; print "URL : "; print "<INPUT type="text" name="href_data" value="" . $href_data . ""><br>"; print "<INPUT type="submit" value="add url">"; print "</FORM>"; ?> </body> </html>
AtomAPIを発行する
上のファイルのFORMタグで指定しているsetbmk.phpを書く。
<?php require_once('HTTP/Request.php'); $username = 'xxx'; $password = 'yyy'; $url = 'http://b.hatena.ne.jp/atom/post'; $title = $_POST['title']; $href_data = $_POST['href_data']; $http = new HTTP_Request(); $wsse = getWSSE($username, $password); $rowPostData = getRowPostData($title , $href_data); $http->addHeader('Accept', 'application/x.atom+xml, application/xml, text/xml, */*'); $http->addHeader('Authorization', 'WSSE profile="UsernameToken"'); $http->addHeader('X-WSSE', $wsse); $http->addHeader('Content-Type', 'application/x.atom+xml'); $http->setMethod(HTTP_REQUEST_METHOD_POST); $http->setURL($url); $http->addRawPostData($rowPostData); if (!PEAR::isError($http->sendRequest())) { //ブックマークする前のページへ戻る header("HTTP/1.1 301 Moved Permanently"); header("Location: $href_data"); } function getRowPostData($title, $href_data) { $rowPostData = '<?xml version="1.0" encoding="utf-8"?>' . '<entry xmlns="http://purl.org/atom/ns#">' . '<title>' . $title . '</title>' . '<link rel="related" type="text/html" href="' . $href_data . '" />' . '<summary type="text/plain"></summary>' . '</entry>'; return $rowPostData; } function getWSSE($username, $password) { $nowtime = date('Y-m-d\TH:i:s\Z'); $nonce = pack('H*', sha1(md5(time()))); $digest = base64_encode(pack('H*', sha1($nonce . $nowtime . $password))); $wsse = 'UsernameToken Username="' . $username.'", PasswordDigest="'. $digest .'", Nonce="'. base64_encode($nonce) .', Created="'.$nowtime.'"'; return $wsse; } ?>
ブックマークレット
これをブラウザのお気に入りに忍ばせておく。そして、上記二つのファイルをどこかのサーバーにアップすればOK。
これはポップアップで画面が開かないタイプ。
javascript:window.location='http://youreserver_name/bmk.php?href_data='+escape(location.href)+ '&title='+escape(document.title);
とりあえず、できた
あとはいくつか機能を追加してみよう。WebAPIっておもしろいなぁ。いろいろ遊べそう。
参考にさせていただいたサイトはトラックバックURLに。ありがとうございます。