[ Сообщений: 36 ] 
Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 27 фев 2006, 11:56 
Аватара пользователя

Сообщения: 5
Поблагодарили: 0 раз.
woofer писал(а):
Есть ли уже готовый рабочий скрипт на пхп для конвертации xml-каталога в mysql?
Буду очень благодарен, если кто-то поделится! Хочу разобраться, как же все-таки разбирать xml и переводить его в mysql-базу! :)

Если разобраться, то сюда:
http://php.rinet.ru/manual/en/ref.xml.php

Если нужен готовый скрипт на обработку, то на мыло - exty[собака]yandex[точка]ru, хотя этого добра в сети навалом... имхо.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 мар 2006, 16:22 
Аватара пользователя

Сообщения: 1
Поблагодарили: 0 раз.
Здравствуйте служба поддержки МиксМаркет. Сегодня вы подтвердили возможность создания моего магазина, и когда я вошёл в аккунт увидел ссылки на три прайса xml и все они пустые, скажите как же я создам сайт если я не вижу в xml абсолютно не чего. Я так же прочитал что база обновляется два раза в день, скажите именно по этому мой прайс пустует? или я предположил что прайс заполнится товарами тех магазинов которые выбрали мою площадку для рекламы, но тогда у меня сразу возник вопрос как же я покажу сайт рекламодателям если нет xml из которого его лепить. То есть меня интересует в чём же всё же причина пустых прайсов в том что в течении суток 2 раза обновляется каталог или в том что нет не одного рекламодателя который разместил в моём прайсе свои товары? Жду ответа, это важно. И ещё пожалуйста если не трудно пришлите мне java script вашего меню со странички http://www.mixmarket.biz/catalogue_part/all/ я хочу такое же разместить на своём сайте. Жду ответа.

_________________
Студент ААДК.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 май 2006, 01:08 
Аватара пользователя

Сообщения: 52
Поблагодарили: 2 раз.
Тоже интересно, может быть и местным программистам замутить нечто, как партнерский магазин от porta.ru этими магазинами уже весь нет загадили, но отдача-то есть

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 мар 2009, 22:51 
Аватара пользователя

Сообщения: 228
Поблагодарили: 8 раз.
Александр Сабаев писал(а):
$doc=domxml_open_file("http://mixmarket.biz/mixmldirect.plx?id=4294967238");

Эта функция аналогична $file_array=file($file_name);
только для слива информации с другого сайта? Так?
По идее не вижу ничего сложно в операции над скачанным файлом с Вашего сайта, но вот как его скачать и сохранить скажем у себя? Это как раз и делает код, приведенный выше, так ведь? (если скажем не текст выводить, а также построчно данные в файл писать)

_________________
Разместите гороскопы на своем сайте и заработайте

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 мар 2009, 23:53 
Эксперт
Аватара пользователя

Сообщения: 2192
Поблагодарили: 2 раз.
Astrolog писал(а):
Эта функция аналогична $file_array=file($file_name);
только для слива информации с другого сайта? Так?

Нет, оно хватает файл и преобразует его в специальный объект класса Domdocument.
Короче, подготавливает его к тому, чтобы оттуда можно было доставать данные (и складывать, например, в базу данных).
См. http://ru2.php.net/manual/ru/function.d ... n-file.php

А забрать файл к себе можно так:
Код:
<?php
$xml = file_get_contents('http://mixmarket.biz/mixml.plx?id=4X9X9X5X0X');
$local = fopen('mixml.xml','w');
fwrite($local, $xml);
fclose($local);
?>

_________________
Денис Иванов, экс-Миксмаркет
upyrj@ya.ru

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 ноя 2009, 17:20 
Аватара пользователя

Сообщения: 4
Поблагодарили: 0 раз.
полностью поддерживаю запрос

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 ноя 2009, 20:30 
Аватара пользователя

Сообщения: 2
Поблагодарили: 0 раз.
Помогите отправить данные после парсера в MYSQL
Например данные на выходе парсера заносятся в переменную $tmp

Код:
$tmp = $xml->GetTag($arr,"currency");



Таблицы в MYSQL я тоже сделал руками.

Далее я соединяюсь с базой но как поступить дальше

