Анализ объявлений Авито
Функция Выполнить()
// Автоматический анализ новых объявлений на Авито по заданным адресам
// После первого выполнения надо заполнить список необходимыми ссылками и выполнить модуль повторно
// Если необходимо автоматически выполнять данный модуль с интервалом 6 часов, снимете комментарий с трех строк ниже
// Модуль = Этот.Владелец;
// Модуль.'Интервал автовыполнения' = 6*3600;
// Модуль.Отмечен = 1;
СписокСтраниц = Главный.Определить(0, Объекты.Список, Свойства.Наименование, "Список страниц Авито");
СписокСтраниц.Колонки.Определить(Свойства.Наименование, 0, 350, 1, 1);
СписокСтраниц.Колонки.Определить(Свойства.Адрес, 0, 650, 1, 1);
СписокСтраниц.Колонки.Определить(Свойства.'Маска включения', 0, 250, 1, 1);
СписокСтраниц.Колонки.Определить(Свойства.'Маска исключения', 0, 250, 1, 1);
СписокСтраниц.'Отключить канву объекта' = 1;
Если (СписокСтраниц.Количество()=0) Тогда
Сообщить("Заполните список страниц");
Возврат;
Конец;
ПрефиксСсылки = "https://www.avito.ru";
ОбъектСодержимое = Главный.Определить(0, Объекты.Текст, Свойства.Наименование, "Содержимое страницы Авито");
ГруппаДляАнализа = Главный.Определить(0, Объекты.Группа, Свойства.Наименование, "Анализ страниц Авито");
ГруппаДляАнализа.Колонки.Определить(Свойства.Объектов, 0, 250, 1, 0);
ОбъектСодержимое.'Тип цветного текста' = "Цветной текст HTML";
Для ОбъектСтраница Из СписокСтраниц Цикл
Если (ОбъектСтраница.Отмечен=1) Тогда
МаскаВключения = Строки.Строка(ОбъектСтраница.'Маска включения');
МаскаИсключения = Строки.Строка(ОбъектСтраница.'Маска исключения');
ПервоеСчитывание = 0;
СписокОбъявлений = Главный.Определить(ГруппаДляАнализа, Объекты.Список, Свойства.Наименование, ОбъектСтраница.Наименование);
Если (СписокОбъявлений.Новый()=1) Тогда
ПервоеСчитывание = 1;
СписокОбъявлений.Колонки.Определить(Свойства.Дата, 0, 120, 1, 0);
СписокОбъявлений.Колонки.Определить(Свойства.Цена, 0, 100, 1, 0);
СписокОбъявлений.Колонки.Определить(Свойства.Наименование, 0, 450, 1, 1);
СписокОбъявлений.Колонки.Определить(Свойства.Адрес, 0, 350, 1, 0);
СписокОбъявлений.'Отключить канву объекта' = 1;
Конец;
СписокОбъявлений.Колонки.Определить(Свойства.'Дата окончания', 0, 120, 1, 0);
СписокОбъявлений.Колонки.Заполнить("Отмечен", 0);
ОбъектСодержимое.Текст = Сайты.Прочитать(ОбъектСтраница.Адрес, "UTF8", "");
Текст = ОбъектСодержимое.Текст;
СтрСсылка = "";
СтрОписание = "";
СтрЦена = "";
Для Стр Из Текст Цикл
Если (Строки.Есть(Стр, " ?")) Тогда
Подходит = 1;
Если (МаскаВключения<>"") Тогда
Если (Строки.Найти(СтрОписание, МаскаВключения)=0) Тогда
Подходит = 0;
Конец;
Конец;
Если (МаскаИсключения<>"") Тогда
Если (Строки.Найти(СтрОписание, МаскаИсключения)>0) Тогда
Подходит = 0;
Конец;
Конец;
Если (Подходит=1) Тогда
НоваяЦена = Числа.Число(Строки.Строка(Строки.Свойство(Стр, "?")));
Если (НоваяЦена<>0) Тогда
СсылкаОбъявления = ПрефиксСсылки + СтрСсылка;
Объявление = СписокОбъявлений.Определить(0, Объекты.Текст, Свойства.Адрес, СсылкаОбъявления);
Если (Объявление.Новый()=1) Тогда
Объявление.Дата = Моменты.Текущий();
Объявление.Наименование = СтрОписание;
Объявление.Цена = НоваяЦена;
Если (ПервоеСчитывание=0) Тогда
Сообщить(ОбъектСтраница.Наименование + " - новое объявление", Строки.Строка(НоваяЦена), СтрОписание, СсылкаОбъявления);
// Звуки.Сигнал();
Конец;
Иначе
Если (Числа.Целое(Объявление.Цена)<>Числа.Целое(НоваяЦена)) Тогда
Сообщить(ОбъектСтраница.Наименование + " - изменилась цена", Строки.Строка(Объявление.Цена)+"->"+Строки.Строка(НоваяЦена), СтрОписание, СсылкаОбъявления);
Объявление.Цена = НоваяЦена;
Конец;
Конец;
Объявление.Отмечен = 1;
Объявление.'Дата окончания' = Моменты.Текущий();
Конец;
Конец;
ИначеЕсли (Строки.Есть(Стр, "=")) Тогда
Св = Строки.Строка(Строки.Свойство(Стр));
Зн = Строки.Значение(Стр);
Если (Св="href") Тогда СтрСсылка = Строки.Между(Зн, """", """"); Конец;
Если (Св="title") Тогда СтрОписание = Строки.Между(Зн, """", """"); Конец;
Конец;
Конец;
Если (ПервоеСчитывание=1) Тогда
Сообщить("Первое считывание - "+ОбъектСтраница.Наименование, "найдено объявлений", СписокОбъявлений.Количество());
Конец;
Конец;
Конец;
Конец
Функция Таймер()
Выполнить();
Конец