Giới thiệu
Ở trong cái xã hội mà nhà nhà, người người, từ trẻ nhỏ tới người già, từ nông thông tới thành thị đều dùng mạng xã hội. Đặc biệt thứ mà nhiều người đa số đều dùng đó chính là facebook. Nên là facebook là gì hay là làm thế nào chơi facebook thì mình sẽ không đề cập ở trong bài viết này, thế nhá! Với mình là một lập trình viên thì hôm nay, tại đây mình sẽ hưóng dẫn các bạn chơi facebook một cách thật ngầu, thật chất.
Sản phẩm của mình làm ra trong hôm nay chính là: Biến messenger cá nhân trên facebook của bạn thành một bot đa năng.
Demo
Bắt đầu
Thì với mình là một thằng code Python nên trong bài viết này mình xin được phép sẽ dùng Python để múa rìu qua mắt thợ.
- Chuẩn bị:
Những thứ chuẩn bị ở đây anh/em code python chắc chắn biết cài rồi nên mình chỉ liệt kê mà không hưóng dẫn nữa nhé
- Python 3.6
- Cài đặt thư viện fbchat và requests:
1 2 3 | $ pip install fbchat requests |
-
- Tạo một
folder project
: Chắc chắn rồi, khi code chúng ta cần vứt code vào 1 folder ở đây mình đặt tên folder lànguyenmanh_messenger_bot
. - Tạo file
main.py
: * Đây chính là file mình sẽ code chương trình chính trong này =))nói những thứ thừa thãi v**
- Tạo file
tu_vi.py
: Dùng để code mấy thứ liên quan tới API tử vi - Tạo file
session.json
: Dùng lưu session facebook - Tạo file
nguyen_manh_bot.py
: Dùng để code bot messenger
- Tạo một
- Danh sách API dùng trong bài viết:
- Tử vi cung hoàng đạo hằng ngày:
https://api.kma-chatbot.com/cunghoangdao.php?cung=<Tên cung hoàng đạo>
- Ví dụ cung hoàng đạo: Song ngư
- Tử vi 12 con giáp hằng ngày:
https://api.kma-chatbot.com/tuvi.php?tuoi=<con giáp>
- Ví dụ con giáp: Sửu
- Tử vi cung hoàng đạo hằng ngày:
Triển khai code
- Code
tu_vi.py
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import requests class TuVi(): def __init__(self): pass def con_giap(self, Cgiap=''): url = 'https://api.kma-chatbot.com/tuvi.php?tuoi={}'.format(Cgiap.strip()) loi_phan = '' # Lời phán try: r = requests.get(url) data_json = r.json() set_attributes = data_json.get('set_attributes') if set_attributes: loi_phan = '-----{}-----\n- {}\n- {}\n- {}\n- {}\n'.format( set_attributes.get('tvcongiap'), set_attributes.get('congviec'), set_attributes.get('tinhcam'), set_attributes.get('taivan'), set_attributes.get('cantrong') ) except: loi_phan = 'Có thể con giáp bạn nhập bị sai :(' return loi_phan def cung_hoang_dao(self, cung_hd=''): # Cái này mình cho API rồi các bạn tự viết nha =)) Lười! pass |
- Code
nguyen_manh_bot.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # -*- coding: UTF-8 -*- from fbchat.models import * from fbchat import log, Client from tu_vi import TuVi class NguyenManhBot(Client): def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs): self.markAsDelivered(thread_id, message_object.uid) self.markAsRead(thread_id) log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name)) if author_id != self.uid: if message_object.text: if message_object.text == '/Getid' or message_object.text == '/getid': self.send(Message(text=message_object.author), thread_id=thread_id, thread_type=thread_type) elif '/tuvi' in message_object.text: tuoi = message_object.text[message_object.text.index('/tuvi') + len('/tuvi'):] tuvi = TuVi() loi_phan = tuvi.con_giap(Cgiap=tuoi) self.send(Message(text=loi_phan), thread_id=thread_id, thread_type=thread_type) else: self.send(Message( text='\n \n Tôi là Nguyễn Mạnh. \n- Tôi sẽ rep sau khi đi công việc về \n- Nếu xem tử vi gõ /tuvi <tuổi>; ví dụ: /tuvi sửu. \n- Tin nhắn của bạn: {0}'.format( message_object.text)), thread_id=thread_id, thread_type=thread_type ) |
- Code
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import json from nguyen_manh_bot import NguyenManhBot def main(): # Load session đăng nhập từ trước nếu có with open('session.json') as f: session_cookies = json.load(f) client = NguyenManhBot('username', 'password', session_cookies=session_cookies) # Lấy session và lưu vào file để lần sau dùng cho đăng nhập session_cookies_new = client.getSession() with open('session.json', 'w') as outfile: json.dump(session_cookies_new, outfile) # Lắng nghe phản hồi từ messenger client.listen() if __name__ == '__main__': main() |
Đưa code lên heroku
Bây giờ bạn đã có một bot khá ok rồi, bạn có thể chạy trên local nhưng để chuyên nghiệp hơn thì chúng ta nên đưa nó lên heroku để không phải bật máy cho nó listen mãi =))
- Bước 1: Vào heroku tạo một tài khoản
- Vào https://signup.heroku.com/login đăng ký một tài khoản
- Bước 2: Tạo app heroku
- Sau khi đăng ký tài khoản xong và https://dashboard.heroku.com/apps để tạo một app
- Bước 3: Cài git và heroku lên máy
- Heroku có dùng git nên chúng ta cài git lên máy nhé
- Window thì download: https://git-scm.com/downloads
- Linux thì chạy lệnh:
sudo apt-get install git
- Cài heroku
- Window: https://devcenter.heroku.com/articles/heroku-cli
- Linux:
sudo snap install --classic heroku
- Heroku có dùng git nên chúng ta cài git lên máy nhé
- Bước 4: Deploy code lên heroku
- Để heroku chạy được code bạn thì cần phải tạo 1 file ‘Procfile’ trong project với nội dung
1 2 3 | worker: python test.py |
Làm theo các bưóc sau để đưa code lên
- Đăng nhập heroku
1 2 3 | $ heroku login |
- Khởi tạo git
1 2 3 | $ git init |
- Add remote của heroku vào git Thay
nguyen-manh-messenger
bằng tên app bạn tạo trên heroku
1 2 3 | $ heroku git:remote -a nguyen-manh-messenger |
- Deploy app của bạn
1 2 3 4 5 | $ git add . $ git commit -am "Lần đầu làm chuyện ấy" $ git push heroku master |
Kết quả
- Source code: https://github.com/nguyenmanh1997/nguyenmanh-messager
- Sau khi làm theo như mình hướng dẫn bên trên thì bạn đã có một con
bot tra cứu tử vi
trên messenger cá nhân của bạn rồi. Giờ vào tận hưởng thành quả đi nào. - Các bạn dựa vào code mình làm và nâng cấp thêm nhiều chức năng mới nhé.
- Chúc các bạn thành công!
Techtalk via viblo