class CNewsStruct
Класс-структура для хранения данных об одной новости: время, валюта, важность, событие, фактическое значение, прогноз и предыдущее значение.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «news.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека MQL5 для получения и обработки экономических новостей из веб-источников. Содержит классы для выполнения HTTP-запросов, парсинга HTML-контента и управления коллекцией новостей. Основной класс CNewsInvesting наследует функциональность веб-запросов и обеспечивает загрузку, фильтрацию и хранение новостей по валютам и уровню важности.
Класс CWebRequest реализует методы отправки POST и GET-запросов, а также загрузки данных с удалённых серверов с обработкой ошибок и таймаутов. Класс CTag предоставляет инструменты для извлечения нужных фрагментов из HTML/XML текста по шаблонам. Структура CNewsStruct описывает формат хранения данных о каждой новости.
Функция GetTimeOffset вычисляет временное смещение между различными часовыми поясами. Класс CNewsInvesting позволяет настраивать фильтрацию по валютам и уровням важности новостей, а также управлять жизненным циклом новостных событий.
Классов: 4 · методов: 21 · конструкторов: 4 · деструкторов: 4 · отдельных функций: 1
class CNewsStruct
Класс-структура для хранения данных об одной новости: время, валюта, важность, событие, фактическое значение, прогноз и предыдущее значение.
class CWebRequest
Класс для выполнения HTTP-запросов (POST, GET) и загрузки данных с удалённых серверов.
class CTag
Класс для парсинга HTML/XML текста: извлечение фрагментов по начальным и конечным шаблонам.
class CNewsInvesting
Основной класс библиотеки для управления экономическими новостями: загрузка, парсинг, фильтрация по валютам и важности, хранение в коллекции.
int GetTimeOffset(_enum_time_mode eTimeMode,int gmtModificator)
Вычисляет временное смещение в секундах между локальным, брокерским или GMT-временем с учётом коррекции и дня недели.
CNewsStruct()
Конструктор класса CNewsStruct для создания пустого значения.
~CNewsStruct()
Деструктор класса CNewsStruct.
CWebRequest()
Конструктор класса CWebRequest для создания пустого значения.
~CWebRequest()
Деструктор класса CWebRequest.
string GetBuffer()
Возвращает текстовый буфер с результатом последнего HTTP-запроса.
void OnInit(string swww)
Инициализирует параметр веб-запроса, сохраняя ссылку для последующего использования.
bool POST(string slink,string str)
Отправляет POST-запрос на указанный URL с переданными данными и сохраняет ответ в буфер.
bool GET(string slink)
Отправляет GET-запрос на указанный URL и сохраняет ответ в буфер.
bool Download(string slink,string savefile)
Загружает файл с указанного URL и сохраняет его локально на диск.
int Load(string sLink)
Выполняет GET-загрузку данных по ссылке и передаёт результат в метод OnLoad для обработки.
int OnLoad(string &buffer)
Базовый метод обработки загруженного текстового буфера — требует переопределения в наследнике.
CTag()
Конструктор класса CTag для создания пустого значения.
~CTag()
Деструктор класса CTag.
string GetTag(string &sbuffer,int &istartend,string startPattern,string endPattern,bool bExclude)
Ищет в буфере фрагмент между начальным и конечным шаблонами и возвращает его текст, при необходимости удаляя шаблоны и пробелы.
string GetText(string stag)
Извлекает текстовое содержимое из HTML-тега, находя текст между символами > и <.
void RemoveSpace(string &stag)
Удаляет начальные и конечные пробелы из строки.
CNewsInvesting()
Конструктор класса CNewsInvesting для создания пустого значения с настройками по умолчанию.
~CNewsInvesting()
Деструктор класса CNewsInvesting.
void OnInit(string swww,string slink)
Инициализирует URL для загрузки новостей и очищает массив данных.
int VerifyNews(int i,long iOpenTimerSec,long iDeleteTimerSec)
Проверяет статус новости по индексу: не активна (0), активна (1) или завершена (2), на основе переданных таймеров открытия и удаления.
int LoadCurrency(string sList)
Загружает список валют для фильтрации новостей из строки через разделитель-пробел.
bool isCurrency(string sCurrency)
Проверяет, входит ли указанная валюта в список фильтра.
void LoadImp(bool bh,bool bm,bool bl)
Настраивает, какие уровни важности новостей (высокий, средний, низкий) будут приниматься при фильтрации.
bool FilterImp(int iimp)
Проверяет, проходит ли новость с указанным уровнем важности текущую фильтрацию.
void Save()
Сохраняет текущий буфер с полученными данными в тестовый файл для отладки.
int getSize()
Возвращает текущее количество новостей в коллекции.
CNewsStruct * getNews(int index)
Возвращает указатель на структуру новости по указанному индексу или NULL при некорректном индексе.
int OnLoad(string &buffer)
Обрабатывает загруженный HTML-буфер: извлекает таблицу с новостями, парсит каждую строку и заполняет массив данных.
void Add(string event,string cur,int imp,datetime tmTime,int itimeOffset)
Добавляет новость в коллекцию, если событие не пустое, валюта проходит фильтр, уровень важности допустим и время задано.
/*
необходимо на investing сформировать запрос для отображения на сайте и сюда взять ссылку для получения данных
string sWWWlink=""; //эту ссылку выводим для добавления в настройки WebRequest
string sLink="";
input int Delay=1;
input int GMT_Offset=3;
*/
#ifndef __CNEWS__
#define __CNEWS__ sovetnikov_net_news_23424dsfsdf23433324fdfdgg
#ifdef __LIB_GUI__
#include <sovetnikovGUI\defines.mqh>
#include <sovetnikovGUI\Time.mqh>
#else
#include <sovetnikovNET\defines.mqh>
#include <sovetnikovNET\Time.mqh>
#endif
class CNewsStruct
{
public:
CNewsStruct() {}
~CNewsStruct() {}
datetime time;
string cur;
int imp;
string event;
string actual;
string forecast;
string previos;
};
class CWebRequest
{
protected:
string m_buffer;
string m_link,m_WebRequest;
public:
CWebRequest()
{
m_link=NULL;
m_WebRequest=NULL;
m_buffer=NULL;
}
~CWebRequest()
{
}
string GetBuffer()
{
return m_buffer;
}
virtual void OnInit(string swww)
{
// код доступен только после оплаты
}
virtual bool POST(string slink,string str)
{
m_link=slink;
string cookie=NULL,headers="content-type: text/plain;charset=UTF-8",referer = NULL;
int res;
uchar data[],result[];
m_buffer="";
int ilen=StringLen(str);
ArrayResize(data,StringToCharArray(str,data,0,WHOLE_ARRAY,CP_UTF8)-1);
/*ArrayResize(data,ilen);
for(int i=0;i<ilen;i++){
data[i]=(uchar)StringGetChar(str,i);
}*/
int isize=ArrayRange(data,0);
ResetLastError();
int j=0;
while(!IsStopped() && j<5)
{
int itimeout=5000; //--- timeout менее 1000 (1 сек.) недостаточен при низкой скорости Интернета сделан таймаут в 5 секунд
res=WebRequest("POST",m_link,cookie,referer,itimeout,data,isize,result,headers);
int ierror=GetLastError();
if(ierror==ERR_WEBREQUEST_REQUEST_FAILED || ierror==ERR_WEBREQUEST_INVALID_ADDRESS || ierror==ERR_WEBREQUEST_CONNECT_FAILED)
{
break;
}
if(res==-1)
{
if(ierror==4060 || ierror==4014)
{
if(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")
MessageBox("Вам нужно добавить адрес: "+m_WebRequest+" в Разрешить WebRequest для следующих URL. Меню 'Сервис->Настройки' на вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
else
MessageBox("You need to add the address: "+m_WebRequest+" to Allow WebRequest for listed URL. Menu 'Tools->Options' on 'Experts Advisors' tab","Error",MB_ICONINFORMATION);
}
PrintFormat("%s error code: %d",__FUNCTION__,ierror);
break;
}
else
{
if(res==200)
{
string sBuffer="";
sBuffer=CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); //сохраним в UTF8
if(sBuffer!="")
{
m_buffer=sBuffer;
StringReplace(m_buffer,"\"","");//уберем \"
return true;
}
}
Sleep(5000); //таймаут при ошибках чтения
}
j++;
}
return false;
}
virtual bool GET(string slink)
{
m_link=slink;
string cookie=NULL,headers;
int res;
char post[],result[];
m_buffer=NULL;
ResetLastError();
int j=0;
while(!IsStopped() && j<5)
{
int itimeout=5000; //--- timeout менее 1000 (1 сек.) недостаточен при низкой скорости Интернета сделан таймаут в 5 секунд
ResetLastError();
res=WebRequest("GET",m_link,cookie,NULL,itimeout,post,0,result,headers);
int ierror=GetLastError();
if(res==-1)
{
if(ierror==4060 || ierror==4014)
{
if(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")
MessageBox("Необходимо добавить адрес: '"+m_WebRequest+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
else
MessageBox("You need to add the address: '"+m_WebRequest+"' to the list of allowed URLs on the 'Experts' tab","Error",MB_ICONINFORMATION);
}
PrintFormat("%s error code: %d",__FUNCTION__,ierror);
break;
}
else
{
string sBuffer="";
sBuffer=CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); //сохраним в UTF8
if(sBuffer!="")
{
m_buffer=sBuffer;
StringReplace(m_buffer,"\"","");//уберем \"
return true;
}
Sleep(5000); //таймаут при ошибках чтения
}
j++;
}
return false;
}
virtual bool Download(string slink,string savefile)
{
m_link=slink;
string cookie=NULL,headers;
int res;
char post[],result[];
m_buffer=NULL;
ResetLastError();
int j=0;
while(!IsStopped() && j<5)
{
int itimeout=5000; //--- timeout менее 1000 (1 сек.) недостаточен при низкой скорости Интернета сделан таймаут в 5 секунд
ResetLastError();
res=WebRequest("GET",m_link,cookie,NULL,itimeout,post,0,result,headers);
int ierror=GetLastError();
if(res==-1)
{
if(ierror==4060 || ierror==4014)
{
if(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")
MessageBox("Необходимо добавить адрес: '"+m_WebRequest+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
else
MessageBox("You need to add the address: '"+m_WebRequest+"' to the list of allowed URLs on the 'Experts' tab","Error",MB_ICONINFORMATION);
}
PrintFormat("%s error code: %d",__FUNCTION__,ierror);
break;
}
else
{
string sBuffer="";
int filehandle=FileOpen(savefile,FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
FileWriteArray(filehandle,result,0,ArraySize(result));
FileClose(filehandle);
Print("Load success");
return true; //загрузили файл
}
else
{
PrintFormat("Error load file %s:%d",m_link,GetLastError());
}
Sleep(5000); //таймаут при ошибках чтения
}
j++;
}
return false;
}
virtual int Load(string sLink)
{
m_link=sLink;
if(GET(m_link))
{
string buffer=GetBuffer();
if(buffer!="")
{
return OnLoad(buffer);
}
return 0;
}
return INT_MAX;
}
virtual int OnLoad(string &buffer)
{
Print("Необходимо реализовать ",__FUNCSIG__);
return 0;
}
};
enum _enum_time_mode
{
eLocal, //Computer Time
eBroker, //Terminal Time
eGMT//GMT Time
};
class CTag
{
protected:
int FindTag(string spattern,string &sbuffer,int iStartPos)
{
int iStart=-1;
iStart=StringFind(sbuffer,spattern,iStartPos);
return iStart;
}
string GetEПоказано первые 50% кода (символов: 9594)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.