Bot Nutrient atau cara saya ingin mengambil roti dari pelatih kebugaran

Halo semuanya! Semua pengembang pernah dihadapkan dengan keinginan untuk melakukan sesuatu untuk diri mereka sendiri, dan bahkan nilai material dari produk tersebut menjadi tidak penting, hal utama adalah ia bekerja sendiri. Buzz.

Jadi, sebagai liburan Mei tunggal, saya ingin menggabungkan pengetahuan pengkodean dan beberapa lainnya, penting, dalam satu proyek. Ternyata, menurut pendapat saya, layanan yang menarik yang ingin saya berikan kehidupan dan bicarakan.

Saya bukan ahli gizi, bukan atlet profesional dan, tentu saja, saya tidak berpura-pura bahwa mereka akan mempercayai saya tanpa pertanyaan. Tetapi, suatu kali, saya sangat tertarik dengan topik nutrisi yang tepat, dan saya mulai mempelajari artikel, berkomunikasi dengan pelatih keren di aula yang saya kunjungi, dan memperhatikan hal seperti itu: orang menghabiskan cukup banyak uang untuk membuat rencana nutrisi.

Dan saya memutuskan: tetapi saya akan membuat sistem yang secara otomatis akan menghitung produk orang dalam gram, tergantung pada tujuan dan parameternya.

Karena saya seorang pengembang backend, saya jarang menemukan front, saya memikirkannya dan memutuskan untuk membuat bot. Pilihan messenger dipengaruhi oleh beberapa faktor: permintaan dan ketersediaan sistem pembayaran. Jejaring sosial Vkontakte muncul.

Untuk perhitungan, saya menggunakan rumus Harris-Benedict. Saya memperhitungkan parameter input seperti itu (yang dimasuki pengguna bot):

  • Berat
  • Pertumbuhan
  • Sasaran (menurunkan berat badan / menambah berat badan / mempertahankan)
  • Aktivitas fisik (semua informasi tersedia dan standar untuk perhitungan sesuai dengan rumus Harris-Benedict)
  • Toleransi laktosa
  • Gender

Membuat database produk di mana produk memiliki bidang: Protein, Lemak, Karbohidrat, Kcal, GI (indeks glikemik), serta konten laktosa. Secara umum, saya ingin daftar dan komentar sepanjang jalan.

Vkontakte memiliki API yang dapat diakses dan dimengerti

Digunakan bahasa PHP.

Pertama, saya mengidentifikasi beberapa fungsi dan konstanta yang diperlukan:

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'); //  API define('VK_API_ENDPOINT', "https://api.vk.com/method/"); //     API function _vkApi_call($method, $params = array()) { $params['access_token'] = //    ,        ; $params['v'] = VK_API_VERSION; $url = VK_API_ENDPOINT.$method.'?'.http_build_query($params); $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $json = curl_exec($curl); curl_close($curl); $response = json_decode($json, true); return $response['error']['error_msg']; $err=$response['error']['error_msg']; } //   messages.send function vkApi_messagesSend($peer_id, $message) { return _vkApi_call('messages.send', array( 'peer_id' => $peer_id, 'user_id' => $peer_id, 'message' => $message, 'random_id' => rand(), 'qroup_id' => //      () ));} //      function vkApi_buttonSend($peer_id, $message,$button) { return _vkApi_call('messages.send', array( 'peer_id' => $peer_id, 'user_id' => $peer_id, 'message' => $message, 'random_id' => rand(), 'keyboard' => $button, 'qroup_id' => //      () ));} 

Dalam pengaturan bot, Anda menentukan tautan ke skrip Anda (webhook). Omong-omong, di VK API, Anda dapat menggunakan dua metode untuk menerima pesan. Saya menggunakan webhooks. Menurut saya itu lebih nyaman, lebih akrab.

Selanjutnya, saya memproses json yang dihasilkan.

 $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; 

Karena VK memiliki sistem pembayaran, saya membayangkan pembayaran melalui pembayaran VK (server VK mengirim permintaan seperti itu ke webhook Anda, tetapi hanya jika publik Anda diindikasikan sebagai TOKO dan ada PRODUK yang dapat dibayar melalui pembayaran VK), serta pembayaran tunai sederhana terjemahan yang bisa dilampirkan ke pesan.

Saya menyimpan setiap pengguna yang menulis sesuatu ke bot dalam database, dan kemudian semua komunikasi dengan bot berlangsung tergantung pada pembayaran. Jika tidak ada pembayaran, bot akan mengatakan bahwa Anda harus membayar terlebih dahulu, jika pembayaran telah terjadi, ia akan memberi tahu Anda apa yang harus dilakukan selanjutnya. Untuk pengujian, Anda dapat memasukkan pesan apa pun ke bot untuk direncanakan.

Setelah pembayaran, bot akan meminta parameter yang diperlukan untuk perhitungan, menyimpan semuanya dalam database untuk pengguna tertentu, dan setelah semua informasi yang diterima, saya mempertimbangkan dan memberikan jawaban. Saya mengirim pesan menggunakan fungsi yang dibuat, menunjukkan user_id dari pengguna:

 vkApi_messagesSend($user_id, '!   ?'); 

Ini juga memperhitungkan saat pengguna memasukkan beberapa informasi secara tidak benar: dalam hal ini, Anda perlu mengirim nomor 404 ke bot, dan itu akan mulai bertanya terlebih dahulu, mengatur ulang data dalam database.

Untuk beberapa pesan, saya merasa nyaman untuk membuat tombol, ketika saya mengkliknya, sebuah pesan dengan teks yang ditunjukkan pada tombol itu terbang kepada saya di 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) ; 

Dan kemudian semua kesenangan! Setelah data terkumpul, perhitungan itu sendiri terjadi. Saya sendiri tidak menciptakan apa pun, saya hanya membuat formula yang tepat, berdasarkan rumus Harris-Benedict, serta pengetahuan di bidang nutrisi yang tepat (jumlah makanan, persentase distribusi protein / lemak / karbohidrat untuk resepsi ini, dll. Adalah penting di sini).

Secara umum, hal-hal seperti ini:

 $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; 

Oleh karena itu, untuk orang-orang dengan gaya hidup yang tidak aktif dan orang-orang dengan hiperaktif, akan ada faktor-faktor lain, saya memberikan contoh kecil.

Setelah menghitung BZHU dan KKAL saya mengumpulkan satu set produk. Ngomong-ngomong, jika setelah rencana nutrisi yang diterima Anda memasukkan angka 404 dan memulai lagi (kemungkinan berat badan turun / bertambah, perubahan gaya hidup, dll.), Rangkaian produk akan berubah secara acak. Dan sekarang Anda memiliki rencana nutrisi yang berbeda!

Akibatnya, kami mendapat layanan seperti itu di sini (saya secara resmi mempostingnya untuk pengujian, pengembang adalah pemula, dan saya sendiri tidak dapat menangkap semua bug saya jika mereka tiba-tiba ada):

tangkapan layar bot
gambargambar
gambargambar


Dari kesalahan yang saya perhatikan (perlu diperbaiki):


  • Tombol tidak langsung terbuka. Anda perlu menemukan ikon keyboard di dekat tombol "kirim". Ini benar-benar membingungkan orang, dan mereka salah menulis (jika tombol ditekan, maka saya memproses teks dari tombol, data yang dimasukkan pengguna diabaikan).
  • Bukan basis data produk yang sangat besar, dihadapkan pada kenyataan bahwa tidak ada yang akan memakan ini.

Bagi yang ingin menguji dan melihat tautan ke publik .

Source: https://habr.com/ru/post/id458798/


All Articles