php
  • curl
  • csv
  • 2012-02-16 7 views 0 likes 
    0

    これは最近まで働いていました。サーバからcsvを受け取り、PHPを使用して構文解析します

    スクリプトでURLヒットを手動で訪問すると、結果はそこにあります。しかし、コードで行うと、問題が発生しています。

    あなたは...私はもはや任意の出力を取得しています、私の出力テストに

    任意のアイデアを見ることができますか?

       <? 
           //$ticker=urldecode($_GET["ticker"]); 
           $ticker='HYG~FBT~'; 
           echo $ticker; 
           $tickerArray=preg_split("/\~/",$ticker); 
           // create curl resource 
             $ch = curl_init(); 
    
    
             // set urlm 
             curl_setopt($ch, CURLOPT_URL, "http://www.batstrading.com/market_data/symbol_data/csv/"); 
    
    
    
    
             //return the transfer as a string 
    
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    
             // $output contains the output string 
             $a=''; 
    
             $output = curl_exec($ch); 
    
              echo "<br><br>OUTPUT TEST: ".($output); 
    
    
           $lineCt=0; 
           $spaceCt=0; 
           $splitOutput=preg_split("[\n|\r]",$output); 
    
    
    
    
           for($ii=0;$ii<sizeof($tickerArray);$ii++){ 
           $i=0; 
           $matchSplit[$ii]=-1; 
             while($i<sizeof($splitOutput) && $matchSplit[$ii]==-1){ 
    
    
    
              $splitOutput2=preg_split("/\,/",$splitOutput[$i]); 
               if($i>0){ 
    
                if(strcasecmp($splitOutput2[0],strtoupper($tickerArray[$ii]))==0){ 
                 $matchSplit[$ii]=$splitOutput[$i]."@"; 
                } 
    
               } 
             $i++; 
             } 
             if($matchSplit[$ii]==-1){ 
              echo "[email protected]"; 
             }else{ 
              echo $matchSplit[$ii]; 
             } 
           } 
    
    
           //echo ($output); 
    
    
             curl_close($ch); 
    
    
           ?> 
    
    +0

    デバッグのために何をしましたか?リソースが第三者(つまりあなた)によるダウンロードを許可していますか?彼らはcURLのようなものからのリクエストをブロックしていますか? –

    +0

    これは1年以上働いていました。どのように私はさらに出力のためのチェックの外でこれをデバッグするでしょうか? –

    +1

    ブラウザからの要求のようにユーザエージェントを設定できます。彼らは "非ブラウザ"ユーザエージェントをブロックしようと試みた可能性があります。 – F21

    答えて

    1

    私はあなたのスクリプトにユーザーエージェントを追加し、それがここで正常に動作するようです:

    $ch = curl_init(); 
    
    curl_setopt($ch, CURLOPT_URL, "http://www.batstrading.com/market_data/symbol_data/csv/"); 
    $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'; 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_VERBOSE, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //time out of 15 seconds 
    $output = curl_exec($ch); 
    curl_close($ch); 
    
    //Then your output paring code 
    

    私が手出力:

    HYG~FBT~ 
    
    OUTPUT TEST: Name,Volume,Ask Size,Ask Price,Bid Size,Bid Price,Last Price,Shares Matched,Shares Routed SPY,35641091,0,0.0,0,0.0,134.38,34256509,1384582 BAC,22100508,0,0.0,0,0.0,7.78,20407265,1693243 QQQ,12085707,0,0.0,0,0.0,62.65,11703725,381982 XLF,11642347,0,0.0,0,0.0,14.47,11429581,212766 VXX,9838310,0,0.0,0,0.0,28.2,9525266,313044 EEM,9711498,0,0.0,0,0.0,43.28,9240820,470678 IWM,8272528,0,0.0,0,0.0,81.19,7930349,342179 AAPL,6145951,0,0.0,0,0.0,498.24,4792854,1353097 
    

    を閉じることも良い方法ですCURL接続が完了したら、接続します。私はそれもあなたの問題に関わっていると信じています。

    問題が解決しない場合は、スクリプトが実行されているサーバーがそのサイトにアクセスできるかどうかを確認してください。さらなる調査の際

    更新

    は、ここで私は、問題の根本であると考えているものです。

    問題は、CSVファイルのプロバイダにあります。おそらく、最終的にはいくつかの問題があるため、CSVが生成されますが、ヘッダーのみが含まれています。実際にそこにデータがある場合がありました。

    データは、指定された時間帯にしか使用できません。

    いずれにしても、空のファイルを取得すると、パーサーは@notFoundを出力し、CURLに問題があると仮定することができます。

    私は、CSVファイルに実際にすべてのデータが含まれているかどうかを確認するためにスクリプトにさらにチェックを加え、見出しだけを含むファイルではないことを提案します。

    最後に、CURLのタイムアウトを設定すると、CSVがプロバイダーによって生成されるまでに時間がかかるので、それを修正する必要があります。

    +0

    私はこのエージェント情報を調べることができますか? –

    +0

    http://www.user-agents.org/ – esqew

    +0

    PHPのページにアクセスするために使用しているブラウザのユーザエージェントの文字列を取得できるはずです: '$ _SERVER ['HTTP_USER_AGENT'];'ここに広範なリストのために:http://www.zytrax.com/tech/web/browser_ids.htm – F21

    関連する問題