API XML Парсинг PHP - первые шаги, подскижите!

Menro

web, seo, email, hack
Регистрация
27 Янв 2008
Сообщения
689
Реакции
138
Всем привет!
Встала задача загрузить товары в магазин с сайта поставщика.
Поставщик дает API для взаимодействия, формирует XML файл.
То есть могу обратиться и получить товары, после чего уже записать эти товары в базу.
Мне нужно спарсить товары одной товарной группы, пока у меня получается вот так:

PHP:
<?php

$xml = simplexml_load_file('https://shopntoys.ru/apiopt/get/content/?key=api_key&offset=1');

foreach($xml->content->product as $product) {
   
    $role = $product->attributes();
    foreach($product as $key => $value) {
           
            if($role->category_id == "1154")
            echo("[".$key ."] ".$value . "<br />");
    }
   
}

?>

Парсим файл, находим все продукты, затем получаеем атрибуты и проходимся циклом, что бы вывести товары с category_id == "1154", в целом как бы всё норм, но вот поставщик ограничил вывод товаров за один запрос, он показывает только первые 50.
А мне нужен весь список. Вот не пойму, как мне пройти по всему списку.
В запрос можно добавить параметр offset, например: Для просмотра ссылки Войди или Зарегистрируйся, тогда откроется следующая страница ну и т.д.

То есть мне нужно пройти по всем страницам и спарсить товары с category_id == "1154".
Конечно не самый лучший вариант, было бы хорошо если можно было указать товары какой категории отобразить, но тут такого нет, придется проходить весь список.

Можете подсказать как это правильно сделать?

Спасибо!
 
Последнее редактирование модератором:
Можете подсказать как это правильно сделать?
Вы немного не правильно про смешение
limit - сколько товаров показывать
offset - это не страница, а смещение в товарах

при лимите в 50, следующая страница офсета 51

когда лимит исчерпан, выдается пустая страница

Скрытое содержимое для пользователя(ей): Menro, RORC
 
Последнее редактирование:
Вы немного не правильно про смешение
limit - сколько товаров показывать
offset - это не страница, а смещение в товарах

при лимите в 50, следующая страница офсета 51

когда лимит исчерпан, выдается пустая страница
Ну вот, видимо я что-то не так понимаю.
При этом limit всегда не больше 50, а товаров больше.
Как мне пройтись по всем товарам?
 
limit всегда не больше 50
чуть выше сообщение дополнил, посмотрите.
Алгоритм
Получили общее количество, и дальше поехали
offset=0
offset=50
offset=100
и так далее до общего количества товаров в базе
 
Там дофига товаров, это они что-то зверское учудили. Рекомендую в сапорт обратится и попросить нормальную выгрузку.
Я долистал до Для просмотра ссылки Войди или Зарегистрируйся и никакого доп параметра означающего стоп нет. Так апи вообще не пишется :work:
Надо смотреть на количество элементов в теге content, если их 0, останавливать проход.
Самая простая и медленная листалка:

PHP:
$countContent = 50;
$offset = 0;
while($countContent) {
	$countContent = getAndParse($offset);
	$offset += 50;
}

function getAndParse($offset = 1) {
	$xml = simplexml_load_file('https://shopntoys.ru/apiopt/get/content/?key=api_key&offset=' . $offset);

	foreach($xml->content->product as $product) {
   		$role = $product->attributes();
		foreach($product as $key => $value) {
            if($role->category_id == "1154")
            echo("[".$key ."] ".$value . "<br />");
		}
	}
	
	return count($xml->content->product);
}
Работать это будет много часов...
Так что если это был вывод на сайт - надо переписывать.

Оптимизаций тут куча возможных:
- добавить курл с keep-alive вместо simplexml_load_file раза в 2 ускорит;
- добавить кеш или бд;
- проход по крону.

PS: мой код это быстрый набросок, надо тестить ;)
 
Последнее редактирование:
Скрытое содержимое для пользователя(ей): Menro, RORC
 
параметра означающего стоп нет
Все там есть,
Скрытое содержимое доступно для зарегистрированных пользователей!

смешение в товарах, а не страницах

Так апи вообще не пишется
Вот тут полностью согласен
 
Однозначно идиотизм.
Почему нельзя сделать выборку нужных товаров по категории, это было отлично.
Ну да ладно.
Буду пробовать. Если кто-то захочет подсказать что-нибудь - буду очень признателен!
 
мне показалось, или прайс-листы .xlsx (Для просмотра ссылки Войди или Зарегистрируйся) у них формируются на лету. запрос - скачать к себе xlsx - распарсить. люблю, когда все на моем хостинге лежит для дальнейшей работы. а по 50 товаров за раз... дурдом
 
мне показалось, или прайс-листы .xlsx (Для просмотра ссылки Войди или Зарегистрируйся) у них формируются на лету. запрос - скачать к себе xlsx - распарсить. люблю, когда все на моем хостинге лежит для дальнейшей работы. а по 50 товаров за раз... дурдом
Хз как он формируется, но там нет нужного количества данных, тех же фото (они есть но их мало).
Вообщем вариант этот не подойдет.
 
Назад
Сверху