Как получить информацию и ценность любой криптовалюты (Биткойн, Эфириум) в Laravel

В настоящее время существуют сотни криптовалют, и мы живем в их спекулятивном буме. Если вы занимаетесь этим бизнесом, вы можете быть в курсе информации о любой криптовалюте, используя бесплатный CoinMarketAPI.

Как работает API?

CoinMarketAPI выставляет 3 конечные точки. В этом случае мы будем использовать только один /ticker конечная точка для получения информации об одной криптовалюте. Этот API возвращает информацию о криптовалюте из ее идентификатора в формате JSON:

https://api.coinmarketcap.com/v1/ticker//

API позволяет конвертировать валюты в наиболее известные валюты мира со следующими идентификаторами: «AUD», «BRL», «CAD», «CHF», «CNY», «EUR», «GBP», « HKD «,» IDR «,» INR «,» JPY «,» KRW «,» MXN «,» RUB «:

https://api.coinmarketcap.com/v1/ticker//?convert=EUR

Хотя API полностью бесплатен, авторы устанавливают ограничение, которое вы можете применить при запросе этой информации:

  • Пожалуйста, ограничьте количество запросов не более 10 в минуту (см. Шаг 3).

Конечные точки API обновляются каждые 5 минут.

Важный

В этой статье мы объясним вам, как запрашивать информацию о валюте с помощью простого http-клиента Guzzle и кэшированного, как и должно быть.

1. Установите GuzzleHttpClient

Guzzle — это PHP-HTTP-клиент, который упрощает отправку HTTP-запросов и упрощает интеграцию с веб-сервисами. Он имеет действительно простой интерфейс для создания строк запросов, запросов POST, потоковой передачи больших загрузок, потоковой передачи больших загрузок, использования файлов cookie HTTP, загрузки данных JSON и так далее.

Чтобы сделать запрос к API через PHP, вам понадобится эта библиотека. Вы можете установить его с помощью следующей команды composer:

composer require require guzzlehttp/guzzle

Или измените composer.json файл и добавить зависимость вручную:

{
"require": {
"guzzlehttp/guzzle": "^6.3",
},
}

И, наконец, установите их, используя composer install, Для получения дополнительной информации об этой библиотеке, пожалуйста, посетите официальный репозиторий на Github здесь.

2. Запрос информации о криптовалюте

Основная цель руководства — о том, как получить информацию о криптовалюте в виде биткойнов, Ethereum, Litecoin и т. Д. Используя клиент Guzzle, вы сделаете запрос так же, как и в браузере.

Первое, что вам нужно сделать, это создать экземпляр Guzzle Client. У клиента есть метод, а именно запрос, который в качестве первого аргумента ожидает тип запроса, а в качестве второго аргумента — URL-адрес запроса, который вы хотите сделать. В этом случае первым аргументом будет GET формат и в качестве второго аргумента вы будете использовать URL-адрес API CoinMarketCap (с идентификатором необходимой вам криптовалюты и, при желании, конвертацией валюты). По завершении запроса вы можете получить тело ответа, используя getBody метод результата, который в этом случае будет простой строкой в ​​формате JSON, поэтому не забудьте преобразовать ее в массив, используя json_decode, Сгенерированный массив будет содержать всю информацию, которую API предоставляет о валюте:

Предупреждение

Не используйте следующий код в производстве, это просто чтобы показать вам, как можно использовать Guzzle Client для доступа к API. Запросы не кэшируются!

Используйте это только в локальной среде (среде разработки), чтобы впервые протестировать библиотеку.

getCryptoCurrencyInformation("bitcoin");
// About the Ethereum currency but in Euros instead of United States Dollar
$ethereumInfo = $this->getCryptoCurrencyInformation("ethereum", "EUR");
// And so on with more than 1010 cryptocurrencies ...
// Return a view as response (default.blade.php)
return view("default", [
"bitcoin" => $bitcoinInfo,
"ethereum" => $ethereumInfo
]);
}
/**
* Retrieves the complete information providen by the coinmarketcap API from a single currency.
* By default returns only the value in USD.
*
* WARNING: do not use this code in production, it's just to explain how the API works and how
* can the information be retrieved. See step 3 for final implementation.
*
* @param string $currencyId Identifier of the currency
* @param string $convertCurrency
* @see https://coinmarketcap.com/api/
* @return mixed
*/
private function getCryptoCurrencyInformation($currencyId, $convertCurrency = "USD"){
// Create a new Guzzle Plain Client
$client = new Client();
// Define the Request URL of the API with the providen parameters
$requestURL = "https://api.coinmarketcap.com/v1/ticker/$currencyId/?convert=$convertCurrency";
// Execute the request
$singleCurrencyRequest = $client->request('GET', $requestURL);
// Obtain the body into an array format.
$body = json_decode($singleCurrencyRequest->getBody() , true)[0];
// If there were some error on the request, throw the exception
if(array_key_exists("error" , $body)){
throw $this->createNotFoundException(sprintf('Currency Information Request Error: $s', $body["error"]));
}
// Returns the array with information about the desired currency
return $body;
}
}

На данный момент вы можете запросить информацию о 2 желаемых валютах, а именно Биткойн и Эфириум. Как вы можете видеть в нашем действии index, мы возвращаем шаблон blade, а именно default, который содержит следующую структуру:

