daichi1128’s DCAtomPub at master – GitHub
はてなブックマークの登録をiPhoneアプリから行うにははてなのAtomPub APIを叩く必要がありますが、WSSE認証やらsha1やらbase64エンコードやらISO8061やらXMLポストやらでハマリ倒してしまったので、二度とつまずかないためにもライブラリ化してみた。
ライブラリというほど大げさなものでもないのですが、ソースコード公開デビューということで大目にみてやってください。
Objective-CでAtomPubを簡単に操作するライブラリDCAtomPubをgithubに公開しました。
ライセンスは修正BSDライセンスです。
AtomPubに関する情報はこちらから。
日本語訳はこれ。ソフトウェア分野の研究開発 / RFC 5023 Atom Publishing Protocol 日本語訳 | Ricoh Japan
はてなブックマークAPIはこちらから。
はてなブックマークAtomAPIとは – はてなキーワード
セットアップ
ターミナルから以下のコマンドでダウンロード(要gitクライアント)git clone git://github.com/daichi1128/DCAtomPub.git |
githubからダウンロードしたら、Xcodeで起動し、DCAtomPubグループ内のファイル群を自分のプロジェクトにコピー。はてな用クライアントも必要ならHatenaExample内のファイルもコピー。
使い方
WSSE認証
DCAtomPubClinetの初期化メソッドの引数にユーザ名、パスワードを渡してあげれば面倒なWSSE認証の準備は勝手にDCAtomPubClientがやります。NSString *username = @"user"; NSString *password = @"pass"; DCAtomPubClient *atomClient = [[DCAtomPubClient alloc] initWithUsername:username password:password]; |
正確にはリクエストを投げるまでにユーザ名、パスワードがセットされていればリクエスト送信時にうまいことやってくれます。こんな形でもよいです。
DCAtomPubClient *atomClient = [[DCAtomPubClient alloc] init]; atomClient.username = @"user"; atomClient.password = @"pass"; |
POST
AtomPubのPOSTメソッドはDCAtomPubClientクラスのpost:XMLString:メソッドで行います。はてぶでは登録時にPOSTメソッドでXMLを投げます。
サンプルコードはこんな感じです。
NSString *username = @"user";
NSString *password = @"pass";
/**
*AtomPubクライアントではてなブックマークを追加
*/
DCAtomPubClient *atomClient = [[DCAtomPubClient alloc] initWithUsername:username password:password];
atomClient.delegate = [[DummyDelegate alloc] init];
NSString *hatenaPostURL = @"http://b.hatena.ne.jp/atom/post";
NSString *postXMLTemplate =
@"<entry xmlns=\"http://purl.org/atom/ns#\">"
@"<link rel=\"related\" type=\"text/html\" href=\"%@\" />"
@"<summary type=\"text/plain\">%@</summary>"
@"</entry>";
// POSTメソッドでXMLを送信
[atomClient post:hatenaPostURL XMLString:[NSString stringWithFormat:
postXMLTemplate,
@"http://iphone.longearth.net/itasktimer/",@"DCAtomPubから" ]]; |
PUT
はてなブックマークの編集時にAtomPubのPUTメソッドを使います。使い方はPOST時と同じように、DCAtomPubClientのput:XMLString:を呼べばOKです。DELETE
はてなブックマークの削除時にAtomPubのDELETEメソッドを使います。使い方はPOST、PUTと同じです。DCAtomPubClientのdelete:XMLStringを呼びます。はてなブックマークの場合はXMLStringはnilでOKです。はてなクライアントの使い方
AtomPubの扱いは上のDCAtomPubClientでだいぶ簡略化できたけど、いちいちXMLを調べて組み立てるのが面倒だ。なのではてな用AtomPubクライアントも作りました。DCHatenaClient。DCAtomPubClientを継承してます。
ブックマークを追加する
DCHatenaClientを使ってブックマークを登録するには、DCHatenaClientの- (void)post:(NSString *)bookmarkURL comment:(NSString *)comment;
メソッドで行います。
引数にはブックマークするURLとコメントを渡してあげます。
サンプルはこんな感じです。
/** * はてなブックマーク用クライアントではてなブックマークを追加 */ DCHatenaClient *hatenaClient = [[DCHatenaClient alloc] initWithUsername:username password:password]; [hatenaClient post:@"http://iphone.longearth.net" comment:@"DCHatenaClientから"]; |
だいぶすっきりします。
ブックマークを編集する
ブックマーク編集は- (void)edit:(NSString *)eid title:(NSString *)title comment:(NSString *)comment;
で行います。
引数に編集するエントリID、変更後のタイトル、変更後のコメントを渡します。はてぶAPI的にタイトルとコメントいずれか必須らしいのでそうしてください。変更したくないものはnilを渡します。
DCHatenaClient *hatenaClient = [[DCHatenaClient alloc] initWithUsername:username password:password]; [hatenaClient edit:@"15151515" title:@"変更後のタイトル" comment:nil]; |
すっきりですね。
ブックマークを削除する
ブックマーク削除は- (void)delete:(NSString *)eid;
で行います。
DCHatenaClient *hatenaClient = [[DCHatenaClient alloc] initWithUsername:username password:password]; [hatenaClient delete:@"15151515"]; |
もうAtomPub恐るるに足らずです。
その他
デリゲートとしてDCAtomPubDelegateを用意しています。呼べるものはNSURLConnection系を周到してます。こんな感じです。- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; - (void)connectionDidFinishLoading:(NSURLConnection *)connection data:(NSData *)data; - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; |
リクエストを投げる前に
dcAtomPubClinet.delegate = self;
などとしてセットしてあげればNSURLConnectionと同じ感覚で使えるはずです。
mixiの隠しAPIもAtomPubらしいので、うまくいけば使えるかもしれません。まだ試してない。
※本来ならAtomPubのルートエンドポイントからアクセス可能なURLを引っ張ってくるのがAtomPub的に正しいことらしいのですが、面倒なので今回はそこまでしてません。
参考
はてなブックマークAtomAPIとは – はてなキーワードCocoaでWSSE認証 – 24/7 twenty-four seven
cocoa_crypto_hashing: Summary
NSDataにBase64のエンコード・デコード機能を追加する


