liamja / cex
Client for CeX UK's internal API.
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 3
Forks: 0
Open Issues: 0
Type:project
Requires
- php: ^7.1
- ext-json: *
- guzzlehttp/guzzle: ^6.3
- netresearch/jsonmapper: ^1.4
- sensiolabs/security-checker: ^4.1
Requires (Dev)
- phpmd/phpmd: ^2.6
- phpstan/phpstan: ^0.10.3
- phpunit/phpunit: ^7
- roave/security-advisories: dev-master
This package is not auto-updated.
Last update: 2024-04-14 09:29:09 UTC
README
PHP client for CeX UK's internal Ajax API.
This client was created from reverse engineering the Ajax responses when browsing the website, so it assumes a lot.
License
Licensed under MIT - see LICENSE.md for more info.
Installation
composer require liamja/cex
Testing
vendor/bin/phpunit
Getting Started
Create a new instance of the CeX Client:
$cex = new CexClient();
Searching for Products / Boxes
Individual products are referred to as Boxes.
// Specify a new set of search parameters. $searchParameters = new SearchParameters(); $searchParameters->setSearchTerm('Super Mario Bros'); // Search for boxes that match our parameters. $boxes = $cex->searchBoxes($searchParameters); // CexClient::searchBoxes() returns an array of \Liamja\Cex\Models\Box foreach ($boxes as $box) { // Get the box's unique ID. echo $box->boxId; // 045496901738 // Get the box's name. echo $box->boxName; // New Super Mario Bros. Wii // Get the category the box belongs to. echo $box->categoryName; // Wii Software // Get the cash price. echo $box->cashPrice; // 5.00 // Get the trade-in / exchange price. echo $box->exchangePrice; // 8.00 // Get the sale price. echo $box->salePrice; // 12.00 }
Searching for Stores
To search for stock near a location, you'll first need to search for the store.
The API will return a set of stores closest to a given latitude and longitude.
Geocoding isn't in the scope of this package, but you can lookup a location's approximate latitude and longitude using a geocoding service such as http://geocode.xyz:
// Set up a new Guzzle client solely for geocoding. $geocodeClient = new \GuzzleHttp\Client([ 'base_uri' => 'https://geocode.xyz/', ]); $response = $geocodeClient->get('Manchester, UK' . '?json=1'); $results = json_decode($response->getBody()->getContent()); // Use the geocoding results to find stores closest to Manchester. $stores = $cex->nearestStores($results->latt, $results->longt);
To find stores closest to a longitude and latitude:
// First, you'll need the lat/long of the location you want to search. $latitude = 52.62343240000001; $longitude = 1.3077290999999605; // Search for stores closest to a given location. $stores = $cex->nearestStores($latitude, $longitude); // CexClient::nearestStores() returns an array of \Liamja\Cex\Models\NearestStore foreach ($stores as $store) { // Get the store's unique ID. echo $store->storeId; // 168 // Get the store's name. echo $stores->storeName; // Norwich // How far away the store is from the given location, in miles. echo $stores->distance; // 0.47 // Opening days and times. echo $box->timings['open']['monday']; // 9:00 echo $box->timings['close']['friday']; // 18:00 }
Get All Stores
$stores = $cex->getStores(); // CexClient::getStores() returns an array of \Liamja\Cex\Models\Store foreach ($stores as $store) { // Get the store's unique ID. echo $store->storeId; // 168 // Get the store's name. echo $stores->storeName; // Norwich // Get the store's region. echo $stores->storeName; // East Anglia }
Searching for Products at a Given Store
// Search for stores closest to a given location. $stores = $cex->nearestStores(52.62343240000001, 1.3077290999999605); // Get the nearest store's ID. $storeId = $stores[0]->storeId // Search for stocked Battletoads at our nearest store. $searchParameters = new SearchParameters(); $searchParameters ->setSearchTerm('Battletoads') ->setStoreId($storeId) ->isInStock(); $boxes = $cex->searchBoxes($searchParameters);
Handling Errors
If the API returns an error, a FailureException will be thrown:
try { $boxes = $cex->searchBoxes($searchParameters); } catch (\Liamja\Cex\FailureException $e) { echo $e->getMessage(); // "Missing search text" echo $e->getCode(); // echo $e->getMoreInfo(); // [] }
Cheatsheet
$cex = new CexClient(); // Search for 'Battleloads' titles that are in stock. $searchParameters = new SearchParameters(); $searchParameters ->setSearchTerm('Battletoads') ->isInStock(); $boxes = $cex->searchBoxes($searchParameters); var_dump($boxes); // Search using their predictive search (seems better at sorting by relevancy.) $searchParameters = new SearchParameters(); $searchParameters->setSearchTerm('Super Mario Bros'); $results = $cex->predictiveSearch($searchParameters); var_dump($results); // Search for stores closest to a given location. $stores = $cex->nearestStores(52.62343240000001, 1.3077290999999605); var_dump($stores); // Show all stores in the country. $stores = $cex->getStores(); var_dump($stores);