mgribov/apiscrape

具有本地缓存的通用HTTP REST API爬取器

dev-master 2017-01-22 19:24 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:03:15 UTC


README

Code Climate

具有本地缓存的JSON API爬取器

动机 - 透明的GET缓存

我遇到了几个API,它们的复杂程度不如Twitter或Facebook,但足够使用JSON和HTTP缓存(Etag和Cache-Control)进行GET请求。

我需要定期抓取它们并将结果存储在某个地方以供以后探索/使用。

apiscrape 正是如此 - 接收一个可选(但目前是原始的)认证的URL,并将GET响应本地存储以供以后使用。
当然,这个库也可以用于实时请求,而不仅仅是爬取,同时仍然提供本地缓存的好处。

它使用 MongoDB 作为缓存层,因此JSON将按原样存储。
它包装了 cURL,因此也支持其他HTTP动词,但只缓存GET的响应。

限制 - 没有OAuth

目前,仅支持HTTP Basic和URL认证。
HTTP Basic认证添加了 "Authorization: Basic" HTTP头。
URL认证简单地在每个请求URL后附加一个秘密。例如:?secret=1234
有关详细信息,请参阅 src/Scrape/Auth

通过Composer安装到现有项目中

curl -sS https://getcomposer.org/installer | php # if composer is not installed
./composer.phar require mgribov/apiscrape

示例

有关一个真实世界的复杂示例,该示例启发了这个库,请参阅 Triptelligent PHP API包装器

请参阅 examples/ 文件夹以了解所有用例
如果您只想玩一下,请确保首先安装了composer并运行 "./composer.phar dump-autoload" 以使用示例

<?php
// scrape some simple API with HTTP Basic auth
$api_token = '12345';
$api_secret = 'abcde';

$config = array(
    // configure mongo as local cache - required
    'storage' => array(
        'class' => "\\Scrape\\Storage\\Backend\\Mongo",
        'config' => array(
            'connection' => 'mongodb://127.0.0.1:27017',
            'database' => 'apiscrape',
            'collection' => 'api',
            )
        ),
    // configure HTTP Basic auth - optional
    'auth' => array(            
        'class' => '\\Scrape\\Auth\\HttpBasic',
        'config' => array(
            'user' => $api_token,
            'secret' => $api_secret
            ),
        ),
    );

$debug = true;
$cli = new \Scrape\Client\Client($config, $debug);

$data = $cli
    ->setCurlTimeout(20) // their api may be slow
    ->setStorageCacheTime(3600) // their api may not return Cache-Control headers
    ->get('https://api.example.com/object/1234');

本地存储

目前,仅支持1个存储引擎,MongoDB。
请参阅 src/Scrape/Storage/Backend 以获取详细信息

MongoDB中的文档结构如下

{
    "_id" : ObjectId("1234567890abcdef"),
    "path" : "https://api.example.com/object/1234",
    "response" : {
        "user" : {
            "id": 1234,
            "name": "bob"
        }
    },
    "cache" : 1402931406,
    "etag" : "9331ce52904149e0325611517dfa4345"
}

_id - mongo自动生成的id

path - 实际URL,此字段有一个唯一索引

response - API的精确JSON响应

cache - 从Cache-Control或本地配置的未来过期时间戳
如果当前时间小于此值,则不会发出HTTP请求,并且将直接从缓存返回此对象

etag - API返回的可选Etag值