ページ

2009年9月29日火曜日

プチアプリ制作 - SafariのURLから HTMLの<A>タグを生成する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク




ブログを書いていて他ページのリンクを埋め込むときにいつも手で <A>タグを書いている。いい加減面倒になってきたので Safariの URLをドラッグ&ドロップするとそのページの <A>タグを生成するプチアプリを(ボケ防止も兼ねて)作ってみた。



動作イメージ:
 (1) Safari の URLをドラッグしてアプリへ落とす
 (2) URLとタイトルが埋め込まれた <A>タグが、テキストボックスに生成される

後はこれをコピーして使う。

ソースコード:AHREFGenerator-01.zip


小一時間で作成したので最小限動くだけのコード。URLを受け取るビューのコードを以下に掲載する。

DropURL.m

まずペーストボードタイプの登録。

- (void)awakeFromNib
{
[self registerForDraggedTypes:[NSArray arrayWithObjects:
    @"WebURLsWithTitlesPboardType",nil]];

}


続いてドロップの受け入れ許可。
- (NSDragOperation)draggingEntered:(id )sender {
NSPasteboard *pb = [sender draggingPasteboard];
NSArray* pb_types = [pb types];

if ([pb_types containsObject:@"WebURLsWithTitlesPboardType"]) {
return NSDragOperationCopy;
}
return NSDragOperationNone;
}


最後に<A>タグの生成。
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender
{
NSPasteboard* pb = [sender draggingPasteboard];
NSArray* pb_types = [pb types];

if ([pb_types containsObject:@"WebURLsWithTitlesPboardType"]) {
NSArray *props = [pb propertyListForType:@"WebURLsWithTitlesPboardType"];
NSString* url = [[props objectAtIndex:0] objectAtIndex:0];
NSString* title = [[props objectAtIndex:1] objectAtIndex:0];

NSString* str = [NSString stringWithFormat:
@"%@", url, title];
[text_view setString:str];
[text_view setSelectedRange:NSMakeRange(0, [str length])];

}  
return YES;
}


Safari からわたってくるペーストボードに WebURLsWithTitlesPboardType というものがあり、ここから URLと合わせてページのタイトル文字列を取得することができる。配列の入れ子となっていてこんな感じで URL とタイトルが入っている。
2009-09-29 22:54:17.723 AHREFGenerator[6530:10b] (
(
"http://www.apple.com/ipodtouch/"
),
(
"Apple - iPod touch - Music, games, apps, and more on a great iPod."
)
)


ここからindexの決めうちでURLとタイトルを取り出す。
NSString* url = [[props objectAtIndex:0] objectAtIndex:0];
NSString* title = [[props objectAtIndex:1] objectAtIndex:0];


参考:CocoaDev: WebURLsWithTitlesPboardType
#早速活用できた ;->

- - - -
NSPasteboard は Snow Leopard で結構手が入っている。新規メソッドも追加されているようだ。
Mac Dev Center: NSPasteboard Class Reference

こんな感じで大半のメソッドが 10.5以前と、10.6以降の区別がされている。


Overview には 10.6 からの新機能が紹介されている。複数のアイテムを含むことができるようになった(らしい)。


またペーストボードに対するデータの書き込みと読み出しのインターフェイスがプロトコルとして定義されることで様々なクラスをペーストボードで直接扱えるようになったようだ。このあたりは別の機会に検証してみたい。

Mac Dev Center: NSPasteboardWriting Protocol Reference Protocol Reference
Mac Dev Center: NSPasteboardReading Protocol Reference Protocol Reference