Работа с онлайн досками от А до Я. Объявления.
В этой статье поговорим о формате объявлений для работы с досками объявлений и как работать с этими форматами в программе.
До того момент как вы приняли решение автоматизировать работу с досками вы уже наверняка с ними работали и именно этот опыт работы и подтолкнул вас к идее избавиться от этой рутины. А значит у вас уже есть объявления, с которыми вы работаете, а это в свою очередь значит что вы их можете использовать в программе в том виде в котором они у вас есть. Это избавит вас от лишней работы, особенно если у вас этих объявлений десятки или сотни.
Работа с объявлениями из базы данных.
Объявления в текстовом виде.
Предположим вы имеете объявления описание которых хранится в текстовом файле, а картинки для этого объявления лежат в отдельной папке рядом.
Что бы адаптировать ваши объявления к работе с программой вам понадобится системность, то есть формат всех имеющихся файлов у вас должен быть одинаковый.
К примеру у нас есть файл 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
Все остальные данные для объявлений типа Контактное лицо, Телефон, Адрес и т.д. будут одинаковыми, в противном случае они должны быть внесены в файлы.
Все объявления находятся в одной папке. Для работы с такими объявлениями у нас будет следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// папка с объявлениями $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 файлах заключаются в теги, которые определяют структуру и смысл этих данных. То есть с помощью тэгов вы помечаете что за тип данных заключён в теги. К примеру:
1 2 3 4 5 6 |
<Make>Volkswagen</Make> <Model>Golf</Model> <YearFrom >2008</YearFrom> <YearTo>2012</YearTo> <BodyType>Универсал</BodyType> <Doors>5</Doors> |
Разбор XML файлов в PHP.
Для работы c XML файлами в php добавлен класс SimpleXML. Предположим у нас есть xml файл в следующем формате:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<Ads formatVersion="3" target="Avito.ru"> <Ad> <Id>auto_001</Id> <ListingFee>Package</ListingFee> <AdStatus>Free</AdStatus> <Address>Москва, улица Народного ополчения, 41</Address> <Description>Замечательный экземпляр легендарного автомобиля Volkswagen Golf</Description> <Category>Автомобили</Category> <CarType>С пробегом</CarType> <Accident>Не битый</Accident> <Price>895000</Price> <Make>Volkswagen</Make> <Model>Golf</Model> <Year>2011</Year> <VIN>1FTWR72P1LVA41777</VIN> <BodyType>Универсал</BodyType> <Doors>5</Doors> <Color>Золотой</Color> <WheelType>Левый</WheelType> <GenerationId>334847</GenerationId> <ModificationId>339991</ModificationId> <ComplectationId /> </Ad> <Ad>...</Ad> <Ad>...</Ad> и т.д. </Ads> |
Пример php кода для работы с таким файлом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// папка с объявлениями $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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// папка с объявлениями $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 со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?xml version="1.0" encoding="UTF-8"?> <yml_catalog date="2019-11-01 17:22"> <shop> <name>BestSeller</name> <company>Tne Best inc.</company> <url>http://best.seller.ru</url> <currencies> <currency id="RUR" rate="1"/> <currency id="USD" rate="60"/> </currencies> <categories> <category id="1">Бытовая техника</category> <category id="10" parentId="1">Мелкая техника для кухни</category> </categories> <delivery-options> <option cost="200" days="1"/> </delivery-options> <offers> <offer id="9012"> <name>Мороженица Brand 3811</name> <url>http://best.seller.ru/product_page.asp?pid=12345</url> <price>8990</price> <currencyId>RUR</currencyId> <categoryId>10</categoryId> <delivery>true</delivery> <delivery-options> <option cost="300" days="1" order-before="18"/> </delivery-options> <param name="Цвет">белый</param> <weight>3.6</weight> <dimensions>20.1/20.551/22.5</dimensions> </offer> </offers> <gifts> <!-- подарки не из прайс‑листа --> </gifts> <promos> <!-- промоакции --> </promos> </shop> </yml_catalog> |
Код примера для работы с YML файлами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// папка с объявлениями $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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
// настройки базы данных // берутся из настроек магазина $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 минуты пешком до остановки.
Получим описание на основе строки из каждого файла. Код примера будет:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// получаем все варианты из каждого файла в свой массив $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; |
Задать вопрос или обсудить пример на нашем форуме.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.