Например при использовании mysql_query("UPDATE... - товар заменяется. Но что если заказчик сменит ID

Я так понимаю что нужно использовать связку DELETE INSERT внутри функции foreach или использовать if else

Помогите пожалуйста кусочком кода на PHP для обновления любой таблицы в MYSQL.













[/code]

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 ноя 2009, 23:59 
Аватара пользователя

Сообщения: 4
Поблагодарили: 0 раз.
Цитата:
Например при использовании mysql_query("UPDATE... - товар заменяется. Но что если заказчик сменит ID

Я так понимаю что нужно использовать связку DELETE INSERT внутри функции foreach или использовать if else

Помогите пожалуйста кусочком кода на PHP для обновления любой таблицы в MYSQL.

Мне кажется, чтобы предупредить такие и любые другие изменения в предложениях таблицу с товарами лучше перед парсингом очищать (через TRUNCATE) и заполнять заново.
1) Такой подход намного сократить количество запросов к БД (так как нужно выполнить всего один sql запрос, а не удалять каждую запись отдельным DELETE).
2) Использовать множественную вставку за один запрос, что также сохранит время и ресурсы сервера (тоесть запрос типа "INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);").
Но тут нужно учесть что максимальный размер самого текста sql запроса не должен превышать 1 Mb (насколько я помню).
В php все єто можно реализовать примерно так:
Код:
$insertParts = array();
//MIXMARKET_OFFERS - имя таблицы с предложениями
$sql = 'INSERT INTO MIXMARKET_OFFERS (....) VALUES ';

mysql_query("TRUNCATE TABLE MIXMARKET_OFFERS;");
foreach ($offers as $offer) {
  $insertParts[] = "({$offer['id']}, {$offer['brandid']}, {$offer['advid']}....)"; //Формируем одну запись для добавления
  // За один запрос добавляем 50 предложений
  if (count($insertParts) % 50 == 0) {
    mysql_query($sql . implode(',', $insertParts));
    $insertParts = array();
  }
}

//На случай если общее число предложений не делится нацело на 50
if (count($insertParts)) {
  mysql_query($sql . implode(',', $insertParts));
}

P.S. Можно еще использовать тип таблиц innoDb, что позволит использовать транзакции (http://dev.mysql.com/doc/refman/5.0/en/commit.html), что также сэкономит ресурсы. Для этого нужно перед циклом вставить
Код:
mysql_query("START TRANSACTION;");  //Начинаем транзакцию

а после цикла
Код:
mysql_query("COMMIT;"); //Выполняем за один сеанс все запросы

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2009, 00:13 
Эксперт
Аватара пользователя

Сообщения: 2192
Поблагодарили: 2 раз.
Если не ошибаюсь, то offerid вообще вечный для каждого товара.
То есть можно облегчить запросы, помечая только активность товара и обновляя его цену.

Но лучше уточнить эти моменты у саппорта или у программеров — в понедельник уже.

_________________
Денис Иванов, экс-Миксмаркет
upyrj@ya.ru

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2009, 01:10 
Аватара пользователя

Сообщения: 4
Поблагодарили: 0 раз.
ivanov писал(а):
Если не ошибаюсь, то offerid вообще вечный для каждого товара.
То есть можно облегчить запросы, помечая только активность товара и обновляя его цену.

Но лучше уточнить эти моменты у саппорта или у программеров — в понедельник уже.

Делать каждый день апдейт по offerid не есть облегчение).
Пример:
Я получаю прайс с 10тис. предложений, все они добавляются в базу.
На второй день снова 10тис. из них пусть 2 тис. новых добавляются в базу (мне нужно вставить 2000 предложений + выполнить 10тис. UPDATE запросов для обновления цены и состояния вчерашних предложений)
На третий день еще 2000 новых предложений, но теперь уже нужно сделать 12тис. UPDATE запросов для обновления цены и состояния старых предложений....
В результате каждый день количество выполняемых UPDATE запросов возрастает в арифметической прогрессии + нужно сделать запросы на вставку новых...
А если очищать таблицу предложений и заносить туда каждый раз только актуальные предложения, то количество запросов каждый день будет ~ 10000 / 50 = 200 запросов.
+ можно увеличить количество вставляемых за раз предложений до 100, то разница между больше чем 10000 запросов и 100 запросов для сервера еще ощутимей)

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2009, 05:25 
Эксперт
Аватара пользователя

Сообщения: 2192
Поблагодарили: 2 раз.
Эмм... Можно ведь таблицу цен грохать каждый раз, храня ее отдельно.
Я просто хотел намекнуть, что часть данных можно вообще не обрабатывать на уже занесенных в базу товарах.
Ну или не каждый раз обновлять.

Впрочем не стану спорить — я не спец вовсе.

_________________
Денис Иванов, экс-Миксмаркет
upyrj@ya.ru

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2009, 12:51 
Аватара пользователя

