Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/liamja/cex
PHP client for CeX UK's internal Ajax API.
https://github.com/liamja/cex
api-client composer composer-package php php-library php7 rest-client shopping
Last synced: about 2 months ago
JSON representation
PHP client for CeX UK's internal Ajax API.
- Host: GitHub
- URL: https://github.com/liamja/cex
- Owner: liamja
- License: mit
- Created: 2018-08-27T18:37:49.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-09-02T09:18:58.000Z (over 6 years ago)
- Last Synced: 2024-04-29T21:21:44.597Z (8 months ago)
- Topics: api-client, composer, composer-package, php, php-library, php7, rest-client, shopping
- Language: PHP
- Homepage:
- Size: 99.6 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CeX API Client
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
```shell
composer require liamja/cex
```## Testing
```shell
vendor/bin/phpunit
```## Getting Started
Create a new instance of the CeX Client:
```php
$cex = new CexClient();
```## Searching for Products / Boxes
Individual products are referred to as _Boxes_.
```php
// 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:```php
// 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:
```php
// 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
```php
$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
```php
// 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:
```php
try {
$boxes = $cex->searchBoxes($searchParameters);
} catch (\Liamja\Cex\FailureException $e) {
echo $e->getMessage(); // "Missing search text"
echo $e->getCode(); //
echo $e->getMoreInfo(); // []
}
```## Cheatsheet
```php
$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);
```