Olá pessoal! Todos os desenvolvedores depararam com o desejo de fazer algo por si mesmos, e mesmo o valor material do produto se torna sem importância, o principal é que ele trabalha por conta própria. Buzz.
Então, como férias solitárias em maio, eu queria combinar o conhecimento de codificação e algum outro, vital, em um projeto. Na minha opinião, resultou em um serviço interessante sobre o qual quero dar vida e falar.
Não sou nutricionista, não sou atleta profissional e, é claro, não pretendo que eles confiem em mim sem questionar. Mas, uma vez, eu estava muito interessado no tópico da nutrição adequada e comecei a estudar artigos, conversar com treinadores legais nos corredores que visitei e percebi uma coisa: as pessoas gastam muito dinheiro fazendo planos de nutrição.
E decidi: mas vou criar um sistema que calcule automaticamente os produtos das pessoas em gramas, dependendo da finalidade e dos parâmetros.
Como sou desenvolvedor de back-end, raramente encontro a frente, pensei nisso e decidi fazer um bot. A escolha do messenger foi influenciada por vários fatores: demanda e disponibilidade de sistemas de pagamento. A rede social Vkontakte surgiu.
Para cálculos, usei a fórmula Harris-Benedict. Levei em consideração esses parâmetros de entrada (que o usuário do bot digita):
- Peso
- Crescimento
- Objetivo (perder peso / ganhar peso / manter)
- Atividade física (todas as informações estão disponíveis e padrão para cálculos de acordo com a fórmula de Harris-Benedict)
- Tolerância à lactose
- Sexo
Criou um banco de dados de produtos no qual o produto possuía campos: proteínas, gorduras, carboidratos, Kcal, IG (índice glicêmico) e também conteúdo de lactose. Em geral, quero dar uma lista e comentar ao longo do caminho.
Vkontakte tem uma
API acessível e compreensível
Usou a linguagem PHP.
Primeiro, identifiquei várias funções e constantes necessárias:
header('Content-Type: text/html; charset=utf-8'); $request = file_get_contents("php://input"); $input = json_decode($request, true); define('VK_API_VERSION', '5.95');
Nas configurações do bot, você especifica um link para seu script (webhook). A propósito, na API VK, você pode usar dois métodos para receber mensagens. Eu usei webhooks. Parece-me que é mais conveniente, mais familiar.
Em seguida, eu processo o json resultante.
$test_type=$input['type']; $test_group_id=$input['group_id']; $user_id=$input['object']['user_id']; $text=$input['object']['body']; $text_body=explode(" ", $text); $vk_pay=$text_body[0]; $caption=$input['object']['attachments'][0]['link']['caption']; $url=$input['object']['attachments'][0]['link']['url']; $str3=$input['object']['attachments'][0]['link']['title']; $str2 = explode(" ", $str3); $money =(int)$str2[0]; $money=strstr($str3, ' ', true); $money=(int)$money;
Como a VK possui sistemas de pagamento, eu previ o pagamento via VK pay (os servidores da VK enviam essas solicitações ao seu webhook, mas apenas se o seu público for indicado como LOJA e houver um PRODUTO que possa ser pago via VK pay), bem como pagamento em dinheiro simples uma tradução que pode ser anexada à mensagem.
Eu salvo cada usuário que escreve algo para o bot no banco de dados e, em seguida, toda a comunicação com o bot ocorre dependendo do pagamento. Se não houver pagamento, o bot dirá que você precisa pagar primeiro, se o pagamento tiver ocorrido, ele informará o que fazer em seguida. Para o teste, você pode inserir qualquer mensagem para o bot planejar.
Após o pagamento, o bot solicitará os parâmetros necessários para o cálculo, guardo tudo no banco de dados para um usuário específico e, após todas as informações recebidas, penso e dou uma resposta. Estou enviando uma mensagem usando a função criada, indicando o user_id do usuário:
vkApi_messagesSend($user_id, '! ?');
Também levou em consideração o momento em que o usuário inseriu algumas informações incorretamente: nesse caso, você precisa enviar o número 404 para o bot, e ele começará a perguntar primeiro, redefinindo os dados no banco de dados.
Para algumas mensagens, era conveniente para mim criar botões; quando eu clicava nela, uma mensagem com o texto indicado no botão voava para mim no webhook.
$buttons='{ "one_time":true, "buttons":[[{ "action":{ "type":"text", "payload":"{\"button\": \"1\"}", "label":" " }, "color":"primary" }, { "action":{ "type":"text", "payload":"{\"button\": \"2\"}", "label":" " }, "color":"primary"}]]}'; vkApi_buttonSend($user_id,' ',$buttons) ;
E então toda a diversão! Após os dados coletados, o próprio cálculo ocorre. Não estou inventando nada, apenas redijo corretamente as fórmulas necessárias, com base na fórmula de Harris-Benedict, bem como o conhecimento no campo da nutrição adequada (o número de refeições, a distribuição percentual de proteínas / gorduras / carboidratos para essas recepções etc. são importantes aqui).
Em geral, coisas como esta:
$BMR=88.363+(13.397*$weight)+(4.799*$height)-(5.677*$age); $BMR_AMR=$BMR*1.2-500; $b_kkal=0.35*$BMR_AMR; $b_gr=$b_kkal/4; $g_kkal=0.3*$BMR_AMR; $g_gr=$g_kkal/9; $u_kkal=0.35*$BMR_AMR; $u_gr=$u_kkal/4; $break_b=0.15*$b_gr; $break_u=0.25*$u_gr; $break_g=0.25*$g_gr; $break_kk=0.25*$BMR_AMR; $snack_b=0.1*$b_gr; $snack_u=0.1*$u_gr; $snack_g=0.15*$g_gr; $snack_kk=1*$BMR_AMR; $snack2_b=0.05*$b_gr; $snack2_u=0.05*$u_gr; $snack2_kk=0.05*$BMR_AMR; $lunch_b=0.45*$b_gr; $lunch_u=0.4*$u_gr; $lunch_g=0.4*$g_gr; $lunch_kk=0.4*$BMR_AMR; $dinner_b=0.25*$b_gr; $dinner_u=0.2*$u_gr; $dinner_g=0.2*$g_gr; $dinner_kk=0.2*$BMR_AMR;
Assim, para pessoas com estilo de vida sedentário e com hiperatividade, haverá outros fatores, dei um pequeno exemplo.
Após o cálculo do BZHU e KKAL, coleciono um conjunto de produtos. A propósito, se após o plano de nutrição recebido você digitar o número 404 e começar de novo (é possível perder peso / ganhar peso, mudanças no estilo de vida etc.), o conjunto de produtos mudará aleatoriamente. E agora você tem um plano de nutrição diferente!
Como resultado, obtivemos um serviço aqui (eu o publiquei oficialmente para teste, o desenvolvedor é iniciante e eu mesmo não consigo pegar todos os meus erros se eles existirem repentinamente):
Dos erros que notei (precisa ser aprimorado):
- Os botões não abrem imediatamente. Você precisa encontrar o ícone do teclado próximo ao botão "enviar". Isso realmente confunde as pessoas e elas escrevem incorretamente (se o botão for pressionado, então eu processo o texto do botão, os dados que o usuário insere são ignorados).
- Não é um banco de dados muito grande de produtos, diante do fato de que ninguém vai comer isso.
Para quem quer testar e ver o link para o
público .