Мій сайт
Головна » 2011 » Березень » 14 » Автоматика на службі актуальності
21:22
Автоматика на службі актуальності
Деякий час тому прочитав топік Будні інтернет-магазину: чому товару немає у наявності? про те, як же важко інтернет-магазину тримати весь товар і ціни на нього в актуальному стані. Особливо, якщо постачальникам хотілося покласти величезний болт на актуальність їх же прайсів. Проблема звичайно ж правильна, але далеко не нова і досить відома.

Особисто мене збентежило відсутність будь-яких технічних даних і рад. Все в топіку звелося до того, що потрібно завантажувати і оновлюватися регулярно - і тоді буде щастя. Але це і так зрозуміло. Всі ми знаємо, що саме нам потрібно. Але як цього домогтися?

Власне кажучи, це і є тема даного топіка - якими інструментами добитися максимальної автоматизації при роботі з прайсами та інтернет-магазинами. Що в свою чергу дозволить вам заощадити купу корисного часу для вашого ж бізнесу.

Упустимо міркування про те, як погані постачальники. Вони ще гірше. Актуальність - болюча тема, але не наша.
Наше завдання зробити так, щоб дані потрапляли на сайт, як тільки вони відновлять у постачальника і з мінімальною затримкою. А це дуже навіть реально. Звичайно, не миттєво, але у хвилини 3, всі вкладається. Хоча час дуже сильно залежить від безлічі факторів. Але про них пізніше.

Ще один важливий момент: я пишу про повністю автоматизованих автономних «системах», які вимагають втручання людини лише для первинного конфігурування потім контролю того, як йдуть справи. Ці рішення працюють самі, скачують самі, оновлюють самі - всі без втручання менеджерів і відповідальних осіб. І можна не переживати про те, що хтось щось забуде або захворіє, або звільниться. Ви взагалі можете не знати, що там відбувається. Але воно буде відбуватися, оскільки одного разу було налаштоване.
Отже, приступимо.

Серце



Є неймовірно зручний планувальник завдань для Windows - nnCron. У нашому випадку - він буде серцем керуючим всім. Для складних завдань, звичайно ж доведеться підучити мову Fort, на якому пишуться скрипти крона. А для простих - досить мінімальних навичок програмування. Є ще моменти з налаштуванням і запуском завдань крона на Win 2003/2008 - але це нюанси.

Не буду описувати всіх принад цього планувальника, але якщо ви поки що справляєтеся без нього, то мабуть він вам і точно не потрібен.

Наприклад, якщо відомо, що постачальник оновлює прайс кожні 3 години, то з легкістю зможете створити ці завдання.
Але бувають моменти, що прайс оновлюється непередбачувано. Для таких випадків ми використовуємо скачування кожних 5 хвилин, після чого перевіряємо файл на зміну, і якщо вони мають місце, то це значить, що прайс вже з новими даними - отже, потрібно оновлювати і сайт. До речі, цим теж займається крон.
Для порівняння файлів використовуємо плагін crc32.

Буває, що прайси приходять на пошту.

Зазвичай ми робимо так: під час вступу прайсу на пошту, він автоматом зберігається в потрібну папку. Крон бачить, що файл оновився, визначає, чи були зміни, і якщо були - оновлює сайт.

Ну і ясне діло, що саме крон стежить за розархівування прайсів. Чому крон? Тому що іноді буває, що прайси приходять у вигляді price.zip, а всередині знаходиться файл (або файли), який буде мати кожен раз нову назву, яку генерує робот постачальника. І в такому випадку було б складно, запустити обробку цього прайсу, оскільки ім'я буде змінюватися від скачування до скачування. А крон якраз допомагає в маніпуляція файлами і їх назвами.

Загалом, усім цим займається крон. Хочете повної автоматики - використовуєте nnCron.

Пробував так само використовувати Windows PowerShell. Зручна штука і робить все, що потрібно, і FORT вивчати не потрібно. Але не вразили можливості настройки самого шедулера в Windows, який повинен дуже гнучко стартувати скрипти. Тому вирішили все таки користуватися nnCron.

Отримання прайсів



Вам точно згадалося кілька улюблених консольних утиліт для скачування. Але наш вибір - wget портований на Windows. Можна сказати, що це справа смаку, але в одній із недавніх завдань, тільки wget допоміг нам дістатися до прайсу. Хоча не виключаю можливості, що інші з цим теж справіліст б.

Процес завантаження виглядав так: користувачеві йому потрібно потрапити на сторінку авторизації, ввести логін і пароль, потім його редирект на скрипт перевірки даних і, якщо все вірно, то йде другою редірект на індексну сторінку порталу, звідки можна скачати прайс, якщо людина вже авторизовані. Там тиснемо на лінк виду getprice.php (завантажити прайс) - знову редірект на скрипт для скачування, там запускається формування актуального прайсу і через секунд 20 php видає готовий прайс, який можна зберегти.

