View Sidebar
Яндекс.Метрика
 
Автоматическая загрузка отчетов брокера АЛОР на smart-lab.ru. Часть 3. Почти API smart-lab

Автоматическая загрузка отчетов брокера АЛОР на smart-lab.ru. Часть 3. Почти API smart-lab

09.04.2016 14:490 comments

В сегодняшнем посте отойдем от брокера Алор и займемся написанием скрипта для Смарт-Лаб. Этот скрипт добавления данных в стейтмент smart-lab, думаю, будет интересен многим, в независимости от выбранного вами брокера. Скрипт может служить отправной точкой для собственных разработок по загрузке в смарт-лаб. Начало темы читайте тут.

smart-lab-logo

Скрипт состоит всего из четырех процедур (функций).

Первая процедура выполняет авторизацию на сайте по переданному Логину и Паролю. Для успешной авторизации необходимо по адресу http://smart-lab.ru/login/ передать три переменные (можно методом GET):

Login - Логин
Pass - Пароль
submit_login=1 – надо передать непустую переменную, как признак авторизации.

Процедура авторизации на сайте smart-lab.ru

Код процедуры авторизации:


//Процедура авторизациии в Личном кабинете
function SmartLab_login($login, $pass){

global $security_ls_key;
global $USERAGENT;
global $SMART_LAB_COOKIE;

$url = "http://smart-lab.ru/login/";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url); // откуда пришли на эту страницу

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"login=".$login."&password=".$pass."&submit_login=1");

curl_setopt($ch, CURLOPT_USERAGENT, $USERAGENT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//сохранять полученные COOKIE в файл
curl_setopt($ch, CURLOPT_COOKIEJAR, $SMART_LAB_COOKIE);
$result=curl_exec($ch);

curl_close($ch);

$security_ls_key = SmartLab_get_security_ls_key();

}

Процедура SmartLab_login обращается к трем глобальным переменным:

global $security_ls_key;
global $USERAGENT;
global $SMART_LAB_COOKIE;

Перед вызовом SmartLab_login переменная USERAGENT должна содержать информацию о браузере, например "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4".

Переменная SMART_LAB_COOKIE – это полный путь к файлу, в который сохраняем COOKIE ( $SMART_LAB_COOKIE = $_SERVER['DOCUMENT_ROOT'] . '/smart_lab_cookie.txt'; )

В $security_ls_key сохраняется секретный код. В коде процедуры SmartLab_login вызывается функция SmartLab_get_security_ls_key, которая и возвращает код $security_ls_key.

Прежде чем привести код функции SmartLab_get_security_ls_key, поясню что такое за $security_ls_key.

Движок сайта смарт-лаб (LiveStreet CMS) использует технологию AJAX. Для подтверждения легитимности совершения операции, AJAX запрос должен подтверждаться кодом security_ls_key. Уникальный security_ls_key генерируется после успешной авторизации на сайте и содержится почти на каждой HTML странице сайта.

Посмотрим на HTML код главной страницы http://smart-lab.ru после ввода логина и пароля.

smart-lab-html

Строка ДжаваСкрипта
var LIVESTREET_SECURITY_KEY = 'bcb792cb04a33259c17a02415cbc6b43';
содержит этот код.

Функция получения security_ls_key

Вот функция SmartLab_get_security_ls_key, которая «выдирает» security_ls_key из HTML.


//выдергивает security_ls_key из html кода
function SmartLab_get_security_ls_key() {
   
   global $SMART_LAB_COOKIE;
    
   $url = "http://smart-lab.ru/";
   
   $ch = curl_init();
   
   curl_setopt($ch, CURLOPT_URL, $url);
   
   curl_setopt($ch, CURLOPT_USERAGENT, $USERAGENT);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
   //отсылаем серверу COOKIE полученные от него при авторизации
   curl_setopt($ch, CURLOPT_COOKIEFILE, $SMART_LAB_COOKIE);
   
   $html=curl_exec($ch);

   curl_close($ch);
   
   //////////////
    
    $bg = strpos ( $html, 'var LIVESTREET_SECURITY_KEY = ' );

    if ($bg === FALSE) return FALSE;

    $str = substr($html, $bg + 31, 32);
    
    if ($str === FALSE) return FALSE;
    
    return $str;

}

В целях безопасности, после выполнения всех операций, мы должны произвести выход из личного кабинета. Процедура SmartLab_exit() осуществляет корректный выход с сайта.

Процедура выхода с сайта smart-lab.ru


