Обновленная RSS-читалка: bash.org, новости, погода, блоги и т.д.




Принцип обмена данными из 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='\

27 Comments

  1. Armando

    Всё пишите сюда!

    Reply
  2. CheBurator

    пишу!!! отсутстыует возможность менять размер шрифта! я не люблю мелкие буковки!

    Reply
  3. Armando

    Доступна обновленная версия от 01.09.2008 12:45.

    Значительно улучшен интерфейс!

    Добавлено:

    — возможность создавать список каналов

    — возможность задать шрифт и размер шрифта

    — поиск канала по сайту

    — сохранение настроек

    Reply
  4. coder1cv8

    Неплохо! А для пользователей восьмерки не планируется?…

    Reply
  5. Armando

    Планируется. Только не знаю когда)

    Reply
  6. CheBurator

    Нате вам еще суперидею, которая улучшит имхо юзабельность…

    Определять размер экрана (окна) и таблицу для вывода подстраивать под размер окна, а то у мну на большом мониторе бяково выходит…

    Reply
  7. Armando

    имееешь в виду печатать на всю ширину окна? или я чего-то не понял.

    зы у меня 1680х1050 и нормально все смотрится.

    Reply
  8. Armando

    Обновлено дополнительное описание на сайте:

    Настройки сохраняются в xml файле в каталоге с обработкой. Т.е. разные пользователи в разных базах пользуются одинаковыми настройками. Если нужны раздельные настройки — пишите. Как вариант можно распихать по разным директориям.

    По умолчанию в список каналов внесен башорг, который можно удалить. Если Вы не знаете адрес канала, но знаете сайт сайт-источник (например, http://www.lenta.ru), воспользуйтесь кнопкой «Найти канал на сайте». Введите адрес сайта и отметьте нужные каналы, если они там нашлись.

    Если описание канала не задано, то оно присваевается автоматически, при обновлении канала.

    Reply
  9. CheBurator

    (7) да, на всю ширину окна.. у мну на работе 22 моник дюйма…

    Reply
  10. CheBurator

    блин, как это я упустил +1 поставить…

    Reply
  11. Crush

    =) Пока тестировал.. Работа встала =))

    +1

    Reply
  12. Crush

    Кнопка «найти канал на сайте»

    Адрес сайта = «http://Yandex.ru»

    Текст в окне сообщений = »

    Unknown

    Не удалось послать запрос: msxml3.dll: Отказано в доступе.»

    Reply
  13. Armando

    (10) спасибо за идею. буду подумать.

    (11, 12) спасибо)

    (13) есть такие глюки. хз с чем связано. если писать «http://www.yandex.ru/», то все ок. ктстаи, новости яндекса читать не хочет, хз почему. потом раберусь.

    Reply
  14. Armando

    Обновил 03.09.2008 12:00

    — устранен мелкий глюк с поиском канала на сайте (не 13)

    — добавлен поиск по MSDN

    Reply
  15. alexejnic

    Ещё бы кнопочку сохранения в текстовый файл чтобы потом дочитать что не дочитал.

    Reply
  16. alexejnic

    Себе приделал вот так:

    Код
     Процедура Вфайл()
       Перем Файло;
       Путь="d:\Tel\KPK\Book";
       Если ФС.ВыбратьФайл(1,Файло,Путь,"Куда сохраним",,"txt",)=1 Тогда
        Таблица.Записать(Путь+Файло,3);  
       КонецЕсли;
       КонецПроцедуры

    Показать полностью

    Reply
  17. Armando

    (16) Такая кнопочка уже есть: [файл]-[сохранить как] )) или мы о разном?

    Reply
  18. Armando

    (17) тоже самое (18), только вручную.

    Reply
  19. triGGer

    Здорово! Спасибо автору! Отличная работа!

    Reply
  20. vandalsvq

    Пока особо не тестировал но однозначно полезная весчь. Спасибо большое за определенные наводки которые я подчерпнул для себя из данной обработки.

    Reply
  21. DimaP

    рульно!

    Reply
  22. pupkinSana

    Контент типа ‘text/html; charset=windows-1251’ не поддерживается… ни один из 3х сайтов.

    Reply
  23. Armando

    (23) Способ реализации ошибки опишите, пожалуйста.

    Reply
  24. 1c_boys

    Спасибо огромное автору! Очень полезная обработка!

    Reply
  25. 1c_boys

    Выдает ошибку:

    Root = xmlDoc.DocumentElement;

    {C:DOCUMENTS AND SETTINGSАДМИНИСТРАТОРМОИ ДОКУМЕНТЫDOWNLOADSRSS.ERT(66)}: Плохой тип переменной

    Reply
  26. pupkinSana

    (24) Способ такой: нажимаешь читать комментарий и всё.

    Reply
  27. 1v7

    ❗ Ошибки: (канал: http://news.tut.by/rss/companynews.rss/)

    Unknown

    Не удалось послать запрос: msxml3.dll: Отказано в доступе.

    ❗ Ошибки: (канал: http://news.tut.by/rss/all.rss)

    Root = xmlDoc.DocumentElement;

    {Отчет.НОВОСТИ.Форма.Модуль(76)}: Плохой тип переменной

    Reply

Leave a Comment

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