Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делись знаниями. Стань популярным разработчиком!
Александр
1081
Александр 2013.08.11 23:12 

Хочу загрузить файл новостей на следующую неделю с 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
56893
Anatoli Kazharski 2013.08.12 00:19  
Talex:

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

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

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

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

Александр
1081
Александр 2013.08.12 06:08  
tol64:

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

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

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

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

Александр
1081
Александр 2013.08.12 07:01  

Почитал про 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
56893
Anatoli Kazharski 2013.08.12 09:53  
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
 Но файл при этом тоже не скачивается.
Александр
1081
Александр 2013.08.12 10:15  
tol64:

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

 Но файл при этом тоже не скачивается.
Чудеса, да и только, сейчас у меня тоже результат как у Вас получается. А файл скачиваться не должен, мы только получили доступ к файлу.
Anatoli Kazharski
56893
Anatoli Kazharski 2013.08.12 13:46  
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
Александр
1081
Александр 2013.08.12 16:57  
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
56893
Anatoli Kazharski 2013.08.12 19:19  
Talex:

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

...

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