使用file_get_contents并使用内容的特定部分

时间:2012-03-13 08:50:42

标签: php regex

我正试图从其他网站获得一些汇率,我正在登录并使用file_get_contents获取所有数据,这就是我使用的:

<?php
$username = 'myusername@gmail.com';
$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)

?>

现在我只需要该网站的某些部分:EUR CHF和GBP的汇率,在源代码中看起来像这样:

<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。他们的确发生了明显

如何将它们放入变量?

2 个答案:

答案 0 :(得分: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 :(得分:0)

正则表达式可以。

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

我没有测试它。

我知道解析HTML的问题很糟糕但是这里并没有解析它。