PHP Advance - kỹ thuật lấy dữ liệu từ website khác phần 2

Thảo luận trong 'PHP & MySQL' bắt đầu bởi Lê Xuân Thành, 21/12/11.

  1. Lê Xuân Thành

    Lê Xuân Thành Staff Member

    Mục tiêu bài này: Lấy được tỷ giá vàng từ site eximbank.com.vn
    Các bạn truy cập địa chỉ sau: Eximbank

    Khi bạn làm 1 site bán hàng, site bất động sản hay chứng khoản gì đó, sẽ luôn phải cần 1 block nhỏ để cập nhật thông tin giá vàng (bán, mua) này, công việc của chúng ta là viết code để giá vàng ở site chúng ta tự động cập nhật thay đổi theo trang web eximbank.com.vn

    Như bài trước chúng ta cần xác định được file chúng ta cần lấy dữ liệu là file nào?
    Và nó ở đây: Exchange Rate (trang này sử dụng Iframe nên hơi khó tìm)
    đoạn đầu tiên sẽ là:
    HTML:
    $file=file_get_contents("http://www.eximbank.com.vn/WebsiteExrate2011/ExchangeRate_vn_2011.aspx");
    Tiếp đó chúng ta cần tìm được vị trí bắt đầu cũng như kết thúc của thẻ chứa giá vàng
    View mã nguồn lên ta sẽ có: (rất dài, nhưng ta chỉ quan tâm đến đoạn này thôi)
    HTML:
    <td class="box_tygia">
    <span id="GoldRateRepeater_ctl01_lblCSHBUYRT">4,310,000</span>
    </td>
    <td width="2%" >&nbsp;</td>
    <td class="box_tygia">
    <span id="GoldRateRepeater_ctl01_lblCSHSELLRT">4,350,000</span>
    </td>
    Như vậy ta dễ dàng tìm được 2 biến $begin và $end như sau:
    $begin="<span id=\"GoldRateRepeater_ctl01_lblCSHBUYRT\">"
    $end="<\/span>"
    Tương tự cho SELL
    Và ta lấy dữ liệu như sau:
    preg_match("/$begin.*$end/msU",$file,$kq);

    Như vậy cả đoạn code sẽ là:
    HTML:
    <?php
    $file=file_get_contents("http://www.eximbank.com.vn/WebsiteExrate2011/ExchangeRate_vn_2011.aspx");
    $begin="<span id=\"GoldRateRepeater_ctl01_lblCSHBUYRT\">"
    $end="<\/span>"
    preg_match("/$begin.*$end/msU",$file,$kq);
    echo "<pre>";
    print_r($kq);
    echo "</pre>";
    ?>
    
    Tối ưu:
    Cũng như bài trước nếu ta để $begin, $end sơ sài như vậy thì nó sẽ quét cả cái span vào cho nên ta thêm luật cho nó như sau:
    $rule="/(?>=$begin).*(?=$end)/msU"
    và gọi lại nó:
    preg_match("$rule,$file,$kq);


    Tiếp theo để có được SELL ta cũng làm tương tự, có thể gộp cả 2 lại cũng được.
  2. Yachi_Emiko

    Yachi_Emiko Active Member

    Sao huynh ko giải thích cái này lun nhỉ , sao đệ học cái regular expression ko có cái >= và msU vậy
  3. Lê Xuân Thành

    Lê Xuân Thành Staff Member

    khi mình chưa thêm cái đó vào thì mặc nhiên nó sẽ quét từ $begin đến $end
    các bạn view-source là thấy ở trong nội dung nó sẽ quét luôn thẻ span vào,
    nhưng chung ta cần lấy dữ liệu thôi, cho nên thêm cái qui tắc đó vào nữa
    $rule="/(?>=$begin).*(?=$end)/msU"

    msU: cái này dùng để bỏ qua các vùng trống, khoảng trắng hay xuống dòng
    binbinvnYachi_Emiko thích bài này.
  4. rinshuijul

    rinshuijul Thành viên mới

    sao mình tạo mod custom html. Rồi chèn cái đoạn code trên vào website mà ko được nhỉ.

    Có ai giúp mình hiểu rõ hơn về ứng dụng của nó trong joomla được không?
  5. Yachi_Emiko

    Yachi_Emiko Active Member

    Cái này là tut về php mà bạn , nếu bạn chuyển qua joomla chắc phải thêm chút ít muối nữa , nhưng mình chưa biết:D
  6. hoa_duongcam2012

    hoa_duongcam2012 Thành viên mới

  7. phudtc

    phudtc Banned

    tks bạn nhiều nhé
  8. hoangsonit77

    hoangsonit77 Thành viên mới

    rất hay, tks

Chia sẻ trang này