Khi lập trình viên chơi facebook - Biến Facebook messenger thành bot tra cứu tử vi
Khi lập trình viên chơi facebook - Biến Facebook messager thành bot tra cứu tử vi
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ó vẻ lặp từ xã hội - nhưng kệ đ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 à mà có là lập trình viên không ta? chắc chỉ là thằng đi code thôi =((
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.
=> Xàm xàm thế đủ rồi, bắt đầu thôi nào =)) => Sản phẩm của mình làm ra trong hôm nay chính là: Biến “Messager 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:
$ 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_messager_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 messager
-
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
:
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
# -*- 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
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ừ messager
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
-
-
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
worker: python test.py
-
Làm theo các bưóc sau để đưa code lên
- Đăng nhập heroku
$ heroku login
- Khởi tạo git
$ git init
- Add remote của heroku vào git
Thay
nguyen-manh-messager
bằng tên app bạn tạo trên heroku
$ heroku git:remote -a nguyen-manh-messager
- Deploy app của bạn
$ 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 messager 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!