https://www.youtube.com/watch?v=NG-nq8LdBHY&list=WL&index=12
こちらの動画を参考にしてサイトから情報を取得したかったがやり方がわからない。
動画で取得しているサイトではなくこちらのサイトの曜日 国 イベント名を取得したい。
https://fx.minkabu.jp/references/holidays
該当のソースコード
MQL4
1int OnInit() 2{ 3 EventSetTimer(1); 4 return(INIT_SUCCEEDED); 5} 6 7void OnDeinit(const int reason) 8{ 9 EventKillTimer(); 10} 11 12void OnTimer() 13{ 14 static int timeHour = -1; 15 if(Hour() == timeHour) return; 16 timeHour = Hour(); 17 18 string cookie=NULL,headers; 19 char post[],result[]; 20 int res; 21//--- to enable access to the server, you should add URL 22//--- in the list of allowed URLs (Main Menu->Tools->Options, tab "Expert Advisors"): 23 string url="https://fx.minkabu.jp/references/holidays"; 24//--- Reset the last error code 25 ResetLastError(); 26//--- Loading a html page 27 int timeout=5000; //--- Timeout below 1000 (1 sec.) is not enough for slow Internet connection 28 res=WebRequest("GET",url,cookie,NULL,timeout,post,0,result,headers); 29//--- Checking errors 30 if(res==-1) 31 { 32 Print("Error in WebRequest. Error code =",GetLastError()); 33 //--- Perhaps the URL is not listed, display a message about the necessity to add the address 34 MessageBox("Add the address '"+url+"' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); 35 } 36 else 37 { 38 //--- Load successfully 39 PrintFormat("The file has been successfully loaded, File size =%d bytes.",ArraySize(result)); 40 41 string text = CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); 42 string str = NULL; 43 44 for(int i = 0; i < StringLen(fs-s fc-sub w25); i++){ 45 if(StringSubstr(text, i + 7, 5) == "\"time\">"){ 46 //曜日の取得に変更したい 47 string strTime = StringSubstr(text, i + 7, 5); 48 49 //国名の取得に変更したい 50 int posStar0 = StringFind(text, "★", i); 51 int posStar1 = StringFind(text, "</span>", posStar0); 52 string strStar = StringSubstr(text, posStar0, posStar1 - posStar0); 53 54 //イベントの取得に変更したい 55 int posEvent0 = StringFind(text, "]</span>", i) + 8; 56 int posEvent1 = StringFind(text, "</dt>", posEvent0); 57 string strEvent = StringSubstr(text, posEvent0, posEvent1 - posEvent0); 58 59 str += strTime + " " + strStar + " " + strEvent + "\n"; 60 } 61 } 62 Comment(str); 63 } 64}
動画を見ないと質問内容がわからないのでは回答を得るのは難しいと思います。
(WebRequestを使用してスクレイピングしたいということなのはまあわかるんですが)
また、スクリプト等で実行できる完全なソースでないと、回答者側が残りを想像するしかなくなります。
そもそも提示されているソースコードもリンク先の動画内のソースの一部のようですし、自分でどこまで書けているのでしょう?
これは失礼しました。
ソースコード修正しました。
動画のコードは全部書いて、URLを自分の取得したいサイトのURLに変更までした所です。
一応回答はしておきましたが、自分で書いた部分がURLを書き換えただけなのでは単なる作業依頼でしかないですよ。
この手のサイトはある日突然構成が変わるので、自分で全て書けるようになったほうがいいです。
ありがとうございます。
自分で書けるようにコードの意味を理解できるようにしていきます。
コードの処理なのですが
1.自分の欲しい情報が載っているサイトを指定
2.サイトの中にある欲しい文字列の前後?の文字列を指定
3.その結果欲しい文字列だけ出力するみたいな感じの処理になっている
という感じなのかなと思っているのですがあってますでしょうか?
あってます。
コンパイルはエラーなしなのですが出力がうまくされません。
コードになにか追加で記入する必要があるのでしょうか?
出力しているエラーは確認してます?
WebRequestはEAとスクリプトでしか使用できないのでEAとして実行してください。
ストラテジーテスターも不可です。
EAとしてしないといけなかったのですね、ありがとうございました。
回答1件
あなたの回答
tips
プレビュー