0

いくつかの製品 (ペン、T シャツなど) と在庫 (倉庫内の製品) を表示する HTML ページの URL があります。

商品に対応する特定の SKU_CODE の在庫を取得 (盗む) する必要があります。メールで話をしたところ、在庫を含む .CSV / .TXT または Excel ファイルがないためです。したがって、動的 URL から HTML をロードし、それを preg_match_all で解析して外部在庫を取得し、特定の製品に対応する Web サイト ページに表示する必要があります。

これは、自分のウェブサイトに掲載する必要がある場合に、銀行のサイトから現在の通貨の平価を取得するのと似ています。

これが私のコードで、半分しか機能しません。ページで SKU_CODE を見つけることができましたが、株価を調べると、print_r を実行すると Array() が表示され、その配列の値を保持できません。以下に私のコードを掲載します。

$code = 'AP731463-10'; $code_minimized = expand("-", $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++;
    }
4

1 に答える 1

0

HTML ページを 1 行ずつ読んで、一度に 1 行ずつ検索しています。しかし、探して<td>いる始値と終値が異なる行にある場合はどうなるでしょうか? </td>これが、関数が正しい結果を返さない理由だと思います。

ただし、あなたのタスクを考えると、XPpath を使用して株価を検索する方がはるかに適切だと思います。このチュートリアルを見て、それが役立つかどうかを確認してください!

于 2012-08-09T10:41:15.610 に答える