Executando verificação de segurança...
5

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:

  1. Lista de conteúdos da página inicial

  2. Lista de conteúdos de um determinado usuário

  3. Obter conteúdo e dados de uma publicação

  4. 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

'img'

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

Carregando publicação patrocinada...
2
1
1
1
0