[ Сообщений: 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

13460

27 сен 2011, 11:00

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

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

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

0

mixJulia

10798

05 дек 2011, 16:16

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

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

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

0

lepestok

15869

11 авг 2011, 22:42

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

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

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

7

topmag

23779

23 янв 2010, 20:41

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

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

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

0

maytech

18335

23 окт 2008, 10:53

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



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


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