Consumindo a API do TabNews de forma incrivelmente simples e rápida em uma aplicação em PHP 🐘🚀
Olá pessoal, sou eu novamente, o Angelo Abrita, trazendo mais um short tutorial para vocês.
Estava desenvolvendo um novo portfólio para mim e tive a ideia de incluir um blog nele. No entanto, enfrentei um problema: tempo! Como trabalho em dois empregos e, além disso, ainda estudo, o tempo para escrever conteúdo em um blog é algo que não possuo.
Minha alternativa para essa questão seria vincular algum meio de notícias sobre tecnologia que me permitisse implementar no meu site via API, sem a necessidade de realmente ter um blog. E, para minha conclusão, o melhor meio de notícias/tutoriais aberto que conheço é o TabNews. O TabNews fornece uma API que será usada no meu blog e também usada neste tutorial.
Enfim, desta vez irei mostrar para vocês como integrar a API do TabNews em uma aplicação PHP do Laravel, mas que pode ser usada em outras aplicações em PHP também, de uma forma tão estupidamente simples (KISS 😘) e com poucas linhas de código que nem o juniorBot (chatGPT) teria imaginado.
Requisitos
É fundamental, mas não é necessário, ter conhecimento prévio das seguintes tecnologias de programação:
Como referência, foi usada a documentação escrita pelo GabrielAlone, que de forma simples listou todos os parâmetros usados neste tutorial.
Criando o App e instalando dependências
Com o Composer e o PHP instalados, siga o seguinte passo a passo (caso não tenha instalado, clique nos links para instalar):
-
Crie uma nova pasta com o nome do app.
-
Abra o terminal dentro da pasta criada e crie um novo app Laravel usando o comando:
composer create laravel/laravel nome-do-app
Substitua o nome-do-app pelo nome que desejar para o seu aplicativo.
Dependências
Antes de começarmos a codificar de verdade, precisaremos instalar as dependências do Guzzle. O Guzzle é um cliente PHP HTTP que facilita o envio de solicitações HTTP e simplifica a integração com serviços da web.
Para fazer isso, basta rodar o comando:
composer require guzzlehttp/guzzle
Hora de codar
Chegou a parte divertida do tutorial. A hora de codificar, onde transformamos todo o ódio e cafeína em código.
Para começar, dentro do diretório "App", vamos criar um novo diretório chamado Services. E dentro desse diretório, vamos criar nosso arquivo TabNewsClient.php
.
Dentro do arquivo TabNewsClient.php
, iremos construir a estrutura de nossa classe.
Para começar, definiremos o encapsulamento da classe com namespace.
<?php
namespace App\Services;
class TabNewsServices{
const $baseUrl ='https://www.tabnews.com.br/api/v1';
// Seu código maravilhoso estará aqui em breve >;-D
}
Uau! Nós criamos uma classe, que maneiro! E agora? Agora é a hora dos métodos.
Para este tutorial, definimos somente os principais métodos GET que retornam JSON da documentação como descrito por GabrielAlone que são:
-
Lista de conteúdos da página inicial
-
Lista de conteúdos de um determinado usuário
-
Obter conteúdo e dados de uma publicação
-
Obter comentários de uma publicação
Criando os métodos
Vamos começar pelo método que lista conteúdos da página inicial. Chamaremos esse método de getContent
e passaremos como parâmetros os seguintes atributos $page
, $porPage
, $relevance
:
//Lista de conteúdos da página inicial
function getContent($page,$porPage,$relevance ){
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'page' => $page,
'porpage' => $porPage,
'relevance' => $relevance,
])->get('{+endpoint}/contents?page={page}&per_page={porpage}&strategy={relevance}');
}
OK! Agora iremos criar o método que retorna a lista de conteúdos de um determinado usuário:
//Lista de conteúdos de um determinado usuário
function getByUser($user,$page, $porPage,$relevance ) {
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'user' => $user,
'page'=> $page,
'porpage' => $porPage,
'relevance' => $relevance,
])->get('{+endpoint}/contents/{user}?page={page}&per_page={porpage}&strategy={relevance}');
}
Cara, que massa! Muito bem, agora é a hora de criar nosso método que retorna o conteúdo e dados de uma publicação:
// Obtenha conteúdo e dados de uma publicação
function getUniqueTab($user,$slug) {
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'user' => $user,
'slug' => $slug,
])->get('{+endpoint}/contents/{user}/{slug}');
}
E por fim, criaremos nosso método que retorna os comentários de uma publicação:
// Obtenha comentários de uma publicação
function getComments($user,$slug) {
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'user' => $user,
'slug' => $slug,
])->get('{+endpoint}/contents/{user}/{slug}/children');
}
Ao final, sua classe ficará parecida com a debaixo:
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
class TabNewsClient{
var $baseUrl = "https://www.tabnews.com.br/api/v1";
//Lista de conteúdos da página inicial
function getContent($page,$porPage,$relevance ){
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'page' => $page,
'porpage' => $porPage,
'relevance' => $relevance,
])->get('{+endpoint}/contents?page={page}&per_page={porpage}&strategy={relevance}');
}
//Lista de conteúdos de um determinado usuário
function getByUser($user,$page, $porPage,$relevance ) {
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'user' => $user,
'page'=> $page,
'porpage' => $porPage,
'relevance' => $relevance,
])->get('{+endpoint}/contents/{user}?page={page}&per_page={porpage}&strategy={relevance}');
}
// Obtenha conteúdo e dados de uma publicação
function getUniqueTab($user,$slug) {
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'user' => $user,
'slug' => $slug,
])->get('{+endpoint}/contents/{user}/{slug}');
}
// Obtenha comentários de uma publicação
function getComments($user,$slug) {
return Http::withUrlParameters([
'endpoint' => $this->baseUrl,
'user' => $user,
'slug' => $slug,
])->get('{+endpoint}/contents/{user}/{slug}/children');
}
}
Viu só? Como é simples integrar a API do TabNews em um app em PHP. Você pode usar essa abordagem com quaisquer APIs.
Tá, mas e agora? Onde uso isso no meu APP?
É simples! Você pode criar uma instância da classe onde quiser usar. Para exemplificar, seguindo o padrão MVC, criaremos uma instância em um controller
. Para criar um controller no Laravel, basta executar o seguinte comando no terminal:
php artisan make:controller NomeDoController
Substituindo NomeDoController pelo nome do controller que desejar.
No meu caso, para exemplificar, usarei o nome do controller de IndexController.
Você viu a mágica do CLI artisan do Laravel? É incrível, né! Você digita um comando e ele cria toda a estrutura da classe que iremos usar.
Dica: caso queira criar um
controller
com uma estrutura CRUD, basta adicionar --resource após NomeDoController (ex:php artisan make:controller NomeDoController --resource
)
Criaremos agora um método público chamado index
dentro da classe IndexController
. Dentro desse método, instanciaremos a classe TabNewsServices
, chamando o método getContent
dele e devolvendo para nossa view que chamaremos de viewtab um objeto JSON. Seu código ficará parecido com o código abaixo:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\TabNewsClient;
class IndexController extends Controller
{
function index(){
$client = new TabNewsClient();
$response = $client->getContent(1, 10, 'relevant');
dd($response->json());
return view('welcome');
}
}
Hora de "VER" as coisas
Mas antes disso, precisamos definir a nossa rota.
Na estrutura do projeto, abra o arquivo web.php
que se encontra em resource>route>web.php
.
Iremos apagar a rota padrão e escrever a nova rota do tipo GET
usando as boas práticas do Laravel:
Route::get('/', [IndexController::class, 'index'])->name('indexController.index')
Por fim, seu arquivo web.php ficará parecido com o da imagem abaixo.
<?php
use App\Http\Controllers\IndexController;
use Illuminate\Support\Facades\Route;
Route::get('/', [IndexController::class, 'index'])->name('index');
Rufam os tambores, a hora de rodar chegou!
Para rodar a aplicação Laravel em localhost, você precisa somente executar um simples comando no terminal:
php artisan serve
Esse comando faz com que nossa aplicação rode na porta 8000. Agora é só abrir o navegador e acessar o http://localhost:8000
.
Se tudo deu certo, você verá a seguinte imagem
Fim!
Se você chegou até aqui e não entendeu nada, não se desanime! O conhecimento é algo que se constrói repetidamente.
Ficou com dúvida sobre algo? Conhece outras APIs de notícias de tecnologia? Quer bater um papo? Deixo comentários abaixo.
Autor:
Sou Angelo Abrita, apenas um amante das artes, ciências e tecnologias que gosta de transformar ódio e café em código. Siga minhas redes sociais que sigo de volta :D Tamo junto!
LinkedIn: https://www.linkedin.com/in/angelo-gabriel-tavares-abrita
GitHub: https://github.com/Angeloabrita
Veja minhas últimas tabs:
Referências:
https://laravel-news.com/laravel-route-organization-tips
https://www.tabnews.com.br/GabrielSozinho/documentacao-da-api-do-tabnews
Fonte: https://laravel.com/