1 มกราคม 2562

Published มกราคม 01, 2562 by with 4 comments

เขียนบอต Facebook สวัสดีปีใหม่ง่าย ๆ ด้วย Python

สวัสดีปีใหม่ 2562 ทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปเขียนบอต Facebook สวัสดีปีใหม่ง่าย ๆ ด้วย Python กันครับ

ในการทำบอตสวัสดีปีใหม่ เราคงอยากส่งเป็นเฟสบุ๊คส่วนตัวของเราที่จะส่งข้อความไปให้ทุกคนที่เป็นเพื่อนในเฟส (คล้าย ๆ กับการส่ง sms ให้ทุกคนเมื่อหลายปีก่อน) เราสามารถทำได้ง่าย ๆ ด้วย Python

โปรแกรมที่เราจะทำจะส่งข้อความเดียวกันไปให้ทุกคนในเฟส โดยเราจะเป็นคนกดส่ง ก่อนที่โปรแกรมจะทำการส่งให้ทุกคน

ก่อนอื่นให้ทำการติดตั้ง fbchat ด้วยคำสั่ง pip install fbchat

เสร็จแล้วมาลองมือโค้ดกันเลยครับ
# -*- coding: utf-8 -*-
import sys
from fbchat import Client
from fbchat.models import *
user= "ชื่อบัญชี Facebook"
pas= "รหัสผ่าน"
client = Client(user,pas)
users = client.fetchAllUsers()
listuser=[user.uid for user in users if user.uid!="0"] # ดึง uid หรือ id ของทุกคนสำหรับใช้ส่งข้อความ
on=input("input to send : ") # กดพิมพ์อะไรก็ได้เพื่อเริ่มส่ง
if on=="exit": # กดพิมพ์ exit คือออก
    client.logout() # ออกจากระบบ
    sys.exit() #ออกจากโปรแกรม
for id in listuser: # ลูป id เพื่อนทุกคนในเฟส
    client.send(Message(text='สวัสดีปีใหม่'), thread_id=id, thread_type=ThreadType.USER) # ส่งข้อความสวัสดีปีใหม่
print("happy new year :D")
client.logout() # ออกจากระบบ

กรณีที่มีเพื่อนในเฟสมากเกินไป อาจจะโดนบล็อกได้ ให้ใช้ time.sleep หน่วงเวลาส่งและใช้ try except เข้ามาช่วย

กรณีอยากได้ชื่อเฟส ดึงมาได้ด้วยคำสั่ง [user.name for user in users]

นอกจากส่งเป็นข้อความ ยังสามารถส่งเป็นรูปภาพได้ด้วยคำสั่ง
client.sendLocalImage('<image path>', message=Message(text='This is a local image'), thread_id=id, thread_type=ThreadType.USER)
หรือ
client.sendRemoteImage('<image url>', message=Message(text='This is a remote image'), thread_id=id, thread_type=ThreadType.USER)

อ่านเอกสาร fbchat ได้ที่ https://fbchat.readthedocs.io/

สวัสดีปีใหม่ครับ

4 ความคิดเห็น:

  1. ทำไมต้องมี # -*- coding: utf-8 -*-

    ตอบลบ
  2. จะปลอดภัยหรือไม่? เพราะว่า user กับ password เขียนลงใน text

    ตอบลบ
  3. Python เขียนสุ่มเชินเพื่อนในเฟสได้ไหมครับ


    ตอบลบ

แสดงความคิดเห็นได้ครับ :)