MT4 Build 600でGrabWebが動作しない。 - ページ 3 1234 新しいコメント 削除済み 2014.02.12 00:35 #21 WDholic: もしかしたら、u文字を使っているかもしれません。 私のスクリプトでは、文字列を使用しています。 はい、それが問題でした。 現在はv604で問題なくコンパイルできます。 ですから、基本的には、InternetOpenWと InternetOpenUrlWを使い、以前と同じように文字列を連結 する必要があるのです。 Greg Spinner 2015.06.16 16:00 #22 bennyHanna: はい、それが問題でした。現在では、v604で問題なくコンパイルできます。ですから、基本的には、InternetOpenWと InternetOpenUrlWを使用して、以前と同じように文字列を連結 する必要があります。 WDHolicによって開発された上記のコードを、ビルド600が登場したときからうまく使っていました(どうもありがとうございます :-))。 残念ながら、今日たまたまビルド830の下でコードを再コンパイルしたところ、もう動作しないことがわかりました。 どなたか、再び動作するように微調整を提案してもらえないでしょうか?私が使っているコードは以下の通りです。string secData=""; if (!GrabWeb(secURL, secData)) { showDebug("Unable to access user file"); return(1); } . . . . #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 bool GrabWeb(string strUrl, string& strWebPage) { int HttpOpen = InternetOpenW(" ", 0, " "," ",0 ); int HttpConnect = InternetConnectW(HttpOpen, "", 80, "", "", 3, 0, 1); int HttpRequest = InternetOpenUrlW(HttpOpen,strUrl, NULL, 0, 0, 0); int read[1]; string Buffer = " "; while (true) { InternetReadFile(HttpRequest, Buffer, StringLen(Buffer), read); if (read[0] > 0) strWebPage = strWebPage + StringSubstr(Buffer, 0, read[0]); else break; } if (HttpRequest > 0) InternetCloseHandle(HttpRequest); if (HttpConnect > 0) InternetCloseHandle(HttpConnect); if (HttpOpen > 0) InternetCloseHandle(HttpOpen); return(true); }現在では、スペースを返すだけになっているようです。どんな助けでも、最もありがたく受け取ります。 期待して感謝します。グレッグ ydrol 2015.06.16 16:20 #23 WebRequestを 使用しない理由は何ですか? Greg Spinner 2015.06.16 17:36 #24 ydrol:WebRequest を使用しない理由は何ですか?ただ、Grabwebは私が数年前に出会った最初の方法であり、他のオプションを調査するよりも、それに固執する方が簡単でした!私はWebRequestを見て、私のコードにそれを組み込むことができるかどうかを確認します。 提案に感謝します - 私は私の経験を投稿します - うまくいけば :-)ありがとうございました。グレッグ honest_knave 2015.06.16 19:09 #25 ydrol:WebRequestを 使用しない理由は何ですか?私はニュースアラートでWebRequestを使っていますが、WebRequestはEAでしか使えないという欠点があり、万人受けするものではありません。WebRequestの ドキュメントより。WebRequest() 関数は非同期です。つまり、プログラムの実行を中断して、要求されたサーバーからの応答を待ちます。応答を受け取る際の遅延が大きくなる可能性があるため、インジケータは1つのシンボル上のすべてのインジケータとチャートで共有される共通スレッドで実行されるため、この関数はインジケータからの呼び出しに使用できません。あるシンボルのチャートの1つでインジケータのパフォーマンスが遅延すると、同じシンボルのすべてのチャートの更新が停止することがあります。 Alain Verleyen 2015.06.16 20:20 #26 honest_knave:私はニュースアラートでWebRequestを使っていますが、WebRequestはEAでしか使えないという、万人受けはしない欠点があります。WebRequest()関数は非同期式 で、プログラムの実行を中断して、要求したサーバーからの応答を待ちます。レスポンス受信の遅延が大きいため、この関数はインジケータからの呼び出しには使用できません。インジケータは、1つのシンボル上のすべてのインジケータとチャートで共有される共通スレッドで実行されるからです。あるシンボルのチャートの一つでインジケータのパフォーマンスが遅延した場合、同じシンボルのすべてのチャートの更新が停止することがあります。 同期であるべきです。 Greg Spinner 2015.06.17 06:57 #27 angevoyageur: 同期であるべきです。私の現在の要件はEAにあるので、おそらくWebRequestが短期的な答えになるでしょう。しかし、私は、ニュースにアクセスする多くの指標を持っています。それは、私がそれらを維持し続けたい場合、Grabwebで何を変更するかを試してみる必要があることを意味します。私は、この記事の情報が答えを提供するのだろうか: https://www.mql5.com/en/articles/73 ? Greg Spinner 2015.06.17 15:46 #28 gregspinner:私の現在の要件はEAにあるので、おそらくWebRequestが短期的な答えになるでしょう。しかし、私はニュースにアクセスするいくつかの指標を持っています。それは、私がそれらを維持し続けたい場合、Grabwebで何を変更するかを試してみる必要があることを意味します。私はこの記事の情報が答えを提供するのだろうか: https://www.mql5.com/en/articles/73 ?この記事で、私はこのように考えています。その答えは、上記の記事にありました。 現在、GrabWebのコードは以下のようになっています。#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 InternetReadFile(int, uchar &sBuffer[], int, int& OneInt); int InternetCloseHandle(int); #import bool GrabWeb(string strUrl, string& strWebPage) { int HttpOpen = InternetOpenW(" ", 0, " "," ",0 ); int HttpConnect = InternetConnectW(HttpOpen, "", 80, "", "", 3, 0, 1); int HttpRequest = InternetOpenUrlW(HttpOpen,strUrl, NULL, 0, 0, 0); /*int read[1]; string Buffer = " "; while (true) { InternetReadFile(HttpRequest, Buffer, StringLen(Buffer), read); if (read[0] > 0) strWebPage = strWebPage + StringSubstr(Buffer, 0, read[0]); else break; }*/ uchar ch[500]; string toStr=""; int dwBytes,h; while(InternetReadFile(HttpRequest,ch,500,dwBytes)) { if(dwBytes<=0) break; toStr=toStr+CharArrayToString(ch,0,dwBytes); } strWebPage=toStr; if (HttpRequest > 0) InternetCloseHandle(HttpRequest); if (HttpConnect > 0) InternetCloseHandle(HttpConnect); if (HttpOpen > 0) InternetCloseHandle(HttpOpen); return(true); }基本的には...1) InternetReadの定義を変更して、データにはuchar配列への間接参照を使用し、カウントには単純なint変数を直接使用するようにしました。2) InternetRead関数でuchar配列を使用するようにし、その配列を文字列に変換するようにした。uchar配列のサイズがどのように影響するのかあまりよくわかりません。 ウェブページ全体(たとえばFFCal XML)を関係なく読み込むようで、500バイトより大きくなります。 次のnバイトのメモリに殺到するのか、それともシステムが動的にストレージを割り当てるほど賢いのか、できれば後者であってほしいです。後者であることを祈ります。Greg Alain Verleyen 2015.06.17 19:46 #29 このトピックの1ページ目にも回答がありました。シェアしていただきありがとうございます。 Chinedu Peter 2016.09.01 12:00 #30 thili55:このコードは、MT4ビルド600でテストするまでは完璧に動作していましたが、私のサーバーからアカウントを確認しなくなりました。こんにちは、このコードは何でしょうか、インジケータかEAでしょうか?mql4エディターで実行してみましたが、次のようなエラーメッセージが表示されました。'User - undeclared identifier'というエラーメッセージが出ました。実はこれ、以下の行のコードを指しているのです。(Line: 112) GrabWeb("http://www.website.com/query.php?accountnumber="+AccountNumber()+"&login="+User, answer).と表示されるのですが、これは何でしょうか?どのようにプログラムによって受け入れられるように "User "を宣言することができますか、または私は "User "を何で置き換えることができますか?私はWindows 8.1、64ビットOS、MT4バージョン4.00、ビルド1010を使用しています。よろしくお願いします。 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
もしかしたら、u文字を使っているかもしれません。
私のスクリプトでは、文字列を使用しています。
はい、それが問題でした。 現在はv604で問題なくコンパイルできます。 ですから、基本的には、InternetOpenWと InternetOpenUrlWを使い、以前と同じように文字列を連結 する必要があるのです。
はい、それが問題でした。現在では、v604で問題なくコンパイルできます。ですから、基本的には、InternetOpenWと InternetOpenUrlWを使用して、以前と同じように文字列を連結 する必要があります。
WDHolicによって開発された上記のコードを、ビルド600が登場したときからうまく使っていました(どうもありがとうございます :-))。 残念ながら、今日たまたまビルド830の下でコードを再コンパイルしたところ、もう動作しないことがわかりました。 どなたか、再び動作するように微調整を提案してもらえないでしょうか?私が使っているコードは以下の通りです。
現在では、スペースを返すだけになっているようです。
どんな助けでも、最もありがたく受け取ります。 期待して感謝します。
グレッグ
WebRequest を使用しない理由は何ですか?
ただ、Grabwebは私が数年前に出会った最初の方法であり、他のオプションを調査するよりも、それに固執する方が簡単でした!私はWebRequestを見て、私のコードにそれを組み込むことができるかどうかを確認します。 提案に感謝します - 私は私の経験を投稿します - うまくいけば :-)
ありがとうございました。
グレッグ
WebRequestを 使用しない理由は何ですか?
私はニュースアラートでWebRequestを使っていますが、WebRequestはEAでしか使えないという欠点があり、万人受けするものではありません。
WebRequestの ドキュメントより。
WebRequest() 関数は非同期です。つまり、プログラムの実行を中断して、要求されたサーバーからの応答を待ちます。応答を受け取る際の遅延が大きくなる可能性があるため、インジケータは1つのシンボル上のすべてのインジケータとチャートで共有される共通スレッドで実行されるため、この関数はインジケータからの呼び出しに使用できません。あるシンボルのチャートの1つでインジケータのパフォーマンスが遅延すると、同じシンボルのすべてのチャートの更新が停止することがあります。
私はニュースアラートでWebRequestを使っていますが、WebRequestはEAでしか使えないという、万人受けはしない欠点があります。
WebRequest()関数は非同期式 で、プログラムの実行を中断して、要求したサーバーからの応答を待ちます。レスポンス受信の遅延が大きいため、この関数はインジケータからの呼び出しには使用できません。インジケータは、1つのシンボル上のすべてのインジケータとチャートで共有される共通スレッドで実行されるからです。あるシンボルのチャートの一つでインジケータのパフォーマンスが遅延した場合、同じシンボルのすべてのチャートの更新が停止することがあります。
同期であるべきです。
私の現在の要件はEAにあるので、おそらくWebRequestが短期的な答えになるでしょう。
しかし、私は、ニュースにアクセスする多くの指標を持っています。それは、私がそれらを維持し続けたい場合、Grabwebで何を変更するかを試してみる必要があることを意味します。私は、この記事の情報が答えを提供するのだろうか: https://www.mql5.com/en/articles/73 ?
私の現在の要件はEAにあるので、おそらくWebRequestが短期的な答えになるでしょう。
しかし、私はニュースにアクセスするいくつかの指標を持っています。それは、私がそれらを維持し続けたい場合、Grabwebで何を変更するかを試してみる必要があることを意味します。私はこの記事の情報が答えを提供するのだろうか: https://www.mql5.com/en/articles/73 ?この記事で、私はこのように考えています。
その答えは、上記の記事にありました。 現在、GrabWebのコードは以下のようになっています。
基本的には...
1) InternetReadの定義を変更して、データにはuchar配列への間接参照を使用し、カウントには単純なint変数を直接使用するようにしました。
2) InternetRead関数でuchar配列を使用するようにし、その配列を文字列に変換するようにした。
uchar配列のサイズがどのように影響するのかあまりよくわかりません。 ウェブページ全体(たとえばFFCal XML)を関係なく読み込むようで、500バイトより大きくなります。 次のnバイトのメモリに殺到するのか、それともシステムが動的にストレージを割り当てるほど賢いのか、できれば後者であってほしいです。
後者であることを祈ります。
Greg
このコードは、MT4ビルド600でテストするまでは完璧に動作していましたが、私のサーバーからアカウントを確認しなくなりました。
こんにちは、このコードは何でしょうか、インジケータかEAでしょうか?mql4エディターで実行してみましたが、次のようなエラーメッセージが表示されました。
'User - undeclared identifier'というエラーメッセージが出ました。
実はこれ、以下の行のコードを指しているのです。
(Line: 112) GrabWeb("http://www.website.com/query.php?accountnumber="+AccountNumber()+"&login="+User, answer).と表示されるのですが、これは何でしょうか?
どのようにプログラムによって受け入れられるように "User "を宣言することができますか、または私は "User "を何で置き換えることができますか?
私はWindows 8.1、64ビットOS、MT4バージョン4.00、ビルド1010を使用しています。
よろしくお願いします。