Skocz do zawartości


Zdjęcie

[html/xhtml][PHP][cURL] Aktualna pogoda za pomocą cURL


  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 Ziele

Ziele

    Biblioteka Zielińskiego

  • 1 812 postów

Napisano 23 05 2008 - 11:56

No więc zacznijmy od poczatku.. Zajmiemy się biblioteką Libcurl. Pozwala ona na operacje za pomocą protokołów m. in. Telnet, HTTP, HTTPS, FTP, FTPS, SFTP

Przypuśćmy, że na naszej stronce (np. stronie miasta) chcemy mieć aktualną pogodę. Napiszemy sobie w takim razie prosty skrypt, który pobierać będzie aktualne wyniki.

Przejdźmy zatem do kodu...
Rozpoczynamy sesję cURL'a i konfigurujemy ją na nasze potrzeby oraz za pomocą parametru CURLOPT_RETURNTRANSFER ustawionego na 1 dane przesyłane od serwera wyświetlam za pomocą ciągu znaków:
<?php
 function pogoda($miasto) {
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, "http://pogodnie.pl/show/city/".$miasto);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 }
 ?>
Dodatkowo, aby nie zabić naszej stronki przez jeden prosty skrypt, ustawimy timeout dla połączenia curla na 15 sekund. Na koniec wywołujemy curla, wynik sesji zapisujemy w jakiejś zmiennej (w moim przypadku ta zmienna nazywa się $wynik) i zamykamy połączenie.

[/font]
 
 <?php
 function pogoda($miasto) {
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, "http://pogodnie.pl/show/city/".$miasto);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_TIMEOUT, 15);
 $wynik = curl_exec($curl);
 curl_close($curl);
 }
 ?>[font="Arial"]


Kolejnym zadaniem będzie analiza kodu strony pogodnie.pl (tak jak na poczatku napisałem kod
tej storny jest przejrzysty i łatwo odszukamy to czego potrzebujemy czyli aktualną pogodę.
<div class="livebox_box">
 <div class="livebox_top"><div></div></div>
 <div class="livebox_content">
 <h1>Grójec</h1>
 (Polska)<br/>
 <h2>TERAZ</h2>
 <img src="/images/slonce.png" width='100' height='125' border='0'><br />
 <span class="lighter">Pochmurnie</s9°C</span><br />
 Wiatr: <span class="stronger">23 km/h</span>
 </div>
 <div class="livebox_bottom"><div></div></div>
 </div>
Teraz musimy wygrzebać z tego kodu to co nam naprawdę potrzebne:
<?php
 (?)
 $wynik = explode('<div class="livebox_top"><div></div></div>',$wynik);
 $wynik = $wynik[1];
 $wynik = explode('<div class="livebox_bottom"><div></div></div>', $wynik);
 $wynik = $wynik[0];
 (?)
 ?>
Funkcja explode zwraca nasz łańcuch w postaci tablicy.
Rozbijamy łańcuch w miejscu, gdzie znajduje się
<div class="livebox_top"><div></div></div>
Teraz do zmiennej $wynik przypisujemy kolejny element tablicy $wynik
i tak jak poprzednio na otrzymanym łańcuchu wywołujemy explode.
Tym razem do zmiennej $wynik zapisujemy łańcuch przed rozbiciem:
<div class="livebox_content">
	 <h1>Grójec</h1>
	 (Polska)<br/>
 <h2>TERAZ</h2>
	 <img src="/images/slonce.png" width='100' height='125' border='0'><br />
		 <span class="lighter">Pochmurnie</span><br />
	 Temperatura: <span class="stronger">9°C</span><br />
 Wiatr: <span class="stronger">23 km/h</span></div>
Następnie zmieniamy klasę boxa, w którym znajduje się pogoda i usuwamy zbędne fragmenty kodu. Wcześniej jednak usuwamy nazwę kraju (ponieważ nasza pogoda jest regionalna) i informacje o rozmiarach obrazka i zamkniemy tag. W końcu chcemy otrzymać poprawny kod xHTML 1.0 Strict. ;] (rzadko się to zdarza w dzisiejszych czasach).

<?php
 function pogoda($miasto) {
 //inicjacja curla
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, "http://pogodnie.pl/show/city/".$miasto);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_TIMEOUT, 25);
 $wynik = curl_exec($curl);
 curl_close($curl);
 //Wyciąganie ze źródła potrzebnego kodu za pomocą fukcji explode();
 $wynik = explode('<div class="livebox_top"><div></div></div>',$wynik);
 $wynik = $wynik[1];
 $wynik = explode('<div class="livebox_bottom"><div></div></div>', $wynik);
 $wynik = $wynik[0];
 //Rozpoczynanie formatowania
 $wynik = preg_replace('/<\/h1>(.*?)<h2>/si', '</h1><h2>', $wynik);
 $wynik = preg_replace("/width='(.*?)' height='(.*?)' border='(.*?)'/si", 'alt="" /', $wynik);
 $pattern[0] = 'livebox_content';
 $pattern[1] = '<h2>TERAZ</h2>';
 $replacement[0] = 'weather_box';
 $replacement[1] = '';
 $wynik = str_replace($pattern, $replacement, $wynik);
 //Zwracanie fragmentu po formatowaniu
 return($wynik);
 }
 echo pogoda('id');
 ?>
A w (x)html 1.0 Strick, który przechodzi spokojnie przez walidator to będzie:
<div class="weather_box">
	 <h1>Grójec</h1>
		 <img src="/images/slonce.png" alt="" /><br />
	 <span class="lighter">Pochmurnie</span><br />
	 Temperatura: <span class="stronger">9°C</span><br />
 Wiatr: <span class="stronger">23 km/h</span>
 </div>

Teraz musimy przygotować jeszcze potrzebne nam grafiki o nazwach:
-chmury.png
-deszcz-ze-sniegiem.png
-deszcz.png
-mzawka.png
-slonce-z-chmura.png
-slonce.png
-snieg.png


Uwaga! Nie zmieniajcie nazw tych plików, ponieważ z takich korzysta serwis pogodnie.pl xD

Teraz musimy jeszcze na stronie (tam gdzie chcemy mieć naszą pogodę) dodać:
<?php echo pogoda('id'); ?>
Linijkę wyżej musieliśmy, a teraz możemy.. cieszyć się z wykonanej przez nas roboty (oczywiście może się nie podobać ;] )

Jestem równiez pewien, że serwis pogodne byłby zadowolony gdybyśmy dodali gdzieś:
<a href="http://pogodnie.pl" title="Pogodnie.pl">Pogodnie.pl</a>
Lub chociaż
<!-- <a href="http://pogodnie.pl" title="Pogodnie.pl">Pogodnie.pl</a> -->

Pamiętajcie... Waszym ograniczeniem jest tylko i wyłącznie wasza wyobraźnia xD

  • 0

Zobacz więcej tematów z tagiem: Livebox



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych