Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Połączenie dwóch kodów
kalibovers
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.02.2013

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kalibovers
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.02.2013

Ostrzeżenie: (0%)
-----


takie ? (IMG:style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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?

Ten post edytował b4rt3kk 3.02.2015, 12:07:49
Go to the top of the page
+Quote Post
kalibovers
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.02.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #7





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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ł".
Go to the top of the page
+Quote Post
kalibovers
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.02.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:25