mgribov / apiscrape
具有本地缓存的通用HTTP REST API爬取器
Requires
- php: >=5.3.0
- ext-curl: *
- ext-json: *
This package is not auto-updated.
Last update: 2024-09-14 16:03:15 UTC
README
具有本地缓存的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值