Работа с онлайн досками от А до Я. Объявления.

Работа с онлайн досками от А до Я. Объявления.

В этой статье поговорим о формате объявлений для работы с досками объявлений и как работать с этими форматами в программе.

До того момент как вы приняли решение автоматизировать работу с досками вы уже наверняка с ними работали и именно этот опыт работы и подтолкнул вас к идее избавиться от этой рутины. А значит у вас уже есть объявления, с которыми вы работаете, а это в свою очередь значит что вы их можете использовать в программе в том виде в котором они у вас есть. Это избавит вас от лишней работы, особенно если у вас этих объявлений десятки или сотни.

Объявления в текстовом виде.

Объявления в формате XML.

Объявления в формате YML.

Работа с объявлениями из базы данных.

Генерация данных на лету.

Объявления в текстовом виде.

Предположим вы имеете объявления описание которых хранится в текстовом файле, а картинки для этого объявления лежат в отдельной папке рядом.

Что бы адаптировать ваши объявления к работе с программой вам понадобится системность, то есть формат всех имеющихся файлов у вас должен быть одинаковый.

К примеру у нас есть файл 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;

Задать вопрос или обсудить пример на нашем форуме.

5/5 - (2 голоса)

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.