GrabWeb, MT4 Build 600'de çalışmıyor - sayfa 2

 
gchrmt4 :
...Ancak, bu komut dosyası, bir lisans sorgusunun sonuçları gibi kısa sunucu yanıtlarını almak için yine de çalışmalıdır. Yalnızca sunucunun yanıtının boyutu 1KB-ish'i aşarsa sorunları olur.

Teşekkürler, bu mükemmel çalıştı!
 

Merhaba thili55,

GrabWeb()'in build 600 ile çalışmasını sağlamak için bize yardım edebilir ve çözümünüzü gönderebilir misiniz? Bence birçok insan FFCal'in 600 yapı ile çalışmasına ilgi duyacaktır.

Çok teşekkürler

 
bennyHanna :

GrabWeb()'in build 600 ile çalışmasını sağlamak için bize yardım edebilir ve çözümünüzü gönderebilir misiniz? Bence birçok insan FFCal'in 600 yapı ile çalışmasına ilgi duyacaktır.

Thili55'in yanıtladığı gönderiye bakın - ancak şu anda v600'de FF takvimi kadar çok veri indirmeyi etkileyebilecek dize işleme sorunları olduğunu unutmayın.
 
gchrmt4 :
Thili55'in yanıtladığı gönderiye bakın - ancak şu anda v600'de FF takvimi kadar çok veri indirmeyi etkileyebilecek dize işleme sorunları olduğunu unutmayın.


Cevabın için teşekkürler. Yani grabWeb için bir çözüm geliştirmeden önce v600'ün düzeltilmesini beklememiz gerekecek, doğru mu? Yoksa v603'te bir düzeltme mi sağlandı?

 
bennyHanna :


Cevabın için teşekkürler. Yani grabWeb için bir çözüm geliştirmeden önce v600'ün düzeltilmesini beklememiz gerekecek, doğru mu? Yoksa v603'te bir düzeltme mi sağlandı?

Sorunu anlamamış gibisin. mql4'teki değişikliği hesaba katmak için kodun sabitlenmesi gerekir.
 

İşte v600'de çalışacak şekilde güncellenen GrabWeb işlevi. Artık InternetOpenW ve InternetOpenUrlW'yi ve unicode'un dönüşümünü kullanıyor. XML dosyalarını tamamlıyor ancak dosyaların hepsinde NULL veri var. Koddaki StrWebPage için Print ifadesine bakın. Çıktı alınan verilere bakarsanız, strThisRead geçerli verilere sahipken çöptür. Birisi bakıp bir düzeltme görüp göremeyeceğini görebilir mi? Bu konudaki düzeltmeyi takip eder: https://www.mql5.com/en/forum/149360

Sadece kodu kopyalayıp FFCal.mq4'ünüze yapıştırın ve v600 MT4 ile derleyin ve çalıştırın (lütfen sürümünüze ait olmayan öğeleri düzenleyin, böylece derlenir).

 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
 

bir GRABWEB betiği yapmaya çalışıyorum

çok Basit .. ve yapı 604'te iyi çalışıyor

 
#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 );
}
  
//+------------------------------------------------------------------+
 
WDholic :

bir GRABWEB betiği yapmaya çalışıyorum

çok Basit .. ve yapı 604'te iyi çalışıyor


Bu kod satırı için v604 ile bu derleme hatasını nasıl aştığınızı sorabilir miyim:

InternetReadFile(HttpRequest, Buffer, StringLen (Buffer), read);

Hata: 'Tampon' - parametre dönüştürmeye izin verilmiyor

Lütfen MT4 sürümünüzü kontrol edin ve tekrar deneyin!



 
bennyHanna :


Bu kod satırı için v604 ile bu derleme hatasını nasıl aştığınızı sorabilir miyim:

Hata: 'Tampon' - parametre dönüştürmeye izin verilmiyor

Lütfen MT4 sürümünüzü kontrol edin ve tekrar deneyin!




Bu programla v604 ve v600'ümde böyle bir hata yok, hata yok ve dosyanın doğru indirildiğine dair hiçbir uyarı yok
WDholic :

bir GRABWEB betiği yapmaya çalışıyorum

çok Basit .. ve yapı 604'te iyi çalışıyor

Denedim bende de işe yarıyor....teşekkürler
 
bennyHanna :


Bu kod satırı için v604 ile bu derleme hatasını nasıl aştığınızı sorabilir miyim:

Hata: 'Tampon' - parametre dönüştürmeye izin verilmiyor

Lütfen MT4 sürümünüzü kontrol edin ve tekrar deneyin!




char kullanıyor olabilir misin

 int InternetReadFile( int , uchar & arr[], int , int & arr[]);

betiğimde string kullanıyorum

int InternetReadFile( int , string , int , int & OneInt[]);