Першим позивом було використовувати логін і пароль + прямий лінк. Не запрацювало. Загалом, було витрачено чимало часу, але допоміг лише wget, хоча і з його допомогою довелося поламати голову чимало. Якщо коротко: вгет логінитися, використовував кукі логіна і качав все, що потрібно.

Інший варіант отримання - пошта.

Проблем тут зазвичай не виникає. Іноді трапляється, що пошта у вас не локальна. Але це в принципі легко обходиться скачуванням листів по POP3 або ж форвардом на ящик, з якого ви заберете листи вже локальним клієнтом. Нічого складного немає. Головне, щоб поштовий клієнт вмів при одержанні листа зберігати його вкладення в потрібну вам папку.

Отже, на даний момент ми повинні мати систему, яка в кожний момент часу забезпечить нас актуальними прайсам. І вам не потрібно буде витрачати 30 хвилин, на скачування і перевірку 10-20 файлів.

Але просто отримати нові прайси - не круто. А ось без людського втручання оновити їх - це круто.

Парсинг



парсинг - страшне слово, але неймовірно корисне. Це так званий розбір і імпорт прайсу з визначенням того, що вам потрібно, а що ні.

Зазвичай після отримання нового прайсу, менеджер зберігає його в xml, csv або просто в текстовий файл, і через інтерфейс свого вебмагазіна імпортує дані. І стає радісно. Але не всім.

Є бідолахи, у яких в прайсі 5 тис. рядків, з яких 3 тис. - зайві, але цих 3 тис потрібно взяти з другого прайсу, де 10 тис позицій, і там все розкидано так, що чорт ногу зломить. А ще потрібно ціни перевірити і підправити. Доводиться жертвувати або часом або асортиментом.

А ви кажете, що постачальники повільно оновлюють прайси. Я бачив фірми, де від приходу прайсу, до попадання його на сайт проходило 5 днів. Бо це ручний, тупий і невдячна праця, від якого треба позбавлятися.

Один з варіантів рішення підходить для дрібних-дрібних підприємців, які з Ексел хочуть просто перекинути дані на сайт. Навіть якщо потрібно провести сотні операцій над позиціями в прайсі (щоб половину відкинути, а на другу зробити націнку +50%), то це легко реалізується на VBA в макросі, який буде автоматом стартувати з вашим прайсом і творити там все, що побажаєте. А ви тим часом сходіть на ділову зустріч - nnCron краще за вас знає, що і коли зробити.

Після обробки прайсу - він вивантажиться у ваш магазин. Але про процес трохи пізніше.

Але от якщо ви не дрібний-дрібний підприємець, то ймовірно у вас є склад. А якщо є склад, то повинна бути 1С 7 або 8. Краще 8. Нема 1с?? Ймовірно ви божевільні. У торгівлі - це незамінне. І при автоматизації теж.

Не буду зупинятися на версіях 1С, але хочу зробити одне уточнення - для задач, про які далі піде розмова, 1С8 в рази зручніше. Як мінімум тим, що для впровадження більшості з таких рішень вам не доведеться вносити зміни до самої конфігурацію. Автоматика буде працювати і так. А ось в 1С7 - доведеться покрутити основну конфігурацію, що не завжди є допустимим.

В основному парсинг прайсу робиться за допомогою 1С. Не буду вдаватися в подробиці, як саме, бо це не стаття про те, як можна нагнути будь прайс з допомогою 1с, а просто опишу основні можливості.

NnCron - забезпечує автостарт наших обробок. Як вже згадувалося, весь ваш офіс в цей час може гуляти на корпоративі.

Обробка визначає, що це за прайс, набір правил для нього і починає імпорт. Можна проігнорувати будь-який товар, будь-яку групу і т.д. Паралельно проставити будь-яку націнку і оновити всі позиції у вашій базі. До того ж, при бажанні, обробка може створити нову номенклатуру, якої немає в базі, але в прайсі вже з'явилася. Цих номенклатур може бути і сотня - це суттєво скоротить вам час. Обробка може імпортувати скільки завгодно прайсів поспіль і піклуватися про співпадаючих артикулах. У загальному, вона може все те, що і ви, але ніколи не хворіє, і в сотні разів швидше.

До речі, саме від складності цього етапу - парсинга - в основному і залежить, скільки часу займе вся процедура оновлення сайту. В особливо складних системах, процес парсинга буде займати хвилин 10. Хоча у людини на це пішло б не менше дня.

