Jak korzystać z API newsblog.pl z klientami PHP

W tym przewodniku omówimy różne klienty PHP, których można używać do łączenia się z interfejsem API newsblog.pl.

W szczególności omówimy użycie API newsblog.pl z funkcją file_get_contents, Guzzle, HTTPful i klientem HTTPS Symfony.

Co to jest API newsblog.pl?

newsblog.pl udostępnia zestaw bezpłatnych narzędzi, za pomocą których możesz monitorować wydajność swojej witryny. Narzędzia te obejmują analizator uszkodzonych linków, czas ładowania i sprawdzanie DNS. Dostęp do tych narzędzi można uzyskać online za pośrednictwem interfejsu internetowego lub interfejsu API.

Interfejs API jest oparty na protokole HTTP i można uzyskać do niego dostęp z dowolnego języka programowania z biblioteką klienta HTTP. Interfejs API ma hojny bezpłatny poziom, z którego możesz zacząć korzystać bez konieczności podawania informacji o płatności.

Co będziemy budować

Napiszemy skrypt wykonywalny z wiersza poleceń, który obliczy, ile czasu zajmuje załadowanie strony Google i wydrukowanie jej na terminalu. Zaimplementujemy ten prosty program przy użyciu różnych klientów PHP HTTP, aby zademonstrować, jak wygląda korzystanie z API.

W szczególności użyjemy wbudowanych funkcji – file_get_contents() i php_curl oraz rozszerzenia Guzzle PHP. Jakkolwiek proste mogą się wydawać te przykłady, pokazują one podstawowe koncepcje korzystania z API newsblog.pl.

Warunki wstępne

Aby kontynuować, musisz wcześniej znać PHP i zainstalować je na swoim komputerze. Dodatkowo do zarządzania rozszerzeniami potrzebny będzie Composer.

Na koniec będziesz potrzebować edytora tekstu do pisania kodu. W moim przypadku będę używał Visual Studio Code, popularnego edytora tekstu typu open source firmy Microsoft. Możesz go pobrać z witryny Visual Studio Code.

Przegląd API newsblog.pl

API wdzzwdz ma różne punkty końcowe w zależności od tego, co chcesz zrobić. Pełną listę punktów końcowych i związaną z nimi dokumentację można znaleźć na stronie dokumentacji.

Zakładanie konta newsblog.pl

Aby rozpocząć korzystanie z API, musisz utworzyć konto, przechodząc do strony docelowej API i klikając przycisk rejestracji. Po zakończeniu rejestracji zostaniesz przeniesiony do pulpitu nawigacyjnego, gdzie zobaczysz swój klucz API. Deska rozdzielcza powinna wyglądać jak na poniższym obrazku. Mój klucz API został zaciemniony ze względów bezpieczeństwa.

W każdym żądaniu API musisz podać ten klucz jako nagłówek żądania. Wkrótce zobaczysz, jak można to zrobić.

Po założeniu konta newsblog.pl i zainstalowaniu PHP możemy rozpocząć tworzenie projektu.

Tworzenie folderu projektu

Najpierw utwórz folder, w którym będziemy przechowywać pliki projektu. Następnie utwórz następujące pliki

  • .env
  • with_curl.php
  • with_file_get_contents.php
  • with_guzzle.php

Następnie uruchom następujące polecenie, aby zainstalować rozszerzenie vlucas/phpdotenv i guzzlehttp/guzzle

composer require vlucas/phpdotenv guzzlehttp/guzzle

W tym momencie folder twojego projektu powinien wyglądać tak:

Teraz otwórz plik .env i dodaj następujący wiersz kodu, zastępując rzeczywistym kluczem API z pulpitu nawigacyjnego newsblog.pl:

API_KEY=<your-api-key>

Korzystanie z file_get_contents()

Pierwszą metodą, której możemy użyć do tworzenia żądań HTTP, jest wywołanie funkcji file_get_contents() wbudowanej w PHP. Sygnatura funkcji funkcji file_get_contents() wygląda następująco:

file_get_contents(path, include_path, context)

Chociaż metoda ta jest często używana do odczytywania zawartości pliku w pamięci lokalnej, możemy jej użyć do odczytania zasobu sieciowego, takiego jak dane zwracane przez punkt końcowy API.