Price of the Bitcoin (USD): $ {{ $bitcoin["price_usd"] }}
Price of the Ethereum (EUR): € {{ $ethereum["price_eur"] }}
{{-- Dump the entire arrays into the view --}}
{{dd($bitcoin)}}
{{dd($ethereum)}}

Поэтому, если вы получите доступ к индексному маршруту контроллера, вы получите следующий HTML-контент:

Эфириум и Биткойн Валюта с запросом Laravel

Тем не мение, это не будет длиться дольше. Если вы продолжаете запрашивать без кэша, API CoinMarketCap предупредит вас, что вы делаете слишком много запросов, поэтому вам нужно будет реализовать Cache Manager для запросов.

3. Внедрить систему кеша

Вам нужно будет реализовать менеджер кеша для клиента Guzzle, потому что, как уже упоминалось ранее, API абсолютно бесплатный, и мы не можем злоупотреблять им (кроме того, вы получите исключение из-за большого количества запросов, которые вы можете сделать, если вы не реализовать кэш «429 Too Many Requests»).

Cache Manager должен быть реализован вами так, как вы хотите. Для ленивых разработчиков, которые могут не знать, как обращаться с кешем, мы покажем пример использования кеша файловой системы. Для этого вам потребуется установить 2 дополнительные библиотеки для работы с Cache, речь идет о компоненте Cache Symfony и промежуточном программном обеспечении Guzzle Cache. Установите библиотеки с помощью composer, выполнив следующие команды:

REM Install the Cache Component of Symfony:
composer require symfony/cache
REM And install the Cache Middleware for Guzzle:
composer require kevinrob/guzzle-cache-middleware

После установки вы сможете использовать свои классы в собственном контроллере. Используя Cached Client of Guzzle, который мы собираемся реализовать, используя файловую систему вместо простого клиента, в каталоге cache вашего проекта laravel появится новая папка (в данном случае /bootstrap/GuzzleFileCache). Не забудьте правильно дать разрешения на запись в папку.

В примере создается новый метод, а именно getGuzzleFileCachedClient, Этот метод должен быть закрытым и возвращать новый экземпляр клиента Guzzle (используемый для запроса информации о валюте), однако с реализацией Cache с использованием компонента Symfony Cache и промежуточного программного обеспечения Guzzle Cache. Вы можете реализовать службу с клиента для поддержания чистоты вашего контроллера, но если вы только тестируете, сделать это в контроллере может быть проще и быстрее. Как указано в API, идеальное время кеширования составит 10 минут (600 секунд). Остальная часть кода в контроллере останется прежней, но вместо создания нового клиента используйте кэшированный:

getCryptoCurrencyInformation("bitcoin");
// About the Ethereum currency but in Euros instead of United States Dollar
$ethereumInfo = $this->getCryptoCurrencyInformation("ethereum", "EUR");
// And so on with more than 1010 cryptocurrencies ...
// Return a view as response (default.blade.php)
return view("default", [
"bitcoin" => $bitcoinInfo,
"ethereum" => $ethereumInfo
]);
}
/**
* Retrieves the complete information providen by the coinmarketcap API from a single currency.
* By default returns only the value in USD.
*
*
* @param string $currencyId Identifier of the currency
* @param string $convertCurrency
* @see https://coinmarketcap.com/api/
* @return mixed
*/
private function getCryptoCurrencyInformation($currencyId, $convertCurrency = "USD"){
// Create a Custom Cached Guzzle Client
$client = $this->getGuzzleFileCachedClient();
// Define the Request URL of the API with the providen parameters
$requestURL = "https://api.coinmarketcap.com/v1/ticker/$currencyId/?convert=$convertCurrency";
// Execute the request
$singleCurrencyRequest = $client->request('GET', $requestURL);
// Obtain the body into an array format.
$body = json_decode($singleCurrencyRequest->getBody() , true)[0];
// If there were some error on the request, throw the exception
if(array_key_exists("error" , $body)){
throw $this->createNotFoundException(sprintf('Currency Information Request Error: $s', $body["error"]));
}
// Returns the array with information about the desired currency
return $body;
}
/**
* Returns a GuzzleClient that uses a cache manager, so you will use the API without any problem and
* request many times as you want.
*
* The cache last 10 minutes as recommended in the API.
*/
private function getGuzzleFileCachedClient(){
// Create a HandlerStack
$stack = HandlerStack::create();
// 10 minutes to keep the cache
$TTL = 600;
// Retrieve the cache folder path of your Laravel Project
$cacheFolderPath = base_path() . "/bootstrap";
// Instantiate the cache storage: a PSR-6 file system cache with
// a default lifetime of 10 minutes (60 seconds).
$cache_storage = new Psr6CacheStorage(
new FilesystemAdapter(
// Create Folder GuzzleFileCache inside the providen cache folder path
'GuzzleFileCache',
$TTL,
$cacheFolderPath
)
);
// Add Cache Method
$stack->push(
new CacheMiddleware(
new GreedyCacheStrategy(
$cache_storage,
600 // the TTL in seconds
)
),
'greedy-cache'
);
// Initialize the client with the handler option and return it
return new Client(['handler' => $stack]);
}
}

Помните, что у вас есть доступ с этим API к значению (до даты этой статьи) 1010 криптовалют на рынке, поэтому не забудьте взглянуть на домашняя страница CoinMarketCap здесь.

Ссылка на основную публикацию
Adblock
detector