Работа с онлайн досками от А до Я. Объявления.
В этой статье поговорим о формате объявлений для работы с досками объявлений и как работать с этими форматами в программе.
До того момент как вы приняли решение автоматизировать работу с досками вы уже наверняка с ними работали и именно этот опыт работы и подтолкнул вас к идее избавиться от этой рутины. А значит у вас уже есть объявления, с которыми вы работаете, а это в свою очередь значит что вы их можете использовать в программе в том виде в котором они у вас есть. Это избавит вас от лишней работы, особенно если у вас этих объявлений десятки или сотни.
Работа с объявлениями из базы данных.
Объявления в текстовом виде.
Предположим вы имеете объявления описание которых хранится в текстовом файле, а картинки для этого объявления лежат в отдельной папке рядом.
Что бы адаптировать ваши объявления к работе с программой вам понадобится системность, то есть формат всех имеющихся файлов у вас должен быть одинаковый.
К примеру у нас есть файл Peugeot 508 Allure 2.0HDI 2012.txt со следующим содержанием:
Peugeot 508 Allure 2.0HDI 2012
37638
Белый
2012
Автомат
Дизель
2000
4000
Автомобиль с тест-драйва, на учете не стоял. Комплектация Allure + ксенон + сигнализация + передний парктроник + белый перламутр.
Седан
Мы видим что формат объявления содержит в каждой строке своё значения:
Название
Цена
Цвет
Год выпуска
Тип коробки передач
Топливо
Объём двигателя
Пробег
Описание
Тип кузова
Соответственно все объявления должны быть в таком формате и в них надо будет ещё добавить путь к картинкам. К примеру так: Peugeot 508 Allure/img1.jpg,Peugeot 508 Allure/img2.jpg. В итоге наши файлы с объявлениями будут в таком виде:
Peugeot 508 Allure 2.0HDI 2012
37638
Белый
2012
Автомат
Дизель
2000
4000
Автомобиль с тест-драйва, на учете не стоял. Комплектация Allure + ксенон + сигнализация + передний парктроник + белый перламутр.
Седан
Peugeot 508 Allure/img1.jpg,Peugeot 508 Allure/img2.jpg
Все остальные данные для объявлений типа Контактное лицо, Телефон, Адрес и т.д. будут одинаковыми, в противном случае они должны быть внесены в файлы.
Все объявления находятся в одной папке. Для работы с такими объявлениями у нас будет следующий код:
// папка с объявлениями
$ads_folder="ads";
// получить все файлы в в папке
$all_items = $folder->get_all_items($ads_folder,false, false);
$all_items=explode("<br>",$all_items);
//print_r($all_items);
// цикл по всем элементам
foreach ($all_items as $value)
{
// получить имя файла
$name = $file_os->get_name($value);
//echo $name."<br>";
if($file_os->get_ext($name)=="txt")
{
$data_file = file($ads_folder."//".$name,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
//print_r($data_file);
// название
echo "название: ".$data_file[0]."<br>";
echo "цена: ".$data_file[1]."<br>";
echo "цвет: ".$data_file[2]."<br>";
echo "год выпуска: ".$data_file[3]."<br>";
echo "Тип коробки передач: ".$data_file[4]."<br>";
echo "Топливо: ".$data_file[5]."<br>";
echo "Объём двигателя: ".$data_file[6]."<br>";
echo "Пробег: ".$data_file[7]."<br>";
echo "Описание: ".$data_file[8]."<br>";
echo "Тип кузова: ".$data_file[9]."<br>";
echo "картинки из файла: ".$data_file[10]."<br>";
// подучаем пути к картинкам
$arr_photo=explode(",",$data_file[10]);
print_r($arr_photo);
}
}
Задать вопросы или обсудить пример на нашем форуме.
Объявления в формате XML.
Очень распространённый формат обмена данными это XML файлы. В частности этот формат поддерживают доски объявлений при автозагрузке на них большого количества объявлений.
Что такое xml?
Данные в XML файлах заключаются в теги, которые определяют структуру и смысл этих данных. То есть с помощью тэгов вы помечаете что за тип данных заключён в теги. К примеру:
Volkswagen
Golf
2008
2012
Универсал
5
Разбор XML файлов в PHP.
Для работы c XML файлами в php добавлен класс SimpleXML. Предположим у нас есть xml файл в следующем формате:
auto_001
Package
Free
Москва, улица Народного ополчения, 41
Замечательный экземпляр легендарного автомобиля Volkswagen Golf
Автомобили
С пробегом
Не битый
895000
Volkswagen
Golf
2011
1FTWR72P1LVA41777
Универсал
5
Золотой
Левый
334847
339991
...
...
и т.д.
Пример php кода для работы с таким файлом:
// папка с объявлениями
$xml_file="data//ads.xml";
// считываем страницу с xml данными
$page_xml = file_get_contents($xml_file);
// создаем xml документ
$ads = new SimpleXMLElement($page_xml);
// считываем данные
foreach ($ads->Ad as $data)
{
// print_r($data);
echo "ID: ".$data->Id."<br>";
echo "ListingFee: ".$data->ListingFee."<br>";
echo "AdStatus: ".$data->AdStatus."<br>";
echo "Address: ".$data->Address."<br>";
echo "Description: ".$data->Description."<br>";
echo "Category: ".$data->Category."<br>";
echo "CarType: ".$data->CarType."<br>";
echo "Accident: ".$data->Accident."<br>";
echo "Price: ".$data->Price."<br>";
echo "Make: ".$data->Make."<br>";
echo "Model: ".$data->Model."<br>";
echo "Year: ".$data->Year."<br>";
echo "VIN: ".$data->VIN."<br>";
echo "BodyType: ".$data->BodyType."<br>";
echo "Doors: ".$data->Doors."<br>";
echo "Color: ".$data->Color."<br>";
echo "WheelType: ".$data->WheelType."<br>";
echo "GenerationId: ".$data->GenerationId."<br>";
echo "ModificationId: ".$data->ModificationId."<br>";
}
Второй вариант это использование php функции simplexml_load_file:
// папка с объявлениями
$xml_file="data//ads.xml";
// получение xml-контента в виде объекта
$ads = simplexml_load_file($xml_file);
// считываем данные
foreach ($ads->Ad as $data)
{
// print_r($data);
echo "ID: ".$data->Id."<br>";
echo "ListingFee: ".$data->ListingFee."<br>";
echo "AdStatus: ".$data->AdStatus."<br>";
echo "Address: ".$data->Address."<br>";
echo "Description: ".$data->Description."<br>";
echo "Category: ".$data->Category."<br>";
echo "CarType: ".$data->CarType."<br>";
echo "Accident: ".$data->Accident."<br>";
echo "Price: ".$data->Price."<br>";
echo "Make: ".$data->Make."<br>";
echo "Model: ".$data->Model."<br>";
echo "Year: ".$data->Year."<br>";
echo "VIN: ".$data->VIN."<br>";
echo "BodyType: ".$data->BodyType."<br>";
echo "Doors: ".$data->Doors."<br>";
echo "Color: ".$data->Color."<br>";
echo "WheelType: ".$data->WheelType."<br>";
echo "GenerationId: ".$data->GenerationId."<br>";
echo "ModificationId: ".$data->ModificationId."<br>";
}
После выполнения обоих вариантов кода в окне отладки увидим данные из xml файла.
Таким образом разобранные данные далее мы можем использовать для заполнения онлайн форм подачи объявлений.
С помощью Human Emulator можно не только разбирать уже существующие xml файлы, но и создавать новые на основе данных собранных из разных источников, в качестве примера можно посмотреть скрипт для создания карты сайта у наших партнёров.
Задать вопрос или обсудить примеры на нашем форуме.
Объявления в формате YML.
YML файлы (Yandex Market Language) — это специальный формат файлов для размещения товаров интернет-магазинов в Яндекс Маркете. Этот язык разработан Яндексом на базе стандарта XML. Не трудно догадаться, что работ с YML файлами аналогична работе с XML файлами.
Пример разбора файла yml со следующим содержимым:
BestSeller
Tne Best inc.
http://best.seller.ru
Бытовая техника
Мелкая техника для кухни
Мороженица Brand 3811
http://best.seller.ru/product_page.asp?pid=12345
8990
RUR
10
true
белый
3.6
20.1/20.551/22.5
Код примера для работы с YML файлами:
// папка с объявлениями
$xml_file="data//ads.yml";
// считываем страницу с xml данными
$page_xml = file_get_contents($xml_file);
// создаем xml документ
$ads = new SimpleXMLElement($page_xml);
echo "Название магазина: ".$ads->shop->name."<br>";
echo "company: ".$ads->shop->company."<br>";
echo "Сайт: ".$ads->shop->url."<br>";
echo "Валюта магазина: ".$ads->shop->currencies->currency['id']."<br>";
//print_r($ads->shop);
// считываем данные
foreach($ads->shop->offers as $data)
{
//print_r($data);
echo "ID товара: ".$data->offer['id']."<br>";
echo "Название: ".$data->offer->name."<br>";
echo "Страница товара: ".$data->offer->url."<br>";
echo "Цена: ".$data->offer->price."<br>";
echo "Валюта: ".$data->offer->currencyId."<br>";
echo "categoryId: ".$data->offer->categoryId."<br>";
echo "Цена доставки: ".$data->offer->{"delivery-options"}->option['cost']."<br>";
}
Задать вопрос или обсудить пример на нашем форуме.
Работа с объявлениями из базы данных.
Программа может также брать данные для объявлений из базы данных. В качестве примера ниже приведён код получения товаров из базы данных интернет-магазина на движке VirtueMart.
// настройки базы данных
// берутся из настроек магазина
$db_ip='IP базы данных';
$bd_user='пользователь';
$bd_pwd='пароль';
$tb_name ='wxa43_virtuemart_products_ru_ru';
$tb_name2 = 'wxa43_virtuemart_products';
// коллекция товаров с цветами
$goods = array();
// соединяемся с базой
$mysql_bd = @mysqli_connect($db_ip, $bd_user, $bd_pwd,$bd_user);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
// закончить скрипт
$app->quit();
}
// кодировка
mysqli_set_charset($mysql_bd,'utf8');
$sql='SELECT * FROM wxa43_virtuemart_product_categories WHERE virtuemart_category_id = '.$category;
$q = mysqli_query($mysql_bd, $sql);
while ($row = mysqli_fetch_row($q))
{
// создаём объект товаров с их цветами
$good = new ShopGoods();
$good->id=trim($row[1]);
// получаем товар и его название
$sql1 = 'SELECT * FROM wxa43_virtuemart_products_ru_ru WHERE virtuemart_product_id = '.$row[1];
$q1 = mysqli_query($mysql_bd, $sql1);
$f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
$good->name = trim($f['product_name']);
mysqli_free_result($q1);
// получаем артикул товара
$sql1 = 'SELECT * FROM wxa43_virtuemart_products WHERE virtuemart_product_id = '.$row[1];
$q1 = mysqli_query($mysql_bd, $sql1);
$f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
$good->article = trim($f['product_sku']);
mysqli_free_result($q1);
// получить цену
$sql1 = 'SELECT * FROM wxa43_virtuemart_product_prices WHERE virtuemart_product_id= '.$row[1];
$q1 = mysqli_query($mysql_bd, $sql1);
$f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
$good->price = trim($f['product_price']);
$good->price =ceil($good->price);
mysqli_free_result($q1);
$sql1 = 'SELECT * FROM wxa43_virtuemart_product_customfields where virtuemart_product_id='.$row[1].' and virtuemart_custom_id = 4' ;
$q1 = mysqli_query($mysql_bd, $sql1);
while ($row_ = mysqli_fetch_row($q1))
{
$good->add(trim($row_[3]));
}
mysqli_free_result($q1);
// получаем атрибут клон
$sql1 = 'SELECT * FROM wxa43_virtuemart_product_customfields where virtuemart_product_id='.$row[1].' and virtuemart_custom_id = 73' ;
$q1 = mysqli_query($mysql_bd, $sql1);
$f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
if(trim($f['customfield_value'])=='Клон (Clone)')
$good->strclone = 'Клон (Clone)';
else
$good->strclone = 'Original';
mysqli_free_result($q1);
$goods[]=$good;
}
mysqli_free_result($q);
mysqli_close($mysql_bd);
echo 'получили все товары из магазина в количестве - '.count($goods)."<br>";
Посмотреть пример полностью или задать вопросы по примеру на нашем форуме.
Генерация данных на лету.
Помимо работы с разными форматами программа имеет функционал для создания так называемых «фейковых» данных в момент выполнения скрипта. Логика тут довольно простая распределяем все необходимые данные для объявления в различные файлы и после этого случайным образом собираем эти данные вместе. Для генерации контактных данных можно использовать объект submitter. Для получения уникального описания объявления распределяем построчно варианты по нескольким файлам и в момент выполнения из каждого файла берём случайную строку и собираем описание. Чем больше вариантов в файлах, тем более уникальное получается описание. Например у нас есть 4 файла со следующим содержимым:
Сдаю отличную квартиру.
Сдаю хорошую уютную квартиру.
Сдаю отличную квартиру в новом жилом комплексе.
Очень качественный ремонт.
В квартире сделан ремонт.
Очень дорогой и качественный ремонт.
Вся бытовая техника а именно, стиральная машинка, холодильник, телевизор, микроволновая печь и прочее. Есть вся бытовая техника. К квартире подведено кабельное телевидение и интернет.
Есть, стиральная машинка, холодильник, 2 жк. телевизора, микроволновая печь и прочее.
1 минута пешком до остановки, рядом торговый центр и много магазинов. Окна во двор, есть парковочное место.
В 2 минутах от остановки.
5 минут пешком до магазинов и торгового центра.
Очень хороший район. Рядом школа, детский садик, магазины.
3 минуты пешком до остановки.
Получим описание на основе строки из каждого файла. Код примера будет:
// получаем все варианты из каждого файла в свой массив
$arr1 = file("data/1.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$arr2 = file("data/2.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$arr3 = file("data/3.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$arr4 = file("data/4.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// получить случайную строку из каждого массива
$str1 = $arr1[array_rand($arr1)];
$str2 = $arr2[array_rand($arr2)];
$str3 = $arr3[array_rand($arr3)];
$str4 = $arr4[array_rand($arr4)];
// получим случайный вариант описания
echo $str_res = $str1 ." ".$str2 ." ".$str3 ." ".$str4;
Задать вопрос или обсудить пример на нашем форуме.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.