Posts tagged HTML
New Year, New Slash-to-Search
0大家新年好,赶在2012来临之前,对之前写的一个Chrome小插件Slash-to-Search做了一些小的改进,新年新气象,如果你还在用这个插件,那么来看看吧:

What’s New?
- 选项页面有了新UI,如上图。
- 规则的添加和显示集成到了一起。
- 去除了规则到处功能,让插件更小巧。
豆瓣Chrome插件–显示我的豆瓣
0豆瓣的导航栏上竟然没有我的豆瓣的链接,这让我一直很困扰,所以晚上我就动手写了一个小插件,用于为豆瓣的头部导航栏加上一个“我的豆瓣”的链接,让你在豆瓣的任何频道都可以非常方便地回到“我的豆瓣”,插件的效果如下:

当然插件本身并没有什么技术含量,代码也就几行而已,如果你觉得你也正好有这个需求,那么尽管拿去玩,插件的下载地址是:https://github.com/downloads/khotyn/Show-My-Douban/Show-My-Douban.crx
Objective-C HTML Parser
1今天做一个小东西,需要在iPhone中发起一个Http请求,然后解析返回的Response Body。
Google了一把,在StackOverFlow上发现一个叫做Objective-C-HTML-Parser的不错的库,解析起Http请求来非常方便,假设请求一个这一个URL,是在Hackers & Painters在豆瓣读书频道的搜索结果页面:http://book.douban.com/subject_search?search_text=Hackers%20%26%20Painters&cat=1001
那么只需要用以下代码即可解析出搜索结果页面中第一个书的链接:
- (NSString *) getBookAddr:(NSString *)responseBody
{
NSError *error = nil;
HTMLParser *parser = [[HTMLParser alloc] initWithString:responseBody error:&error];
if(error) {
NSLog(@"Error:%@", error);
return nil;
}
HTMLNode *bodyNode = [parser body];
HTMLNode *tdNode = [bodyNode findChildTag:@"td"];
HTMLNode *linkNode = nil;
NSString *bookAddrString = nil;
if(tdNode != nil && (linkNode = [tdNode findChildTag:@"a"]) != nil && (bookAddrString = [linkNode getAttributeNamed:@"href"]) != nil) {
[parser release];
return bookAddrString;
} else {
[parser release];
return nil;
}
}
这里先拿到body标签里面的内容,然后获取出第一个td标签内的第一个a标签里面的href属性,基本上看下代码就可以明白。
这个类库的代码托管在Github上面,有兴趣的可以去看下。
由于这个类库依赖了libxml,如果需要在项目中引入这个库,这需要做下面的几件事情:
- 在Project的Build Settings里面设置Head Search Paths,添加上/usr/include/libxml2
- 在Target的Build Phases的Link Binary With Libraries里面加上一个lib.xml.dylib