JustPaste.it

Pobieranie aktualnej pogody w cURL

Biblioteka Libcurl, której autorem jest Daniel Stenberg, zaimplementowana w wielu językach programowania (m. in. PHP). Umożliwia ona wysyłanie do serwera i pobieranie z niego danych za pomocą protokołów m. in. Telnet, HTTP, HTTPS, FTP, FTPS, SFTP

Biblioteka Libcurl, której autorem jest Daniel Stenberg, zaimplementowana w wielu językach programowania (m. in. PHP). Umożliwia ona wysyłanie do serwera i pobieranie z niego danych za pomocą protokołów m. in. Telnet, HTTP, HTTPS, FTP, FTPS, SFTP

 

W tym artykule zajmiemy się tym pierwszym czyli wysyłaniem danych do serwera.

 

Przedstawię wam teraz sytuację, w której się znajdujem... Jesteśmy administratorami prostej strony internetowej, na której pojawia się aktualna, lokalna pogoda. Oczywiście nikt nie będzie wchodził na stronę za każdym razem kiedy zmieni się temperatura itp. Przygotujemy więc prosty ‘widget’ do pobierania i wyświetlania prognozy.

Informację do naszej strony będziemy pobierać ze strony http://pogodnie.pl , ponieważ kod na niej jest dość przejrzysty co przyda nam się w póxniejszym etapie tego tutoriala.

Teraz drobna wskazówka... Bez znajomości podstaw języka PHP, operacji na ciągach znaków, wyrażeń regularnych i conajmniej dobrej znajomości języka HTML ten tutorial będzie dla was dość trudny jeśli nie, niewykonalny. Oczywiście nawet jesli potraficie to co napisałem powyżej na waszej drodze stanie jeszcze jedna przeszkoda serwer z obsługą PHP i zainstalowanym curl’em.

Jeśli nie masz pojęcia czy na twoim serwerzezainstalowany jest cURL możesz sprawdzić na stronie twojego hostingu lub posłuzyć się funkcją phpinfo();

Przejdźmy zatem do kodu...
Musimy zainicjalizować sesję cURL'a.. Ja trochę przeskoczę do przodu i oprócz inicjalizowania sesji skonfiguruję cURLa (podam adres do strony, z którą będziemy się łączyć) 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.

<?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);
}
?>

 

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. thumbsup.gif (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 thumbsup.gif

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ć tongue.gif)

Jestem równiez pewien, że serwis pogodne byłby zadowolony gdybyśmy dodali gdzieś:

 

<a href="https://justpaste.it/redirect/pobieranie-aktualnej-pogody-w-cu/http%3A%2F%2Fpogodnie.pl" title="Pogodnie.pl">Pogodnie.pl</a>

Lub chociaż

<!-- <a href="https://justpaste.it/redirect/pobieranie-aktualnej-pogody-w-cu/http%3A%2F%2Fpogodnie.pl" title="Pogodnie.pl">Pogodnie.pl</a> -->

 

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

 

Standardowa reklama: www.tweaks.pl