使用php从另一个网站获取数据

时间:2011-08-22 08:33:59

标签: php

我需要从此网页central bank of armenia

中获取数据

在我的html表单中,用户必须插入其供应的价格。他/她选择货币(美元,欧元或AMD)并键入其值。之后我需要将插入的价格转换为其他两种货币并将它们添加到我的数据库中。那么如何使用PHP从上面给出的站点获得美元和欧元汇率并将它们附加到变量。

3 个答案:

答案 0 :(得分:8)

我通常不会在Q& A论坛上做终端解决方案,但是就这样,你挑战我:)

$content = file_get_contents("http://www.cba.am/am/SitePages/Default.aspx");

preg_match('#<b>USD</b>(.*)<em class="w_50">([0-9\.]*)</em><em class="w_50">([0-9\.]*)</em>#Uis', $content, $USDmatch);
preg_match('#<b>EUR</b>(.*)<em class="w_50">([0-9\.]*)</em><em class="w_50">([0-9\.]*)</em>#Uis', $content, $EURmatch);
preg_match('#<b>GBP</b>(.*)<em class="w_50">([0-9\.]*)</em><em class="w_50">([0-9\.]*)</em>#Uis', $content, $GBPmatch);

$eur = $EURmatch[3];
$usd = $USDmatch[3];
$gbp = $GBPmatch[3];

echo "EUR: $eur USD: $usd GBP: $gbp";

但是,请允许我提醒您,此类数据获取可能被视为侵犯和滥用亚美尼亚中央银行的服务器。

此外,这不是一个永久的解决方案,因为银行可能随时更改其网站HTML结构,从而破坏您的代码。

我建议使用某种公共API。

答案 1 :(得分:3)

我建议使用cURL实际调用然后解析DOM。使用DOM的优势在于,当涉及到网站上的更改时,您可以获得一些余地。卷曲的优点是扩展灵活性和返回错误的能力。这将需要您进行相当多的研究,以确定要查找的正确值。以下代码可以帮助您入门:

// Curl
function curl($url, $post=''){


        //cURL options
        $options = array(

            CURLOPT_RETURNTRANSFER => true,     // return web page
            CURLOPT_HEADER         => false,    // don't return headers
            CURLOPT_FOLLOWLOCATION => true,     // follow redirects
            CURLOPT_ENCODING       => "",       // handle all encodings
            CURLOPT_AUTOREFERER    => true,     // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 500,      // timeout on connect
            CURLOPT_TIMEOUT        => 500,      // timeout on response
            CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_USERAGENT      => "",
            CURLOPT_COOKIESESSION  => false,
            CURLOPT_COOKIEJAR     => $this->ckfile, // Cookies
            CURLOPT_COOKIEFILE     => $this->ckfile, //Cookies...yum


        );

        //Go go go!
        $ch      = curl_init( $url );
        curl_setopt_array( $ch, $options );

        $output['content'] = curl_exec( $ch );
        $output['err']     = curl_errno( $ch );
        $output['errmsg']  = curl_error( $ch );
        $output['header']  = curl_getinfo( $ch );
        return $output;

    }

获得$ output后,您可以使用DOM进行解析。你可以采用几种方法,我建议使用XPATH查询

//Create DOM
        $doc = new DOMDocument;
        @$doc->loadHTML($curl['content']);
        $doc->preserveWhiteSpace = false;

$xpath = new DOMXpath($doc);

        $nodeList = $xpath->query("//div[@id='test']"); // I would recommend trying to find an element that contains the currency elements, but has an attribute that will most likely not be changed. IDs work well, sometime div classes also work. Check out http://www.exampledepot.com/egs/org.w3c.dom/xpath_GetElemByText.html

        foreach($nodeList as $node){

            // From here you would want to select the element http://php.net/manual/en/domdocument.getelementsbytagname.php

}

从那里你回来了。我建议解析http://themoneyconverter.com/RSSFeeds.aspx

答案 2 :(得分:0)

this class中有一个类似的函数来自意大利银行的汇率。意大利银行有一个公共链接,每天为您提供汇率。也许亚美尼亚银行提供汇率的公共链接,使用它(如果有的话),这样你就不必进行过于复杂的解析,也没有任何版权问题。