Сообщения: 4
Поблагодарили: 0 раз.
С этим я согласен что часть данных получаемых в xml можно не обновлять каждый день.
Например, хранить в отдельных таблицах: бренды, магазины, категории, регионы доставки, геотаргетинг и обновлять эти таблицы только при необходимости.
Но как я понимаю держать предложения в актуальном состоянии с минимальными затратами ресурсов и времени можно только перезаписью предложений заново.
Если Ваши специалисты подскажут оптимальный вариант импорта и обновления предложений многие будут им благодарны)

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2009, 23:02 
Эксперт
Аватара пользователя

Сообщения: 2192
Поблагодарили: 2 раз.
Ок, я попрошу программеров прокомментировать на неделе.

_________________
Денис Иванов, экс-Миксмаркет
upyrj@ya.ru

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 ноя 2009, 18:10 
Аватара пользователя

Сообщения: 11
Поблагодарили: 0 раз.
Можно реализовывать таким образом, менее затратно.
1) Если считать, что данные вставлены, нужно лишь обновить (погасить, включить товарные позиции). Мы делаем вставку лишь АйДишников во врменную таблицу. ИСпользую запросы типа:
UPDATE offers SET enable=0 WHERE ofId IN
SELECT offersCopyTable.ofId
FROM offersCopyTable
LEFT JOIN offersXMLtable
USING(ofId)
WHERE offersXMLtable.ofID IS NULL


===============
Поясню: offersCopyTable - таблица с товарными предложениями копия текущей. Именно копия, так как Обновление с таблице со вложенным запросом на выборку в ней же - недопустим. Копировать таблицу можно очень просто INSERT - SELECT
offersXMLtable - таблица с текущими разобранными товарными предложениями из нового прайс-листа XML. Именно в ней присутствуют те товары, которые отдал миксмаркет.

Таким образом, предыдущий запрос может выделить и обновить записи из таблицы offers (рабочая, по которой магазин выполняет выборки).

Чтобы включить ранее погашенные товарные предложения, надо изменить текущий запрос с точностью наоборот:
UPDATE offers SET enable=1 WHERE ofId IN
SELECT offersCopyTable.ofId
FROM offersCopyTable
LEFT JOIN offersXMLtable
USING(ofId)
WHERE offersXMLtable.ofID NOT IS NULL

==================

А вот с добавлением новых товаров - это уж сами сделаете. Там ничего необычного нет.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 ноя 2009, 18:16 
Аватара пользователя

Сообщения: 11
Поблагодарили: 0 раз.
Да, вот еще что. Желательно протестировать данные запросы на конкретной машине. Необходимо обязательно использование индексов, иначе такие апросы будут сильно нагружать машину.
В циклах PHP рекомендую использовать usleep(n), где n - это пауза в МИКРОсекундах. Это позволит дать другим ресурсам делать свое дело и не вешать сильно машину. Результат - немного дольше обрабатывается прайс, но зато гораздо меньшей ценой.

Стандартные средства XML парсеров - не очень выгодны для разбора больших прайс-листов. Несколько мегабайт XML прайса - могут заполнить всю память.
Рекомендую использовать чтение прайслиста небольшими порциями и обращать внимание на те участки, которые интересны вашему парсеру. Как только очередная порция данных прошла обработку - берем следующую часть прайса и прицепляем к оставшейся части от пердыдущего. И так далее.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 [ Сообщений: 36 ] 

   Похожие темы   Ответы   Автор   Просмотры   Последнее сообщение 
В этой теме нет новых непрочитанных сообщений. Магазин "Изящность Линий" (CPS)

в форуме Микс-Юни

0

mixJulia

10578

27 сен 2011, 11:00

mixJulia Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Магазин мужской одежды "Полный Фэшн" (CPA)

в форуме Микс-Юни

0

mixJulia

8262

05 дек 2011, 16:16

mixJulia Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Вниманию продавцов: приглашаем в новый магазин садовых товар

в форуме Сотрудничество / Работа и услуги

0

lepestok

11659

11 авг 2011, 22:42

lepestok Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Продаю рабочий интернет-магазин (сайту более 6 лет)

в форуме Сотрудничество / Работа и услуги

7

topmag

19219

23 янв 2010, 20:41

ivanov Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Магазин климатической техники ищет новые площадки

в форуме Сотрудничество / Работа и услуги

0

maytech

14195

23 окт 2008, 10:53

maytech Перейти к последнему сообщению



Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
cron


О проекте Новости Пресса о нас Сотрудничество Вакансии Контакты
2005–2011 Партнерская сеть Миксмаркет
Разработка сайта — iji-design / AdLabs
Powered by phpBB Group