Данный метод может использоваться как для добавления новых записей в MySQL-базу (добавление товаров в интернет-магазин, добавление статей и прочее), так и для обновления уже существующих записей базы (обновление цен товаров и других данных) в автоматическом режиме в процессе парсинга контента.
Примечание: Примеры кода на этой странице сделаны для версии PHP до 7.0. Обычно, в настройках хостинга, вы можете переключиться на версию PHP ниже 7.0 или использовать код для версии 7.0 и выше! Запросы к MySQL-базе будут посылаться с помощью PHP-скрипта, подключенного к шаблону вывода Content Downloader при парсинге каждого документа во вкладке “контент”. Если вы хотите, чтобы Content Downloader сам загружал на FTP-сервер картинки или файлы (при парсинге каждого документа), то сделайте так, как написано на этой странице. |
Где красными маркерами выделено название базы (semh2_ocart1), зелеными маркерами выделены названия таблиц (oc_product), синим маркером выделены названия полей таблицы (product_id), а ниже синего маркера расположены сами записи выбранной таблицы.
Суть метода проста:
– Отправляем данные из Content Downloader PHP-скрипту (макросом(ами) PHP_SCRIPT), который расположен на сервере с MySQL-базой
– Скрипт делает запросы к базе (добавляя в нее записи или обновляя их)
Например, имеем такой скрипт:
1 2 3 4 5 6 7 8 | <?php $db = mysql_connect("localhost", "user5", "password5"); #подключение к MySQL с передачей имени пользователя (user5) и пароля (password5) mysql_select_db("semh2_ocart1"); #выбираем базу semh2_ocart1 mysql_query("SET NAMES utf8"); $_POST[id] = mysql_real_escape_string($_POST[id]); #экранируем специальные символы в полученных от Content Downloader POST-данных id $_POST[model] = mysql_real_escape_string($_POST[model]); #экранируем специальные символы в полученных от Content Downloader POST-данных model mysql_query("INSERT INTO oc_product (product_id, model) VALUES ('$_POST[id]', '$_POST[model]')"); #добавляем запись в таблицу oc_product с полями product_id и model (где $_POST[id] - значение поля product_id, $_POST[model] - значение поля model) ?> |
Примечание: Различных запросов mysql_query в одном PHP-скрипте может быть сколько угодно много!
Данный PHP-скрипт располагается на FTP-сервере с нужной базой данных. Он будет выполнять запрос mysql_query(INSERT) к выбранной базе semh2_ocart1. Данный запрос будет добавлять в таблицу oc_product запись с заполняемыми полями: product_id и model. Значения этих полей будут передаваться от Content Downloader в POST-данных $_POST[id] и $_POST[model] соответственно.
В этом случае, чтобы передать эти POST-данные (id и model) из Content Downloader в PHP-скрипт на сервере с базой, нужно в шаблон вывода Content Downloader (ctrl+2) вставить примерно такой макрос PHP_SCRIPT:
1 2 | <PHP_SCRIPT=http://адрес_к_скрипту>id=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE] model=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE]</PHP_SCRIPT> |
Где <CD_GRAN_1!> – граница парсинга, которая выводит id, а <CD_GRAN_2!> – выводит model. Подробнее о макросе PHP_SCRIPT вы можете почитать тут
Основные типы MySQL-запросов, которые нам могут понадобиться:
INSERT – служит для добавления записей в таблицу (с ним мы уже знакомы)
UPDATE – служит для обновления полей записей таблицы
SELECT – берет значения записей таблицы
DELETE – служит для удаления записей таблицы (mysql_query (“DELETE FROM таблица WHERE условие”);)
UPDATE:
1 2 3 | ... mysql_query("UPDATE oc_product SET model='$_POST[model]', quantity='$_POST[quantity]' WHERE product_id='$_POST[id]'"); ... |
Этим запросом UPDATE мы присвоим новые значения для полей model и quantity в той записи, где product_id равен $_POST[id]
SELECT:
1 2 3 4 5 | ... $result=mysql_query("SELECT quantity FROM oc_product WHERE product_id='$_POST[prod_id]'"); $myrow=mysql_fetch_array($result); echo($myrow['quantity']); ... |
Этим запросом SELECT мы возьмем значение поля quantity из записи (в которой product_id равен $_POST[id]) таблицы oc_product
Как выводить в результат работы скрипта сообщения об ошибках MySQL-запросов:
1 2 3 4 5 6 7 8 | ... $retval = mysql_query("UPDATE oc_product SET model='$_POST[model]', quantity='$_POST[quantity]' WHERE product_id='$_POST[prod_id]'"); if(! $retval ) { die('Could not update data: ' . mysql_error()); } echo "Updated data successfully\n"; ... |
все отлично. только вопрос, если надо спарсить инфу с сайта донора на свой интернет магазин, в инфе по 800 000 позиций товара. Сколько времени потребуется сидеть с программой для парсинга такого количества инфы?
Обычно скорость парсинга – 2-3 товара в секунду. Считайте… =)
Дополнение к материалу выше, настройка сбора информации в базу SQL для версии Х
http://forum.sbfactory.ru/showthread.php?p=10431