Posts tagged HTML

New Year, New Slash-to-Search

0

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

image

What’s New?

  • 选项页面有了新UI,如上图。
  • 规则的添加和显示集成到了一起。
  • 去除了规则到处功能,让插件更小巧。

下载:Slash-to-Search

豆瓣Chrome插件–显示我的豆瓣

0

豆瓣的导航栏上竟然没有我的豆瓣的链接,这让我一直很困扰,所以晚上我就动手写了一个小插件,用于为豆瓣的头部导航栏加上一个“我的豆瓣”的链接,让你在豆瓣的任何频道都可以非常方便地回到“我的豆瓣”,插件的效果如下:
Show_My_Douban
当然插件本身并没有什么技术含量,代码也就几行而已,如果你觉得你也正好有这个需求,那么尽管拿去玩,插件的下载地址是:https://github.com/downloads/khotyn/Show-My-Douban/Show-My-Douban.crx

项目的主页是:https://github.com/khotyn/Show-My-Douban

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
Go to Top