尝试使用来自invest.com的数据创建新闻专家[重复]

Posted

技术标签:

【中文标题】尝试使用来自invest.com的数据创建新闻专家[重复]【英文标题】:Trying to create a news expert using data from investing.com [duplicate] 【发布时间】:2021-06-10 13:47:21 【问题描述】:

找到下面附上的代码,所以ReadCBOE函数从investing.com读取信息并保存到字符串str,Update news函数然后分析从ReadCBOE获取的信息并将其存储到相关数组中,代码运行没有任何错误只是无法弄清楚为什么信息没有正确存储到数组中。 ps 相同的代码在 mt4 上完美运行

//---------------------------------------------------------------------+     
string ReadCBOE()
      
       string cookie=NULL,headers;
       char post[],result[];     string TXT="";
       int res;
       string str;
    
       string google_url="http://ec.forexprostools.com/?columns=exc_currency,exc_importance&importance=1,2,3&calType=week&timeZone=15&lang=1";
       ResetLastError();
       int timeout=5000; 
       res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
       if(res==-1)
         
          Print("WebRequest error, err.code  =",GetLastError());
          MessageBox("You must add the address 'http://ec.forexprostools.com/' in the list of allowed URL tab 'Advisors' "," Error ",MB_ICONINFORMATION);
         
       else
         
          int filehandle=FileOpen("news-log.html",FILE_WRITE|FILE_BIN|FILE_ANSI);
          if(filehandle!=INVALID_HANDLE)
            
             FileWriteArray(filehandle,result,0,ArraySize(result));
             FileClose(filehandle);
             
             //------
             int file_handle=FileOpen("news-log.html",FILE_READ|FILE_BIN|FILE_ANSI);
             if(file_handle!=INVALID_HANDLE)
                
                   str=FileReadString(file_handle,int(FileSize(file_handle)));
                   FileClose(file_handle);
                
             else PrintFormat("Failed to open %s file, Error code = %d","news-log.html",GetLastError());
            
         
       return(str);
       
    
        //-------------------------------------------------------+ 
           void UpdateNews()
              
               string TEXT=ReadCBOE();      
               int sh = StringFind(TEXT,"pageStartAt>")+12;
               int sh2= StringFind(TEXT,"</tbody>");
               TEXT=StringSubstr(TEXT,sh,sh2-sh);
               sh=0;
               while(!IsStopped())
                 
                  sh = StringFind(TEXT,"event_timestamp",sh)+17;
                  sh2= StringFind(TEXT,"onclick",sh)-2;
                  if(sh<17 || sh2<0)break;
                  NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
            
                  sh = StringFind(TEXT,"flagCur",sh)+10;
                  sh2= sh+3;
                  if(sh<10 || sh2<3)break;
                  NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
                  
                  sh = StringFind(TEXT,"title",sh)+7;
                  sh2= StringFind(TEXT,"Volatility",sh)-1;
                  if(sh<7 || sh2<0)break;
                  NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
                  if(StringFind(NewsArr[2][NomNews],"High")>=0 && !HighNews)continue;Print("Found");
                  if(StringFind(NewsArr[2][NomNews],"Moderate")>=0 && !MidleNews)continue;
                  if(StringFind(NewsArr[2][NomNews],"Low")>=0 && !LowNews)continue;
            
                  sh=StringFind(TEXT,"left event",sh)+12;
                  int sh1=StringFind(TEXT,"Speaks",sh);
                  sh2=StringFind(TEXT,"<",sh);
                  if(sh<12 || sh2<0)break;
                  if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
                  else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
            
                  NomNews++;
                  if(NomNews==300)break;
                 
              

【问题讨论】:

@PaulB 我在这里重新提出了问题希望这更清楚 【参考方案1】:

尝试以下代码,它应该适用于更大的字符串。

string ReadCBOE()

   string cookie=NULL,headers;
   char post[],result[];     string TXT="";
   int res;
   string str;

   string google_url="http://ec.forexprostools.com/?columns=exc_currency,exc_importance&importance=1,2,3&calType=week&timeZone=15&lang=1";
   ResetLastError();
   int timeout=5000; 
   res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
   if(res==-1)
   
      Print("WebRequest error, err.code  =",GetLastError());
      MessageBox("You must add the address 'http://ec.forexprostools.com/' in the list of allowed URL tab 'Advisors' "," Error ",MB_ICONINFORMATION);
   
   else
   
      int filehandle=FileOpen("news-log.html",FILE_WRITE|FILE_BIN|FILE_ANSI);
      if(filehandle!=INVALID_HANDLE)
      
         FileWriteArray(filehandle,result,0,ArraySize(result));
         FileClose(filehandle);
         //------
         int file_handle=FileOpen("news-log.html",FILE_READ|FILE_BIN|FILE_ANSI);
         if(file_handle!=INVALID_HANDLE)
         
            do
            
               ResetLastError();
               string Largestr=FileReadString(file_handle,4000);
               if(GetLastError()!=0) break;
               StringConcatenate(str,str,Largestr);
            
            while(GetLastError()==0 && !FileIsEnding(file_handle));
            FileClose(file_handle);
         
         else PrintFormat("Failed to open %s file, Error code = %d","news-log.html",GetLastError());
      
   
return(str);

【讨论】:

嘿,谢谢你的回答,函数返回一个空字符串,str只有循环内的值,如果我尝试在循环外打印它会打印一个空字符串 非常感谢它的工作 如果解决了您的问题,请将答案标记为已接受 如何将其标记为已回答,我是堆栈溢出的新手 请看下面的说明What should I do when someone answers my question?,基本上,你点击左上角答案旁边的复选标记。

以上是关于尝试使用来自invest.com的数据创建新闻专家[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Fox新闻报道,帮助北朝鲜使用加密货币专家被捕

SharePoint专家新闻轮转器WebPart----亲測力推之Web部件

个性化推荐系统是如何搭建的?阿里算法专家带你3步get!

专家段 错误 新闻

来自 Adobe 的用户体验专家 AEM 之:构建并部署 OSGi bundle

Facebook 类型的新闻提要 Mysql 查询无法正常工作