Хочу загрузить файл новостей на следующую неделю с http://www.dailyfx.com/calendar, пользуюсь статьей https://www.mql5.com/ru/articles/34, но не получается скачать файл.
Все заканчивается на строке
Доступ к файлу вроде получен и его можно попробовать прочитать. Посмотрите вот здесь примеры по этой теме: http://www.rsdn.ru/article/inet/inetapi.xml.
Если получится, покажите потом, что Вы сделали. Интересно.
Доступ к файлу вроде получен.
Вот, как раз доступ к файлу и не могу получить, строка
InternetOpenUrlW(hInternetSession,addr,"",0,0,0);
возвращает 0.
Почитал про 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, все прекрасно скачивается.
- msdn.microsoft.com
Вот, как раз доступ к файлу и не могу получить, строка
возвращает 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Но файл при этом тоже не скачивается.
А у меня вот такой результат получается:
Но файл при этом тоже не скачивается.Чудеса, да и только, сейчас у меня тоже результат как у Вас получается. А файл скачиваться не должен, мы только получили доступ к файлу.
А не подскажите, с помощью какой функции можно скачать файл на диск?
Попробовал функцию 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
А не подскажите, с помощью какой функции можно скачать файл на диск?
Попробовал функцию 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
Да, похоже, что в wininet.dll такой функции нет, проверить можно здесь(http://msdn.microsoft.com/en-us/library/windows/desktop/aa385473%28v=vs.85%29.aspx) Скачать файл можно с помощью InternetReadFile, но лучше сначала ознакомиться со статьями
...
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хочу загрузить файл новостей на следующую неделю с http://www.dailyfx.com/calendar, пользуюсь статьей https://www.mql5.com/ru/articles/34, но не получается скачать файл.
Все заканчивается на строке