Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет!
Адрес "http://ec.forexprostools.com/" перестал работать.
Добрый вечер.
https://ec.forexprostools.com/ работает
Добрый вечер.
https://ec.forexprostools.com/ работает
Спасибо!
Что-то я сам не попробовал этот вариант. Наверное "уставший" был.
Спасибо еще раз!
Всем привет!
Получал новости с https://ec.forexprostools.com без проблем.
С какого-то времени советник престал получать новости и соответственно перестал их учитывать.
Код получения новостей реализован так:
string headers;
char post[],result[];
int res;
ResetLastError();
//res = WebRequest("GET", url, NULL, NULL, 5000, post, 0, result, headers); //--- загрузка html-страницы
res = WebRequest("GET", url, NULL, 5000, post, result, headers); //--- загрузка html-страницы
if (res == -1) {
Print("Ошибка в WebRequest. Код ошибки =", GetLastError());
MessageBox("Необходимо добавить адрес '" + url + "' в список разрешенных URL во вкладке 'Советники'", "Ошибка", MB_ICONINFORMATION);
} else {
PrintFormat("Файл успешно загружен, Размер файла =%d байт.",ArraySize(result));
int filehandle = FileOpen("MyPage.htm", FILE_WRITE|FILE_BIN);
if (filehandle != INVALID_HANDLE) {
FileWriteArray(filehandle, result, 0, ArraySize(result));
FileClose(filehandle);
} else {
Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
}
}
То что получается в файле "MyPage.htm" см. во вложении в zip архиве "MyPage.zip"
Содержимое невозможно прочитать, какая-то абракадабра, и соответственно невозможно распарсить для получения данных о выходе новостей.
С любого другого сайта все скачивается и сохраняется в файл без проблем, т.е. код рабочий. Но вот с https://ec.forexprostools.com проблема...
"News EA Template without DLL" - таже самая проблема...
Может кто-то сталкивался с этой проблемой и уже сеть решение?
Буду очень признателен любым идеям!
Заранее благодарю!
Всем привет!
Получал новости с https://ec.forexprostools.com без проблем.
С какого-то времени советник престал получать новости и соответственно перестал их учитывать.
Там написано черным по белому: Enable JavaScript and cookies to continue.
Веб-реквест умеет сохранять и отдавать куки, а JavaScript - не поддерживает.
Один из выходов - протрейсить работу JavaScript в браузере и повторить её на MQL5.
Второй вариант - зайти на страницу в браузере, потом взять из него полученные куки и добавить в веб-реквест в эксперте.
Там написано черным по белому: Enable JavaScript and cookies to continue.
Веб-реквест умеет сохранять и отдавать куки, а JavaScript - не поддерживает.
Один из выходов - протрейсить работу JavaScript в браузере и повторить её на MQL5.
Второй вариант - зайти на страницу в браузере, потом взять из него полученные куки и добавить в веб-реквест в эксперте.
"... потом взять из него полученные куки и добавить в веб-реквест в эксперте ..." - Можете поподробнее объяснить как вытащить куки, например их Google Chrome, и если их там будет несколько, какие именно использовать?
Можете пример привести с вытаскиванием куки?
"... потом взять из него полученные куки и добавить в веб-реквест в эксперте ..." - Можете поподробнее объяснить как вытащить куки, например их Google Chrome, и если их там будет несколько, какие именно использовать?
Можете пример привести с вытаскиванием куки?
Заходите на страницу сайта, открываете Инструменты разработчика из меню настроек или по нажатию Ctrl+Shift+I. Где-то там (может отличаться в зависимости от производителя и версии браузера) будет перечень куков. Все их пары ключ=значение нужно будет точно перенести в WebRequest.
Но нет гарантии, что на сайте нет других защит (проверки по User-Agent (это можно добавить в WebRequest по аналогии с куками) или вычислений ответов на запросы в JavaScript (это можно выяснить только реверс-инжинирингом)).
Заходите на страницу сайта, открываете Инструменты разработчика из меню настроек или по нажатию Ctrl+Shift+I. Где-то там (может отличаться в зависимости от производителя и версии браузера) будет перечень куков. Все их пары ключ=значение нужно будет точно перенести в WebRequest.
Но нет гарантии, что на сайте нет других защит (проверки по User-Agent (это можно добавить в WebRequest по аналогии с куками) или вычислений ответов на запросы в JavaScript (это можно выяснить только реверс-инжинирингом)).
Если я правильно понял, то мне нужно добавить в WebRequest все эти выделенные на скриншоте ниже "ключ=значение" ?
Только каким образом это записать в этот код вместо cookie=NULL ?
Пробовал прописать через & не вышло.
string cookie=NULL,headers;
char post[],result[];
string TXT="";
int res;
string tmpStr="";
string google_url="https://ec.forexprostools.com/?columns=exc_currency,exc_importance&category=_employment,_economicActivity,_inflation,_credit,_centralBanks,_confidenceIndex,_balance,_Bonds&importance=1,2,3&countries=25,6,37,72,22,17,39,10,35,43,60,36,110,26,12,4,5&calType=week&timeZone=15&lang=1";
//---
ResetLastError();
//--- download html-pages
int timeout=10000;
res=WebRequest("GET",google_url,cookie,NULL,timeout,post,sizeof(post),result,headers);
Исходник прилагаю
Если я правильно понял, то мне нужно добавить в WebRequest все эти выделенные на скриншоте ниже "ключ=значение" ?
Только каким образом это записать в этот код вместо cookie=NULL ?
Пробовал прописать через & не вышло.
Не надо амперсанд. Вот выжимка по отправке куков.
В использованную в данном коде урезанную версию WebRequest нужно передавать эту строку без заголовка "Cookie: ", или воспользоваться второй версией WebRequest, которая позволяет указать полностью весь http-заголовок (в нем можно другой строкой (через \r\n) и "User-Agent:" указать типа браузера).User-Agent:
Спасибо за ответ!
Получилось реализовать без использования Cookie так:
string cookie="Content-Type: application/x-www-form-urlencoded\r\nUser-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
...
string referer="https://mql5.com/";
res=WebRequest("GET",google_url,cookie,referer,timeout,post,sizeof(post),result,headers);
Файл получен и данные с него считываются прекрасно
Если использовать для MT5, то при сохранении / чтении файла нужно прописать FILE_ANSI:
int filehandle=FileOpen("News.html",FILE_WRITE|FILE_BIN|FILE_ANSI); // пишем в файл
int filehandle2=FileOpen("News.html",FILE_READ|FILE_BIN|FILE_ANSI); // читаем из файла
Для совместного доступа к файлу с новостями можно добавить FILE_SHARE_WRITE и FILE_SHARE_READ соответственно.
Ну или кэшировать запросы..
@Stanislav Korotky - Еще раз спасибо за ваши советы!!!
Еще забыл сказать, что в случае с Инвестингом (а может и с другими сайтами), для МТ5 нужно делать не GET а POST запрос.
Например так:
string headers,result_headers;
char post[],result[];
string url = urlPar; //-- Valid URL
string payload= "parameterA=testA¶meterB=testB"; //-- Valid Parameters
StringToCharArray(payload,post,0,StringLen(payload),CP_UTF8);
headers = "Content-Type: application/x-www-form-urlencoded\r\nUser-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36";
//--- Reset the last error code
ResetLastError();
int timeout=5000;
//--
int res=WebRequest("POST",url,headers,timeout,post,result,result_headers);
...//--- дальше делаем нужные действия, сохраняем, читаем, парсим и т.д....