MT4 Build 600でGrabWebが動作しない。 - ページ 2 1234 新しいコメント 削除済み 2014.02.06 09:17 #11 gchrmt4: ...しかし、このスクリプトは、ライセンスクエリの結果のような短いサーバーレスポンスを取得する場合には、まだ動作するはずです。サーバーのレスポンスのサイズが1KB程度を超える場合のみ問題が発生します。 ありがとうございます、これで完璧です 削除済み 2014.02.07 17:55 #12 thili55さん、こんにちは。 grabWeb()をビルド600で動作させるための解決策を投稿していただけませんか?多くの人が、FFCalをビルド600で動作させることに興味があると思います。 ありがとうございます。 gchrmt4 2014.02.07 18:00 #13 bennyHanna: grabWeb()をビルド600で動作させるための解決策を投稿していただけませんか?多くの人が、FFCalをビルド600で動作させることに興味があると思うのですが。 thili55が返信している投稿を 参照してください - しかし、現在v600には文字列処理の問題があるようで、FFカレンダーのように多くのデータをダウンロードすることに影響するかもしれないことに留意してください。 削除済み 2014.02.07 18:18 #14 gchrmt4: thili55が返信している投稿を ご覧ください。ただし、現在v600では文字列処理の問題があるようで、FFカレンダーのように多くのデータをダウンロードすることに影響があるかもしれませんので、ご注意ください。 ご回答ありがとうございます。 つまり、grabWebの解決策を考える前に、v600の修正を待つ必要があるということですね?それともv603で修正されたのでしょうか? Alain Verleyen 2014.02.07 20:33 #15 bennyHanna: ご回答ありがとうございます。 ということは、grabWebの解決策を考えるには、v600の修正を待つ必要があるということでしょうか?それともv603で修正されたのでしょうか? あなたはこの問題を理解していないようです。mql4の変更を考慮し、コードを修正する必要があります。 削除済み 2014.02.08 16:00 #16 以下は、v600で動作するように更新されたGrabWeb関数です。 InternetOpenWとInternetOpenUrlWを 使用し、ユニコードの変換を 行うようになりました。 XMLファイルを取得することはできますが、ファイルはすべてNULLデータを持っています。コード中のStrWebPageのPrint文を見てください。 出力されたデータを見ると、strThisReadは有効なデータを持っているのに、それはゴミです。誰かが見て、彼らが修正を見つけることができるかどうか見ることができますか? このスレッドの修正に従います: https://www.mql5.com/en/forum/149360。 FFCal.mq4にコードをコピー&ペーストして、v600 MT4でコンパイルして実行するだけです(コンパイルできるように、あなたのバージョンに属さない項目は編集してください)。 bool bWinInetDebug = false; #define READURL_BUFFER_SIZE 1000 #import "wininet.dll" int InternetOpenW(string, int, string, string, int); int InternetOpenUrlW(int, string, string, int, int, int); int InternetReadFile(int, uchar & arr[], int, int & arr[]); int InternetCloseHandle(int); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // bool GrabWeb(string strUrl, string& strWebPage) { int hInternet; int hInternetUrl; bool bSuccess = false; // Get an internet handle hInternet = InternetOpenW("mt4", 0 /* 0 = INTERNET_OPEN_TYPE_PRECONFIG */, NULL, NULL, 0); if (bWinInetDebug) Log("hInternet: " + hInternet); if (hInternet == 0) { Message = Symbol() + " " + IndicatorName + " Error 890 - Unable to get an Internet Handle!"; Print(Message); Alert(Message); HealthBuffer[0] = Error_state; bSuccess = false; } else { // Get a URL handle hInternetUrl = InternetOpenUrlW(hInternet, NewsURL, NULL, 0, 0, 0); if (bWinInetDebug) Log("hInternetUrl: " + hInternetUrl); if (hInternetUrl == 0) { Message = Symbol() + " " + IndicatorName + " Error 891 - Unable to get a URL handle!"; Print(Message); Alert(Message); HealthBuffer[0] = Error_state; bSuccess = false; } else { Print("Reading URL: " + strUrl); bool bKeepReading = true; while (bKeepReading) { int lReturn[1]; uchar arrReceive[]; ArrayResize(arrReceive, READURL_BUFFER_SIZE + 1); int success = InternetReadFile(hInternetUrl, arrReceive, READURL_BUFFER_SIZE, lReturn); if (success == 0) { Message = Symbol() + " " + IndicatorName + " Error 892 - Unable to read News Database WebPage!"; Print(Message); Alert(Message); HealthBuffer[0] = Error_state; bKeepReading = false; bSuccess = false; } else { if (bWinInetDebug) Log("success: " + success); if (bWinInetDebug) Log("arrReceive: " + arrReceive[0]); if (bWinInetDebug) Log("lReturn: " + lReturn[0]); // InternetReadFile() has succeeded, but we may be at the end of the data if (lReturn[0] == 0) { if (bWinInetDebug) Print("Reached end of data"); bKeepReading = false; bSuccess = true; } else { // Convert the data from Ansi to Unicode using the built-in MT4 function string strThisRead = CharArrayToString(arrReceive, 0, lReturn[0], CP_UTF8); strWebPage = StringConcatenate(strWebPage, strThisRead); // <-- PROBLEM HERE ON FIRST USE ONLY IN EACH MT4 SESSION Print ("------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>> strWebPage : ", strWebPage); // this shows garbage! } } } } } Print("Closing URL web connection"); success = InternetCloseHandle(hInternetUrl); if (success == 0) { Message = Symbol() + " " + IndicatorName + " Error 896 - Unable to close URL handle!"; Print(Message); Alert(Message); HealthBuffer[0] = Error_state; bSuccess = false; } else { success = InternetCloseHandle(hInternet); if (success == 0) { Message = Symbol() + " " + IndicatorName + " Error 898 - Unable to close Internet Handle!"; Print(Message); Alert(Message); HealthBuffer[0] = Error_state; bSuccess = false; } } return(bSuccess); } // end of function Bambang Sugianto 2014.02.10 09:04 #17 GRABWEBスクリプトを作ってみました。 非常にシンプルで、ビルド604で問題なく動作しています。 #import "Wininet.dll" int InternetOpenW(string, int, string, string, int); int InternetConnectW(int, string, int, string, string, int, int, int); int HttpOpenRequestW(int, string, string, int, string, int, string, int); int InternetOpenUrlW(int, string, string, int, int, int); int InternetReadFile(int, string, int, int& OneInt[]); int InternetCloseHandle(int); #import int start() { string URL="http://www.forexfactory.com/ff_calendar_thisweek.xml"; int HttpOpen = InternetOpenW(" ", 0, " "," ",0 ); int HttpConnect = InternetConnectW(HttpOpen, "", 80, "", "", 3, 0, 1); int HttpRequest = InternetOpenUrlW(HttpOpen,URL, NULL, 0, 0, 0); int read[1]; string Buffer = " "; string NEWS = ""; while (true) { InternetReadFile(HttpRequest, Buffer, StringLen(Buffer), read); if (read[0] > 0) NEWS = NEWS + StringSubstr(Buffer, 0, read[0]); else break; } if (HttpRequest > 0) InternetCloseHandle(HttpRequest); if (HttpConnect > 0) InternetCloseHandle(HttpConnect); if (HttpOpen > 0) InternetCloseHandle(HttpOpen); MessageBox(NEWS, "HTTP READ:" ); // i show the result via message box //---- return(0); } //+------------------------------------------------------------------+ 削除済み 2014.02.10 22:54 #18 WDholic:GRABWEBスクリプトを作ってみました。非常にシンプルで、ビルド604で問題なく動作しています。 このコードの行について、v604でのコンパイルエラーをどのように克服しているのか、お伺いしたいのですが。 InternetReadFile(HttpRequest, Buffer, StringLen(Buffer), read); Error: 'Buffer' -parameter conversion not allowed. MT4のバージョンを確認し、もう一度試してみてください。 Tjipke de Vries 2014.02.11 09:40 #19 bennyHanna: このコードの行について、v604でのコンパイルエラーをどのように克服しているのか、お聞きしてもよろしいでしょうか。 エラー: 'Buffer' - パラメータの変換は許可されていません。 MT4のバージョンをご確認の上、再度お試しください。 私のv604とv600ではそのようなエラーはありません。このプログラムではエラーも警告もなく、ファイルは正しくダウンロードされましたWDholic GRABWEBスクリプトを作成してみました。 非常にシンプルで、ビルド604で問題なく動作しています。 私も試してみましたが、うまくいきました。 Bambang Sugianto 2014.02.11 10:15 #20 bennyHanna: このコードの行について、v604でのコンパイル・エラーをどのように克服しているのか、お伺いしてもよろしいでしょうか。 エラー: 'Buffer' - パラメータの変換は許可されていません。 MT4のバージョンを確認して、もう一度試してみてください。 uチャネルを使用している可能性があります。 int InternetReadFile(int, uchar & arr[], int, int & arr[]); 私のスクリプトでは、文字列を使用しています。 int InternetReadFile(int, string, int, int& OneInt[]); 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
...しかし、このスクリプトは、ライセンスクエリの結果のような短いサーバーレスポンスを取得する場合には、まだ動作するはずです。サーバーのレスポンスのサイズが1KB程度を超える場合のみ問題が発生します。
ありがとうございます、これで完璧です
thili55さん、こんにちは。
grabWeb()をビルド600で動作させるための解決策を投稿していただけませんか?多くの人が、FFCalをビルド600で動作させることに興味があると思います。
ありがとうございます。
grabWeb()をビルド600で動作させるための解決策を投稿していただけませんか?多くの人が、FFCalをビルド600で動作させることに興味があると思うのですが。
thili55が返信している投稿を ご覧ください。ただし、現在v600では文字列処理の問題があるようで、FFカレンダーのように多くのデータをダウンロードすることに影響があるかもしれませんので、ご注意ください。
ご回答ありがとうございます。 つまり、grabWebの解決策を考える前に、v600の修正を待つ必要があるということですね?それともv603で修正されたのでしょうか?
ご回答ありがとうございます。 ということは、grabWebの解決策を考えるには、v600の修正を待つ必要があるということでしょうか?それともv603で修正されたのでしょうか?
以下は、v600で動作するように更新されたGrabWeb関数です。 InternetOpenWとInternetOpenUrlWを 使用し、ユニコードの変換を 行うようになりました。 XMLファイルを取得することはできますが、ファイルはすべてNULLデータを持っています。コード中のStrWebPageのPrint文を見てください。 出力されたデータを見ると、strThisReadは有効なデータを持っているのに、それはゴミです。誰かが見て、彼らが修正を見つけることができるかどうか見ることができますか? このスレッドの修正に従います: https://www.mql5.com/en/forum/149360。
FFCal.mq4にコードをコピー&ペーストして、v600 MT4でコンパイルして実行するだけです(コンパイルできるように、あなたのバージョンに属さない項目は編集してください)。
GRABWEBスクリプトを作ってみました。
非常にシンプルで、ビルド604で問題なく動作しています。
GRABWEBスクリプトを作ってみました。
非常にシンプルで、ビルド604で問題なく動作しています。
このコードの行について、v604でのコンパイルエラーをどのように克服しているのか、お伺いしたいのですが。
InternetReadFile(HttpRequest, Buffer, StringLen(Buffer), read);
Error: 'Buffer' -parameter conversion not allowed.
MT4のバージョンを確認し、もう一度試してみてください。
このコードの行について、v604でのコンパイルエラーをどのように克服しているのか、お聞きしてもよろしいでしょうか。
エラー: 'Buffer' - パラメータの変換は許可されていません。
MT4のバージョンをご確認の上、再度お試しください。
私のv604とv600ではそのようなエラーはありません。このプログラムではエラーも警告もなく、ファイルは正しくダウンロードされました
GRABWEBスクリプトを作成してみました。
非常にシンプルで、ビルド604で問題なく動作しています。
このコードの行について、v604でのコンパイル・エラーをどのように克服しているのか、お伺いしてもよろしいでしょうか。
エラー: 'Buffer' - パラメータの変換は許可されていません。
MT4のバージョンを確認して、もう一度試してみてください。
uチャネルを使用している可能性があります。
私のスクリプトでは、文字列を使用しています。