2012-03-13 52 views
0

我想從另一個網站上的一些匯率,我登錄和使用的file_get_contents抓住所有的數據,這是我使用:使用的file_get_contents和使用內容的特定部分

<?php 
$username = '[email protected]'; 
$password = 'mypassword'; 
$url = 'http://website-i-get-content-from.com'; 
$context = stream_context_create(array(
    'http' => array(
     'header' => "Authorization: Basic " . base64_encode("$username:$password") 
    ) 
)); 
$data = file_get_contents($url, false, $context) 

?> 

現在我只需要一個網站的某些部分:匯率歐元瑞士法郎和英鎊,在源代碼中,它看起來是這樣的:

<tr><td>EUR</td><td align=right>USD 0.599</td><td align=right>USD 0.599</td></tr> 

    <tr><td>CHF</td><td align=right>USD 0.470</td><td align=right>USD 0.470</td></tr> 

    <tr><td>GBP</td><td align=right>USD 0.675</td><td align=right>USD 0.675</td></tr> 

所以0.599,0.470和0.675是我需要在這個時候數。他們確實改變了。

如何將它們放入變量?

+0

[HTML Phraping in Php](http://stackoverflow.com/questions/34120/html-scraping-in-php) – GordonM 2012-03-13 08:53:00

回答

3

聽起來像你需要一個解析器。我過去使用過simpledom parser。我發現它非常簡單。

include("simplehtmldom/simple_html_dom.php"); 

$data="<html> 
<body> 
<table class=\"foo\"> 
<tr><td>EUR</td><td align=right>USD 0.599</td><td align=right>USD 
0.599</td></tr> 
    <tr><td>CHF</td><td align=right>USD 0.470</td><td align=right>USD 
0.470</td></tr> 
    <tr><td>GBP</td><td align=right>USD 0.675</td><td align=right>USD 
0.675</td></tr> 
</table> 
</body> 
</html>"; 

$html = new simple_html_dom(); 
$html->load($data); 

foreach($html->find('table.foo tr') as $row) { 
    $cells = $row->find('td'); 
    if (count($cells) >= 3) { 
    $abbr=$cells[0]->innertext; // EUR, CHF etc 
    $value1=$cells[1]->innertext; // USD 0.599 etc 
    $value2=$cells[2]->innertext; // USD 0.599 etc 
    echo "$abbr $value1 $value2\n"; 
    } 
} 
+1

PHP has(DOMDocument)[http://php.net/manual/ en/book.dom.php],做同樣的事情,而不需要另一個庫。 – Bradmage 2012-03-13 09:03:41

+0

@BradleyForster看起來不錯。我將在下一個項目中使用它。 – Adam 2012-03-13 09:16:08

+0

亞當,我感謝您花時間來幫助,您的回答對我來說很合理,但我從中獲取數據的網站包含的內容比您的$ data變量中包含的內容多得多。我知道這僅僅是一個起點,但是你能告訴我如何從頁面的整個源代碼中提取你的$ data變量中的部分嗎? – user990767 2012-03-13 09:21:06

0

正則表達式可以。

preg_match_all("'(EUR|CHF|GBP)(?=<).+USD(?<=>)\s+([\d.]+)(?=<)'", file_get_contents('...'), $matches));

我沒有,雖然測試。

我知道這是糟糕的解釋HTML的bla bla,但它不是真的在這裏解析。

相關問題