2013-06-30 56 views
0

我正在爲我自己做一個儀表板,我想看看一個項目從一個特定站點下載的次數,該站點在其站點上顯示此信息。它使用Google API以圖形形式顯示信息,因此這些值位於<script>標記內。在PHP中從遠程HTML中提取JS值|刮

它看起來像這樣

<html> 
    <body> 
<!-- ...somehtml --> 
    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
     <script type="text/javascript"> 
      google.load("visualization", "1", {packages:["corechart"]}); 
      google.setOnLoadCallback(drawChart); 
      function drawChart() { 
      var data = new google.visualization.DataTable(); 
      data.addColumn('string', 'Date'); 
      data.addColumn('number', 'Uses'); 
    data.addRows([['9 May', 1],['22 May', 14],['23 May', 27],['24 May', 23],['25 May', 5],['26 May', 10],['27 May', 20],['28 May', 14],['29 May', 9],['30 May', 8],['31 May', 3],['1 Jun', 2],['2 Jun', 4],['4 Jun', 4],['5 Jun', 2],['6 Jun', 4],['7 Jun', 6],['8 Jun', 7],['9 Jun', 9],['10 Jun', 14],['11 Jun', 6],['12 Jun', 8],['13 Jun', 14],['14 Jun', 13],['15 Jun', 13],['16 Jun', 19],['17 Jun', 4],['18 Jun', 4],['19 Jun', 3],['20 Jun', 1],['22 Jun', 3],['23 Jun', 10],['24 Jun', 3],['25 Jun', 8],['26 Jun', 5],['27 Jun', 10],['28 Jun', 45],['29 Jun', 23]]);   
    var options = { 
       width: 277, height: 136, 
       title: 'Usage Statistics This Month', 
       titlePosition: 'none', 
       legend: {position:'none'}, 
       chartArea: {left:0, top:24, width:277, height: 110}, 
       hAxis: {textPosition: 'none'}, vAxis: {textPosition: 'in'} 
      }; 

      var chart = new google.visualization.AreaChart(document.getElementById('chart_div')); 
      chart.draw(data, options); 
      } 
     </script> 
...somehtml  
    </body> 
</html> 

我想要的數據是 「data.addRows」 一前一後。我是新來的,所以我找不到辦法做到這一點。我不知道是否可以得到以這種格式存儲的數組中的值:

實施例:

對於 - > [「5月9日」,1]

我需要它是在陣列'23月」作爲關鍵10值

回答

0

你可以使用:

$file = file_get_contents('http://x.com/scriptname.html'); 
preg_match_all('/\[\'(.*?)\',(.*?)]/i', $file,$result); 

for ($i = 0; $i <count($result[0]); $i++) { 
     echo $result[1][$i]; 
     echo ':'; 
     echo $result[2][$i]; 
     echo '<br/>'; 
} 

有了這個正則表達式,你可以提取數字和日期。

但是,如果你想您所要求的陣列:的preg_match():

$datearray = array(); 

for ($i = 0; $i <count($result[0]); $i++) { 
     $datearray[$result[2][$i]] = $result[1][$i]; 
} 

print_r($datearray); 
+0

我上運行此腳本'警告得到了一個錯誤分隔符不能在\位置\到\文件字母或反斜線\ index.php 3號線' – VenomVipes

+0

對不起,哥們,更新了代碼。現在工作;我的回答有點太快了:-)在這裏你走了! –

+0

您可以使用相同的正則表達式原則來首先篩選:data.addRows();部分。然後在該行的正則表達式上釋放解決方案。 –