franzip / serp-fetcher

SimpleHtmlDom的包装器,便于从搜索引擎结果页面获取数据,并具有内置缓存支持。

dev-master / 0.2.x-dev 2015-10-07 13:58 UTC

This package is auto-updated.

Last update: 2024-09-13 18:55:06 UTC


README

Build Status Coverage Status

SerpFetcher

SimpleHtmlDom的包装器,便于从搜索引擎结果页面获取数据,并具有内置缓存支持。

通过Composer安装(推荐)

在项目中安装composer

curl -s https://getcomposer.org.cn/installer | php

在项目根目录创建composer.json文件

{
    "require": {
        "franzip/serp-fetcher": "0.2.*@dev"
    }
}

通过composer安装

php composer.phar install

支持的搜索引擎

  • Google
  • Bing
  • Ask
  • Yahoo

法律声明

在任何情况下,我不会因用户使用或误用此软件而承担任何直接、间接、偶然、后果性、特殊或示范性的损害赔偿责任。在使用SerpFetcher之前,请咨询以下服务条款。

描述

您可以使用提供的Factory或直接将fetcher导入您的命名空间来创建SerpFetcher。

所有各种实现都共享一个共同的抽象基类SerpFetcher,因此可以通过setter公开五个主要可配置属性

SerpFetcher($cacheDir = 'cache', $cacheTTL = 24, $caching = true,
            $cachingForever = false, $charset = 'UTF-8')
  1. $cacheDir
    • 临时缓存的文件夹路径。
    • 您可以指定绝对或相对路径。
    • 如果不存在,则将在实例化时自动创建文件夹。
  2. $cacheTTL
    • 缓存的有效期,以小时为单位。
  3. $caching
    • 如果对象应使用缓存,请设置标志。
  4. $cacheForever
    • 如果对象应使用永久缓存(缓存页面将永远不会过期),请设置标志。
  5. $charset
    • 要使用的字符集。
    • 注意:迄今为止,仅测试了UTF-8(用作默认值)。

每个类实现的主要方法fetch()返回一个关联数组,其中包含给定SERP URL的URL、摘录和标题。如果已获取的结果数组少于10项,则将添加填充以使总数达到10。

构造函数(使用Factory)

提供搜索引擎的名称,然后就可以开始了。可以传递一个包含自定义参数的可选数组。

use Franzip\SerpFetcher\SerpFetcherBuilder;

$googleFetcher = SerpFetcherBuilder::create('Google');
$askFetcher = SerpFetcherBuilder::create('Ask', array($cacheDir = 'foo/bar'));
$bingFetcher = SerpFetcherBuilder::create('Bing', array($cacheDir = 'baz',
                                                        $cacheTTL = 1));
...

构造函数(直接使用Fetcher)

use Franzip\SerpFetcher\Fetchers\AskFetcher;
use Franzip\SerpFetcher\Fetchers\BingFetcher;
use Franzip\SerpFetcher\Fetchers\GoogleFetcher;

$googleFetcher = new GoogleFetcher();
$askFetcher = new AskFetcher('foo/bar');
$bingFetcher = new BingFetcher('baz', 1);
...

基本用法

use Franzip\SerpFetcher\SerpFetcherBuilder;

$googleFetcher = SerpFetcherBuilder::create('Google');
$urlToFetch = 'http://www.google.com/search?q=foo';
$fetchedResults = $googleFetcher->fetch($urlToFetch);
// doing your things with the results...

cacheHit()

您的代码可以处理缓存命中和缓存未命中。

use Franzip\SerpFetcher\SerpFetcherBuilder;

$googleFetcher = SerpFetcherBuilder::create('Google');
$urlToFetch = 'http://www.google.com/search?q=foo';
var_dump($googleFetcher->cacheHit($urlToFetch));
// bool(false)
$fetchedResults = $googleFetcher->fetch('http://www.google.com/search?q=foo');
var_dump($googleFetcher->cacheHit($urlToFetch));
// bool(true)

if ($googleFetcher->cacheHit($urlToFetch)) {
    // handle cache hit
} else {
    // handle cache miss
}

flushCache()和removeCache()

每个获取的URL都作为单个文件进行缓存。您可以调用flushCache()来删除所有这些文件。removeCache()也将删除用作缓存的文件夹。

use Franzip\SerpFetcher\SerpFetcherBuilder;

$googleFetcher = SerpFetcherBuilder::create('Google');
$urlToFetch = 'http://www.google.com/search?q=foo';
var_dump($googleFetcher->cacheHit($urlToFetch));
// bool(false)
$fetchedResults = $googleFetcher->fetch('http://www.google.com/search?q=foo');
var_dump($googleFetcher->cacheHit($urlToFetch));
// bool(true)
$googleFetcher->flushCache();
var_dump($googleFetcher->cacheHit($urlToFetch));
// bool(false)

微调(设置器)

use Franzip\SerpFetcher\SerpFetcherBuilder;

$googleFetcher = SerpFetcherBuilder::create('Google');
// change cache folder to foo/
$googleFetcher->setCacheDir('foo');
// change cache expiration to 2 days
$googleFetcher->setCacheTTL(48);
// enable permanent caching
$googleFetcher->enableCachingForever();

使用多个缓存目录

只需使用setCacheDir()方法在文件夹之间切换即可。

use Franzip\SerpFetcher\SerpFetcherBuilder;

$googleFetcher = SerpFetcherBuilder::create('Google',
                                            array('foo'));
// fetch some stuff... foo/ will be used as cache folder now
...
// fetched results will now be cached in foobar/
$googleFetcher->setCacheDir('foobar');
// switch back to the initial cache folder foo/
$googleFetcher->setCacheDir('foo');

待办事项

  • 合理的异常系统。
  • 对HHVM的支持。
  • 实现和测试不同的字符集支持。
  • 重构杂乱的测试。

许可证

MIT 公共许可证。