Я продовжую писати про Битриксе в контексті обмінів, Mysql і командного рядка Linux.

Ця стаття є вступною до серії статей про структуру бази даних Бітрікс, де ця тема буде розкрита досить докладно. Для початку будуть представлені рішення деяких невеликих, але настирливих завдань. Як завжди, знання SQL обов'язково.

У статті розглядаються досить приватні питання, які виникають щодня. Звичайно, ви можете використовувати ці матеріали за їх прямим призначенням, але головна мета статті не в цьому. Я починаю розкривати «чорний ящик» під назвою «структура бази даних бітрікс», і показувати, що ці знання можуть знадобитися для підвищення рівня володіння як системою, так і базовими технологіями (SQL, linux shell), що, звичайно, допомагає вирішувати нові, складні, цікаві, різноманітні завдання.

Сторінка, з якої можна робити SQL запити до бд, або mysql web клієнт бітрікс, знаходиться в панелі управління Битрикса по шляху: Настройки->Інструменти->SQL запит».

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

log=$(grep -i "login" /home/bitrix/www/bitrix/php_interface/dbconn.php | cut -f2 -d'"')
pas=$(grep -i "pass" /home/bitrix/www/bitrix/php_interface/dbconn.php | cut -f2 -d'"')
mysql -u$log -p$pas $log

— таким чином можна отримати логін і пароль до бази даних Mysql Bitrix з командного рядка linux на bash. Шляхи, звичайно ж, замініть на ваші власні. У варіанті, що надається виртаульной машиною Бітрікс, DOCUMENT_ROOT виглядає як /home/bitrix/www/.

Читати далі →

JSON pipes в короби

    Чим більше я пишу однострочнікі в короби, тим більше я приходжу до двох важливих ідей:
     
  1. Це дуже потужний засіб для «безпосереднього програмування», тобто вказівки комп'ютеру, що робити.
  2.  
  3. Велика частина однострочнікі присвячена grep / awk / cut / tr, які якимось чином виколупують і приводять в людський вигляд висновок попередніх утиліт.
  4.  
При тому, що модель pipe'ов чудова, абсолютно брудні хакі з вилову потрібних полів у виведенні в другому пункті («а ось тут ми можемо виділити потрібне нам за характерною коми за допомогою awk-F, '{print $ 2}'… ) роблять процедуру спірної по задоволенню, і вже точно нечитаною.
 
Ще одна серйозна проблема: при тому, що шелл дає досить багато ідіом з функціонального програмування, в ньому немає ідіоми фільтрації списку по результату виконання зовнішньої програми. Тобто "грепнуть" список ми можемо. А ось залишити в списку тільки ті елементи, для яких якась програма повернула "успіх" — ні.
 
При цьому є ворожа і не дуже добре написана середу — powershell (вінди). У яких взяли хорошу ідею (пайпи передають не текст, а об'єкти), але зіпсували її двома речами:
     
  1. неергономічними консоллю виндов (Shift-PgUp де, а?)
  2.  
  3. пропозицією піти і вивчити. net для того, щоб нормально з методами працювати.
  4.  
 
Хочеться мати об'єкти в пайпе в теплому ламповому лінуксових Шеллі. З hand-candy (мало друкувати), eye-candy (приємно дивитися) і загальної ергономічністю процесу використання. Ще хочеться мати можливість поєднувати "новий підхід" зі старим, тобто звичайним текстовим pipe'ом.
 
 Ідея
Треба написати набір інструментів, які дозволять в pipe-style оперувати з структурованими даними. Очевидним вибором є XML JSON.
Нам потрібно:
     
  1. Утиліти, які візьмуть типові формати на вхід і конвертує їх у json.
  2.  
  3. Утиліти, які дозволять в pipe'е маніпулювати з json'ом.
  4.  
  5. Утиліти, які приведуть json в "звичайний" формат.
  6.  
У цьому випадку людина не бачитиме json на екрані, але буде мати можливість працювати з ним.
 
 Для затравки
(Для розуміння я буду писати довгі імена утиліт, в реальному житті це будуть короткі скорочення, тобто не json-get-object, а щось типу jgo або jg)
 
Виводить тільки файли, для яких file зумів визначити тип:
 
ls -la | ls2json | json-filter 'filename' --exec 'file {} >/dev/null' | json-print

 
Викачує з деякого сайту токен для авторизації, виколупує його з json'а і виставляє в змінні середовища оточення, після чого завантажує список і відфільтрувавши по регекспу поле "автор" викачує всі url'и:
 
curl mysite/api.json | env `json-get-to-env X-AUTH-TOKEN`;curl -H X-AUTH-TOKEN $X-AUTH-TOKEN mysite/api/list.json | json-filter --field 'author' --rmatch 'R.{1,2}dal\d*' | json-get --field 'url' | xargs wget

 
Парсит висновок find-ls, сортує по полю size, вирізає з масиву елементи з 10 по 20, виводить їх в csv.
 
find . -ls | ls2josn | json-sort --field 'size' | json-slice [10:20] | json2csv

 
 
Читати далі →