Ребят помогите,как правильно парсить?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
vebster005
457
vebster005  
Добрый день, уже долго пытаюсь спарсить данные по маржинальным требованиям
но вот не задача, пытаюсь найти простой код или же сделать по примеру, всё ни как не получается

Пожалуйста помогите спарсить 1 число с САЙТА (в данном примере это 1800)

Как я понял, получается спарсить любой символ но только если это главная страничка
Вот что у меня пока получилось^
//+------------------------------------------------------------------+
//|                                                     ParserOK.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://ya.ru"
#property version   "1.00"
#property strict

#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenW(string sAgent,int lAccessType,string sProxyName="",string sProxyBypass="",int lFlags=0);
int InternetOpenUrlW(int hInternetSession,string sUrl,string sHeaders="",int lHeadersLength=0,int lFlags=0,int lContext=0);
int InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import

input string URL="https://www.cmegroup.com/trading/fx/g10/euro-fx_performance_bonds.html#sortField=exchange&sortAsc=true&clearingCode=EC§or=FX&exchange=CME&pageNumber=1/";
input string SubString="cmeTableRight"; // самое начало и застрял, что тут писать??? возможно: class="" т.к оно уникально
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
// Скачивает исходный код страницы HTML  в текстовую переменную      |
//                и возвращает как результат                         |
//+------------------------------------------------------------------+
string ReadHTML()
  {
   if(!IsDllsAllowed())
     {
      Alert("Необходимо в настройках разрешить использование DLL");
      return("");
     }
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
      Alert("Ошибка при вызове InternetAttemptConnect()");
      return("");
     }
   int hInternetSession=InternetOpenW("Microsoft Internet Explorer",0,"","",0);
   if(hInternetSession<=0)
     {
      Alert("Ошибка при вызове InternetOpenW()");
      return("");
     }
   int hURL=InternetOpenUrlW(hInternetSession,URL,"",0,0,0);
   if(hURL<=0)
     {
      Alert("Ошибка при вызове InternetOpenUrlW()");
      InternetCloseHandle(hInternetSession);
      return("");
     }
   int cBuffer[256];
   int dwBytesRead[1];
   string TXT="";
   while(!IsStopped())
     {
      bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);
      if(dwBytesRead[0]==0)
         break;
      string text = "";
      string text0= "";
      for(int i=0; i<256; i++)
        {
         text0=CharToStr((char)(cBuffer[i]&0x000000FF));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

         text0=CharToStr((char)(cBuffer[i]>>(8  &0x000000FF)));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

         text0=CharToStr((char)(cBuffer[i]>>(16  &0x000000FF)));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

         text0=CharToStr((char)(cBuffer[i]>>(24  &0x000000FF)));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

        }
      TXT=TXT+text;
      Sleep(1);
     }
   InternetCloseHandle(hInternetSession);
   return(TXT);
  }
//+------------------------------------------------------------------+
// ВЫВЕСТИ ЦИФРЫ(В ДАННОМ ПРИМЕРЕ 1800) В LABEL
//+------------------------------------------------------------------+
bool Label(const long                    chart_ID=0,               // ID графика
                 const string            name="Label",             // имя метки
                 const int               sub_window=0,             // номер подокна
                 const int               x=0,                      // координата по оси X
                 const int               y=0,                      // координата по оси Y
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
                 const string            text="Label",             // текст
                 const string            font="Arial",             // шрифт
                 const int               font_size=10,             // размер шрифта
                 const double            angle=0.0,                // наклон текста
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
                 const bool              back=false,               // на заднем плане
                 const bool              selection=false,          // выделить для перемещений
                 const bool              hidden=true,              // скрыт в списке объектов
                 const long              z_order=0)                // приоритет на нажатие мышью
  {
//--- создадим текстовую метку
   ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0);
//--- установим координаты метки
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- установим угол наклона текста
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- установим способ привязки
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrGreen);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  } 
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   string s=ReadHTML();
   int sf=StringFind(s,SubString);
   string level=StringSubstr(s,sf+1,5);
   
   Label(0,"label",0,233,1,CORNER_LEFT_UPPER,(StringToInteger(level)),"Tahoma",8,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);

   
   Comment("\n Начало подстроки: ",sf,
           "\n Уровень: ",level);
  }
Прошу вас помогите исправить или же киньте готовый простой (или может не простой код), пытался сделать по примеру индикатора новостей но в нём не смог разобраться
Спасибо всем кто хотя бы прочитал это
Euro FX EUR/USD Margins - CME Group
Euro FX EUR/USD Margins - CME Group
  • www.cmegroup.com
Find information for Euro FX Margins provided by CME Group. View Margins
Renat Akhtyamov
16177
Renat Akhtyamov  

для начала нужно найти такую ссылку, которая выдаст ответ на запрос в виде текстового файла, в котором будут необходимые Вам данные

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

далее получаю это файл на компьютер также как в примере:

https://www.mql5.com/ru/docs/network/webrequest

ну и обрабатываю, использую функции работы с текстом:

https://www.mql5.com/ru/docs/strings

Документация по MQL5: Сетевые функции / WebRequest
Документация по MQL5: Сетевые функции / WebRequest
  • www.mql5.com
Для использования функции WebRequest() следует добавить адреса серверов в список разрешенных URL во вкладке "Советники" окна "Настройки". Порт сервера выбирается автоматически на основе указанного протокола - 80 для "http://" и 443 для "https://". Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий