Мне нужно кэшировать результаты синтаксического анализа Steam API. И так кешированный результат длится 15 минут. У меня есть код:
public function load()
{
if (Auth::guest()) return response()->json(['success' => false, 'msg' => 'You need login!']);
$inventory = $this->getInventory(file_get_contents('http://steamcommunity.com/inventory/' . $this->user->steamid64 . '/570/2?l=russian&count=5000', true));
if (!$inventory) {
return response()->json(['success' => false, 'msg' => 'Error']);
}
$items = [];
$items_with_prices = json_decode(\Storage::get('prices.txt'));
$items_with_prices_by_key = [];
foreach ($items_with_prices->items as $item_price_key => $item_price_data) {
$items_with_prices_by_key[$item_price_key] = $item_price_data->price;
}
foreach ($inventory['rgInventory'] as $info) {
$item = $inventory['rgDescriptions'][$info['classid'] . '_' . $info['instanceid']];
if ($item['tradable'] == 0) continue;
$price = 0;//InventoryController::getItemPrice($item['market_hash_name']);
if (array_key_exists($item['market_hash_name'], $items_with_prices_by_key)) {
$price = $items_with_prices_by_key[$item['market_hash_name']];
}
if (!$price) continue;
if ($price < 1) $price = 0.64;
$type = $this->getType($item['type']);
$items[] = [
'id' => $info['id'],
'classid' => $item['icon_url'],
'price' => round($price, 2),
'type' => $type
];
}
usort($items, function($a, $b){
return ($b['price'] - $a['price']);
});
return response()->json(['success' => true, 'items' => $items]);
}
Этот код работает только тогда, когда пользователь сайта нажимает кнопку «показать мои элементы» и в список элементов пользователя в Steam Dota 2 отправляется запрос. Теперь, если нажмите Чтобы постоянно получать список элементов, Steam может заблокировать IP-адрес сервера на 24 часа. Насколько я понимаю, мне нужно выбросить результат переменной $inventory
в кеш. Я создаю таблицу базы данных cache
с полями id
, user_id
, items
, date
.
Как теперь я могу кэшировать результат из переменной $inventory
продолжительностью 15 минут?