Extração de Metadados: Guia Completo com API etechpt.com

A extração de dados da web, frequentemente referida como “web scraping”, consiste em coletar informações de um site, analisando o código HTML gerado quando uma página é carregada. Este processo permite obter dados estruturados para diversos fins.

O “metascraping”, por sua vez, foca na extração de metadados de páginas web, especificamente aqueles contidos nas meta tags do HTML.

Metadados são informações que descrevem a página, mas não seu conteúdo principal. Exemplos incluem o nome do autor, título e descrição, fornecendo contexto sobre o propósito da página.

A coleta de metadados facilita a compreensão do conteúdo de uma página tanto para usuários quanto para mecanismos de busca, permitindo obter informações relevantes de maneira eficiente.

Existem diferentes abordagens para coletar metadados de páginas web. Isso pode ser feito manualmente, utilizando bibliotecas de programação ou através de APIs, como a API de Metascraping da etechpt.com.

Diversas Abordagens para Coleta de Metadados

A extração manual de metadados envolve inspecionar o código fonte HTML de uma página no navegador, por meio do “Inspetor de Elementos” ou “DevTools”. Apesar de possível, esse método é tedioso e pouco prático quando lidamos com múltiplas páginas. Por isso, a automatização é desejável.

Uma primeira abordagem automatizada é desenvolver um script do zero. Isso envolve o envio de requisições HTTP para o site alvo e, posteriormente, a análise do HTML retornado, utilizando expressões regulares ou padrões para extrair dados das meta tags. Contudo, essa abordagem pode resultar na reinvenção da roda, dada a existência de soluções já prontas.

Outra opção é utilizar bibliotecas de programação que facilitam a análise do HTML. Isso abstrai a complexidade da implementação, mas pode ser restritivo se a linguagem escolhida não possuir uma biblioteca adequada ou se o ambiente de execução não a suportar.

A terceira abordagem, e muitas vezes a mais eficiente, é o uso de uma API, como a oferecida pela etechpt.com. Uma API fornece uma interface uniforme, independente da linguagem de programação, e pode ser utilizada em qualquer contexto que suporte requisições HTTP.

Este artigo demonstrará como usar a API Metascraping da etechpt.com utilizando cURL, PHP e JavaScript (NodeJS).

As vantagens de usar uma API como a etechpt.com, em comparação com outras abordagens, incluem:

  • Independência de linguagem e ambiente de execução.
  • Economia de tempo e esforço por não reinventar a roda.
  • Capacidade de extrair metadados de múltiplas páginas de forma eficiente.
  • Facilidade de uso.
  • Disponibilidade de uso gratuito.

Iniciando com a API da etechpt.com

Para utilizar a API da etechpt.com, é necessário obter uma chave de API. Para isso, acesse o site da etechpt.com e crie uma conta gratuita. Após criar a conta, faça login no painel e localize sua chave de API.

O endpoint da API está disponível em https://api.etechpt.com.com/metascraping. Ao fazer uma requisição, você deve incluir sua chave de API no cabeçalho da requisição, usando o nome `x-api-key` e sua chave como valor.

Além disso, é preciso fornecer parâmetros adicionais no corpo da requisição, como `url`, `dispositivo` e `proxyCountry`.

  • `url`: Especifica o URL da página web cujos metadados você deseja extrair.
  • `dispositivo`: Indica o tipo de dispositivo que simulará o acesso à página, sendo `móvel` ou `desktop`.
  • `proxyCountry`: Define o país do qual a requisição será feita antes de extrair os metadados. Esta é uma funcionalidade premium, disponível apenas nos planos pagos da etechpt.com.

Como os parâmetros são passados no corpo da requisição, esta deve ser do tipo POST, já que requisições GET não suportam o envio de dados no corpo.

A primeira demonstração utilizará o utilitário `cURL` da linha de comando para interagir com a API. Primeiro, é preciso ter o `cURL` instalado.

Usarei o terminal Bash, que é o padrão em macOS e Linux. No Windows, você pode precisar instalar o Git Bash.

Após a instalação, o comando `cURL` será utilizado para efetuar a requisição. Opções são passadas ao comando para especificar o método, o endpoint, o corpo e os cabeçalhos da requisição.