Але, в даній статті нас цікавить не автоматика імпорту та розбору прайсу, а саме потрапляння інформації на сайт. Тому про можливості та способи - іншим разом. Хіба що нагадаю, що для true парсинга програмістам 1С бажано вміти користуватися регулярними виразами.

Коли товар потрапив в базу 1С, його потрібно вивантажити на сайт. Власне це нас і цікавило спочатку. Хоча комусь буде достатньо самого імпорту прайсів в 1С - це насправді теж дуже актуальна тема для багатьох підприємців.

Uploading



Чому ми говоримо про варіанти вивантаження на сайт? Адже багато розробників інтернет-рішень самі дбають про інструменти, які дозволяють оновлювати товар.
Просто буває (навіть дуже часто), що люди користуються різними безкоштовними інтернет-магазинами, які інколи не мають тих можливостей, що потрібні власнику.

Тут потрібно обмовитися, що йде розмова про «універсальних» способи оновлення. Їх є кілька.

Основне, що потрібно усвідомити, який би сайт у вас не був - дані на ньому можна оновити. Просто іноді люди думають, що обов'язково інет-магазин повинен бути на Bitrix або на будь-нитка CMS, щоб змогти без проблем оновлювати товар. Ні, це не так. Не має значення, що у вас за сайт - все можна оновити.

Для початку потрібно мати, що вивантажувати. Припускаю, що ця проблема у вас вже вирішена. Часто зустрічався з тим, що з 1с вивантажують структуру на сайт 1 в 1. Але іноді ж буває ситуація, як з прайсами - потрібно тільки половину чайників вивантажити або проігнорувати пилососи, або товар запхнути в «не рідну» категорії і так далі

Як на мене, то самий доісторичний і тупий спосіб оновлення - вручну. Тобто навіть якщо ви імпортуєте файл для оновлення через адмінку сайту і там всього на всього тиснете «оновити», то це все одно вручну. Ваші оновлення будуть залежати від здоров'я і пам'яті вашого менеджера. А вам цього точно не потрібно.

Для автоматизації існують такі варіанти.

Xml, cml, csv і компанія


Це варіант, коли 1с або Ексель створить потрібний вам файл, а крон вивантажить його на фтп сайту. Вивантаження ми зазвичай проводимо wput для Windows. Але це справа смаку.

На хостингу працює cron (не той, що у нас встановлений), який кожні 3 хвилини перевіряє наявності файлів оновлення. При їх оновлення - запускає скрипт, який оновлює базу, і витирає файл. І чекає знову.

З такими темпами за годину ви точно раз 10 зможете оновити прайс, скільки б змін вам не надсилали - тут вже як nnCron налаштуєте. Буде актуально? Звичайно.
І для цього потрібно: wput, cron на хостингу.

Прямий коннект до бази


Цей варіант сильно залежимо від кількості даних для оновлення та швидкості з'єднання. Але в ньому є своя краса. І також потрібно відзначити, що ваш хостер повинен вам розв'язати коннектіться безпосередньо. Зазвичай це робиться через ODBC для MySQL.

Якщо ж прямої конекту не дають, то ймовірно ssh з'єднання все таки будуть вирішені. У нашому випадком ми так і працюємо. Для ssh з'єднання використовується putty, потім ODBC для налаштування конекту на базу.

У базу сайту таким чином можна коннектіться пямо з Excel та оновлювати прайс. А можна і просто з 1С.

Цей спосіб ми використовуємо для того, щоб менеджер безпосередньо з бази MySQL міг побачити, які є нові замовлення та імпортувати їх прямо в 1С, створивши документи замовлень, витратні і т.д. І навпаки, створивши документ в 1С, можна його відразу перенести в базу сайту, безпосередньо.

Іноді таким чином можна реалізувати «робота». Тобто відвідувач на сайті виконує певний дії, наприклад, відправлення рахунку. Але рахунок повинен бути висланий саме з 1С, оскільки потрібно «застовпити» номер і виписати від імені конкретного на той момент менеджера. Буде виглядати це так:

1. У mysql створюється запис про дію
2. 1С автоматично за допомогою nnCron перевіряє прямим коннектом базу сайту на предмет «дій»
3. Бачачи дію, запускається обробка 1С, яка автоматом формує рахунок потрібній людині і з потрібними параметрами, а потім відправляє його.

До того ж таким способом можна зв'язати ваших онлайн клієнтів з реальними в базі 1С, задавши відповідності кодів, щоб зменшити кількість ручної роботи при перенесенні замовлень.

Тобто «плюс» способу прямого конекту: ви можете читати дані прямо з вашого сайту, а так само вносити їх назад.

Просто ssh