//Процедура выхода из личного кабинета
function SmartLab_exit(){
   
   global $security_ls_key;
   global $USERAGENT;
   global $SMART_LAB_COOKIE;
   
   $url = "http://smart-lab.ru/login/exit/?security_ls_key=$security_ls_key";
   
   $ch = curl_init();
   
   curl_setopt($ch, CURLOPT_URL, $url);
   
   curl_setopt($ch, CURLOPT_USERAGENT, $USERAGENT);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
   //отсылаем серверу COOKIE полученные от него при авторизации
   curl_setopt($ch, CURLOPT_COOKIEFILE, $SMART_LAB_COOKIE);
   
   $result=curl_exec($ch);

   curl_close($ch);

   @unlink ( $SMART_LAB_COOKIE ); // Удаляем кукис
    
}

Процедуры SmartLab_exit и SmartLab_login очень похожи на аналогичные из «Автоматическая загрузка отчетов брокера АЛОР на smart-lab.ru. Часть 1. Скачивание отчетов».

"API" smart-lab

Чтобы добавить или отредактировать запись стайтмента смарт-лаб, нужно по адресу http://smart-lab.ru/plugins/tracker/include/ajax/update.php передать массив:

values[1459976400][account] – сумма на счете
values[1459976400][movement] – ввод / вывод за день
values[1459976400][comment] – комментарий

1459976400 – означает дату в формате Time Stamp (число секунд с 01 января 1970 г )

В числе «1459976400» закодирована дата 07.04.2016 @ 00:00:00 MSK (GTM +03:00).

Очень важно передавать корректную дату с правильным учетом часового пояса и нулевым временем (00:00:00). Если передать «1459976401» (разница всего в 1 секунду), то данные на график смарт лаба за этот день не попадут. Более того, отправка на смарт-лаб данных с некорректной датой приводит к глюкам с отображением графика.

Если вдруг вы отправляли данные с неправильными датами, то в «Настройки профиля > Мой счет / Стейтмент» для нужного Портфеля надо будет произвести очистку графика, нажав по ссылке Удалить все записи из трекера.

smart-lab-del

После этого все данные надо будет загрузить заново.

Добываем tracker_id с сайта smart-lab.ru

Помимо массива с данными за день, нужно передавать значение security_ls_key, про который мы уже говорили и, переменную tracker_id.

tracker_id – это идентификатор редактируемого портфеля, число.

Узнать tracker_id просто. Заходим на сайт смарт лаб на страницу редактирования портфеля и смотри HTML код. Находим в нём строку:

<input type="hidden" name="tracker_id" value="30826"/>

30826 – это и есть tracker_id.

Процедура отправки данных в smart-lab.ru

Ниже код процедуры SmartLab_edit_track, которая добавляет информацию за день.


// Редактирование записи
function SmartLab_edit_track( $tracker_id,  $time, $account, $movement, $comment ){

global $security_ls_key;
global $USERAGENT;
global $SMART_LAB_COOKIE;

$url = 'http://smart-lab.ru/plugins/tracker/include/ajax/update.php';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);

$account =  round($account); //Округляем до целых, т.к. смарт лаб не принимает дроби
$movement =  round($movement);
$comment = iconv("windows-1251", "UTF-8", $comment ); //Кодируем в UTF-8
// $time = mktime (1, 0, 0, date( "m", $time ), date( "d", $time ), date( "Y", $time ) ); //Выравниваем дату к 00 часам

$post = "tracker_id=$tracker_id";

$post .= "&";
$post .= "values[$time][account]=$account";

$post .= "&";
$post .= "values[$time][movement]=$movement";

$post .= "&";
$post .= "values[$time][comment]=$comment";

$post .= "&";
$post .= "security_ls_key=$security_ls_key";

curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

//отсылаем серверу COOKIE полученные от него при авторизации
curl_setopt($ch, CURLOPT_COOKIEFILE, $SMART_LAB_COOKIE);
curl_setopt($ch, CURLOPT_USERAGENT, $USERAGENT);

$result = curl_exec($ch);

curl_close($ch);

return $result;
}

В процедуру SmartLab_edit_track передаем ID портфеля, дату в формате Time Stamp, сумму на счете, списание/зачисление и комментарии.

Если требуется удалить данные за день, то просто передаем ID портфеля и дату, остальным переменным присваиваем пустые значения.

Установка часового пояса

Как я уже говорил, смарт-лаб чувствителен к значению дат, поэтому рекомендуется в скрипте установить часовой пояс, например так:

date_default_timezone_set('Etc/GMT-3');

или так:

date_default_timezone_set("Europe/Moscow");

Как не странно, но результат может быть разным. Применяйте то, что работает на вашем хостинге.

Скачивайте файл PHP здесь и изучайте пример.

Следующая часть опубликована тут.

Пишите свои комментарии....

Добавить комментарий


css.php