curl -X POST 
https://api.etechpt.com.com/metascraping  
-d '{ "url": "https://tesla.com" }' 
-H 'Content-Type: application/json' 
-H 'x-api-key: <API_KEY>'

Note que a barra invertida após as primeiras três linhas permite dividir o comando em múltiplas linhas para melhor legibilidade.

Este comando define o método HTTP como POST e o endpoint da API de metascraping da etechpt.com.

O corpo da requisição é enviado como um objeto JSON com a propriedade `url` definida como `https://tesla.com`. Os cabeçalhos especificam o tipo de conteúdo como JSON e fornecem a chave da API.

Ao executar este comando, obtemos a seguinte saída:

{"timestamp":1669328564856,"apiStatus":"success","apiCode":200,"meta":{"url":"https://tesla.com","device":"desktop","test":{"id":"1fh2c30i05vmvxb99pdh6t6hze2x72jv"}},"data":{"author":null,"date":null,"description":"Tesla is accelerating the world’s transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses.","image":"https://tesla-cdn.thron.com/delivery/public/image/tesla/6139697c-9d6a-4579-837e-a9fc5df4a773/bvlatuR/std/1200x628/Model-3-Homepage-Social-LHD","logo":"https://tesla.com/themes/custom/tesla_frontend/assets/favicons/favicon-196x196.png","publisher":"Tesla","title":"Electric Cars, Solar & Clean Energy | Tesla","url":"https://www.tesla.com/","lang":"en"}}

Essa é a resposta esperada da API.

A seguir, criaremos um script NodeJS para interagir com a API. Isso requer o NodeJS e um gerenciador de pacotes como o NPM. Usarei o terminal Bash para executar os comandos.

Para usar a API em JavaScript, comece criando uma pasta para o projeto e abrindo-a em um terminal:

mkdir metascraping-js && cd metascraping-js

Em seguida, crie o arquivo onde escreveremos o script:

touch index.js

Agora, inicializamos o projeto como um projeto Node:

npm init -y

Para usar a sintaxe ESModule no arquivo, adicione a linha `”type”: “module”` à raiz do arquivo `package.json`, como abaixo:

{
  "name": "metascraping",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
}

Depois, instalaremos o pacote `node-fetch`, que fornece uma função `fetch` similar à dos navegadores, facilitando requisições HTTP no NodeJS:

npm install node-fetch

Com o pacote instalado, abra o arquivo `index.js` em um editor de texto. Usarei o `nano` para isso.

nano index.js

No arquivo, importe a função `fetch`, exportação padrão do `node-fetch`:

import fetch from 'node-fetch'

Defina o corpo da requisição como uma string JSON contendo a propriedade `url`, cujo valor é a página web que queremos analisar:

const body = JSON.stringify({ url: 'https://spacex.com' });

Agora, defina as opções da requisição, que serão passadas para a função `fetch`:

const options = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'x-api-key': <SUA CHAVE DE API aqui>
    },
    body: body
}

O método da requisição é definido como POST. Dois cabeçalhos são especificados: um para indicar que o corpo é JSON e outro para fornecer a chave de API.

Substitua `` pela sua chave de API real. Idealmente, a chave API não deve ser armazenada diretamente no código, mas sim através de variáveis de ambiente. Por fim, o corpo é definido como a constante `body` definida anteriormente.

Por fim, realizamos a requisição:

fetch('https://api.etechpt.com.com/metascraping', options)
    .then(response => response.json())
    .then(json => console.log(json))

A função `fetch` é chamada com o endpoint da API e as opções definidas. O retorno de `fetch` é uma promessa, à qual anexamos um callback com `.then`, que analisa a resposta JSON. Outro callback é anexado, que, ao ser resolvido, imprime o objeto retornado no console.

O arquivo final deve ter esta estrutura:

import fetch from 'node-fetch'

const body = JSON.stringify({ url: 'https://spacex.com' });

const options = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'x-api-key': <SUA CHAVE DE API aqui>
    },
    body: body
}

fetch('https://api.etechpt.com.com/metascraping', options)
    .then(response => response.json())
    .then(json => console.log(json))

Para executar o script, salve o arquivo e execute o comando:

node .

A saída com os metadados deve ser similar a:

{
  timestamp: 1669305079698,
  apiStatus: 'success',
  apiCode: 200,
  meta: {
    url: 'https://spacex.com',
    device: 'desktop',
    test: { id: '8m3srgqw06q2k8li5p6x70s8165d6e2f' }
  },
  data: {
    author: null,
    date: null,
    description: 'SpaceX designs, manufactures and launches advanced rockets and spacecraft.',
    image: 'https://www.spacex.com/static/images/share.jpg',
    logo: 'https://spacex.com/static/images/favicon.ico',
    publisher: 'SpaceX',
    title: 'SpaceX',
    url: 'http://www.spacex.com/',
    lang: 'en'
  }
}

Usando a API da etechpt.com com PHP

Para usar a API de Metascraping da etechpt.com em PHP, você precisará ter o PHP e o Composer instalados.

Primeiro, crie e acesse a pasta do projeto:

mkdir metascraping-php && cd metascraping-php

Instale o GuzzleHTTP, um cliente HTTP para PHP:

composer require guzzlehttp/guzzle

Crie o arquivo que conterá o script PHP:

touch script.php

Abra o arquivo `script.php` usando um editor de texto. Novamente, usarei o `nano`:

nano script.php

Comece inserindo as tags de abertura e fechamento PHP:

<?php
    // Todo o código aqui
?>

Importe as classes `Request` e `Client` do Guzzle:

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Crie um cliente instanciando a classe `GuzzleHttpClient`:

$client = new GuzzleHttpClient();

Defina os cabeçalhos da requisição: um para indicar o tipo de conteúdo (JSON) e outro para a chave de API:

$headers = [
    'x-api-key' => <SUA CHAVE DE API AQUI>,
    'Content-Type' => 'application/json'
];

Substitua `` pela sua chave de API real do painel da etechpt.com.

Defina o corpo da requisição como uma string JSON, contendo a propriedade `url`, cujo valor será `https://twitter.com`:

$body = json_encode([
    "url" => "https://twitter.com"
]);

Instancie a classe `Request` para criar uma solicitação POST, passando o endpoint, cabeçalhos e corpo:

$request = new Request('POST', 'https://api.etechpt.com.com/metascraping', $headers, $body);

Envie a requisição usando o cliente:

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

Obtenha o corpo da resposta e imprima-o no console:

echo $response->getBody();

O arquivo `script.php` final deve ter esta estrutura:

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

	use GuzzleHttpClient;
	use GuzzleHttpPsr7Request;

	$client = new GuzzleHttpClient();

	$headers = [
    	'x-api-key' => <SUA CHAVE DE API>,
    	'Content-Type' => 'application/json'
	];

	$body = json_encode([
    	"url" => "https://twitter.com"
	]);

	$request = new Request('POST', 'https://api.etechpt.com.com/metascraping', $headers, $body);

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

	echo $response->getBody();
?>

Salve o arquivo, feche-o e execute o script com:

php script.php

Você deverá ver a seguinte saída:

{
    "timestamp":1669322100912,
    "apiStatus":"success",
    "apiCode":200,
    "meta": {
        "url":"https://twitter.com",
        "device":"desktop",
        "test":{ 
            "id":"wn1nj30r04bk0ijtpprwdqmtuirg9lze"
        }
     },
     "data":{ 
         "author":null,
         "date":null,
         "description":"The latest stories on Twitter - as told by Tweets.",
         "image":"https://abs.twimg.com/a/1602199131/img/moments/moments-card.jpg",
         "logo":"https://abs.twimg.com/responsive-web/client-web/icon-ios.b1fc7279.png",
         "publisher":"Twitter",
         "title":"Explore",
         "url":"https://twitter.com/explore",
         "lang":"en"
     }
}

Considerações Finais

Este guia detalhou diferentes abordagens para consumir a API Metascraping da etechpt.com.

Além do URL, a API permite a inclusão de outros parâmetros, como o parâmetro `proxy`, que está disponível nos planos premium da etechpt.com. No entanto, mesmo em sua versão gratuita, a API da etechpt.com oferece uma solução eficiente e poderosa para a coleta de metadados.

Para informações adicionais, consulte a documentação oficial da API etechpt.com.