2012-08-09 79 views
0

我有一个HTML页面的网址,显示少量产品(钢笔,t恤等),股票(仓库中的产品)。在HTML页面寻找“stock_value” - preg_match东西

由于我通过电子邮件与他们交谈过,他们没有包含股票的.CSV/.TXT或Excel文件,我需要获取(窃取)与产品相对应的特定SKU_CODE的库存。 因此,我需要从动态URL加载HTML,并使用preg_match_all解析它以获取外部股票,然后将其显示在我的网站页面上,对应于特定产品。

这类似于从银行网站获取当前的货币平价,当您需要将它放在您的网站上时,如果您手动编码。

所以在这里,我的代码,只有一半。我设法找到页面上的SKU_CODE,但是当我查找库存值时,它显示Array(),如果我执行print_r,然后我无法获得该数组的任何值的保留。我会在下面发布我的代码。

$ code ='AP731463-10'; $ code_minimized = explode(“ - ”,$ code);

$url_to_get = 'http://www.andapresent.hu/index.php?term_idk_list=4776829&term_idk_l=&filt=&qs='.$code_minimized[0].''; 

function findinside($start, $end, $string) { 
    preg_match_all('/' . preg_quote($start, '/') . '([^\.)]+)'. preg_quote($end, '/').'/i', $string, $m); 
    return $m[1]; 
} 


    $array_lines = file($url_to_get); 
    //echo($array_lines[1654]); 

    $cont = 0; 
    $found_match = 0; 

    while(isset($array_lines[$cont])){ 

     //daca inca nu s-a gasit codul cautat, cauta-l intre <b> </b> 
     //if code we're looking for is not yet found, search between <b> </b> 

     if($found_match==0){ 
      $out = findinside('<b>','</b>', $array_lines[$cont]); 
     } 

     //o data ce s-a gasit, flag set ca sa nu-l mai caute inca o data 
     //once found, set flag $found_match so it will not look for it next time 
     if($out[0]==$code && $found_match==0){ 
      $found_match = 1; 
      echo "Found match : ".$code." = ".$out[0]."<br>"; 
     } 

     //daca e flag-ul gasit e setat, cauta next info (stock-ul) pana il gaseste in $array_lines[$cont] 
     //if flag is already set, look for next info (the stock value of the product) 
     if($found_match==1){ 
      $out_2 = findinside('<td class="szoveg_k" align="center">','</td>', $array_lines[$cont]); 
      echo $out_2; 
     } 


     $cont++; 
    } 

回答

0

您正在逐行读取HTML页面并一次搜索一行。但是,如果您正在寻找的开放<td>和关闭</td>出现在不同的行上?我认为这就是为什么你的函数没有返回正确的结果。

但是,考虑到你的任务,我认为用XPpath搜索股票价值会更合适。看看这个tutorial,看看它是否有帮助!