Programming
น้องๆ เคยไหม? ทำงานเดิมๆ ซ้ำๆ ทุกวัน กรอกข้อมูล, แปลงไฟล์, ส่งอีเมล... โอ๊ย! ปวดหัว สมัยผมทำร้านเน็ตนี่แหละ ตัวดีเลย ต้องมานั่งไล่บิลลูกค้า, เช็คเครื่อง, สารพัดจะจุกจิก ถ้ามี Python ตั้งแต่ตอนนั้นนะ ชีวิตคงสบายกว่านี้เยอะ
Python เนี่ย มันเป็นภาษาโปรแกรมที่ใช้ง่าย แถมมี Library (เหมือนพวก Plugin สำเร็จรูป) เพียบ! เอามาช่วยทำงาน Automation ได้สารพัด ตั้งแต่เรื่องง่ายๆ ยันซับซ้อน น้องๆ ลองนึกภาพนะ จากที่ต้องมานั่งคลิกๆๆๆ ทั้งวัน กลายเป็นสั่ง Python ทำงาน แล้วเราไปพักกินกาแฟชิลๆ โคตรฟิน!
ถามว่าทำไมต้อง Automation? ง่ายๆ เลยนะ
สมัยผมดูแลระบบ Server เองนะ, Script เล็กๆ น้อยๆ ที่เขียนด้วย Python ช่วยชีวิตไว้เยอะเลย ไม่งั้นคงต้องนั่งแก้ config file ทีละเครื่อง, ทีละบรรทัด ตายแน่ๆ
เอาล่ะ! มาเริ่มกันเลยดีกว่า ผมจะสอนแบบ Step-by-Step ให้น้องๆ เอาไปลองทำตามได้เลย
อย่างแรกเลย ต้องมี Python ก่อน ไปโหลดได้ที่ python.org เลือก Version 3 นะ (Version 2 เลิกใช้ไปแล้ว)
พอลงเสร็จแล้ว ก็เปิด Command Prompt (Windows) หรือ Terminal (Mac/Linux) แล้วพิมพ์คำสั่งนี้ เพื่อติดตั้ง Package ที่จำเป็น:
pip install requests beautifulsoup4 schedule
คำสั่งนี้จะติดตั้ง requests (เอาไว้ดึงข้อมูลจากเว็บ), beautifulsoup4 (เอาไว้จัดการข้อมูล HTML) และ schedule (เอาไว้ตั้งเวลาให้โปรแกรมทำงาน)
สมมติว่าเราอยากดึงราคาทองคำจากเว็บ สมาคมค้าทองคำ มาเก็บไว้ทุกวัน (อย่าเอาไปแทงทองนะน้อง 555)
เราสามารถใช้ requests กับ beautifulsoup4 ทำได้แบบนี้:
import requests
from bs4 import BeautifulSoup
url = "https://www.goldtraders.or.th/"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# หา tag ที่มีข้อมูลราคาทอง (อันนี้ต้องไป inspect element ในเว็บดูก่อนนะ)
gold_price = soup.find("span", {"id": "GoldPrice965_BL"}).text
print("ราคาทองคำวันนี้:", gold_price)
Code นี้จะดึง HTML จากเว็บ, แล้วใช้ BeautifulSoup ค้นหา tag ที่มี id ว่า GoldPrice965_BL ซึ่งเป็น tag ที่เก็บราคาทองคำ แล้วก็ Print ออกมา
สมัยผมทำ SiamCafe.net นี่, ผมเคยเขียน Script ดึงข้อมูลเกมออนไลน์จากหลายๆ เว็บมาแสดงผลในเว็บตัวเองด้วยนะ แต่ต้องระวังเรื่องลิขสิทธิ์หน่อยนะน้อง
ทีนี้ เราจะตั้งเวลาให้ Code ข้างบนทำงานทุกวันตอน 9 โมงเช้า ทำได้โดยใช้ schedule:
import requests
from bs4 import BeautifulSoup
import schedule
import time
def get_gold_price():
url = "https://www.goldtraders.or.th/"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
gold_price = soup.find("span", {"id": "GoldPrice965_BL"}).text
print("ราคาทองคำวันนี้:", gold_price)
schedule.every().day.at("09:00").do(get_gold_price)
while True:
schedule.run_pending()
time.sleep(60) # เช็คทุกๆ 60 วินาที
Code นี้จะกำหนดให้ Function get_gold_price ทำงานทุกวันตอน 9 โมงเช้า โดยใช้ schedule
น้องๆ สามารถปรับเวลาได้ตามใจชอบเลยนะ เช่น schedule.every().hour.do(get_gold_price) (ทุกๆ ชั่วโมง) หรือ schedule.every().monday.do(get_gold_price) (ทุกวันจันทร์)
นอกจากดึงราคาทองคำแล้ว Python ยังทำอะไรได้อีกเยอะแยะ มาดู Use Cases อื่นๆ กัน:
สมัยผมทำร้านเน็ต, ผมเคยเขียน Script ให้มัน Back-up ฐานข้อมูลทุกคืนอัตโนมัติด้วยนะ ป้องกัน Database เจ๊ง แล้วข้อมูลหายหมด
| คุณสมบัติ | Python Automation | Manual (ทำเอง) |
|---|---|---|
| ความเร็ว | เร็วกว่า | ช้ากว่า |
| ความแม่นยำ | แม่นยำกว่า | อาจมีข้อผิดพลาด |
| ความเหนื่อย | สบายกว่าเยอะ | เหนื่อย |
| Scale | ขยายได้ง่าย | ขยายยาก |
| ค่าใช้จ่าย | ถูกกว่าในระยะยาว | อาจแพงกว่า |
เห็นไหมล่ะ? Python Automation มันดีกว่าเห็นๆ ใครยังไม่เริ่มใช้ ถือว่าพลาดมาก!
ถ้าอยากรู้เรื่อง Python หรือ Programming เพิ่มเติม แวะมาอ่านบทความที่ SiamCafe Blog ได้นะ มีอะไรดีๆ อีกเยอะ
อย่าลืมแวะมาพูดคุยแลกเปลี่ยนประสบการณ์กันได้ที่ SiamCafe Blog นะครับ
สมัยผมทำร้านเน็ตนี่ปวดหัวสุดคือเรื่อง Dependencies นี่แหละ! โปรแกรม A ดันไปใช้ library เวอร์ชั่นเก่า, โปรแกรม B ต้องการเวอร์ชั่นใหม่กว่า... โอ้โห! Python ก็เหมือนกัน ต้องจัดการ dependencies ให้ดีนะ ไม่งั้นพัง
ใช้ venv เลย! สร้าง environment แยกแต่ละ project ไปเลย จบปัญหา Command ประมาณนี้:
python3 -m venv .venv
source .venv/bin/activate
pip install requests beautifulsoup4
พอเสร็จงานก็ deactivate ออกมาซะ
อย่าคิดว่า script ที่เราเขียนจะไม่มีวัน error! เคยเจอเคสลูกค้าเข้าร้านมาแล้วโปรแกรมคิดเงิน error เพราะ network ขัดข้องไหม? เขียน try...except ดัก error ไว้เสมอ มันช่วยชีวิตเราได้จริงๆ
try:
# โค้ดที่อาจจะ error
response = requests.get("https://www.example.com")
response.raise_for_status() # เช็ค HTTP status code ด้วยนะ
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# ทำอะไรสักอย่างเมื่อ error เช่น log หรือ retry
Logging คือเพื่อนแท้ของ programmer! เวลาเกิดปัญหาอะไรขึ้นมา, log file นี่แหละที่จะบอกเราว่าเกิดอะไรขึ้น Python มี module logging ให้ใช้ ใช้ง่ายมาก
import logging
logging.basicConfig(filename='my_script.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info("Script started")
# ... โค้ด ...
logging.warning("Something might be wrong")
logging.error("An error occurred")
logging.info("Script finished")
พอมี log แล้ว ชีวิตง่ายขึ้นเยอะ!
อย่าคิดว่า code เราเขียนวันนี้ พรุ่งนี้จะจำได้! เขียน comment อธิบายว่า code แต่ละส่วนมันทำงานยังไง คนอื่น (หรือแม้แต่ตัวเราเองในอนาคต) จะได้เข้าใจง่ายๆ ยิ่ง code ซับซ้อน ยิ่งต้อง comment เยอะๆ
เขียนให้เหมือนพี่สอนน้องอะ เข้าใจง่ายดี
Python 3 ไปเลยน้อง! Python 2 เลิก support ไปนานแล้ว Python 3 มี features ใหม่ๆ และ security ดีกว่าเยอะ
requests สำหรับดึงข้อมูลจากเว็บ, beautifulsoup4 สำหรับ parsing HTML, os สำหรับจัดการไฟล์และ directory, และ datetime สำหรับจัดการวันที่และเวลา พวกนี้ใช้บ่อยแน่นอน
ไม่ยากอย่างที่คิด! เริ่มจาก project เล็กๆ ง่ายๆ ก่อน เช่น rename ไฟล์ตาม pattern, download รูปจากเว็บ พอทำไปเรื่อยๆ จะเริ่มคล่องเอง อย่าท้อ!
PyPI (Python Package Index) เลยน้อง https://pypi.org/ มีทุกอย่างที่เราต้องการ ค้นหา library ที่ต้องการแล้วใช้ pip install ได้เลย
ถ้าจะทำเว็บแนะนำ Flask หรือ Django แต่ถ้าจะทำพวก Data Science แนะนำ Pandas กับ NumPy แต่ถ้าจะเทรด Forex แนะนำไปดูที่ iCafeForex นะครับ
Python Automation มันคือโลกที่เปิดกว้างมาก! เราสามารถใช้ Python ทำอะไรได้เยอะแยะ ตั้งแต่ tasks ง่ายๆ ไปจนถึง project ที่ซับซ้อน ขอแค่เรามีความตั้งใจที่จะเรียนรู้และลองทำ ที่สำคัญอย่าลืมเข้าไปอ่าน SiamCafe Blog ด้วยนะ มีเรื่องน่าสนใจเยอะเลย
หวังว่าบทความนี้จะเป็นประโยชน์นะน้อง! สู้ๆ!