Como criar uma API em PHP para verificar a cotação do dólar

Se você deseja criar uma API em PHP para verificar a cotação do dólar, uma forma de fazê-lo é usando a biblioteca cURL. O cURL (Client URL Library) é uma ferramenta que permite aos programas fazer requisições HTTP (Hypertext Transfer Protocol) de forma rápida e simples.

  1. Primeiro, você vai precisar de um serviço que forneça a cotação do dólar em tempo real. Existem muitas opções disponíveis na internet, como o Yahoo Finance ou o Google Finance. Escolha o que melhor se adequar às suas necessidades.
  2. Em seguida, crie um arquivo PHP em seu servidor. Você pode fazer isso usando o seu editor de código ou o painel de controle do seu servidor.
  3. No seu arquivo PHP, adicione o código para inicializar a biblioteca cURL. Isso pode ser feito usando a função curl_init(). Por exemplo:
Copy code$ch = curl_init();
  1. Em seguida, configure a requisição HTTP para o serviço de cotação do dólar escolhido. Isso pode ser feito usando a função curl_setopt(). Por exemplo:
Copy codecurl_setopt($ch, CURLOPT_URL, "https://finance.yahoo.com/quote/USD/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  1. Execute a requisição HTTP usando a função curl_exec(). Isso vai retornar os dados da cotação do dólar. Por exemplo:
Copy code$cotacao = curl_exec($ch);
  1. Por fim, adicione o código para retornar os dados da cotação do dólar em formato JSON (JavaScript Object Notation). Isso pode ser feito usando a função json_encode() do PHP. Por exemplo:
Copy codeecho json_encode(array("cotacao" => $cotacao));

E é isso! Agora você tem uma API em PHP que pode ser acessada por outros sistemas ou aplicativos para verificar a cotação do dólar em tempo real. Você pode expandir essa API adicionando mais funcionalidades ou integrando outros serviços de cotação de moedas.

Como criar um repositório no Laravel

O Laravel é um framework de PHP populado que facilita a criação de aplicativos web. Um dos recursos úteis do Laravel é o uso de repositórios para gerenciar o acesso a dados em seu aplicativo.

Um repositório é uma camada de abstração que separa o acesso a dados de sua lógica de negócios. Isso significa que, em vez de escrever código para acessar diretamente o banco de dados em suas classes de modelo, você pode usar métodos do repositório para realizar operações de banco de dados. Isso pode tornar o seu código mais legível e facilita a manutenção.

Para criar um repositório no Laravel, siga estes passos:

  1. Crie uma nova interface de repositório em app/Repositories. Esta interface deve conter métodos para as operações de banco de dados que você deseja realizar (por exemplo, obter todos os registros, obter um registro pelo ID, salvar um novo registro, etc.).
  2. Crie uma nova classe de repositório que implemente a interface de repositório criada no passo 1. Esta classe deve conter a lógica para realizar as operações de banco de dados usando a classe de modelo correspondente do Laravel.
  3. Adicione o repositório criado ao container de injeção de dependência do Laravel em app/Providers/AppServiceProvider.php. Isso permitirá que o Laravel crie uma instância do repositório quando for necessário.
  4. Em sua classe de modelo, adicione uma propriedade privada para a instância do repositório e um construtor que aceite uma instância do repositório como argumento. Isso permitirá que você use o repositório em sua classe de modelo para realizar operações de banco de dados.
<?php

namespace App\Repositories;

interface PostRepositoryInterface
{
  public function getAll();
  public function findById($id);
  public function save($data);
  public function update($id, $data);
  public function delete($id);
}

<?php

namespace App\Repositories;

use App\Models\Post;

class PostRepository implements PostRepositoryInterface
{
  protected $model;

  public function __construct(Post $model)
  {
    $this->model = $model;

Como usar a API do WordPress para gerenciar seu site

Usar a API do WordPress é uma ótima maneira de gerenciar o conteúdo do seu site de forma programática. Com a API, você pode criar, ler, atualizar e excluir publicações, páginas e outros tipos de conteúdo do seu site WordPress, bem como gerenciar usuários e configurações.

Para começar a usar a API do WordPress, é preciso ter uma instalação do WordPress e ativar o plugin WordPress REST API. Uma vez ativado, a API estará disponível em um endpoint específico em sua instalação WordPress, geralmente em http://seusite.com.br/wp-json/wp/v2/.

Para acessar os dados do seu site WordPress e realizar operações com a API, você pode fazer solicitações HTTP (como GET, POST, PUT e DELETE) usando uma biblioteca de cliente HTTP, como o cURL ou o WordPress HTTP API. Por exemplo, aqui está como você poderia usar o cURL para obter a lista de publicações do seu site WordPress:

<?php
// Inicializa a solicitação HTTP
$curl = curl_init();

// Define a URL da API
curl_setopt($curl, CURLOPT_URL, 'http://seusite.com.br/wp-json/wp/v2/posts');

// Define o método como GET
curl_setopt($curl, CURLOPT_HTTPGET, true);

// Executa a solicitação HTTP e armazena a resposta
$response = curl_exec($curl);

// Fecha a conexão cURL
curl_close($curl);

// Decodifica a resposta JSON
$posts = json_decode($response, true);

// Itera sobre cada publicação e exibe o título
foreach ($posts as $post) {
  echo $post['title']['rendered'] . "\n";
}

Com a API do WordPress, existem muitas possibilidades. Você pode criar aplicativos personalizados para gerenciar seu projeto, integrar o seu site com outros serviços ou até mesmo criar seus próprios plugins usando a API como base.

Hospede seu site em um servidor Cloud por menos de R$ 11 Mês

Seja para quem é iniciante ou dinossauro na área de tecnologia, sempre fica aquela dúvida, qual o melhor e mais barato serviço de hospedagem atualmente? Hospedagem Cloud ou compartilhada? (Compartilhada não quero mais nem de graça). Se você já tem um certo conhecimento, claro que compensa muito mais configurar seu próprio servidor e alocar seus clientes, a desvantagem é que você fica responsável por praticamente tudo, configurar gerenciador de hospedagem, e-mails, quedas de serviços entre outros, neste caso, recomendo a Linode, sem medo de errar.

Porém, todavia, entretanto, contudo, se você não tem um grande conhecimento em gerenciamento de hospedagens, ou simplesmente não quer se incomodar em prestar suporte para o seu cliente, poderá muito bem optar por um Cloud 100% configurado com:

  • Servidor Cloud individual (Apenas o seu site hospedado no Cloud)
  • E-mails ilimitados
  • SSL grátis
  • Firewall
  • Tráfego ilimitado
  • Banco de dados ilimitados
  • Backup grátis
  • Acesso SSH
  • Software anti-spam para e-mails
  • Upgrade/Downgrade de plano direto pelo painel, sem precisar abrir ticket e sem downtime
  • Suporte grátis
  • Instalações de aplicações com poucos cliques
  • Revenda de hospedagem
  • Plugin de cache (WordPress)
  • Editor de arquivos
  • FTP
  • Deploy pelo GitLab em breve Github e Bitbucket
  • Restauração de backup em poucos cliques
  • Gerenciador de banco de dados (PHPMYADMIN)
  • Acesso remoto ao banco de dados
  • Escolher entre Mysql e PostgreSQL
  • Balanceador de carga
  • Escolher versões do PHP (5.4 até >= 8.0)
  • CronJob direto pelo painel
  • Logs de erro do PHP e do servidor
  • Migração dos seus dados gratuitamente (Consulte)
  • Hospedagem individualizada, sem compartilhamento de CPU e memória com outros sites
  • Sem fidelidade (cancele quando quiser)
  • A partir de R$ 10,90

Lembrando que o valor de R$ 10,90 é a configuração inicial, se você precisar de mais poder de processamento, poderá efetuar upgrade da sua instância, com valores adicionais.

Sem surpresas na conta

Você está no controle da sua hospedagem, no painel de controle, é possível verificar uma estimativa de quantos créditos você ainda possuí e quanto tempo ele irá durar.

Você pode optar por deixar a recarga automática através de cartão de crédito, também é possível inserir créditos através de boleto bancário, Pix ou mercado pago.

Estimativa de valor e duração do crédito em dias

Você no controle

Com a hostoo você está no controle e não precisa ser expert em servidores, é possível efetuar upgrade e downgrade de servidor com poucos cliques e sem deixar o seu site offline. Instale e configure aplicações em poucos cliques. Gosta do WordPress? Plugin de cache gratuito para acelerar ainda mais o carregamento do seu site.

No print abaixo, podemos notar o domínio do site, versão do PHP, SSL ativo, detalhes do plano, detalhes de consumo de CPU, RAM, disco e outras configurações da hospedagem.

PAINEL DE CONTROLE HOSTOO

Precisa de mais?

Além de ter servidores nos Estados Unidos, também é possível hospedar seus sites em clouds aqui no Brasil, claro, por um valor adicional. Com a Hostoo você pode fazer upgrade de plano facilmente. Suponhamos que durante o dia, você teve visitas atípicas em seu website, resultando em um consumo máximo de CPU e RAM, e agora o que fazer? Em poucos cliques, você pode efetuar upgrade do seu plano, contratando um cloud melhor, pagando por hora utilizada, e posteriormente, retornar ao plano original, você está 100% no controle.

Suporte que não te deixa 48h esperando

Estou com a Hostoo há mais de 1 ano e diferente de outros serviços de hospedagem, o suporte é muito rápido e definitivamente resolve seus problemas. Até o momento, precisei abrir apenas 1 ticket de site fora do ar, onde ficou constatado que o problema não era na hospedagem e sim no servidor dns que eu estava utilizando como proxy, o outro ticket? Foi aberto pela própria empresa, quando me deparei com um erro 500 no painel de hospedagem. Tempo da primeira resposta < 22 minutos.

Painel de suporte Hostoo

Sem dúvidas, foi um grande achado que estou compartilhando com você! https://hostoo.io

Como migrei um site WordPress de 20GB sem acesso ao gerenciador de hospedagem

Fui procurado por uma empresa para refazer um portal de notícias, o site foi desenvolvido sob o cms WordPress, com elementor. A principal reclamação do solicitante era a demora para carregar o site, mesmo tendo um sistema de cache. Não foi necessário ir muito longe para encontrar o problema, simplesmente existiam mais de 55 plugins instalados, sem contar os inativos, WordPress desatualizado, banco com excesso de tabelas, entre outros problemas.

Instalei o WordPress na sua versão mais atual na minha máquina e comecei a trabalhar em cima do novo site, como sempre, o prazo não era dos melhores, para não precisar configurar um tema do 0, utilizei o Underscore para gerar um template inicial.

Depois de finalizado o novo layout, removido todos os plugins desnecessários e configurado a nova hospedagem, chegou a hora da migração do conteúdo.

Inicialmente pensei, vai ser moleza, já migrei site de +60GB em poucas horas, 20GB não vou nem ter trabalho, aí que me enganei. Não foi possível obter acesso ao Cpanel muito menos ao ssh do servidor. Pesquisando algumas alternativas, encontrei o plugin UpdraftPlus, resolvi fazer um teste.

Iniciei o backup do site no sábado por volta das 9h, mas infelizmente o plugin não conseguia concluir o backup, então mudei algumas configurações e tentei novamente, isso já era mais de 12h, por volta das 17h ~ 18h o backup terminou, agora precisava transferir 20GB para o novo servidor. Já se passava de 22h e mal tinha atingido 50%, não sei se era alguma limitação no servidor de saída, entrada ou se o próprio plugin restringia a velocidade por ser a versão free. Então contratei um s3 temporariamente para tentar jogar os arquivos no bucket e depois resgatar no novo servidor. Já no domingo pela manhã iniciei novamente a tentativa de migração, dessa vez para o S3, mas nada mudou, continuava lento, dois dias tentando migrar o conteúdo e sem sucesso.

No fim de semana seguinte, sábado às 8h iniciei uma nova tentativa, finalmente no início da noite, todo o conteúdo já estava no novo servidor, então iniciei a importação desses dados, depois de algumas horas, finalmente terminou, mas para a minha surpresa, faltava muito conteúdo, o plugin não conseguiu efetuar o backup total como o esperado. Nessa hora eu já estava desiludido, como dizia minha mãe, é hora de se enforcar em um pé de cebolinha, já passando das 01h, abortei a missão.

Novamente domingo, já no 4º dia de tentativa, resolvi utilizar o plugin novamente e fazer backup somente do banco de dados, em 15 minutos o backup estava feito e importado no novo servidor. Fiz o download do backup do banco para minha máquina local, 1,5GB, depois subi para o servidor com o scp e importei no mysql pelo shell . Enviando o arquivo para o servidor.

scp banco-de-dados.zip ssh servidor:/home/user/

Maravilha, o banco já estava importado com todo o conteúdo, sem erros, mas como recuperar as imagens e vídeos, e agora, José?

Até pensei em utilizar o Al-In-One WP Migration que é um dos meus favoritos, mas o limite de 512MB era um empecilho, até poderia utilizar uma versão nulled, mas pra que complicar ainda mais, né? A dor de cabeça posteriormente poderia ser maior ainda.

Depois de já ter acabado com o estoque de café do mês em 4 dias, parei para refletir, deve ter um jeito de acessar o terminal do servidor e fazer o backup desses arquivos, foi então que encontrei o plugin WPTerm, eu não sabia, mas ele iria me salvar ❤️

Com o WPTerm é possível rodar comandos como se estivesse conectado no shell do servidor, obviamente, eu não podia rodar um zip diretamente na pasta public_html, trata-se de um emulador, não estou conectado diretamente via ssh.

Então comecei fazendo backup nos arquivos.

zip -r a1.zip wp-content/uploads/ano/dia

E no servidor de destino, com acesso ssh, realizava o download e descompactação

wget https://site.com.br/wp-content/uploads/ano/dia/a1.zip

unzip a.zip

E assim fiz, pasta por pasta até chegar na última. Em menos de 2h já tinha migrado todos os vídeos, fotos e e-mails.

Por volta das 16h já estava tudo pronto para a virada definitiva, terminei algumas configurações na hospedagem, troquei o plugin de cache por um mais eficaz, configurei corretamente o cache, diferente do que muitos pensam, não basta apenas apontar o dns para o CloudFlare, é necessário configurar as regras de cache, para ter certeza que o arquivo está em cache, o CloudFlare retorna no header o status HIT, se for diferente disso, seus arquivos não estão sendo armazenados corretamente ou o cache é individual, o que não é muito interessante se o conteúdo é público.

cf-cache-status: HIT

age: Tempo em segundos que o arquivo está armazenado em cache

Print status cache Cloudflare

E foi assim, graças ao WpTerm, consegui migrar 20GB de conteúdo em pouquíssimo tempo, parece fácil, né? Mas não foi.

Protegendo formulários de Landing Page com Captcha v3 invisível e honeypot

Integrando formulário com o captcha invísivel (v3) – e enviando e-mails, utilizado em Landing pages

A cada dia surgem diversas landing pages na web, seja para promover um evento ou até mesmo a venda de um produto, geralmente essas páginas possuem pelo menos um formulário de contato.

Precisamos proteger esses formulários, se deixarmos a “esmo” os clientes passarão a receber muitos spams e não queremos isso.

Alguns devs preferem criar um “honeypot” que é basicamente um field que recebe uma classe css e nesse css o campo é setado como hidden, no backend é feito uma validação, se esse field oculto for preenchido, o e-mail não é enviado, isso serve para bots menos “inteligentes”.

Uma das melhores soluções do mercado, querendo ou não, é a utilização do Captcha do Google. Pensando nisso, resolvi criar uma integração com o captcha e também utilizar o honeypot que citei acima. Tornei o projeto público, é muito simples de usar.

Você está livre para utilizar e modificar como preferir.

https://github.com/leonardop21/captcha-send-form

UPDOWN.IO: Receba notificação no WhatsApp caso seu site fique indisponível

Com mais de 6 pontos de acompanhamento espalhados pelo mundo, o Updown.io é um sistema de monitoramento de sites em tempo real.

Através de uma interface simples e agradável, é possível monitorar múltiplos sites , com intervalos de tempo entre 15 segundos e 1 hora, selecionar até 8 localizações,  com tempo mínimo de resposta entre 0.125 e 2.0 segundos e “callbacks” (SMS, Telegram, Slack, StatusPage, Zapier) para ser informado em caso de queda ou restauração do serviço.

Desenvolvi a estratégia para um amigo, que gostaria de receber alertas no WhatsApp em tempo real, quando algum site ou sistema fica-se fora do ar, decidimos tornar o código fonte público.

Requerimentos

O Wppconnect Server é uma lib não oficial do WhatsApp para envio e recebimento de mensagens. para receber a notificação em seu WhatsApp é necessário ter configurado o Wppconnect server.

Neste tutorial, aprenderemos a configurar o Updown Notify WhatsApp

Updown Notify Whatsapp

Clone o projeto e acesse o diretório

git clone https://github.com/leonardop21/updown-notify-whatsapp && cd updown-notify-whatsapp

Instale as dependências (Necessário ter o composer configurado na máquina)

composer install

Configurando o projeto

No arquivo /public/callback configure um chave pública, ex: Afwe14we555d1230we23sdx

No arquivo /services/WppInfo na função __construct() preencha os dados gerados no Wppconnect-server, para receber notificações no WhatsApp

Apontando para a pasta public

Configure seu servidor http, para ler a partir da pasta public.

Agora, no sistema do Updown.io

No Updown.io insira a sua url de callback junto com a key que definiu, ex: https://meusite.com.br/callback?key=Afwe14we555d1230we23sdx

O Updown Notify Whatsapp aceita apenas requisições post com a key configurada no passo anterior, do contrário, uma página 404 será exibida.

Testando a aplicação

Criei um subdomínio de teste e inseri no updown.io.

No momento em que o site ficou fora do ar, recebi um aviso no WhatsApp, quando voltou ao normal, recebi outro aviso, conforme demonstra as imagens abaixo.

Updown detectou site fora do ar

Callback Updown

O Updown enviou um callback ao sistema, que por sua vez acionou o Wppconnect-Server enviando uma mensagem para o número configurado no services/WppInfo

Site funcionando normalmente

Updown detectou que o site voltou a funcionar

Callback Updown

O Updown enviou um callback ao sistema, que por sua vez acionou o Wppconnect-Server enviando uma mensagem para o número configurado no services/WppInfo

Links úteis

WPPCONNECT-SERVER

UPDOWN-NOFITY-WHATSAPP

Como adicionar imagem destacada no Feed do WordPress

Certa vez, estava fazendo a integração do Feed do WP com um canal de mídia social que exigia uma imagem para compartilhar o conteúdo. Assim, começou minha saga para tentar descobrir como adicionar a imagem no feed. Encontrei diversas alternativas, algumas indicavam acessar a pasta /wp-includes/feed-rss2.php, criar uma tag img e inserir a foto destacada direto no arquivo rss2.php, no entanto, assim que o WordPress fosse atualizado, o código seria perdido.

A melhor saída foi criar uma função direto no arquivo functions.php do tema no WordPress, para inserir a thumbnail no feed.

Explicação da função

A função é básica, verificamos se existe uma thumbnail na publicação, se existe mostramos a imagem do original, do contrário, mostramos uma genérica, pode ser uma marca d’água da sua empresa ou algo do gênero.

Deixo aqui o link para a função criada, basta copiar e alterar do jeito que preferir.