За последние 24 часа нас посетили 59743 программиста и 1769 роботов. Сейчас ищут 1459 программистов ...

Информер курса валют

Тема в разделе "Сделайте за меня", создана пользователем Дилшод, 27 янв 2017.

  1. Дилшод

    Дилшод Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    7
    Симпатии:
    0
    Хочу выводить на станицу информер курса валют, несколько раз попробовал но не получается. Помогите пожалуйста. вывод информации от сюда http://nbt.tj/tj/kurs/kurs.php и http://nbt.tj/tj/kurs/export_xml.php?date=2017-01-27. Если не сложно помогите писать код. Свой код пока не могу сюда выводить. Думаю это глупа с моими ошибками.
     
  2. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    показывай что делал\сделал, иначе эта тема тянет на раздел - сделайте за меня
     
  3. Дилшод

    Дилшод Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    7
    Симпатии:
    0
    PHP:
    1. <?php
    2. // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
    3. $content = get_content();
    4. // Разбираем содержимое, при помощи регулярных выражений
    5. $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
    6. preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
    7. $dollar = "";
    8. $euro = "";
    9. foreach($out as $cur)
    10. {
    11. if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
    12. if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]);
    13. }
    14. echo "Доллар - ".$dollar."<br>";
    15. echo "Евро - ".$euro."<br>";
    16. function get_content()
    17. {
    18. // Формируем сегодняшнюю дату
    19. $date = date("d/m/Y");
    20. // Формируем ссылку
    21. $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
    22. // Загружаем HTML-страницу
    23. $fd = fopen($link, "r");
    24. $text="";
    25. if (!$fd) echo "Запрашиваемая страница не найдена";
    26. else
    27. {
    28. // Чтение содержимого файла в переменную $text
    29. while (!feof ($fd)) $text .= fgets($fd, 4096);
    30. }
    31. // Закрыть открытый файловый дескриптор
    32. fclose ($fd);
    33. return $text;
    34. }
    35. ?>
    --- Добавлено ---

    Вместо http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date хочу взят информацию с этого сайта
    http://nbt.tj/tj/kurs/kurs.php
    --- Добавлено ---
    Поставил эту ссылку но не получается. Пожалуйста помогите.
     
    #3 Дилшод, 30 янв 2017
    Последнее редактирование модератором: 30 янв 2017
  4. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    ты решил что все сайты работают одинаково, но это не так.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ссылки и адреса в интернете они как папки с файлами. кто как называет и каждый кладёт куда хочет. так что на другом сайте - другой путь.
     
  6. Дилшод

    Дилшод Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    7
    Симпатии:
    0
    Поставил эту ссылку но не получается.
    Что мне делать помогите
    --- Добавлено ---
    Хотя бы посоветуйте что нибудь
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тут уж либо учиться самому, либо платить тому, кто сделает.
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Этот файл, запускай через cron раз в сутки или два
    PHP:
    1. <?php
    2. $csv = file_get_contents('http://nbt.tj/tj/kurs/export_csv.php?date='.date('Y-m-d'));
    3. file_put_contents('rates.csv', $csv);
    а этот будет выводить курсы
    PHP:
    1. <?php
    2. $v_rates = 'rates.csv';
    3. if (file_exists($v_rates)) {
    4.     $rates = file($v_rates, FILE_SKIP_EMPTY_LINES);
    5.     if (is_array($rates)) {
    6.         foreach ($rates as $rate) {
    7.             $list = explode('; ', $rate);
    8.             if (is_array($list) && count($list) == 4) {
    9.                 ?>
    10.                 <?=$list[0]?>, <?=$list[1]?>, <?=$list[2]?>, <?=$list[3]?>, <br>
    11.                 <?php
    12.             }
    13.         }
    14.     }
    15. }
    --- Добавлено ---
    файлы нужно держать в одной папке или прописать полные пути к файлу rates.csv
     
  9. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Можно например так
    PHP:
    1. $date = date('Y-m-d');
    2. $xml = file_get_contents('http://nbt.tj/tj/kurs/export_xml.php?date='.date('Y-m-d').'&export=xmlout');
    3. $xml = preg_replace('#<\?xml.*\?>#','',$xml);
    4. $simple = simplexml_load_string($xml);
    5.     foreach($simple->Valute as $val){
    6.         echo $val->CharCode.' | ';
    7.         echo $val->Nominal.' | ';
    8.         echo $val->Name.' | ';
    9.         echo $val->Value;
    10.         echo "<br>";
    11.     }
    Код (Text):
    1. USD | 1 | Доллари ИМА | 7.9004
    2. EUR | 1 | ЕВРО | 8.4495
    3. XDR | 1 | СДР | 10.7340
    4. CNY | 1 | Юани Чин | 1.1472
    5. CHF | 1 | Франки Швейтсария | 7.9059
    6. RUB | 1 | Рубли Русия | 0.1297
     
    #9 alexblack, 30 янв 2017
    Последнее редактирование: 30 янв 2017
    Дилшод нравится это.
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @alexblack на каждый запрос пользователя идти на другой ресурс?
     
  11. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну во-первых я не думаю что у него будет серьезная нагрузка,а во вторых я не уверен что ТС работал с Cron
     
    #11 alexblack, 30 янв 2017
    Последнее редактирование: 30 янв 2017
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    придётся, потому что например наш банк банит IP если несколько запросов в сутки приходит
     
  13. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    да нафиг крон если ты предложил вариант с записью в файл. повесить скрипт на страницу, где курсы выводятся, и пусть, по каждому обновлению страницы, предварительно сравнивает дату файла, при старой дате - получить данные с сайта банка и обновить файл.
     
  14. Дилшод

    Дилшод Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    7
    Симпатии:
    0
    Хотя бы посоветуйте
    Большое спасибо вам? Заработало. Думаю с другими валютами тоже получится. Хочу выводит на сайт с других ресурсов например с нац банка России или Киргизии.
    --- Добавлено ---
    Если хочу чтобы выводились ни все валюты а только отделенные что нужно изменить?
     
  15. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    @denis01 Тебе на самом деле хорошее решение дал касательно файла, что бы не дергать постоянно банк,так что присмотрись к этой идее.А метод, которым можно получить данные можешь использовать на свой вкус.
    --- Добавлено ---
    У каждой валюты есть свой ID,выбери ID валют какие ты хочешь выводить и выводи.
    В $attr будет приходить уникальный ID валюты
    PHP:
    1. $xml = file_get_contents('http://nbt.tj/tj/kurs/export_xml.php?date='.date('Y-m-d').'&export=xmlout');
    2. $xml = preg_replace('#<\?xml.*\?>#','',$xml);
    3. $simple = simplexml_load_string($xml);
    4.     foreach($simple->Valute as $val){
    5.         $attr = $val->attributes();
    6.         echo "id = $attr".' | ';
    7.         echo $val->CharCode.' | ';
    8.         echo $val->Nominal.' | ';
    9.         echo $val->Name.' | ';
    10.         echo $val->Value;
    11.         echo "<br>";
    12.     }
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    захочешь, помоги человеку, напиши код + у него ещё новые требования появились
     
  17. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    да я как-то еще не научился быстро переключаться с проекта на вникание в новую задачу. может быть какраз-таки и стоит понабивать в этом руку на форуме.
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Если только это пригодиться, просто так нет смысла себя мучат.
     
    rewuxiin нравится это.
  19. rishard

    rishard Новичок

    С нами с:
    20 сен 2016
    Сообщения:
    228
    Симпатии:
    27
    Фанатам php привет. ))
    Коли уж возник вопрос о банах по ip, крону и прочему... возможно, есть смысл в порядке исключения попробовать на джээсах? Насчет банка Киргизии не владею инфой, а вот в плане ЦБ РФ могу уверить, что правильных корсов он отдавать упорно не желает, как это ни странно для ЦБ РФ.... поэтому пришлось пользовать прокси типа yahoo, как видно из кода. Но работает без проблем, можете попробовать. Есть целый ряд достоинств в том подходе, когда данные обрабатывает клиент, а не сервер. Любуйтесь: при написании кода не пострадало, помнится, ни одно животное, т.е. ни грама php оно не содержит:


    Код (Javascript):
    1. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
    2. <script>
    3. $(document).ready(
    4. function(){
    5. $.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=")
    6. .done(
    7. function(data){
    8. var output = '<ul>';
    9. $(data.query.results.ValCurs.Valute).each(function(i, item){
    10. output += '<li>' + item.Name + ' - ' + item.Value + '</li>';
    11. }
    12. );
    13. output += '</ul>';
    14. $('#test').append($(output));
    15. }
    16. )
    17. }
    18. );
    19. </script>
    20. <div id="test" />
    P.S. Не сразу решился js здесь публиковать, мало ли, все ж таки форум пыху посвящен, накинетесь ща... но формочка редактора, смотрю, предусматривает также и стили js, это решило дело. )))))
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Все дело в том, что это не филиал Церкви Великого PHP, с сообщетво веб-разработчиков. И тут нет "фанатов php". Тут есть люди, которые с ним работают, или которые его изучают. Это инструмент, а не культ или идол. Более того, на форуме есть разделы, посвященные JS, CSS, HTML. И накидываться никто ни на кого не будет.

    А вот отсутствие отступов в коде - это аяяй.
    --- Добавлено ---
    И да, сходу вопрос - а в чем проблема точно так же JSON получать по тому же адресу, но с PHP? Неужели не работает? Не то, чтобы это было принципиально, но просто интересно.
     
  21. rishard

    rishard Новичок

    С нами с:
    20 сен 2016
    Сообщения:
    228
    Симпатии:
    27
    Чувства юмора всегда и везде - отличительное качество прогера, я в курсе; отсутствие ЧЮ - вот это really реальное айяяяй. Нет никаких проблем в получении и обработке json или xml посредством php, разумеется, вы и сами это знаете... но это решение давно уже стало тривиальным. На всех углах валяются подобные скрипты в огромных количествах, с регулярками и с циклами (хотя использование регулярных выражений в данном контексте - явный, имхо, моветон), так что захотелось придать немного оригинальности обсуждению, только и всего.

    А вот что касается центробанка России - здесь реально есть некоторые проблемы. Непонаслышке знаю, что работает этот API довольно странно, чтобы не сказать нестабильно: если логгировать работу такого рода информеров, несложно убедиться, что практически ежедневно случаются перебои в работе. Видел в рунете жалобы на "баны по ip", и есть основания полагать, что доля истины тут имеется, отсутствие правильных заголовков, что не дает возможности браузеру обрабатывать данные напрямую, а только лишь посредством JsonProxy - еще одно лыко в строку... поэтому, на мой взгляд, обработка на клиенте + кэширование = способны внести рациональное зерно в решение этой технической задачи, хотя бы и очень несложной.

    А если по уму - лучше и вправду какой-то иной банк использовать для получения котировок.
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    У yahoo и гугла есть вполне себе сносное биржевое API, раз на то пошло.
     
  23. rishard

    rishard Новичок

    С нами с:
    20 сен 2016
    Сообщения:
    228
    Симпатии:
    27
    Однозначно.
    А что касается ЦБ РФ - если кто-то из посетителей форума располагает достоверной информацией, почему его API так странно себя ведет - был бы благодарен за достоверную инфу, реально интересно. В качестве примера: существует вот популярное расширение, информер валют... для популярнейшего же фреймворка Joomla; вроде и кэш там свой привинчен, насколько помню, позволяющий дополнительно кэшировать данные в довесок к системному кэшированию... тем не менее - могу засвидетельствовать, своими глазами видел как модуль энтот безнадежно подвешивает целиком всю страничку сайта, когда API центробанка в ауте. Почему? - а бог весть почему, не углублялся. Админ сайта, увидев это безобразие, сказал, что нафиг ему такой модуль, от которого головняка больше чем профита, и вырубил. Поэтому.... интерес к js в этом плане вполне, вероятно, оправдан. Хотя, разумеется, и модуль этот криворуко сделан, но для новичков, осваивающих пых... имейте в виду эту странную особенность ЦБ РФ, одним словом.
     
  24. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    Готовое решение не подскажу, а вот пример реализации на стороне JS пожалуйста http://currencyrate.today/exchangerates-widget
    Код (Text):
    1. 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>');
     
  25. rishard

    rishard Новичок

    С нами с:
    20 сен 2016
    Сообщения:
    228
    Симпатии:
    27
    да ладно. Какой еще нах@р iframe, кодеры? не смешите. Не мое дело, конечно, но на месте модератора я бы банил за подобное. Если хотите на js, спробуйте мой код, чуть выше приведен как есть, полностью, и изменить под себя несложно. Демка пашет по ссылке безотказно уже почти года три, кому интересен информер курсов валют на чистом js, можно заценить.