Скачать MetaTrader 5

Не получается загрузить файл. Прошу помощи.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Александр
1056
Александр  

Хочу загрузить файл новостей на следующую неделю с http://www.dailyfx.com/calendar, пользуюсь статьей https://www.mql5.com/ru/articles/34, но не получается скачать файл.

Все заканчивается на строке

hURL=InternetOpenUrlW(hInternetSession,addr,"",0,0,0);
#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 InternetCloseHandle(int hInet);
#import

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){
   string addr="http://www.dailyfx.com/files/Calendar-08-11-2013.csv";
   int rv = InternetAttemptConnect(0);
   if(rv!=0) {
      Print("DOWNLDR_ERR_CALLINTERNENATTEMPCONNECT");
      return;
   }
   int hInternetSession=InternetOpenW("Microsoft Internet Explorer",0,"","",0);
   if(hInternetSession<=0) {
      Print("DOWNLDR_ERR_CALLINTERNETNOPENW");
      return;
   }
   int hURL=InternetOpenUrlW(hInternetSession,addr,"",0,0,0);
   if(hURL<=0) {
      Print("DOWNLDR_ERR_CALLINTERNETOPENURLW");
      InternetCloseHandle(hInternetSession);
      return;
   }
   Print("OK");
   InternetCloseHandle(hInternetSession);
}
Forex Economic Calendar @ DailyFX
  • www.dailyfx.com
Date Time Currency Event Importance Actual Forecast Previous Notes
Anatoli Kazharski
62012
Anatoli Kazharski  
Talex:

Хочу загрузить файл новостей на следующую неделю с http://www.dailyfx.com/calendar, пользуюсь статьей https://www.mql5.com/ru/articles/34, но не получается скачать файл.

Все заканчивается на строке

Доступ к файлу вроде получен и его можно попробовать прочитать. Посмотрите вот здесь примеры по этой теме: http://www.rsdn.ru/article/inet/inetapi.xml.

Если получится, покажите потом, что Вы сделали. Интересно.

Александр
1056
Александр  
tol64:

Доступ к файлу вроде получен.

Вот, как раз доступ к файлу и не могу получить, строка

InternetOpenUrlW(hInternetSession,addr,"",0,0,0);

возвращает 0.

Александр
1056
Александр  

Почитал про InternetOpenUrl (http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098%28v=vs.85%29.aspx)

Return value

Returns a valid handle to the URL if the connection is successfully established, or NULL if the connection fails. To retrieve a specific error message, call GetLastError. To determine why access to the service was denied, call InternetGetLastResponseInfo.

Переделал скрипт

#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 InternetCloseHandle(int hInet);
bool InternetGetLastResponseInfoW(int& lpdwError,string& lpszBuffer,int& lpdwBufferLength);
#import "Kernel32.dll"
        int GetLastError(int);
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){
   string addr="http://www.dailyfx.com/files/Calendar-08-11-2013.csv";
   int rv = InternetAttemptConnect(0);
   if(rv!=0) {
      Print("DOWNLDR_ERR_CALLINTERNENATTEMPCONNECT");
      return;
   }
   int hInternetSession=InternetOpenW("Microsoft Internet Explorer",0,"","",0);
   if(hInternetSession<=0) {
      Print("DOWNLDR_ERR_CALLINTERNETNOPENW");
      return;
   }
   int hURL=InternetOpenUrlW(hInternetSession,addr,"",0,0,0);
   if(hURL<=0) {
      Print("DOWNLDR_ERR_CALLINTERNETOPENURLW");
      int lpdwError=0;
      string lpszBuffer="0123456789";
      int lpdwBufferLength=10;
      if(InternetGetLastResponseInfoW(lpdwError,lpszBuffer,lpdwBufferLength)) {
         Print("Error=",lpdwError);
         Print(lpszBuffer);
         Print("buflen=",lpdwBufferLength);
      }
      else {
         int err=0;
         err=GetLastError(err);
         Print("err=",err);
      }
      InternetCloseHandle(hInternetSession);
      return;
   }
   Print("OK");
   InternetCloseHandle(hURL);
   InternetCloseHandle(hInternetSession); }

