OpenData и мы




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

35 Comments

  1. Ibrogim

    Надо вечерком добавить в БП3 оповещение главбуха о проверке предприятия пользуясь Планом проведения плановых проверок юридических лиц и ИП

    По сабжу пришла мысль, сделать мобильное(или нет) приложение. Вбиваешь туда своё инн, и если в любых открытых данных родины встречается оно, то тебе приходит об этом алярм )

    Reply
  2. tango

    (1) Ibrogim, ИНН можно тупо погуглить для начала 🙂

    и ФИО, кстати

    основа работы СБ 🙂

    Reply
  3. tango

    Ура. Я все-таки сделал это. Отправил свою шнягу на конкурс. Послезавтра можно ожидать появления проекта в голосовалке, и статьи в номинации «журналист», и шняги в номинации «разработчик».

    Голосуя ЗА, ты способствуешь распространению света среди обитателей хабры-хабры.

    Во вложении — мануалы для юзеров и прогеров.

    Reply
  4. tango

    560 просмотров и 1 комментарий

    огорчительно

    неужели тема неинтересна?

    или просто нераскрыта?

    ладно, сегодня конкурсные работы должны опубликовать, посмотрим

    для начала посмотрим, опубликуют ли мои заявки 🙂

    Reply
  5. dddxddd

    (4) А что собственно комментировать? В статье есть все, кроме смысла который способен понять ее читатель. Очевидно что Вы-то понимаете о чем пишете, но среди читателей, практически нет практикующих вангователей. Вот и получается, стена текста есть, а вопросов нет. Если бы Вы не выложили свой юзер- и программер-гайд, то я бы так и не понял, о чем Вы пытались рассказать.

    За список ресурсов в конце статьи, отдельное спасибо.

    Reply
  6. tango

    (5) dddxddd, Спасибо. Красиво сказано, если сообразить, что такое все, кроме смысла.

    Можн уточняющий вопрос (задать)?

    Вы знаете, что такое open data?

    Или я должен был здесь пересказывать вики?

    Reply
  7. tango

    И да, леди&джентльмены. Материалы конкурса открылись для голосования.

    Это здесь:

    http://www.budgetapps.ru/contest#projects

    Мои (два) проекта выглядят как на прикрепленных картинках

    Голосовалка через в контакте или фасбук

    Сам замучился проголосовать за себя.

    Но очень надеюсь, что у вас получится

    Reply
  8. AllexSoft

    есть такой сайтик госзакупки.. вот была мысль сделать некую БД которая бы мониторила тендеры на определенные темы + вела статистику тендеров по суммам, выигрывавшим организациям и тд.. Поэтому ламерский вопрос: а вот эта OpenData там есть ? чтоб через нее все собрать

    Reply
  9. tango

    (8) AllexSoft, я сейчас только на свои проекты смотрю, пытаясь организовать голосование 🙂

    но, кажется, по закупкам там глаз за что-то цеплялся

    уж больно очевидная тема

    Reply
  10. tango

    картинки для опознавания через ссылки:

    Reply
  11. tango

    Добавлена вторая часть.

    OpenData -2

    Reply
  12. tango

    поломалась голосовалка у Минфина

    будем надеяться, временно

    Reply
  13. tango
  14. university

    (13) Много голосов собрал7

    Reply
  15. tango

    (14) university, по ходу заморочки у них какие-то с голосовалкой

    такое впечатление, что админы у них никогда такого не делали

    хотя это не админская работа. короче, какой-то левый сайтопейсатель что-то напейсал

    Reply
  16. university

    (15) Я сейчас оттуда. Голоса по проектам — от 1 до 0. Видать одмины спохватились и все сбросили.

    Reply
  17. tango

    (16) university, ага, точно 🙂

    блин, такой проект и такие мастера :))))))

    но там были ребята и пошустрей меня.

    Ладно. Завтра проголосовать не забудь 🙂

    Reply
  18. tango

    Возглавляем список!

    Спaсибо, коллеги 🙂

    Reply
  19. tango

    Похоже, разработчики сайта все-таки прикрыли дыру в голосовалке и учитывают теперь только уникальные ВК/ФБ аккаунты.

    И мы оказались далеко не первыми.

    Отставание в разы, как минимум в четыре раза.

    Это плохо.

    Reply
  20. tango

    Прямые ссылки для голосования:

    — ВКонтакте:

    номинация «разработчик»

    http://vk.com/share.php?url=http://www.budgetapps.ru/contest/nominations/14/offers/102%23projects

    номинация «журналист»

    http://vk.com/share.php?url=http://www.budgetapps.ru/contest/nominations/15/offers/77%23projects

    — Facebook:

    номинация «разработчик»

    https://www.facebook.com/sharer/sharer.php?u=http://www.budgetapps.ru/contest/nominations/14/offers/102

    номинация «журналист»

    https://www.facebook.com/sharer/sharer.php?u=http://www.budgetapps.ru/contest/nominations/15/offers/77

    Reply
  21. tango
  22. tango

    обсуждение минфиновской голосовалки здесь

    http://forum.infostart.ru/forum1/topic126521/

    если кому интересно

    Reply
  23. tango

    Милостивые государи и государыни!

    Дамы и господа!

    Братья и сестры!

    Не пройдите мимо, сами мы не местные!

    Жамкните на сыллочки еще разочек, очень прошу!

    Reply
  24. tango

    Дамы и господа, прошу прощения.

    Не надо голосовать.

    Счетчики мертвы.

    Reply
  25. tango

    (24)

    Reply
  26. tango

    Уважаемые коллеги!

    Если кому еще интересно, чем все это кончится, проголосуйте, пожалуйста, еще раз

    Reply
  27. tango

    timestamp

    6 march, 17:33

    разработка

    max 57

    Open и мы 22

    журналист

    max 128 (ого!)

    Open и мы 21

    Reply
  28. tango

    timestamp

    7 march, 12:03

    разработка

    Open и мы, max 126

    группа преследования 67, 55

    журналист

    max 138

    Open и мы 128

    группа преследования 115, 114

    Reply
  29. university

    Коллеги, не ходите по прямым ссылкам голосовать!!!

    В соцсети показывает, что голосование было, а счетчик не перебрасывается!!!

    АЛЯРМ!!!

    Reply
  30. tango

    Э-хе-хех…

    Reply
  31. tango

    А вообще интересно, как же они устроили эту голосовалку, что прямые ссылы не катят.

    Если обитатели обители habra-darkside на пальцах объяснят феномен, признаю, что они лучше 1снегов 🙂

    Reply
  32. tango

    Посмотрел работу неожиданно рванувшего коллегу-конкурента на конкурсе среди разработчиков.

    Заява впечатляет замахом:

    В проекте используется «интеллектуальная визуализация»открытых данных, позволяющая пользователю системы быстро находить «болевые точки» экономики, используя результаты анализа собранных данных.

    Также в проекте разработан механизм прогнозирования во времени на основе анализа открытых данных, прежде всего,для курса иностранной валюты (доллар) и активов банков, входящих в специальный перечень МинФина. Для активов показаны разные варианты настроек алгоритмов — на долгосрочное, краткосрочное и среднесрочное (сбалансированное) планирование.

    И «болевые точки» экономики враз находит, и курс доллара «прогнозирует»…

    Чё так скромно — конкурс… Чё не нобелевка?

    Reply
  33. tango

    11.03.2015 12:36

    dev

    OpenWe, max 237

    chase pack 181, 167, 146

    jour

    max 319

    OpenWe 277

    chase pack 180, 165

    Reply
  34. tango

    Все на борьбу с Цыпиным Александром Павловичем!

    подробности:

    http://forum.infostart.ru/forum1/topic126521/message1316579/#message1316579

    и далее

    Reply
  35. tango

    Уважаемые коллеги, дальнейшие комментарии по конкурсу — в ветке из предыдущего сабжа. Текущую закрываем.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *