เขียน Python CLI คุย REST API จัดการข้อมูลง่ายๆ
สวัสดีครับ วันนี้ผมจะมาเล่าเรื่องการทำ CLI ด้วย Python ให้เพื่อนๆฟังนะครับ คือบางทีเราอยากได้ข้อมูลจาก API มาดูแบบง่ายๆ ไม่ต้องเปิด Browser หรือ Postman ใช่ไหมครับ แบบนี้เราทำ CLI เล็กๆไว้ดึงข้อมูลแล้วก็เอามาปรับแต่งแสดงผลให้มันดูง่ายๆได้นะครับ เหมาะกับมือใหม่เลย
1. เริ่มจากดึงข้อมูล REST API กันก่อน
แน่นอนว่า Python มันมี library ดีๆ อย่าง requests อยู่แล้วครับ คือใช้ง่ายมากๆเลย ผมจะลองยกตัวอย่าง ดึงข้อมูลจาก Public API ง่ายๆ อย่าง JSONPlaceholder นะครับ
import requests
# ลองดึงโพสต์แรกมาดูครับ
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
post_data = response.json()
print("ข้อมูลโพสต์แรก:")
print(post_data)
จากนั้น ลองคิดว่าเราอยากได้แค่ title กับ body มาแสดงนะครับ เราก็ทำแบบนี้ได้เลย
print(f"Title: {post_data['title'].upper()}") # ลองให้เป็นตัวใหญ่หมด
print(f"Body: {post_data['body'].split('\
')[0]}...") # เอาแค่บรรทัดแรก
2. ทำเป็น CLI ด้วย argparse
คือเราไม่อยากแก้โค้ดทุกครั้งที่อยากเปลี่ยน ID ของโพสต์ใช่ไหมครับ เราก็เอา argparse มาช่วยได้เลยครับ ให้เราสามารถรับค่าจาก command line ได้ง่ายๆ นะครับ
import argparse
parser = argparse.ArgumentParser(description='ดึงข้อมูลโพสต์จาก JSONPlaceholder API.')
parser.add_argument('post_id', type=int, help='ID ของโพสต์ที่ต้องการดึง')
args = parser.parse_args()
# ตรงนี้ก็จะเอา post_id ไปใช้ได้เลย
print(f"กำลังดึงโพสต์ ID: {args.post_id}")
3. รวมร่าง API กับ CLI และ String Manipulation
คราวนี้เราจะเอามารวมกันนะครับ แบบว่า ดึงมาแล้วก็เอา title มาแปลงเป็นตัวใหญ่หมด แล้วก็ body เอาแค่บรรทัดแรกมาแสดง แบบนี้นะครับ
# post_reader.py
import requests
import argparse
def get_post_data(post_id):
url = f'https://jsonplaceholder.typicode.com/posts/{post_id}'
try:
response = requests.get(url, timeout=5) # ใส่ timeout ไว้ด้วยก็ดีนะครับ
response.raise_for_status() # ถ้ามี error จาก HTTP ก็แจ้งด้วย
return response.json()
except requests.exceptions.RequestException as e:
print(f"มีปัญหาตอนดึงข้อมูล: {e}")
return None
def main():
parser = argparse.ArgumentParser(description='ดึงข้อมูลโพสต์จาก JSONPlaceholder API แล้วแสดงผลแบบง่ายๆ')
parser.add_argument('post_id', type=int, help='ID ของโพสต์ที่ต้องการดึง')
args = parser.parse_args()
post = get_post_data(args.post_id)
if post:
print(f"Title: {post['title'].upper()}") # แปลงเป็นตัวพิมพ์ใหญ่หมด
# ตัด body ให้เหลือแค่ประโยคแรก หรือประมาณ 100 ตัวอักษร แล้วค่อยเติม ... นะครับ
body_content = post['body'].replace('\
', ' ')
if len(body_content) > 100:
display_body = body_content[:100] + '...'
else:
display_body = body_content
print(f"Body: {display_body}")
else:
print("ไม่พบข้อมูล หรือมีข้อผิดพลาดเกิดขึ้น")
if __name__ == '__main__':
main()
วิธีใช้งาน:
python post_reader.py 1
python post_reader.py 5
จะเห็นว่าเราได้ CLI ง่ายๆ ที่ใช้ดึงข้อมูลจาก REST API มาแล้วก็จัดฟอร์แมตข้อมูลด้วย string manipulation ครับ คือมันง่ายมากๆ เลยใช่ไหมครับ เพื่อนๆ ก็ลองเอาไปปรับใช้กับ API อื่นๆ ได้เลยนะครับ
หวังว่าบทความนี้จะเป็นประโยชน์กับมือใหม่ทุกคนนะครับ
ขอบคุณครับ