Хочу выводить на станицу информер курса валют, несколько раз попробовал но не получается. Помогите пожалуйста. вывод информации от сюда http://nbt.tj/tj/kurs/kurs.php и http://nbt.tj/tj/kurs/export_xml.php?date=2017-01-27. Если не сложно помогите писать код. Свой код пока не могу сюда выводить. Думаю это глупа с моими ошибками.
PHP: <?php // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru $content = get_content(); // Разбираем содержимое, при помощи регулярных выражений $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"; preg_match_all($pattern, $content, $out, PREG_SET_ORDER); $dollar = ""; $euro = ""; foreach($out as $cur) { if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]); if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]); } echo "Доллар - ".$dollar."<br>"; echo "Евро - ".$euro."<br>"; function get_content() { // Формируем сегодняшнюю дату $date = date("d/m/Y"); // Формируем ссылку $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Загружаем HTML-страницу $fd = fopen($link, "r"); $text=""; if (!$fd) echo "Запрашиваемая страница не найдена"; else { // Чтение содержимого файла в переменную $text while (!feof ($fd)) $text .= fgets($fd, 4096); } // Закрыть открытый файловый дескриптор fclose ($fd); return $text; } ?> --- Добавлено --- Вместо http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date хочу взят информацию с этого сайта http://nbt.tj/tj/kurs/kurs.php --- Добавлено --- Поставил эту ссылку но не получается. Пожалуйста помогите.
ссылки и адреса в интернете они как папки с файлами. кто как называет и каждый кладёт куда хочет. так что на другом сайте - другой путь.
Поставил эту ссылку но не получается. Что мне делать помогите --- Добавлено --- Хотя бы посоветуйте что нибудь
Этот файл, запускай через cron раз в сутки или два PHP: <?php $csv = file_get_contents('http://nbt.tj/tj/kurs/export_csv.php?date='.date('Y-m-d')); file_put_contents('rates.csv', $csv); а этот будет выводить курсы PHP: <?php $v_rates = 'rates.csv'; if (file_exists($v_rates)) { $rates = file($v_rates, FILE_SKIP_EMPTY_LINES); if (is_array($rates)) { foreach ($rates as $rate) { $list = explode('; ', $rate); if (is_array($list) && count($list) == 4) { ?> <?=$list[0]?>, <?=$list[1]?>, <?=$list[2]?>, <?=$list[3]?>, <br> <?php } } } } --- Добавлено --- файлы нужно держать в одной папке или прописать полные пути к файлу rates.csv
Можно например так PHP: $date = date('Y-m-d'); $xml = file_get_contents('http://nbt.tj/tj/kurs/export_xml.php?date='.date('Y-m-d').'&export=xmlout'); $xml = preg_replace('#<\?xml.*\?>#','',$xml); $simple = simplexml_load_string($xml); foreach($simple->Valute as $val){ echo $val->CharCode.' | '; echo $val->Nominal.' | '; echo $val->Name.' | '; echo $val->Value; echo "<br>"; } Код (Text): USD | 1 | Доллари ИМА | 7.9004 EUR | 1 | ЕВРО | 8.4495 XDR | 1 | СДР | 10.7340 CNY | 1 | Юани Чин | 1.1472 CHF | 1 | Франки Швейтсария | 7.9059 RUB | 1 | Рубли Русия | 0.1297
Ну во-первых я не думаю что у него будет серьезная нагрузка,а во вторых я не уверен что ТС работал с Cron
да нафиг крон если ты предложил вариант с записью в файл. повесить скрипт на страницу, где курсы выводятся, и пусть, по каждому обновлению страницы, предварительно сравнивает дату файла, при старой дате - получить данные с сайта банка и обновить файл.
Хотя бы посоветуйте Большое спасибо вам? Заработало. Думаю с другими валютами тоже получится. Хочу выводит на сайт с других ресурсов например с нац банка России или Киргизии. --- Добавлено --- Если хочу чтобы выводились ни все валюты а только отделенные что нужно изменить?
@denis01 Тебе на самом деле хорошее решение дал касательно файла, что бы не дергать постоянно банк,так что присмотрись к этой идее.А метод, которым можно получить данные можешь использовать на свой вкус. --- Добавлено --- У каждой валюты есть свой ID,выбери ID валют какие ты хочешь выводить и выводи. В $attr будет приходить уникальный ID валюты PHP: $xml = file_get_contents('http://nbt.tj/tj/kurs/export_xml.php?date='.date('Y-m-d').'&export=xmlout'); $xml = preg_replace('#<\?xml.*\?>#','',$xml); $simple = simplexml_load_string($xml); foreach($simple->Valute as $val){ $attr = $val->attributes(); echo "id = $attr".' | '; echo $val->CharCode.' | '; echo $val->Nominal.' | '; echo $val->Name.' | '; echo $val->Value; echo "<br>"; }
да я как-то еще не научился быстро переключаться с проекта на вникание в новую задачу. может быть какраз-таки и стоит понабивать в этом руку на форуме.
Фанатам php привет. )) Коли уж возник вопрос о банах по ip, крону и прочему... возможно, есть смысл в порядке исключения попробовать на джээсах? Насчет банка Киргизии не владею инфой, а вот в плане ЦБ РФ могу уверить, что правильных корсов он отдавать упорно не желает, как это ни странно для ЦБ РФ.... поэтому пришлось пользовать прокси типа yahoo, как видно из кода. Но работает без проблем, можете попробовать. Есть целый ряд достоинств в том подходе, когда данные обрабатывает клиент, а не сервер. Любуйтесь: при написании кода не пострадало, помнится, ни одно животное, т.е. ни грама php оно не содержит: Код (Javascript): <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.js"></script> <script> $(document).ready( function(){ $.getJSON("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fwww.cbr.ru%2Fscripts%2FXML_daily.asp%3F'&format=json&callback=") .done( function(data){ var output = '<ul>'; $(data.query.results.ValCurs.Valute).each(function(i, item){ output += '<li>' + item.Name + ' - ' + item.Value + '</li>'; } ); output += '</ul>'; $('#test').append($(output)); } ) } ); </script> <div id="test" /> P.S. Не сразу решился js здесь публиковать, мало ли, все ж таки форум пыху посвящен, накинетесь ща... но формочка редактора, смотрю, предусматривает также и стили js, это решило дело. )))))
Все дело в том, что это не филиал Церкви Великого PHP, с сообщетво веб-разработчиков. И тут нет "фанатов php". Тут есть люди, которые с ним работают, или которые его изучают. Это инструмент, а не культ или идол. Более того, на форуме есть разделы, посвященные JS, CSS, HTML. И накидываться никто ни на кого не будет. А вот отсутствие отступов в коде - это аяяй. --- Добавлено --- И да, сходу вопрос - а в чем проблема точно так же JSON получать по тому же адресу, но с PHP? Неужели не работает? Не то, чтобы это было принципиально, но просто интересно.
Чувства юмора всегда и везде - отличительное качество прогера, я в курсе; отсутствие ЧЮ - вот это really реальное айяяяй. Нет никаких проблем в получении и обработке json или xml посредством php, разумеется, вы и сами это знаете... но это решение давно уже стало тривиальным. На всех углах валяются подобные скрипты в огромных количествах, с регулярками и с циклами (хотя использование регулярных выражений в данном контексте - явный, имхо, моветон), так что захотелось придать немного оригинальности обсуждению, только и всего. А вот что касается центробанка России - здесь реально есть некоторые проблемы. Непонаслышке знаю, что работает этот API довольно странно, чтобы не сказать нестабильно: если логгировать работу такого рода информеров, несложно убедиться, что практически ежедневно случаются перебои в работе. Видел в рунете жалобы на "баны по ip", и есть основания полагать, что доля истины тут имеется, отсутствие правильных заголовков, что не дает возможности браузеру обрабатывать данные напрямую, а только лишь посредством JsonProxy - еще одно лыко в строку... поэтому, на мой взгляд, обработка на клиенте + кэширование = способны внести рациональное зерно в решение этой технической задачи, хотя бы и очень несложной. А если по уму - лучше и вправду какой-то иной банк использовать для получения котировок.
Однозначно. А что касается ЦБ РФ - если кто-то из посетителей форума располагает достоверной информацией, почему его API так странно себя ведет - был бы благодарен за достоверную инфу, реально интересно. В качестве примера: существует вот популярное расширение, информер валют... для популярнейшего же фреймворка Joomla; вроде и кэш там свой привинчен, насколько помню, позволяющий дополнительно кэшировать данные в довесок к системному кэшированию... тем не менее - могу засвидетельствовать, своими глазами видел как модуль энтот безнадежно подвешивает целиком всю страничку сайта, когда API центробанка в ауте. Почему? - а бог весть почему, не углублялся. Админ сайта, увидев это безобразие, сказал, что нафиг ему такой модуль, от которого головняка больше чем профита, и вырубил. Поэтому.... интерес к js в этом плане вполне, вероятно, оправдан. Хотя, разумеется, и модуль этот криворуко сделан, но для новичков, осваивающих пых... имейте в виду эту странную особенность ЦБ РФ, одним словом.
Готовое решение не подскажу, а вот пример реализации на стороне JS пожалуйста http://currencyrate.today/exchangerates-widget Код (Text): var arr = sz.split("x");var tzs = tz;var fm = fm;var to = to;var st = st;var cd = cd;var am = (typeof am !== "undefined") ? am:1;if (tz == "timezone") {var d = new Date();tz = d.getTimezoneOffset() / 60;tz = 0 - tz;tz = tz + "s";}else if (tz == "userset") {var d = new Date();tz = d.getTimezoneOffset() / 60;tz = 0 - tz;}if (! st) st = "default";var w = parseInt(arr[0]); var h = parseInt(arr[1]);if (w == 1 || w < 1) { w = '100%'; }if (h == 1 || h < 1) { h = '100%'; }ht_protocol = (location.protocol == "https:" ? "https:" : "http:");document.write('<iframe src="' + ht_protocol + '//currencyrate.today/load-exchangerates?&lg=' + lg + '&tz=' + tz + '&fm=' + fm + '&to=' + to + '&st=' + st + '&cd=' + cd + '&am=' + am + '" width="' + w + '" height="' + h + '" frameborder="0" scrolling="no"></iframe>');
да ладно. Какой еще нах@р iframe, кодеры? не смешите. Не мое дело, конечно, но на месте модератора я бы банил за подобное. Если хотите на js, спробуйте мой код, чуть выше приведен как есть, полностью, и изменить под себя несложно. Демка пашет по ссылке безотказно уже почти года три, кому интересен информер курсов валют на чистом js, можно заценить.