Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Połączenie dwóch kodów
Forum PHP.pl > Forum > Przedszkole
kalibovers
Czy da sie połączyć te 2 kody czyli zeby pobierał 3 kursy ze strony nbp i wklejał je do pliku bo uzywałem tego skryptu ale nie wyswietla nawet a jako zmienna nie działa. Jakies pomoce ?
Ps. uzyłem juz opcji "szukaj"
  1. <?php
  2. $strona = preg_replace('/[\r\n]/',' ',file_get_contents('http://www.nbp.pl/Kursy/KursyA.html'));
  3. preg_match('/z dnia <b>(.*?)<\/b>/', $strona, $zdnia);
  4. $content = "Kurs średni wg NBP<br>z dnia $zdnia[1] ";
  5. preg_match_all('/<tr valign="middle">.*?<\/tr>/', $strona, $sa);
  6. for ($i=0; $i<count($sa[0]); $i++) {
  7. preg_match('/bg1">(.*?)<\/td/', $sa[0][$i], $waluta);
  8.  
  9. preg_match('/bg1">([0-9],[0-9]*?)<\/td/', $sa[0][$i], $kurs);
  10. if (stristr($waluta[1],'euro')) $content .= "<br><br><b>1 EUR - $kurs[1] PLN</b> ";
  11. if (stristr($waluta[1],'dolar am'))$content .= "<br><br><b>1 USD - $kurs[1] PLN</b> ";
  12.  
  13. }
  14.  
  15. print $content;
  16. ?>

  1. <?php
  2. $filename = 'kursy/'.date("Y-m-d", time()).'.txt';
  3. $fp = fopen($filename, 'w');
  4. $somecontent = "lew bułgarski 1 BGN 2,1655
  5. peso chilijskie 100 CLP 0,6036
  6. rupia indyjska 100 INR 6,1285\n";
  7.  
  8. if (is_writable($filename)) {
  9.  
  10.  
  11. if (!$handle = fopen($filename, 'a')) {
  12. echo "Nie można odtworzyc ($filename)";
  13. }
  14.  
  15. if (fwrite($handle, $somecontent) === FALSE) {
  16. echo "Nie można nadpisać ($filename)";
  17. }
  18.  
  19. echo "Zapisano ($somecontent) do ($filename)";
  20.  
  21. fclose($handle);
  22.  
  23. } else {
  24. echo "Nie można zapisać $filename ";
  25. }
  26. ?>
b4rt3kk
Proponuję skorzystać z tego linku:
http://www.nbp.pl/kursy/xml/a021z150202.xml

