Мне нужно получить данные с этой веб-страницы центрального банка Армении
В моей html-форме пользователь должен указать цену своего предложения. Он / она выбирает валюту (USD, EUR или AMD) и вводит ее значение. После этого мне нужно конвертировать введенную цену в две другие валюты и добавить их в мою базу данных. Итак, как я могу получить курсы обмена USD и EUR с сайта, приведенного выше, с помощью PHP и привязать их к переменным.
Я обычно не делаю конечных решений на форумах 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.
Я бы рекомендовал использовать 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
В этом классе есть аналогичная функция, которая делает обменные курсы от Банка Италии. Банк Италии имеет общедоступную связь, чтобы ежедневно давать вам обменные курсы. Возможно, также Банк Армении предоставляет публичную ссылку с обменными курсами, использует ее (если есть), поэтому вам не нужно делать слишком сложный парсинг, и у вас нет каких-либо проблем с авторским правом.