Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Pobranie archiwalnego kursu walut z NBP (nazwa pliku)
Forum PHP.pl > Forum > PHP
babejsza
Witam,

mały problemik mi się urodził. Mianowicie chciałbym pobrać do parsowania pliczek z archiwalnym kursem walut NBP.

Jeżeli chodzi o aktualne to nie ma problemu bo przetrzymują je pod adresem http://www.nbp.pl/Kursy/KursyX.html i jest po sprawie. Schody zaczynają się przy archiwach. Pliki z nimi przechowywane są w takim formacie: http://www.nbp.pl/kursy/xml/a232z061129.xml gdzie "a" to rodzaj tabeli, "z" cholera wie - chyba po prostu jako rozdzielacz, "061129" data w formacie date('ymd') no i to cholerne "232". Ogólnie jest to numer porządkowy dla kursu z danego dnia. Oznacza on też jak przypuszczam dzień w roku, który jest dniem roboczym.

Cytat
Tabela A kursów średnich walut obcych aktualizowana jest na stronie internetowej NBP w każdy dzień roboczy w godzinach 11:45 - 12:15.


Po cholere to zrobili to nie wiem, ale problem pozostaje problemem. Muszę w jakiś sposób wygenerować numer dnia roboczego. Jakieś pomysły?

Pozdr.
dr_bonzo
Hmm jesli chcialbys pobrac od razu wszystkie dane to bedzie latwiej:

zaczynasz od dnia roboczego nr 1 i daty 1 stycznia, generujesz linki a001z060101 i sprawdzasz czy istnieje, jesli tak to pobierasz dane i zwiekszasz nr dnia roboczego i date. Jesli nie to zwiekszasz date i powracasz do generowania linku. "Po roku" bedziesz mial cala historie sciagnieta.

A zeby uzyskac dane z danego dnia... no to troche liczenia bedzie, trzeba znalezc wszystkie dni robocze (lub wszystkie wolne, soboty, niedziele, swieta itd) i to dla kazdego roku... troche roboty. Juz latwiej pobrac wszystko, wrzucic do bazy tak zeby latwo po dacie sie wyciagalo i dpiero stad pobierac.
siemakuba
Dysponując wolna chwila zbudowałem coś takiego:

  1. <?php
  2. function workingDayOfYear($timeStamp = null)
  3. {
  4. /*
  5.  * tablica z dni wolnych od pracy według NBP na 2006 rok
  6.  * <a href="http://www.nbp.pl/Home.aspx?f=onbp/organizacja/schedule.html" target="_blank">http://www.nbp.pl/Home.aspx?f=onbp/organizacja/schedule.html</a> 
  7.  * 
  8.  */
  9.  
  10. $freeDaysArray = array(
  11. 'nowy rok' => mktime(0,0,0,1,1,date('Y')),
  12. 'wielkanoc 1'  => mktime(0,0,0,4,16,date('Y')),
  13. 'wielkanoc 2'  => mktime(0,0,0,4,17,date('Y')),
  14. '1 maja' => mktime(0,0,0,5,1,date('Y')),
  15. '3 maja' => mktime(0,0,0,5,3,date('Y')),
  16. 'boze cialo' => mktime(0,0,0,6,15,date('Y')),
  17. '15 sierpnia'  => mktime(0,0,0,8,15,date('Y')),
  18. '1 listopada'  => mktime(0,0,0,11,1,date('Y')),
  19. '11 listopada' => mktime(0,0,0,11,11,date('Y')),
  20. '25 grudnia' => mktime(0,0,0,12,25,date('Y')),
  21. '26 grudnia' => mktime(0,0,0,12,26,date('Y'))
  22. );
  23.  
  24. $timeStamp = is_null($timeStamp) ? time() : $timeStamp;
  25. $firstDayOfYear = date('w', mktime(0,0,0,1,1,date('Y')));
  26. $weekOfYear  = date('W', $timeStamp);
  27.  
  28. /*
  29.  * funkcja date('W') liczy tygonie w roku rozpoczynajac od poniedzialku
  30.  * stad, jezeli 1 stycznia wypada w niedziele odejmujemy jeden tydzien
  31.  * jezeli wypada pozniej niz w poniedzialek, dodajemy jeden tydzien 
  32.  * 
  33.  */
  34.  
  35. if($firstDayOfYear == 0)
  36. {  $weekOfYear--;
  37. }
  38. else if ($firstDayOfYear > 1)
  39. {  $weekOfYear++;
  40. }
  41.  
  42. $dayOfYear = date('z', $timeStamp);
  43.  
  44. // liczba weekendow (wolnych) = liczba tygodni * 2
  45. $freeWeekends  = $weekOfYear * 2;
  46.  
  47. /*
  48.  * zsumowanie dodatkowych wolnych dni
  49.  * - przed data do ktorej liczymy
  50.  * - z pominieciem dni, ktore wypadly w weekemd, wiec i tak sa wolne
  51.  */
  52.  
  53. $freeDays  = 0;
  54. foreach ($freeDaysArray as $sw => $tStamp)
  55. {  
  56. if ($tStamp > $timeStamp)
  57. {  continue;
  58. }
  59.  
  60. $dayOfWeek = date('w', $tStamp);
  61.  
  62. if ($dayOfWeek != 0 && $dayOfWeek != 6)
  63. {  $freeDays++;
  64. }
  65. }
  66.  
  67. /*
  68.  * dzien pracujacy w roku == 
  69.  * == dzien roku - wolne weekendy - inne dni wolne
  70.  */
  71.  
  72. $workingDay = $dayOfYear - $freeWeekends - $freeDays; 
  73.  
  74. return $workingDay;
  75. }
  76.  
  77. $d = workingDayOfYear();
  78. echo $d;
  79. ?>


komentarze mowię co i jak.
Uwzględnione dni wolne pochodzą z http://www.nbp.pl/Home.aspx?f=onbp/organizacja/schedule.html

gdyby komuś jakiś bug w oko wpadł - śmiało poprawiać ;)

pozdr.
KotDomowy
Niezly skrypcik, tylko ja zamiast stalej daty Wielkanocy uzylbym funkcji easter_date(date("Y")); - wtedy ma sie pewnosc, ze zadziala nie tylko w tym roku smile.gif
siemakuba
@KotDomowy: masz rację, ciągle jednak pozostaje problem innych świąt ruchomych, czyli np. Dzień Bożego Ciała.

Tu poszedłem na łatwiznę i skorzystałem z dni wolnych według NBP, bo właśnie te są tu akurat potrzebne ;)

pozdr.
babejsza
Na prawdę dobra robota smile.gif. Nawet nie szukałem na stronie NBP czegoś takiego jak dni wolne smile.gif.
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.