Якщо ви не хочете прямих коннектов, то можна використовувати утиліту з набору putty для передачі файлів через ssh з'єднання: pscp. До того ж, ця утиліта дозволяє і одержати файли з вашого сервера.
Це ще один варіант ftp з'єднання, який згодиться і у разі відсутності конекту на базу з яких-небудь причин.

Потім же за допомогою утиліти plink можна запустити віддалений скрипт на сайті, який зробить, що потрібно.
Але це вже «збочений» спосіб для особливих випадків, коли більше нічого не допомагає.

Оновимо-ка прайси



Ну раз базу ми оновили, то прайси потрібно теж оновлювати. Тут проблем - раз плюнути. VBA з Ексел формує вам новий прайс, якщо ви не акула бізнесу. А якщо акула, то ваша 1С повинна вам видати прайс будь-якої складності за вашим вибором, образом і подобою.

Після чого всі архівується і закидається за допомогою wput / pscp на сайт. І як вже відомо, всім керує nnCron: архівування, перевірка, вивантаження.

Інтернет-магазин і актуальність



Такі напрацювання дадуть можливість тримати базу сайту завжди в актуальному стані. До того ж якщо ви користуєтеся 1С, то є можливість оновлювати не тільки наявність в прайсі, але і фізична наявність хоч на 10 складах.
Таким чином на кожному товарі можна зробити статус «доступний для замовлення», якщо він є просто в прайсі. «Є на складі» - якщо товар є фізично у вас на складі; також можна уточнювати і кількість, і який саме склад. Загалом можна все, що тільки придумається. Головне правильно все організувати.

Процес



Приблизно схема буде виглядати так:

1. nnCron качає прайс, наприклад, кожні 10 хвилин.
2. Йде перевірка, новий чи це прайс чи все ще стара версія.
3. Якщо новий - nnCron запускає обробку в 1С по імпорту прайса в базу.
4. 1С парса і імпортує прайс в свою базу.
5. Після цього запускається обробка для створення файлу інсерт для MySQL інтернет-магазину: наявність, склад, нові товари, ціни - загалом, все що потрібно.
6. Після створення файлу, він автоматом аплоад до вас на сервер.
7. При оновленні файлу на сервері, ваші скрипт на хостингу з допомогою cron оновлює базу новими даними.
Як варіант, замість 6 і 7 можна просто коннектіться в базу MySQL безпосередньо і оновлювати прямо з 1С
8. 1С створює файл прайса. Xls з потрібними параметрами.
9. nnCron бачачи сигнал про те, що прайс оновлений, вивантажує його на сервер.

Що потрібно для щастя?



Для такого процесу вам знадобляться наступні інструменти:

1. NnCron - потужний планувальник. + Бажано знання мови Форт. Можна і Windows Power Shell, але це у випадку, якщо немає «хитрих» вимог розкладів.
2. Wget - качаємо файли
3. Wput - аплоад файли
4. Putty - ssh клентам. + Його супутні утиліти pscp, plink.
5. ODBC Connector for MySQL - для налаштування конекту до MySQL
6. 1C8/1С7 - для щастя в торгівлі і обліку складу.
7. Blat - консольний поштовик. Про нього не йшлося, але може стати в нагоді.
8. AutoIt - дозволити автоматизувати складні завдання, а потім скомпілювати це в exe. Особливо корисно, якщо ви використовуєте автоматику на програмах, які не передбачають такої можливості.

Весь цей набір гарантує, що вся ваша автоматика буде працювати бездоганно. Ваші прайси будуть завжди оновлюватися вчасно, а наявність буде завжди актуальним. І від оновлення прайсу до оновлення бази буде проходити не годину-дві, а кілька хвилин - скільки б у вас не було прайсів.

А весь робочий процес не буде покладатися на людей, які, як відомо, ненадійні. Не потрібно переживати, що хтось забув, не встиг, захворів, замотався - все буде працювати. Всі ці скрипти покликані прибрати слабка ланка - людини.

У свій час я задався питанням автоматизації, оскільки людський фактор почав мене дратувати. Він - найголовніша перешкода в актуальності.
Переглядів: 552 | Додав: w1zard | Рейтинг: 0.0/0

Категорії розділу

Події [3]
Тільки екстренні та надзвичайні новини
Світові події [4]
Останні події, що трапились у світі.
Українські події [8]
Події, які трапились в межах нашої державии, чи стосуються України
Бізнес [3]
Новини та події із бізнес-світу
Наука і техніка [3]
Новини, що трапились у світі науки або технічних досліджень
Спорт [1]
Спортивні новини та досягнення
Культура та мистецтво [2]
Новини культурного та художнього світу
Форма входу

Наше опитування

Оцініть мій сайт
Всього відповідей: 47

Друзі сайту

Статистика


Онлайн всього: 1
Гостей: 1
Користувачів: 0