【iPhone】Objective-CでAtomPubを簡単に操作できるライブラリ公開してみた

Posted by: daichi  /  Category: 開発補助

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がやります。

?View Code OBJECTIVE-C
NSString *username = @"user";
NSString *password = @"pass";
DCAtomPubClient *atomClient = [[DCAtomPubClient alloc] initWithUsername:username password:password];

正確にはリクエストを投げるまでにユーザ名、パスワードがセットされていればリクエスト送信時にうまいことやってくれます。こんな形でもよいです。

?View Code OBJECTIVE-C
DCAtomPubClient *atomClient = [[DCAtomPubClient alloc] init];
atomClient.username = @"user";
atomClient.password = @"pass";

POST

AtomPubのPOSTメソッドはDCAtomPubClientクラスのpost:XMLString:メソッドで行います。
はてぶでは登録時にPOSTメソッドでXMLを投げます。
サンプルコードはこんな感じです。

?View Code OBJECTIVE-C
        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とコメントを渡してあげます。
サンプルはこんな感じです。

?View Code OBJECTIVE-C
	/** 
	 * はてなブックマーク用クライアントではてなブックマークを追加
	 */
	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を渡します。

?View Code OBJECTIVE-C
	DCHatenaClient *hatenaClient = [[DCHatenaClient alloc] initWithUsername:username password:password];
	[hatenaClient edit:@"15151515" title:@"変更後のタイトル" comment:nil];

すっきりですね。

ブックマークを削除する

ブックマーク削除は
- (void)delete:(NSString *)eid;
で行います。

?View Code OBJECTIVE-C
	DCHatenaClient *hatenaClient = [[DCHatenaClient alloc] initWithUsername:username password:password];
	[hatenaClient delete:@"15151515"];

もうAtomPub恐るるに足らずです。

その他

デリゲートとしてDCAtomPubDelegateを用意しています。呼べるものはNSURLConnection系を周到してます。こんな感じです。

?View Code OBJECTIVE-C
- (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のエンコード・デコード機能を追加する

【iPhone】続・iPhone 3GSは機種変更で買おう

Posted by: daichi  /  Category: 開発補助

まずはこちらをご覧ください。
【iPhone】iPhone 3GSは機種変更で買おう | iphoneアプリで稼げるのか

今日ソフトバンクショップでiPhone 3GS予約してきました。

そこでiPhone 3GSの機種変更時の価格について、再度聞いてきたのですが、どうも前回聞いた時点より、好条件になりそう。

続きを読む

【iPhone】iPhone 3GSは機種変更で買おう

Posted by: daichi  /  Category: 開発補助

「iPhone 3G S」について | ソフトバンクモバイル株式会社
iPhone 3GS。ソフトバンクからも正式に発表されましたね。

iPhoneアプリ開発者たる者、新iPhoneが出れば黙って購入するのが筋というもの。

ただ、機種変するのと、新規で買い増し2本持ちするのとでどっちがよいのか、いまいち料金形態がよく分かってなかったので、ソフトバンクへ行って聞いてきた。

※「買い増し」表記が紛らわしいとの指摘をうけたので、定義を追記します。ここでの「買い増し」はsoftbankの定義する「Softbank 3GからiPhone3Gへの機種変更」ではなく、「iPhone 3G S用の新規契約を結ぶこと」を指しています。(2009/06/21 追記)
機種変更(買い増し・契約変更) | SoftBank
続きを読む

【mac】開発中のアプリを先行公開する時に使えそうなフリーの動画キャプチャソフト

Posted by: daichi  /  Category: 開発補助

開発中のアプリを先行公開する時に使えそうなmac用ディスプレイ動画キャプチャフリーソフト。

Leopard専用に作成された動画キャプチャ・ソフトウェア『スクリン・クロラ』 | Macの手書き説明書
youtube用、iPhone用サイズなどのキャプチャサイズが用意されていて、サクッととれるのでよさげ。

iShowU | Macの手書き説明書
フリーでも使えるけど、画面にロゴが入ってしまうみたい。

ポッドキャストとけものみち「BONCHICAST Log」 – デスクトップを動画でキャプチャ「Jing」[Win&Mac]
だいぶ重くてカクカクしてしまう。

スクリンクロラがよさそう。

関連のあるアプリ

iTask Timer
iTask Timer 2009/06/05 リリース
仕事効率化 230円
時間管理アプリ
app_store_badge

【iPhone】価格変動によるダウンロード数への影響

Posted by: daichi  /  Category: 市場

4/27からiSlot Proを350円→105円へ値下げ販売をしているのですが、そのダウンロード数の変動をレポート。

1週間あたりのダウンロード数は以下。対象は日本のみ。海外は2,3DLなのでサンプル外として載せていません。

ダウンロード数 売上(30%カット) 販売期間
iSlot Pro (350円) 27 6615 4/20~4/26
iSlot Pro (105円) 55 4455 4/27~5/3
iPachi (無料) 277 free 4/20~4/26
以下雑感です。

続きを読む

【iPhone】アプリネタを考えるメモ

Posted by: daichi  /  Category: アイデア

これまでパチンコパチスロ系アプリという日本限定で狭いユーザ層をターゲットに
アプリを作ってきましたが、もっと多くのユーザに使ってもらえるような世界を視
野に入れたアプリを作りたい。

というわけで、多くの人に使ってもらえるアプリとは、世界に通じるアプリとは何
かをこれまでApp Storeランキングをにぎわせてきた優良アプリから学ぼうと思い、
いろいろなアプリを眺めながら、ある切り口で分類してみた。

続きを読む

【ニコニコ】iPhoneアプリ販促用デモ動画を作成してみた

Posted by: daichi  /  Category: 開発後



旅行やら病気やらでだいぶ時間が空いてしまった。
が、懲りずにiPhone開発は続けます。

ところで、アプリダウンロード数が案の定伸びない。
無料アプリのiPachiがだいたい3/27時点で合計1500ダウンロードくらい。
で、有料アプリのiSlot Proがまだ50弱。

まだiPachiと比べるとiSlot Proが販売されてから日が浅いことや、価格設定などにも原因はあると思いますが、何よりも大きいのが、そもそもアプリの存在を知らないというところだと思います。

続きを読む

Get Adobe Flash playerPlugin by wpburn.com wordpress themes