API библиотека для интеграции с RealtyPult. Подключение портала недвижимости к партнерской программе.
https://github.com/bushev/php-realtypult-partner-lib
npm install nodejs-realtypult-partner-lib --save
const Importer = require('../index').Importer;
let importer = new Importer({
// Ссылка на XML фид из личного кабинета партнера
xmlFeedUrl: 'https://realtypult.ru/api/xml/export/partner/FORMAT/TOKEN',
// Файл отчета, будет создаваться автоматически, ссылку на него нужно вставить в кабинете партнера
reportFileLocation: '/var/www/my-site/public/rm-report.xml',
// Формат XML фида ('realtypult' или 'yandex')
format: 'realtypult',
// Функция будет вызвана для каждого объявления из XML фида
onItem: onItem,
// Функция будет вызвана когда весь XML фид будет обработан
onEnd: onEnd,
// Функция будет вызвана в случае непредвиденной критической ошибки
onError: onError
});
/**
* Обработчик одного объявления
*
* Требуется реализовать алгоритм:
*
* 1. Проверить (по item.id) размещали ли вы это объявления ранее
*
* Если не размещали:
* 2.1 Сохраните объявление в вашей базе данных (не забудьте скачать себе изображения объекта)
* 2.2 Вызовите функцию `callback` и передайте в нее ссылку на объявление на вашем сайте,
* Например: callback({url: 'http://your-site.ru/item1'})
*
* Если размещали:
* 2.1 Проверьте, изменилось ли обновление, если да то обновите его в вашей базе данных
* (не забудьте про изображения)
* 2.2 Получите из вашей базы данных количество просмотров этого объявления (рекомендуется)
* 2.2 Вызовите функцию `callback` и передайте в нее ссылку на объявление на вашем сайте,
* и количество просмотров (рекомендуется)
* Например: callback({url: 'http://your-site.ru/item1', views: 15})
*
*
* В случае если на каком-либо этапе вы понимаете что это объявление не может
* быть обработано корректно, вызовите функцию `callback` и передайте ей сообщение об ошибке
* Например: callback({error: 'Произошел технический сбой'});
*
* Помните, что сообщение об ошибке увидит конечный пользователь!
*
* Примеры частых ошибок:
*
* > "Произошел технический сбой (проблема с базой данных, нет места на диске, и тп.)"
* > "Не удалось определить адрес объекта"
* > И тп.
*
* В случае если в вашей базе данных есть очень похожее объявление, вызовите `callback` и
* передайте в него ссылку на это объявление (размещать это объявление не нужно)
* Например: callback({similarUrl: 'http://your-site.ru/item2'});
*
* В случае если вы не можете разместить объявление в силу нарушений ваших правил,
* вызовите `callback` и передайте в него сообщение пользователю
* Например: callback({rejectReason: 'Номер телефона заблокирован'});
*
* Помните, что сообщение об отклонении увидит конечный пользователь!
*
* Примеры частых ошибок:
*
* > "Номер телефона заблокирован"
* > "Слишком низкая цена для этого объявления"
* > И тп.
*
* @param item - объект содержащий всю информацию об объявлении
* @param callback - функция, которую нужно вызвать когда обработка объявления завершена,
* и передать в нее результат обработки
*/
function onItem(item, callback) {
console.log(`Обрабатываю объявление: ${item.id}`);
console.log(item);
// Успешно размещено
// callback({url: 'http://your-site.ru/item1', views: 15});
// ИЛИ
// Проблема с доступом к базе данных / Недостаточно памяти
// callback({error: 'Произошел технический сбой'});
// ИЛИ
// Объявление дубликат
// callback({similarUrl: 'http://your-site.ru/item2'});
// ИЛИ
// Не соответствует правилам вашего портала
// callback({rejectReason: 'Номер телефона заблокирован'});
}
/**
* Обработчик конца импорта
*
* Здесь нужно удалить из вашей базы данных все объявления которые отсутствовали в XML фиде
* (не забудьте удалить изображения)
*
* @param report
* @param report.location - Путь до файла с готовым отчетом (ссылку на него нужно вставить в
* личный кабинет партнера)
* @param report.statistics.total - Общее число объявление в фиде
* @param report.statistics.success - Число объявление обработанных успешно
* @param report.statistics.rejected - Число объявление отклоненных от публикации
* @param report.statistics.errors - Число объявление обработанных с ошибками
*/
function onEnd(report) {
console.log('Обработка XML фида завершена!');
console.log(report);
}
/**
* Обработчик критической ошибки импорта XML фида
*
* @param error
*/
function onError(error) {
console.log(error);
}
// Запускаем импорт
importer.run();
Код этого примера находится тут.