Łatwiej sobie przetworzyć xml, niż tak jak teraz to robisz poprzez preg_match.
Pyton_000
@b4rt3kk czy Ty myślisz że Autor sam to pisał? Jak nie wie co do czego w tym to nie licz że zrobi sobie parsowanie XML'a smile.gif
kalibovers
takie ? tongue.gif i moje pytanie czy da sie skrocic czy wszystkie tutaj rzeczy sa dobrze ?
  1. <?php
  2.  
  3. function convert($text) {
  4. $charset = '';
  5.  
  6. if ($charset && function_exists('iconv')) {
  7. return iconv('utf-8', $charset, $text);
  8. } elseif ($charset && function_exists('recode_string')) {
  9. return recode_string('utf8...' . $charset, $text);
  10. } else {
  11. return $text;
  12. }
  13. }
  14.  
  15. class kursy {
  16.  
  17. private $contents = '';
  18.  
  19. function __construct($url, $cache = 'kursy_cache.txt', $lastupdate = '12:16 -1 day', $thisupdate = '12:16') {
  20. $recent = TRUE;
  21. $lastupdate = strtotime($lastupdate);
  22. $thisupdate = strtotime($thisupdate);
  23.  
  24. if ((!file_exists($cache) AND ! is_writable(dirname($cache)) )
  25. OR ( file_exists($cache) AND ! (is_writable($cache)) )) {
  26.  
  27. $cache = '';
  28. } else {
  29.  
  30. if (@filemtime($cache) < $lastupdate) {
  31. $recent = FALSE;
  32. } elseif (time() > $thisupdate && @filemtime($cache) < $thisupdate) {
  33. $recent = FALSE;
  34. }
  35. }
  36.  
  37.  
  38. if ($cache == '' OR ! $recent) {
  39.  
  40. $this->contents = file_get_contents($url);
  41. if ($this->contents == FALSE) {
  42. throw new Exception('Nie udało się pobrać kursów walut.');
  43. }
  44.  
  45.  
  46. if ($cache != '') {
  47.  
  48. file_put_contents($cache, $this->contents);
  49. }
  50. } else {
  51.  
  52. $this->contents = file_get_contents($cache);
  53. }
  54. }
  55.  
  56. function znajdz($fields) {
  57. if (!is_array($fields)) {
  58. $fields = array($fields);
  59. }
  60.  
  61. $last = libxml_use_internal_errors(TRUE);
  62. $info = new SimpleXMLElement($this->contents);
  63. libxml_use_internal_errors($last);
  64.  
  65.  
  66. $rates = array(
  67. 'numer_tabeli' => (string) $info->numer_tabeli,
  68. 'data_publikacji' => (string) $info->data_publikacji
  69. );
  70.  
  71. foreach ($info->pozycja as $v) {
  72. $kod = (string) $v->kod_waluty;
  73. $rates[$kod] = array(
  74. 'nazwa' => convert((string) $v->nazwa_waluty),
  75. 'ilosc' => (string) $v->przelicznik
  76. );
  77. foreach ($fields as $field) {
  78. $rates[$kod][$field] = (string) $v->$field;
  79. };
  80. }
  81.  
  82. return $rates;
  83. }
  84.  
  85. }
  86.  
  87. try {
  88.  
  89. $kursy = new kursy('http://nbp.pl/kursy/xml/LastA.xml', 'kursy_cache.txt', '12:16 -1 day', '12:16');
  90. $waluta = $kursy->znajdz(array('kurs_sredni'));
  91. $filename = 'kursy/' . date("Y-m-d", time()) . '.txt';
  92. $fp = fopen($filename, 'w');
  93. $somecontent = $waluta['BGN']['ilosc'] . ' BGN: ' . $waluta['BGN']['kurs_sredni'] . '<br />
  94. ' . $waluta['CLP']['ilosc'] . ' CLP: ' . $waluta['CLP']['kurs_sredni'] . '<br />
  95. ' . $waluta['INR']['ilosc'] . ' INR: ' . $waluta['INR']['kurs_sredni'] . '
  96. ';
  97. if (is_writable($filename)) {
  98.  
  99.  
  100. if (!$handle = fopen($filename, 'a')) {
  101. echo "Nie można odtworzyc ($filename)";
  102. }
  103.  
  104. if (fwrite($handle, $somecontent) === FALSE) {
  105. echo "Nie można nadpisać ($filename)";
  106. }
  107.  
  108. echo "Zapisano ($somecontent) do ($filename)";
  109.  
  110. fclose($handle);
  111. } else {
  112. echo "Nie można zapisać $filename ";
  113. }
  114. } catch (Exception $e) {
  115. echo 'Błąd przy wyświetlaniu kursów walut.';
  116. }
  117. ?>
b4rt3kk
W jednym pliku masz ten cały kod? Jeśli tak to odradzam, dla zachowania porządku nie powinieneś umieszczać klas z funkcjami i samym wywołaniem.

Jak już zdecydowałeś się opakować wszystko w try...catch to pozostań konsekwentny i nie rób echo dla błędu, tylko wyrzuć nowy wyjątek, który przechwycisz w bloku i wyświetlisz.

Mechanizm cache jest zupełnie do niczego. Pobierasz też np. kilka razy zawartość url - marnotrastwo czasu i zasobów.

Generalnie kod jest mało czytelny i wymagałby nieco optymalizacji i uproszenia.

Jeszcze jedna uwaga:

  1. } catch (Exception $e) {
  2. echo 'Błąd przy wyświetlaniu kursów walut.';
  3. }


Będziesz wiedział jaki błąd spowodował wyrzucenie wyjątku, skoro nawet nie wyświetlasz jego treści?
kalibovers
No własnie musze go uprościc i zostawić tylko zapis waluty do pliku a co do tego echo co podałeś to ni jest ono potrzebne.
b4rt3kk
Cytat(kalibovers @ 3.02.2015, 12:21:39 ) *
No własnie musze go uprościc i zostawić tylko zapis waluty do pliku a co do tego echo co podałeś to ni jest ono potrzebne.


Są takie przypadki kiedy warto wiedzieć, dlaczego skrypt się "wysypał".
kalibovers
Ten moj działa tylko wydaje mi sie, ze sa funkcje ktore sa nie potrzebne i naewt o polowe dalo by sie to skrocic ale nie wiem jak ;/

Powie ktoś jak moge skrocic ten kod? tak aby zostały tylko funkcje:
Tworzenie pliku z data i zapis walut do tego pliku ze strony nbp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.