มาเขียน Line Bot สำหรับเช็คหวยด้วย Ruby On Rails กัน
ก่อนอื่น เราต้องติดตั้ง Ruby & Rails ลงบนเครื่องก่อน โดย จะมี Rbenv และ Rvm ที่เอาไว้จัดการเวอร์ชั่นของ Ruby ในที่นี่ผมใช้ Rbenv ซึ่งสามารถติดตั้งได้ตามลิ้งค์นี้เลย
ในส่วนของ Database ผมเลือกใช้ PostgreSQL หลังจาก คุณสามารถรัน rails s หรือ rails server และเข้าผ่าน localhost:3000 ได้แล้วเราก็มาเริ่มทำกันได้เลย
ให้เราไปที่ Gemfile จะเป็นตัวจัดการ Libraries สำหรับ Ruby ถ้าใครนึกไม่ออก ก็ประมาณ packeage.json ใน NodeJS เลยครับ
ให้คุณติดตั้ง gem ตัวนี้ก่อน
gem 'line-bot-api'
จะได้ตามภาพนี้ บรรทัดที่ 97

หลังจากนั้นให้คุณไปที่ Terminal ที่อยู่ของโปรเจค แล้วใช้คำสั่ง bundle install เพื่อทำการติดตั้ง gem ที่ใส่เพิ่มไป ถ้าไม่ติดอะไรจะได้ประมาณรูปด้านล่าง

หลังจากนั้นให้สร้าง ไฟล์ controlller ที่ folder project_name/app/controllers สร้างเพิ่ม 1 ไฟล์ ของผมจะสร้างชื่อว่า webhooks_controller.rb ดังภาพ

พร้อมให้สร้าง action ขึ้นมา กรณีของผมจะสร้าง action ชื่อว่า line_bot_lotto
class WebhooksController < ApplicationController
def line_bot_lotto
end
end
หลังจากนั้นให้ไปที่ไฟล์ config/routes.rb เพื่อทำการเพิ่ม routes สำหรับ Ruby on rails
Rails.application.routes.draw doresources :webhooks, only: [] do
collection do
post 'line_bot_lotto'
end
end
end
ก็คือเราได้สร้าง path /webhooks/line_bot_lotto ที่เป็น Method POST เรียบร้อย สามารถนำ url + path ไปใส่ใน webhooks ของ Line ได้เลย และใช้ ngrok สำหรับให้ Line เจอว่ามีเว็บเราอยู่
หลังจากรัน ngrok http 3000 หรือ port ที่ต้องการแล้ว ลองกดปุ่ม verify เพื่อเช็คว่ายิงเข้ามาที่เครื่องเราแล้วหรือยัง ตามรูป

แล้วจากนั้นก็เขียน code ครับ ตามภาพนี้ อันนี้จะยังเป็น ผู้ใช้ทักคำไหน Bot ของเราก็จะตอบ คำนั้นก่อนนะครับ และต้องมี ค่าพวกนี้ด้วยนะครับ ในตัวอย่างของผมจะเป็นเรียกจาก environment

หลังจากนั้นให้เราเขียน Code เพื่อดึง Api หวยที่ผมได้เขียนไว้ โดยใช้ gem rest-client หรือจะใช้ net/http ก็ได้นะครับ
หลังจากติดตั้ง gem rest-client เรียบร้อยแล้ว ให้ ใช้คำเขียน code ดังนี้

symbolize_names: true ก็คือจะแปลงจาก JSON เป็น Hash ใครชอบเรียกแบบ
lottery['data'] # ก็ไม่ต้องใส่ symbolize_names: true ต่อท้ายก็ได้ครับ
ส่วน ap จะเป็นการ print แบบสวยๆ ปกติ ruby จะมี puts อยู่แล้วแต่ออกมา เป็น String ขาวๆ สำหรับผมคืออ่านยาก แต่ gem awesome_print ออกมาเพื่อช่วยให้ ไล่อ่านค่าในตัวแปร ง่ายขึ้น ตามรูปเลยครับ จะไปออกที่ terminal ที่รัน rails server อยู่

หลังจากนั้นก็ให้ bot ตอบกลับไปหาผู้ใช้ โดยข้อมูลที่ตอบผมให้ตอบแบบเอา รางวัลที่ 1 ตอบกลับไปนะครับ มี code ดังตามภาพเลย .first ก็คือ array ตัวแรก .last ก็ตัวสุดท้าย การต่อ string ของ ruby ถ้าใช้ double code จะสามารถเอาค่าในตัวแปรมาวางรวมกันได้เลย โดยใส่ #{} ครอบไว้

เพียงเท่านี้ก็ได้ ไลน์ Bot สำหรับถามตอบเรื่องหวยๆ แล้วครับ

ในส่วนของ API หวยที่ผมทำไว้มีทั้งหมด 3 เส้นนะครับ ดังนี้
สำหรับดึงข้อมูลหวยทั้งหมดตามวันที่หวยออก โดยส่ง params date ไปถ้าไม่ส่งจะตอบกลับมาเป็น งวดล่าสุดครับ
GET https://etrackings.com/api/v3/lotteries
cURL นะครับ
curl --location --request GET 'https://etrackings.com/api/v3/lotteries?date=01/02/2020'

เส้นสำหรับ ดูว่ามีงวดอะไรบ้างที่ระบบรองรับ พูดง่ายๆคือ ดูวันที่หวยออก เพื่อนำไป Get ข้อมูลตามงวดที่ต้องการอีกที
GET https://etrackings.com/api/v3/lotteries/archive
curl --location --request GET 'https://etrackings.com/api/v3/lotteries/archive'

เส้นสำหรับ ตรวจหวย รองรับการตรวจหลายเลขพร้อมๆกัน
POST https://etrackings.com/api/v3/lotteries/check
params date: Date e.g.01/06/2020
numbers: Array<String> e.g. ["123456", "654321"]curl --location --request POST 'https://etrackings.com/api/v3/lotteries/check' \
--header 'Content-Type: application/json' \
--data-raw '{
"date": "01/06/2020",
"numbers": [
"123456"
]
}'

ช่วงขายขาย
มี Line Bot eTracking สำหรับเช็คพัสดุ สามารถลองเล่นได้ที่
หรือเพิ่มเพื่อน ได้ที่นี่เลย

GitHub ของผมนะครับ มี โปรเจค Covid ที่มีทั้ง Line Bot และ Web ที่เป็น Ruby on Rails & Angular 8
และยังมี API สำหรับติดตามพัสดุอีกด้วย
ราคาตามนี้เลยครับ