basetime / snapsites
Installs: 9
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/basetime/snapsites
Requires
- ext-json: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- symfony/var-dumper: 6.4.x-dev
README
PHP client library for using Snapsites.io.
Making a request to the Snapsites API requires an API key and secret. You can get these from the Snapsites dashboard.
Installation
Use Composer to install the library.
composer require basetime/snapsites
Usage
Making a single request.
<?php use Basetime\Snapsites\Client; use Basetime\Snapsites\ApiRequest; $apiSecret = '123'; $endpoint = 'dyNmcmgxd4BFmuffdwCBV0'; $client = new Client(); $resp = $client->screenshotWait($endpoint, $apiSecret, new ApiRequest([ 'url': 'https://avagate.com', 'type': 'jpg', ])); echo json_encode($resp);
Outputs:
Basetime\Snapsites\ApiResponse Object
(
    [id] => 9828e8f1-61e5-42ba-8ac6-665e539c78d4
    [time] => 9037
    [statusUri] => http://dev-api.snapsites.io/dyNmcmgxd4BFmuffdwCBV0/status/9828e8f1-61e5-42ba-8ac6-665e539c78d4
    [beaconUri] => endpoints/dyNmcmgxd4BFmuffdwCBV0-8HcF7rATDipE4c5PCiL3q3-64zwGRCZindv5UXBXtc4fv
    [errors] => []
    [cost] => -0.2
    [balance] => 39.5
    [images] => [
        https://storage.googleapis.com/cdn_snapsites_io/9znViKWbcBj7jRkfJkDnZU.jpeg
    ]
    [pdfs] => []
)
Making multiple requests at once.
<?php use Basetime\Snapsites\Client; use Basetime\Snapsites\ApiRequest; $apiSecret = '123'; $endpoint = 'dyNmcmgxd4BFmuffdwCBV0'; $client = new Client(); $resp = $client->batchScreenshotsWait($endpoint, $apiSecret, [ new ApiRequest([ 'browser': 'firefox', 'url': 'https://avagate.com', 'type': 'pdf', ]), new ApiRequest([ 'browser': 'webkit', 'url': 'https://google.com', 'type': 'pdf', ]), ]); echo json_encode($resp);
Outputs:
Basetime\Snapsites\ApiResponse Object
(
    [id] => 9828e8f1-61e5-42ba-8ac6-665e539c78d4
    [time] => 9037
    [statusUri] => http://dev-api.snapsites.io/dyNmcmgxd4BFmuffdwCBV0/status/9828e8f1-61e5-42ba-8ac6-665e539c78d4
    [beaconUri] => endpoints/dyNmcmgxd4BFmuffdwCBV0-8HcF7rATDipE4c5PCiL3q3-64zwGRCZindv5UXBXtc4fv
    [errors] => []
    [cost] => -0.2
    [balance] => 39.5
    [images] => []
    [pdfs] => [
        https://storage.googleapis.com/cdn_snapsites_io/9znViKWbcBj7jRkfJkDnZU.pdf
        https://storage.googleapis.com/cdn_snapsites_io/4zn09KWbcBj7jikfJkDnZg.pdf
    ]
)
Instead of waiting for snapsites to finish generating the screenshot, you can poll for the status of the request or use the beaconUri.
$apiSecret = '123'; $endpoint = 'dyNmcmgxd4BFmuffdwCBV0'; $client = new Client(); $resp = $client->screenshot($endpoint, $apiSecret, new ApiRequest([ 'url': 'https://avagate.com', 'type': 'jpg', ])); echo json_encode($resp); /** * @var Beacon[] $beacons */ $result = $client->onBeacon($resp->beaconUri, function (array $beacons) { dump($beacons); $done = 0; foreach($beacons as $beacon) { if ($beacon->status === 'success') { $done++; } } if ($done === count($beacons)) { return true; } });
Response:
Basetime\Snapsites\ApiStatus Object
(
  [id]: 1917c524-044d-456b-b7af-4397499dade8
  [time]: 13085
  [cost]: -0.1
  [balance]: 9492.2
  [status]: http://api.snapsites.io/dyNmcmgxd4BFmuffdwCBV0/status/1917c524-044d-456b-b7af-4397499dade8
  [beaconUri]: endpoints/dyNmcmgxd4BFmuffdwCBV0-8HcF7rATDipE4c5PCiL3q3-64zwGRCZindv5UXBXtc4fv
)
[ { message: 'Starting', updatedAt: '2023-12-18T19:22:20.461Z' } ]
[
  {
    message: 'Injecting script.',
    status: 'running',
    updatedAt: '2023-12-18T19:22:21.251Z'
  }
]
[
  {
    message: 'Applying watermark.',
    status: 'running',
    updatedAt: '2023-12-18T19:22:29.006Z'
  }
]
[
  {
    message: 'Uploading to Google Cloud Storage',
    status: 'running',
    updatedAt: '2023-12-18T19:22:30.399Z'
  }
]
[
  {
    message: 'Saved in bucket cdn_snapsites_io',
    status: 'running',
    updatedAt: '2023-12-18T19:22:32.819Z'
  }
]
[
  {
    message: 'Finished.',
    status: 'finished',
    updatedAt: '2023-12-18T19:22:34.823Z'
  }
]