У адмінці додається нова сторінка: Tools->Load New Advert
Нова сторінка доступна під роллю admin_upload_multiple_adverts
Тут можна:
(1) додати .xlsx файл з адвертами
(2) поставити галочку щоб почалось завантаження адвертів (без неї тільки аналізуються данні на придатність для нас)
(3) вибрати з якого рядку по який завантажувати адверти
(4) Phone selection - вказати який телефон брати (якщо запарсять багато телефонів, то можна вказати беремо перший, останній, чи цифірно мінімальний чи цифірно максимальний)
(5) Proxies - вказати proxy для завантаження фото
Дивись приклад документа:
ads_26.xlsx
25.8 kB
(1) файл повинен бути:
лише у форматі .xlsx
данні повинні бути на листі під назвою data
таблиця може містили такі колонки (усе інше буде ігноритись):
*порядок їх не має значення, але дотримуйтесь прикладу, буде простіше дебаг робити якщо потрібно буде
title - любий текс, переноси строк будуть ігноруватись, телефони вирізатись, все що більше 60 символів буде обрізане
description - любий текст, все що більш 850 символів буде обрізане. пусте значення буде замінене на пробіл і це буде валідним значенням
price - любе цифрове значення, все інше буде вирізано
category_id - id нашої категорії
region_id - id нашого регіона
user_name - любий текст
phone - може бути багато телефонів, кожен з нової строки або розділений символом "|", усі будуть аналізуватись на валідність і буде взятий перший валідний номер.
main_image - ссилка на головну картинку
images - багато ссилок на усі картинки, повинні бути розділені символом ";" або “,“ або бути з нового рядка
*усі однакові ссилки у полі main_image та images будуть видалені
original_link - ссилка на оригінальну сторінку обʼяви, ми її зберігаємо у нас і орієнтуємось по ній чи додане це оголошення нам у базу
attrs - атрибути до оголошення. формат дуже простий
**Усе що ми зможемо знайти серед наших артибутів буде додане, все інше буде ігноруватись.
**Регістр не має значення, при пошуку усі символи будуть конвертовані у нижній регістр.
**Кожен пробіл, або символ у назві має значення, буде пошук по 100% співпадінню.
**Шукаються тільки з активних атрибутів
**Памʼятаємо про вложенність наших атрибутів, якщо намагатись додати вложений артибут, та нема батьківського, то вложений буде ігноруватись
(2) цією галочкою можна регулювати, чи хочемо тільки проаналізувати файл, та побачити де в нас помилки у документі, чи завантажувати як є.
При аналізі адверти не завантажуються, а тільки аналізуються усі рядки даних, де буде знайдені помилки, будуть тут же на сторінці у адмінці відображено. Якщо ви бачите помилку, то треба це розуміти що данні з цього рядка не будуть навіть намагатись додаватись, бо така помилка є критичною для алгоритму завантаження.
**не усі поля можуть викликати помилки
**атрибути не викликають помилки, вони просто не будуть додані
Якщо почнеться завантаження, то прогрес можна буде дивитись на цій сторінці, але повторно не можна буде вже відправити данні, поки не закінчиться це завантаження.
(3) вказується цифрами, це зроблено більше для дебагу, чи перед тим щоб усе завантажити, завантажити спочатку декілька прикладів і подивитись на результат.
Додаткові можливості з контролю завантаження:
Коли починається завантаження, крім адмінки прогрес та усі логи можна бачити у datadog сервісі.
Є такі celery tasks:
app.tasks.advert.load_new_advert.task_management__show_consumers - покаже які працівники виконують завантаження
app.tasks.advert.load_new_advert.task_management__add_consumer - додати ще одного працівника для виконання завантаження, чим більше працівників, тим скоріше все завантажиться, але не можна безкінечного додавати, бо потужності сервера може не вистачити, ще треба розуміти що наш сервер буде робити запити на сторонній сайт за картинками, то ж багато потоків буде виглядати як щось схоже на атаку з нашого боку. Як показує практика 1 - 3 робітників це нормальне значення.
consumer_name: str - любе значення текстом, без пропусків
iteration_lifetime: int - число, скільки проживе робітник перед тим як зупинитись (якщо хочемо на якийся час, а не на постійну роботу додати робітника)
app.tasks.advert.load_new_advert.task_management__drop_consumer - цім можна зупинити робітника. Якщо у якийся час щось піде не так, то завантаження можна зупинити просто виделивши усіх робітників.
consumer_name: str - імʼя робітника що зараз робе
del_all: bool - якщо тут вказати True, то будуть зупинени усі робітники
app.tasks.advert.load_new_advert.task_management__drop_data_queue - цим можна видалити усю чергу з данними на завантаження, це на випадок, коли почалось завантаження, але зрозуміли що з даними щось не те, видаляєте усіх робітників, але поки черга з данними завантажена, кнопка на нове завантеження не зʼявиться, то ж треба видалити усю чергу цією таскою.
Ці усі tasks можна запускати з адмінки з відповідними параметрами.
Результати роботи цих tasks можна дивитись у datadog.
Додаткова інформація:
В усі логи цього функціоналу у datadog додається префікс LNA:, для зручного фільтрування.
додаю скрипт get_jiji_attrs_by_category_ids, якщо його запустити, то можна увести category_id і отримати рандомні атрибути цієї категорії. (але тут просто беруться рандомні, це НІЯК не гарантує що ці атрибути будуть додані до адверту, бо вони можуть не співпадати по спадку)
у прикладі є стовбчик user_img, він не використовується на даний час, його можна ігнорувати
завантаження одного адверту може відбуватись від 1 секунди до десь 10, все залежить від кількості картинок
рекомендована кількість адвертів у файлі 5000, це не означає що не буде працювати, але процес аналізу може бути дуже довгий, або взагалі по таймауту може впасти. При тестуванні і створенні xlsx файлу, в деякий випадках була помилка що файл не може містити більше ніж 50К посилань. З цього і буле отримане значення у 5000 адвертів на файл.
‼️при аналізі даних спочатку перевіряються усі данні по полях, а потім усі рядки котрі придатні проганяються по масовим перевіркам.
якщо була помилка у рядку, то цей рядок не попаде на масову перевірку. Тож той факт що данні у рядку виправлені, ще не гарантує що вони пройдуть масові перевірки.
‼️рядки де були знайдені хоч якісь помилки не потраплять на завантаження. Тож намагайтесь довести файл з даними щоб не було взагалі ніяких помилок.
Want to print your doc? This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (