получить содержимое из диапазона классов div с другого веб-сайта

Я пытаюсь получить содержимое из диапазона, класса, div из другого внешнего домена на свой личный веб-сайт. Исходный код веб-сайта www.example.com

    <div id="h_gold" class="h_metal">
      <div class="hm_inside">
        <div class="hm_title">Gold</div>
        <span class="arr_price_down">- 13.42 <img src="images/downarrow.jpg" alt="down" /></span>
        <div class="clear"></div>
        <div class="hm_cad">USD</div>
        <div class="hm_bottom">
          <div> Bid<br />
            <span>$1,749.20</span> </div>
          <div class="ask"> Ask<br />
            <span>$1,750.20</span> </div>
        </div>
        <!-- .hm_bottom-->
      </div>
      <!-- hm_inside-->
    </div>
    <!-- h_metal-->
    <div id="h_silver" class="h_metal">
      <div class="hm_inside">
        <div class="hm_title">Silver</div>
        <span class="arr_price_down">- 0.54 <img src="images/downarrow.jpg" alt="down" /></span>
        <div class="clear"></div>
        <div class="hm_cad">USD</div>
        <div class="hm_bottom">
          <div> Bid<br />
            <span>$33.40</span> </div>
          <div class="ask"> Ask<br />
            <span>$33.50</span> </div>
        </div>
        <!-- .hm_bottom-->
      </div>
      <!-- hm_inside-->
    </div>
    <!-- h_metal-->

У меня здесь проблема.. я пробовал следующий код.. но он не зацикливается, я получаю содержимое только из первого ‹ div class="hm_bottom" > , остатка нет в выводе,

    <?php
    function get_string_between($string, $start, $end)
    {
        $string = " ".$string;
        $ini = strpos($string,$start);
        if ($ini == 0)
            return "";
        $ini += strlen($start);
        $len = strpos($string,$end,$ini) - $ini;
        return substr($string,$ini,$len);
    }
    $data = file_get_contents("http://www.example.com/ajax.php?metal_cur=USD");

    $pricediv = get_string_between($data, '<div class="hm_bottom">', '</span>');
    $pricetext = strip_tags($pricediv);
    echo $pricetext;
    ?>

Во-вторых, я снова искал stachoverflow, я нашел один решенный, но он не совсем соответствует моим потребностям. вывод в порядке, но я просто хочу, чтобы числовые данные из вывода были помещены в конкретный идентификатор div, который я определяю.

    <?php 
    $page = file_get_contents('http://www.example.com/ajax.php?metal_cur=USD');
    $doc = new DOMDocument();
    $doc->loadHTML($page);
    $divs = $doc->getElementsByTagName('div');
    foreach($divs as $div) {
        // Loop through the DIVs looking for one withan id of "content"
        // Then echo out its contents (pardon the pun)
        if ($div->getAttribute('class') === 'hm_bottom') {
             echo $div->nodeValue;
        }
    }
    ?>

приведенный выше код взят из второго поиска из stackoverflow


person roshan thapa    schedule 13.10.2012    source источник
comment
Я хочу $1,749,20, $1,750,20 и т.д.... такие числа из сгенерированного вывода должны быть помещены в div, например ‹li›‹?php echo $output_1;?›‹/li›...‹li›‹?php echo $ output_2;?›‹/li›, в результате чего ‹li›$1749,20‹/li›, ‹li›$1750,20‹/li›   -  person roshan thapa    schedule 13.10.2012
comment
Желает ли объект вашего поиска/разрешает ли вам повторно использовать/удалять его контент? Воровать чужую работу - это как-то некрасиво, и, возможно, незаконно...   -  person Neville Kuyt    schedule 13.10.2012


Ответы (1)


Вы можете использовать str_get_html или file_get_html в зависимости от обстоятельств

$html = str_get_html($html);
$amounts = array();
foreach ( $html->find("div[class=hm_bottom] span") as $span ) {
    $amount = trim($span->plaintext);
    if (strpos($amount, "\$") === 0)
        $amounts[] = $amount;
}

var_dump($amounts);

Выход

array
  0 => string '$1,749.20' (length=9)
  1 => string '$1,750.20' (length=9)
  2 => string '$33.40' (length=6)
  3 => string '$33.50' (length=6)
person Baba    schedule 13.10.2012
comment
Я пробовал, но выдает ошибку Неустранимая ошибка: вызов неопределенной функции str_get_html() в C:\xampp\htdocs\forex\6.php в строке 2 - person roshan thapa; 13.10.2012
comment
Я отредактировал вопрос выше .. и упомянул попытку, которую я сделал .. не могли бы вы взглянуть - person roshan thapa; 13.10.2012
comment
Поскольку вы работаете с URL-адресом .. он должен быть file_get_html, а не str_get_html .. его - person Baba; 13.10.2012
comment
вместо получения вывода в виде массива 0 => строка '1749,20$' (длина=9) 1 => строка '1750,20$' (длина=9) 2 => строка '33,40$' (длина=6) 3 => строка '33,50$ ' (length=6), не могли бы вы помочь мне с чем-то вроде этого.... ‹li›‹?php echo $array0;?›‹/li›….‹body›‹li›$1749,20‹/li › .. ‹li›‹?php echo $array1;?›‹/li›.... т.е. ‹li›$1750,20‹/li›‹/тело› - person roshan thapa; 13.10.2012
comment
Вы можете сделать что-то вроде этого - person Baba; 13.10.2012