Вот лог:


OG    0    07:59:46    test (EURUSD,H1)    DOWNLDR_ERR_CALLINTERNETOPENURLW
FS    0    07:59:46    test (EURUSD,H1)    Error=0
IS    0    07:59:46    test (EURUSD,H1)   
RF    0    07:59:46    test (EURUSD,H1)    buflen=0

Не работает и не понятно почему.

Может быть доступ к файлу *.csv можно (надо) получать другим способом?

P.S. Если путь к файлу http://www.dailyfx.com/files/Calendar-08-11-2013.csv вставить в строку браузера и нажать ENTER, все прекрасно скачивается.

InternetOpenUrl function (Windows)
  • msdn.microsoft.com
Opens a resource specified by a complete FTP or HTTP URL. Syntax Parameters hInternet [in] The handle to the current Internet session. The handle must have been returned by a previous call to InternetOpen. lpszUrl [in] A pointer to a null-terminated string variable that specifies the URL to begin reading. Only URLs beginning with ftp...
Anatoli Kazharski
62012
Anatoli Kazharski  
Talex:

Вот, как раз доступ к файлу и не могу получить, строка

возвращает 0.

А у меня вот такой результат получается:

2013.08.12 10:50:53     ScriptTEST (EURUSD,W1) OK
2013.08.12 10:50:53     ScriptTEST (EURUSD,W1) hURL: 13369360
2013.08.12 10:50:51     ScriptTEST (EURUSD,W1) hInternetSession: 13369352
 Но файл при этом тоже не скачивается.
Александр
1056
Александр  
tol64:

А у меня вот такой результат получается:

 Но файл при этом тоже не скачивается.
Чудеса, да и только, сейчас у меня тоже результат как у Вас получается. А файл скачиваться не должен, мы только получили доступ к файлу.
Anatoli Kazharski
62012
Anatoli Kazharski  
Talex:
Чудеса, да и только, сейчас у меня тоже результат как у Вас получается. А файл скачиваться не должен, мы только получили доступ к файлу.

А не подскажите, с помощью какой функции можно скачать файл на диск?

Попробовал функцию GetURLPageAndStoreToDisk(), как это описывалось по ссылке, которую приводил выше, но получаю сообщение, что этой функции в wininet.dll нет.

2013.08.12 14:46:10     ScriptTEST (EURUSD,W1)  unresolved import function call
2013.08.12 14:46:10     ScriptTEST (EURUSD,W1)  Cannot find 'GetURLPageAndStoreToDisk' in 'wininet.dll'
2013.08.12 14:46:10     ScriptTEST (EURUSD,W1)  hURL: 13369372
2013.08.12 14:46:10     ScriptTEST (EURUSD,W1)  hInternetSession: 13369364
Александр
1056
Александр  
tol64:

А не подскажите, с помощью какой функции можно скачать файл на диск?

Попробовал функцию GetURLPageAndStoreToDisk(), как это описывалось по ссылке, которую приводил выше, но получаю сообщение, что этой функции в wininet.dll нет.

Да, похоже, что в wininet.dll такой функции нет, проверить можно здесь(http://msdn.microsoft.com/en-us/library/windows/desktop/aa385473%28v=vs.85%29.aspx) Скачать файл можно с помощью InternetReadFile, но лучше сначала ознакомиться со статьями

https://www.mql5.com/ru/articles/73

https://www.mql5.com/ru/articles/276

https://www.mql5.com/ru/articles/34

https://www.mql5.com/ru/code/82

Anatoli Kazharski
62012
Anatoli Kazharski  
Talex:

Да, похоже, что в wininet.dll такой функции нет, проверить можно здесь(http://msdn.microsoft.com/en-us/library/windows/desktop/aa385473%28v=vs.85%29.aspx) Скачать файл можно с помощью InternetReadFile, но лучше сначала ознакомиться со статьями

...

Спасибо! То что надо.
Anton Gaisin
141
Anton Gaisin  
Там файл можно скачать только датой выпадающей не воскресный день. Вы пробуете скачать любой другой день кроме воскресения. Потому, я полагаю, у Вас и не получается.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий