Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> Dane z pliku XML do bazy SQL
brzanek
post 25.08.2014, 08:44:17
Post #1





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Witam szukałem na forum ale nie znalazłem odpowiedniej podpowiedzi jak zrobić aby dane z zewnętrznego pliku xml były zapisywane w bazie danych sql.

Chodzi mi o to że ze strony o pogodzie odczytuję dane z pliku xml. Dane te aktualizują się co jakiś czas (co 30 min) http://www.yr.no/place/Polen/Vest-Pommern/...no/forecast.xml
Czy jest ajkiś sposób aby można było zapisać te dane w odpowiednich tabelach w mojej bazie danych. Import musiał by robić się automatycznie z możliwością zadpisywania danych jeśli były zmienione oraz z możliwością dodawania nowych id bo codziennie pojawiają się nowe prognozy na kolejne dni.
Mam nadzieję że wyjaśniłem o co mi chodzi nie potrafię sobie z tym poradzić. Proszę o jakieś wskazuówki lub przykładowy kod. Z góry dziękuję i pozdrawiam.
Go to the top of the page
+Quote Post
Turson
post 25.08.2014, 08:46:38
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Napisz parser XML => twoja baza
Cronem odpalaj co 30min
Go to the top of the page
+Quote Post
brzanek
post 25.08.2014, 08:53:45
Post #3





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Ah żeby to było takie proste jak piszesz to pewnie bym to zrobił. Możesz podać jakieś większe szczegóły. Nie znam się na tym.
Go to the top of the page
+Quote Post
aniolekx
post 25.08.2014, 08:58:25
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


Cytat(brzanek @ 25.08.2014, 08:53:45 ) *
Ah żeby to było takie proste jak piszesz to pewnie bym to zrobił. Możesz podać jakieś większe szczegóły. Nie znam się na tym.


auto tez sam naprawiasz jak się nie znasz?
Go to the top of the page
+Quote Post
Pyton_000
post 25.08.2014, 09:14:02
Post #5





Grupa: Zarejestrowani
Postów: 7 821
Pomógł: 1375
Dołączył: 26.10.2005

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


Może coś takiego:
http://rpbouman.blogspot.com/2006/03/impor...ysql-using.html
Go to the top of the page
+Quote Post
brzanek
post 25.08.2014, 09:52:10
Post #6





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Cytat(Pyton_000 @ 25.08.2014, 10:14:02 ) *


Może to i dobry sposób ale coś mi nie wychodzi.
Z podanego pliku xml potrzebuję wyciągnąć tylko wybrane dane
  1. <time from="2014-08-25T10:00:00" to="2014-08-25T12:00:00" period="1"><!-- Valid from 2014-08-25T10:00:00 to 2014-08-25T12:00:00 --><symbol number="2" numberEx="2" name="Fair" var="02d"/><precipitation value="0"/><!-- Valid at 2014-08-25T10:00:00 --><windDirection deg="253.6" code="WSW" name="West-southwest"/><windSpeed mps="4.9" name="Gentle breeze"/><temperature unit="celsius" value="14"/><pressure unit="hPa" value="1014.9"/></time>

Oraz na kolejne godziny i dni
Zrobiłem już tabele w bazie danych
  1. CREATE TABLE `choszczno` (
  2. `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `time_from` varchar(255) DEFAULT NULL,
  4. `time_to` varchar(255) DEFAULT NULL,,
  5. `symbol_var` int(255) DEFAULT NULL,
  6. `precipitation_value` int(255) DEFAULT NULL,
  7. `windDirection_code` int(255) DEFAULT NULL,
  8. `windSpeed_mps` int(255) DEFAULT NULL,
  9. `temperature_value` int(255) DEFAULT NULL,
  10. `pressure_value` int(255) DEFAULT NULL,
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=MyISAM;

Ale dalej nie bardzo wiem jak napisać plik php aby otwierał plik z podanego pliku xml http://www.yr.no/place/Polen/Vest-Pommern/...no/forecast.xml wybierał podane wcześniej potrzebne dane i zapisywał je w tabeli w bazie danych sql.
Ma ktoś jakiś pomysł albo jakiś dobry tutorial jak to zrobić?

Go to the top of the page
+Quote Post
nospor
post 25.08.2014, 13:54:32
Post #7





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




Czas to ma byc DATETIME a nie zadne VARCHAR
Inne wartosci liczbowe to z tego co widze w XML to są liczby rzeczywiste a nie całkowite.

Jak odczytac XML? uzyj SimpleXML - patrz manual php.
Gdy odczytasz XML przejdziemy do zapisu w bazie


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 25.08.2014, 19:53:42
Post #8





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Dobra udało mi się ocdczytać plik xml
  1. <?php
  2.  
  3. $weatherdata = simplexml_load_file('http://www.yr.no/place/Polen/Vest-Pommern/Choszczno/forecast.xml');
  4. $name = $weatherdata->location->name;
  5. $time = $weatherdata->forecast->tabular->time;
  6. $symbol = $weatherdata->forecast->tabular->time->symbol;
  7. $temperature = $weatherdata->forecast->tabular->time->temperature;
  8. $windDirection = $weatherdata->forecast->tabular->time->windDirection;
  9. $windSpeed = $weatherdata->forecast->tabular->time->windSpeed;
  10. $pressure = $weatherdata->forecast->tabular->time->pressure;
  11. ?>
  12. <style>
  13. .temp {
  14. background-color: #FEB100;
  15. color: #fff;
  16. font-family: arial;
  17. font-size: 12px;
  18. font-weight: bold;
  19. padding-bottom: 3px;
  20. padding-top: 3px;
  21. padding-left: 6px;
  22. padding-right: 6px;
  23. -webkit-border-radius: 6px;
  24. -moz-border-radius: 6px;
  25. border-radius: 6px;
  26. text-align: center;
  27. }
  28. .wiatr {
  29. background-color: #464646;
  30. color: #fff;
  31. font-family: arial;
  32. font-size: 12px;
  33. font-weight: bold;
  34. padding-bottom: 3px;
  35. padding-top: 3px;
  36. padding-left: 6px;
  37. padding-right: 6px;
  38. -webkit-border-radius: 6px;
  39. -moz-border-radius: 6px;
  40. border-radius: 6px;
  41. text-align: center;
  42. }
  43. .cisnienie {
  44. background-color: #e4e4e4;
  45. color: #444;
  46. font-family: arial;
  47. font-size: 12px;
  48. font-weight: bold;
  49. padding-bottom: 3px;
  50. padding-top: 3px;
  51. padding-left: 6px;
  52. padding-right: 6px;
  53. -webkit-border-radius: 6px;
  54. -moz-border-radius: 6px;
  55. border-radius: 6px;
  56. text-align: center;
  57. }
  58. .data {
  59. background-color: #f5f5f5;
  60. color: #555;
  61. font-family: arial;
  62. font-size: 12px;
  63. font-weight: bold;
  64. padding-bottom: 3px;
  65. padding-top: 3px;
  66. padding-left: 5px;
  67. padding-right: 5px;
  68. -webkit-border-radius: 5px;
  69. -moz-border-radius: 5px;
  70. border-radius: 5px;
  71. border: 1px solid #e4e4e4;
  72. width: 350px;
  73. text-align: center;
  74. }
  75. .miejscowosc {
  76. background-color: #2bb853;
  77. color: #fff;
  78. font-family: arial;
  79. font-size: 12px;
  80. font-weight: bold;
  81. padding-bottom: 3px;
  82. padding-top: 3px;
  83. padding-left: 5px;
  84. padding-right: 5px;
  85. -webkit-border-radius: 5px;
  86. -moz-border-radius: 5px;
  87. border-radius: 5px;
  88. text-align: center;
  89. }
  90. .tekst {
  91. color: #fff;
  92. font-family: arial;
  93. font-size: 12px;
  94. font-weight: bold;
  95. padding-bottom: 3px;
  96. padding-top: 3px;
  97. padding-left: 8px;
  98. padding-right: 8px;
  99. text-align: center;
  100. }
  101. .brak {
  102. padding-bottom: 3px;
  103. padding-top: 3px;
  104. padding-left: 4px;
  105. padding-right: 4px;
  106. text-align: center;
  107. }
  108. </style>
  109. <?php
  110. echo "<table border='0'>
  111. <tr>
  112. <td class='miejscowosc'>$name</td>
  113. <td class='tekst'>Prognoza na najbliższe godziny</td>
  114. </tr>
  115. </table>\n";
  116.  
  117. foreach ($weatherdata->forecast as $time) {
  118. echo '<table border="0" cellpadding="0" cellspacing="0">
  119. <tr>
  120. <td></td>
  121. </tr>
  122. </table>';
  123. echo '<table border="0" cellpadding="0" cellspacing="0" width="300px">
  124. <tr><td>';
  125. echo '<table border="0" cellpadding="0" cellspacing="0" width="60px">
  126. <tr>
  127. <td class="ikon"><img src="infusions/prognozy_panel/ikonki/'.$symbol['var'].'.png"</td>
  128. </tr>
  129. </table>';
  130. echo '</td><td align="left">';
  131. echo '<table border="0" cellpadding="0" cellspacing="5">
  132. <tr>
  133. <td class="temp">'.$temperature['value'].' ?C</td>
  134. <td class="brak"> </td>
  135. <td class="wiatr">'.$windSpeed['mps'].' m/s</td>
  136. <td class="brak"> </td>
  137. <td class="cisnienie">'.$pressure['value'].' hPa</td>
  138. </tr>
  139. </table>';
  140. echo '</td></tr></table>';
  141. }
  142.  
  143. ?>

http://djdandi.nazwa.pl/1/2015/choszcznomini.php
Brak ikonki oznacza że nie ma jej na serwerze ale to nie problem
W bazie danych zmieniłem tabele i dałem na datę DATATIME
Co dalej jak dodać do tego możliwość zapisania danych w bazie sql?

Ten post edytował brzanek 25.08.2014, 19:55:53
Go to the top of the page
+Quote Post
nospor
post 26.08.2014, 07:01:03
Post #9





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




Tym kodem pobierasz tylko po jednym rekordzie. A chyba ci chodzilo o pobranie wszystkich.


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 26.08.2014, 09:39:57
Post #10





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Tak dokładnie ale nie wiem jak to zrobić aby pobrał kolejne rekordy.
Go to the top of the page
+Quote Post
nospor
post 26.08.2014, 11:38:09
Post #11





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




http://pl1.php.net/manual/en/simplexml.examples-basic.php
Przyklad Example #4 Accessing non-unique elements in SimpleXML
Masz tam pokazane jak pobrac wszystkie CHARACTER. Analogicznie masz zrobic u siebie


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 26.08.2014, 14:50:50
Post #12





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


W jakim miejscu mam umieścić ten kod?
Go to the top of the page
+Quote Post
nospor
post 26.08.2014, 15:04:40
Post #13





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




Ten kod pobiera dane z xml, więc masz go umieścić tam, gdzie chcesz pobrać dane z XML.


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 27.08.2014, 07:09:40
Post #14





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Coś nie mogę sobie z tym poradzić.
Daję taki kod.
  1. foreach ($weatherdata->forecast->time as $time) {
  2. echo $time->time, ' played by ', $time->time, PHP_EOL;


Ale nadal pojawia się pierwszy rekord.
Go to the top of the page
+Quote Post
Pyton_000
post 27.08.2014, 07:16:48
Post #15





Grupa: Zarejestrowani
Postów: 7 821
Pomógł: 1375
Dołączył: 26.10.2005

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


  1. foreach ($weatherdata->forecast->tabular as $time) {
  2. echo $time->time, ' played by ', $time->time, PHP_EOL;


Ten post edytował Pyton_000 27.08.2014, 07:17:31
Go to the top of the page
+Quote Post
nospor
post 27.08.2014, 07:42:59
Post #16





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




Pyton ty tez źle napisales....

  1. foreach ($weatherdata->forecast->tabular->time as $time) {
  2. //i dopiero teraz lecisz po kazdym znaczniku <time> twojego XML
  3. }


Całość dobrania się do poszczegolnych danych:
  1. $weatherdata = simplexml_load_file('http://www.yr.no/place/Polen/Vest-Pommern/Choszczno/forecast.xml');
  2. foreach ($weatherdata->forecast->tabular->time as $time) {
  3. echo 'od: '.$time['from'].' do:'.$time['to'].' temperatura: '.$time->temperature['value'].' itd. <br />';
  4.  
  5. }


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 27.08.2014, 07:45:23
Post #17





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Dałem tak
  1. foreach ($weatherdata->forecast->tabular->time as $time) {
  2. //i dopiero teraz lecisz po kazdym znaczniku <time> twojego XML
  3. echo $time->symbol, ' played by ', $time->symbol, PHP_EOL;
  4. echo $time->temperature, ' played by ', $time->temperature, PHP_EOL;
  5. echo $time->windDirection, ' played by ', $time->windDirection, PHP_EOL;
  6. echo $time->windSpeed, ' played by ', $time->windSpeed, PHP_EOL;
  7. echo $time->pressure, ' played by ', $time->pressure, PHP_EOL;


Ale nadal wyświetla się tylko pierwszy rekord.
Dałem to zamiast tego.
  1. foreach ($weatherdata->forecast as $time) {

Go to the top of the page
+Quote Post
nospor
post 27.08.2014, 07:46:26
Post #18





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




Spojrz jeszcze raz na moj poprzedni post.... Masz tam podany cały poprawny kod...


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 27.08.2014, 08:11:14
Post #19





Grupa: Zarejestrowani
Postów: 363
Pomógł: 0
Dołączył: 8.11.2012

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


Super wielkie dzięki teraz jeszcze pozostaje kwestia jak te dane zapisywać w bazie danych z możliwością nadpisywania i dodawania nowych rekordów.
Go to the top of the page
+Quote Post
nospor
post 27.08.2014, 08:13:53
Post #20





Grupa: Moderatorzy
Postów: 34 809
Pomógł: 5793
Dołączył: 27.12.2004




No dobra, ale czego nie wiesz? Jak wlozyc dane do bazy? Z innego tematu wiem, że wpisywales już coś do bazy, wiec z czym problem?


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 22.11.2019 - 19:22