首页 » App » Snoopy

Snoopy

March 11th, 2008 at 12:37pm 雪山飞猪 浏览: 1,923

OK,这里讲的不是卡通 Snoopy 了。是 PHP 一个类。它能用来模仿 web 浏览器的功能,它能完成获取网页内容和发送表单的任务。从它的官方网站可以了解到:

  1. 快速简便抓取网页的内容,文本(去掉了 Html 标签)和链接。
  2. 支持代理服务器,基本的用户/密码认证模式,内容。
  3. 支持浏览器重定向,并控制深度。
  4. 扩展获取的链接成带有域名的链接(默认)
  5. 能提交表单数据并获取结果
  6. 支持跟踪 HTML 框架(0.92 版本增加)
  7. 支持在重定向时传递 cookies(0.92 版本增加)

  8. Snoopy 正确运行需要你的服务器的 PHP 版本在 4 以上,并且支持 PCRE(Perl Compatible Regular Expressions),基本的 LAMP 服务都支持。

    它提供以下的接口或者方法:

    fetch($URI)
    这个方法是抓取网页的内容,$URI 是要抓取网页的网址,抓取过来结果存储到 $this->results。如果你抓取的是框架,这每个 frame 都会被抓取,结果会保存到一个数组中。

    fetchtext($URI)
    这个方法和 fetch() 是大致相同,只是它的结果是文本,除去 HTML 标签和其他无关信息。

    fetchform($URI)
    这个方法只返回抓取的网页上 form 元素。

    fetchlinks($URI)
    这个方法只返回抓取的网页上的链接,默认返回的链接都是含有域名的链接。

    submit($URI,$formvars)
    这个方法提交一个表单到指定的 $URI$formvars 是要传递的 form 变量数组。

    submittext($URI,$formvars)
    这个方法和 submit() 基本一致,但是它返回的是文本,除去了 html 标签和其他无关数据。

    submitlinks($URI)
    这个方法返回的是链接。

    在 WordPress 中,已经包含了这个类,并且我们前面提到的 MagpieRSS 这个 RSS 解析类中,也使用这个类去获取 RSS。最新版的 WordPress 2.5 就使用 Snoopy 来下载文件来更新插件,其中用到的 Snoopy 类的代码为:

    function download_url( $url ) {
        if( ! $url )
            return false;
     
        $tmpfname = tempnam(get_temp_dir(), 'wpupdate'); //获取临时文件名
        if( ! $tmpfname )
            return false;
     
        $handle = fopen($tmpfname, 'w'); //以写的方式打开临时文件
        if( ! $handle )
            return false;
     
        require_once( ABSPATH . 'wp-includes/class-snoopy.php' ); //引入 Snoopy 类
        $snoopy = new Snoopy();   
        $snoopy->fetch($url); //抓取指定的网页
     
        fwrite($handle, $snoopy->results); //把抓取得内容写到 临时文件中
        fclose($handle);
     
        return $tmpfname;
    }
    

    作者:雪山飞猪
    原文链接:Snoopy
    我爱水煮鱼版权所有,转载时必须以链接形式注明作者和原始出处及本声明。

    17fav 收藏本文

    del.ici.ous: 4 -- Technorati: 3

13 条评论 添加你的评论

  • 1. ZZ  |  March 11th, 2008 at 7:43 pm

    也就是说2.5可以自动更新插件了?嘿嘿,那感情好啊

    [回复该留言]

  • 2. Andor  |  March 11th, 2008 at 8:31 pm

    Denis,就像楼上所说的?

    [回复该留言]

    雪山飞猪 reply on March 11, 2008:

    嗯,要你输入ftp信息,如地址,用户名,密码!

    [回复该留言]

    Andor reply on March 12, 2008:

    这样的话就要慎用了,不知道自动升级之后有没有“已升级”的提示,不然万一出现兼容性的问题,就无从下手了

    [回复该留言]

  • 3. My-Hou不務正業  |  March 11th, 2008 at 10:08 pm

    Snoopy ~~~ :shock:
    一直和我很遥远

    [回复该留言]

  • 4. maydew  |  March 11th, 2008 at 11:47 pm

    “飞猪”这么懂php真叫人羡慕
    不知道2.5啥时候正式发布
    很期待.....

    欢迎大家也光临我的博客 :razz:

    [回复该留言]

    雪山飞猪 reply on March 12, 2008:

    不要广告过头。。。。。

    [回复该留言]

    maydew reply on March 12, 2008:

    :sad: 下次不会了
    不过我是很认真回复的

    [回复该留言]

  • 5. Jacky  |  March 12th, 2008 at 1:46 am

    路过支持一下... 我超级外行, 不知道这个干什么用的...

    [回复该留言]

  • 6. tomdbtel  |  March 12th, 2008 at 3:52 pm

    那FTP会不会不安全 :lol:

    [回复该留言]

  • 7. 在线代理  |  April 3rd, 2008 at 8:03 pm

    为什么不用curl呢,习惯curl了。

    [回复该留言]

    雪山飞猪 reply on April 3, 2008:

    很多服务是不支持 Curl 的

    [回复该留言]

发表评论

必须

必填,打死不公开

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

如何让 WordPress 启用 Memcached 缓存 MSI V7 160G


订阅

本站推荐

正在更新

分类

Clicki

抓虾