Парсю список товаров и сохраняю в sqlite базу данных с помощью следующего кода:
<?php
set_time_limit(0);
include __DIR__ . '/config.php';
include __DIR__ . '/libs/shop.class.php';
include __DIR__ . '/libs/database.class.php';
$banlist = array_filter(array_map('trim', file(__DIR__ . '/banlist.txt')));
$shop = new Shop(__DIR__ . '/auth.cookie');
$db = new DataBase(__DIR__ . '/db.sqlite');
// Проверка авторизации. Если уже авторизован, то идет дальше, нет - авторизуется по логину и паролю
if (!$shop->checkAuth()) {
$shop->auth(USER, PASS);
if (!$shop->checkAuth()) {
die('Can\'t auth');
}
}
$items = $db->all();
for ($page = 1; $page >= 1; $page--) {
//for ($page = 1; $page <= 1; $page++) {
// Загрузка
$items = $shop->getMarketplaceTrends('Day', $page);
//krsort($items);
krsort($item->id);
foreach ($items as $item) {
if (!in_array($item->user['id'], $banlist)) {
if ($db->exists($item, 3)) {
continue;
}
$item->downloadAndResizeImages();
$db->add(array_merge($item->only(['title', 'description', 'image', 'images', 'wareUrl', 'user', 'user_id', 'rate', 'createdAt', 'price', 'price_total']), [
//'id' => (3 * 10000000) + $item->id,
'wareUrl' => trim($item->wareUrl, '/'),
'id' => $item->id,
'item_id' => $item->id,
'type' => 3,
'user_id' => $item->user['id'],
'user_fullname' => $item->user['fullName'],
'hasPromo' => (int)$item->hasPromo,
'price_total' => $item->price['total'],
'time' => date("r")
]));
}
sleep(SLEEP_CHECKS);
}
sleep(SLEEP);
// Загрузка
$items = $shop->getMarketplaceTrends('ThreeDays', $page);
//krsort($items);
krsort($item->id);
foreach ($items as $item) {
if (!in_array($item->user['id'], $banlist)) {
if ($db->exists($item, 3)) {//4
continue;
}
$item->downloadAndResizeImages();
$db->add(array_merge($item->only(['title', 'description', 'image', 'images', 'wareUrl', 'user', 'user_id', 'rate', 'createdAt', 'price', 'price_total']), [
//'id' => (4 * 10000000) + $item->id,
'wareUrl' => trim($item->wareUrl, '/'),
'id' => $item->id,
'item_id' => $item->id,
'type' => 3,//4
'user_id' => $item->user['id'],
'user_fullname' => $item->user['fullName'],
'hasPromo' => (int)$item->hasPromo,
'price_total' => $item->price['total'],
'time' => date("r")
]));
}
sleep(SLEEP_CHECKS);
}
sleep(SLEEP);
// Загрузка
$items = $shop->getMarketplace('leaders', $page);
//krsort($items);
krsort($item->id);
foreach ($items as $item) {
if (!in_array($item->user['id'], $banlist)) {
if ($db->exists($item, 3)) {//5
continue;
}
$item->downloadAndResizeImages();
$db->add(array_merge($item->only(['title', 'description', 'image', 'images', 'wareUrl', 'user', 'user_id', 'rate', 'createdAt', 'price', 'price_total']), [
//'id' => (5 * 10000000) + $item->id,
'wareUrl' => trim($item->wareUrl, '/'),
'id' => $item->id,
'item_id' => $item->id,
'type' => 3,//5
'user_id' => $item->user['id'],
'user_fullname' => $item->user['fullName'],
'hasPromo' => (int)$item->hasPromo,
'price_total' => $item->price['total'],
//'time' => microtime(true)
'time' => date("r")
]));
}
sleep(SLEEP_CHECKS);
}
sleep(SLEEP);
}
echo 'Done';
Скрипт запускаю по крону и каждый раз все товары загружаются по новой.
Как сделать проверку на ранее загруженные товары, например по id или item_id, чтобы скрипт сначала проверял наличие товара в базе и парсил его только в том случае, если товара в базе нет?
Спасибо!