Teraz, aby rozpocząć, otwórz with_file_get_contents.php i dodaj standardowy kod PHP.

<?php
   // all the code to be inserted here
?>

Następnie możemy zacząć od wczytywania rozszerzeń. Dodaj następujący wiersz kodu do swojego pliku

require_once('vendor/autoload.php');

Następnie możemy załadować nasze zmienne środowiskowe, w tym klucz API

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Następnie możemy zdefiniować ładunek. Będą to dane, które wyślemy w ramach treści żądania

$payload = json_encode([
    "url" => "https://www.google.com", 
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Stworzyliśmy zmienną ładunku i przypisaliśmy ją do ciągu JSON, który zawiera właściwości url, proxyCountry i followRedirect.

Właściwość url określa stronę, której czas ładowania chcemy sprawdzić.

ProxyCountry to lokalizacja serwera, którego chcemy użyć do wysłania żądania. W tym przypadku korzystamy z serwera USA, ale możesz wybierać spośród Indii, Chin, Wielkiej Brytanii i Francji. Możesz przeczytać dokumentację, aby uzyskać więcej informacji.

Następnie followRedirect określa, czy serwer proxy powinien podążać za jakimikolwiek przekierowaniami i mierzyć czas odpowiedzi końcowej odpowiedzi lub pierwszego przekierowania.

Następnie możemy stworzyć opcje, które skonfigurują nasze żądanie, dodając ten kod:

$options = [
    "http" => [
        "method" => "POST",
        "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
        "content" => $payload
    ] 
];

W ten sposób utworzyliśmy obiekt options, który określa, że ​​nasza metoda HTTP to POST, i mamy nagłówek, który określa dwie właściwości, typ zawartości jako JSON i x-api-key jako klucz API określony w .env i został załadowany jako zmienna środowiskowa.

Następnie możemy złożyć żądanie, tworząc strumień, w którym zostaną zapisane nasze opcje:

$context = stream_context_create($options);

Następnie wywołujemy metodę file_get_contents(), aby wykonać żądanie i zapisać odpowiedź jako zmienną.

$response = file_get_contents("https://api.newsblog.pl.com/loadtime", false, $context);

Zgłosiliśmy prośbę do https://api.newsblog.pl.com/loadtime. Fałsz mówi PHP, aby nie używał ścieżki. I przekazujemy stworzony przez nas kontekst do metody.

Aby wyświetlić odpowiedź, użyjemy danych wyjściowych w następujący sposób.

echo "Loadtime: " . json_decode($response)->data->total . "n";

Na końcu twój plik powinien wyglądać tak:

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $payload = json_encode([
        "url" => "https://www.google.com", 
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $options = [
        "http" => [
            "method" => "POST",
            "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
            "content" => $payload
        ] 
    ];

    $context = stream_context_create($options);

    $response = file_get_contents("https://api.newsblog.pl.com/loadtime", false, $context);

    echo "Loadtime: " . json_decode($response)->data->total . "n";
?>

Po uruchomieniu pliku za pomocą następującego polecenia:

php with_file_get_contents.php

Otrzymasz następujące dane wyjściowe

Loadtime: 81

Korzystanie z cURL

cURL to narzędzie wiersza poleceń, które służy do wysyłania żądań URL po stronie klienta. W PHP można go używać za pomocą narzędzia php-curl. Aby zacząć z niego korzystać, otwórz plik with_curl.php i napisz szablon PHP

<?php
    // all new code will be written here
?>

Następnie zaimportujmy rozszerzenia i załadujmy zmienną środowiskową API_KEY zdefiniowaną w pliku .env

require_once('vendor/autoload.php');

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Następnie utworzymy zmienną do przechowywania nagłówków naszego obiektu jako tablicę, w której każdy pojedynczy element tablicy jest określonym nagłówkiem.

$header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

Zdefiniowaliśmy dwa nagłówki, jeden dla typu zawartości i jeden dla klucza API.

Następnie możemy zdefiniować treść żądania.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Następnie możemy utworzyć sesję curl za pomocą funkcji curl_init(). Możemy przekazać adres URL, do którego chcemy skierować żądanie, jako argument do wywołania funkcji.

$ch = curl_init("https://api.newsblog.pl.com/loadtime");

Teraz możemy wszystko złożyć razem, definiując nagłówek i treść jako opcje sesji. W tym celu użyjemy funkcji curl_setopt_array()

curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $body
]);

Aby wykonać żądanie, wywołamy funkcję curl_exec()

$response = curl_exec($ch);

Przechowaliśmy odpowiedź w zmiennej $response, więc możemy zamknąć sesję, aby zwolnić zasoby systemowe używane przez sesję.

curl_close($ch);

Na koniec możemy wydrukować odpowiedź na ekranie za pomocą var_dump.

var_dump($response);

W końcu twój plik skryptu powinien wyglądać tak

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $ch = curl_init("https://api.newsblog.pl.com/loadtime");

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_POSTFIELDS => $body
    ]);

    $response = curl_exec($ch);

    curl_close($ch);

    var_dump($response);
?>

Kiedy uruchamiamy skrypt za pomocą php with_curl.php, powinieneś otrzymać następujące wyjście:

{"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

Żądanie zostało zakończone pomyślnie, a interfejs API odpowiedział danymi JSON0. Możesz wykorzystać te dane, jak chcesz.

Z Guzzlem

W ostatniej części tego samouczka użyjemy Guzzle do napisania skryptu. Jak zawsze zaczynamy od wstawienia szablonu PHP do pliku with_guzzle.php

<?php
    // all the code will go here
?>

Następnie możemy zaimportować rozszerzenia oraz klienta Guzzle i obiekty żądania oraz załadować zmienne środowiskowe.

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Następnie możemy załadować zmienne środowiskowe.

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Następnie możemy utworzyć instancję klienta HTTP Guzzle

$client = new GuzzleHttpClient();

Następnie możemy przystąpić do tworzenia nagłówków dla naszego żądania

$headers = [
    'x-api-key' => $_ENV['API_KEY'],
    'Content-Type' => 'application/json'
];

Następnie możemy zdefiniować treść żądania

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Następnie możemy wykonać żądanie, tworząc instancję klasy Request i przekazując adres URL punktu końcowego API, nagłówek i treść.

$request = new Request('POST', 'https://api.newsblog.pl.com/loadtime', $headers, $body);

Następnie możemy wysłać żądanie, dodając następujący wiersz kodu:

$response = $client->sendAsync($request)->wait();

Po wysłaniu żądania możemy otrzymać jego treść w następujący sposób

$response_body = $response->getBody();

Na koniec możemy rozszyfrować odpowiedź JSON i wydrukować czas ładowania

echo "Loadtime: " . json_decode($response_body)->data->total . "n";

Ostatecznie więc plik powinien wyglądać tak:

<?php
    require_once('vendor/autoload.php');

    use GuzzleHttpClient;
    use GuzzleHttpPsr7Request;

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();
    

    $client = new GuzzleHttpClient();

    $headers = [
        'x-api-key' => $_ENV['API_KEY'],
        'Content-Type' => 'application/json'
    ];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $request = new Request('POST', 'https://api.newsblog.pl.com/loadtime', $headers, $body);

    $response = $client->sendAsync($request)->wait();

    $response_body = $response->getBody();

    echo "Loadtime: " . json_decode($response_body)->data->total . "n";
?>

A kiedy wykonasz skrypt za pomocą następującego polecenia:

$php with_guzzle.php

I zobaczysz odpowiedź:

Loadtime: 130

Wniosek

W tym artykule omówiliśmy różnych klientów, których możesz chcieć użyć podczas tworzenia projektu PHP, który będzie wymagał interfejsu API newsblog.pl.

Podczas gdy skrypty w tym projekcie używają wiersza poleceń jako podstawowej formy danych wyjściowych, projekty w świecie rzeczywistym mogą przedstawiać odpowiedź na stronie internetowej lub zapisywać ją w pliku. Przykładowe skrypty w tym artykule były proste, ale demonstrują podstawowe koncepcje korzystania z interfejsu API newsblog.pl. Aby korzystać z różnych interfejsów API, możesz zmienić punkt końcowy i przekazać różne opcje w treści żądania.

Możesz być również zainteresowany, jak korzystać z newsblog.pl DNS Lookup API w JavaScript.