ทำระบบดึง Data จากหลายแหล่งด้วย RSS & API: สร้าง Content Aggregator อย่างถูกหลัก SEO

อัปเดต 12 ก.ย. 2026 Saiimog Dev อ่าน 4 นาที 5 ผู้อ่าน

ทำระบบดึง Data จากหลายแหล่งด้วย RSS & API: สร้าง Content Aggregator อย่างถูกหลัก SEO

ตื่นมาเช็คหน้าเว็บตัวเองแล้วพบว่า Traffic ตกฮวบเพราะ Content ไม่อัปเดต ทั้งที่แหล่งข้อมูลในตลาดมีเป็นร้อยจุด การนั่งไล่กดอ่านทีละเว็บเพื่อสรุปความเองไม่ใช่วิธีที่คนทำระบบในยุคนี้ทำกันครับ ผมเคยพยายามเขียนสคริปต์ดึงข้อมูลแบบถึกๆ จนสุดท้าย Server ล่มเพราะโดนบล็อก IP จากการยิง Request ถี่เกินไปจนกลายเป็น DDoS โดยไม่ได้ตั้งใจ วันนี้ผมจะพามาดูวิธีสร้างระบบดึงข้อมูลแบบมืออาชีพที่ประหยัดทรัพยากรและไม่โดนแบน

1. วางโครงสร้างฐานข้อมูลแบบ Normalized

การเก็บข้อมูลแบบสะเปะสะปะจะทำให้ระบบของคุณพังในระยะยาว ผมแนะนำให้ใช้ PostgreSQL 15 (เวอร์ชันล่าสุดที่เสถียรสำหรับงาน Production) เพราะรองรับ JSONB ที่ช่วยให้เก็บ Metadata ของแต่ละแหล่งที่มาไม่เหมือนกันได้ดี

CREATE TABLE feeds (id SERIAL PRIMARY KEY, source_url TEXT NOT NULL, type VARCHAR(10) CHECK (type IN ('rss', 'api')), last_fetched TIMESTAMP); CREATE TABLE items (id SERIAL PRIMARY KEY, feed_id INT REFERENCES feeds(id), title TEXT, content_hash VARCHAR(64) UNIQUE, pub_date TIMESTAMP);

บรรทัดแรกสร้างตารางเก็บแหล่งที่มา ส่วนบรรทัดที่สองเก็บข้อมูลรายชิ้น โดยใช้ content_hash เพื่อป้องกันการดึงข้อมูลซ้ำ (Duplicate Content) ซึ่งเป็นศัตรูตัวฉกาจของ SEO ผลลัพธ์คือคุณจะได้ฐานข้อมูลที่สะอาด หากรันแล้วขึ้น Error ว่า relation already exists แปลว่าคุณเคยรันคำสั่งนี้ไปแล้ว ให้เช็คด้วย able ใน psql

2. ดึงข้อมูล RSS Feed ด้วย Feedparser

Python 3.11 คือตัวเลือกที่ดีที่สุดในตอนนี้ ผมเลือกใช้ feedparser เพราะจัดการกับมาตรฐาน RSS หลายเวอร์ชัน (เช่น RSS 0.9, 1.0, 2.0 และ Atom) ได้จบในตัวเดียว

import feedparser; feed = feedparser.parse('https://example.com/rss'); print(feed.entries[0].title)

โค้ดนี้ดึง Title ล่าสุดจาก Feed ออกมาแสดงผล อธิบายคือ parse() จะแปลง XML ซับซ้อนให้กลายเป็น Dictionary ของ Python ที่เข้าถึงง่าย หากได้ Error ModuleNotFoundError แปลว่าคุณยังไม่ได้ pip install feedparser ครับ

3. จัดการ API Rate Limit แบบฉลาด

การดึงข้อมูลผ่าน API มักจะโดนจำกัดจำนวนครั้ง ผมไม่ใช้การทำ Sleep แบบสุ่ม แต่ใช้วิธีเก็บ X-RateLimit-Reset ที่ Header ของ API ตอบกลับมา แล้วตั้งเวลาให้ Task ตัวเองตื่นขึ้นมาใหม่เมื่อถึงเวลาที่กำหนดเท่านั้น

4. ป้องกัน Duplicate Content ด้วย Canonical Tags

ถ้าคุณดึงเนื้อหาคนอื่นมาแสดงตรงๆ Google จะมองว่าเว็บคุณเป็น Spam วิธีแก้คือต้องใส่ <link rel="canonical" href="URL_ต้นฉบับ" /> ในหน้าเพจเสมอ เพื่อบอก Google ว่าต้นฉบับอยู่ที่ไหน

5. ปรับแต่งเนื้อหาเพื่อ SEO (Summarization & Rephrasing)

อย่าดึงมาทั้งดุ้น ให้ใช้ OpenAI API (gpt-3.5-turbo) ช่วยสรุปเนื้อหาให้เหลือ 200 คำ แล้วเขียน Intro ใหม่เอง นี่คือวิธีที่ทำให้ Google มองว่าเว็บคุณมี Unique Value

6. ทำ Queue System ด้วย Celery

อย่ารันงานดึงข้อมูลใน Web Request เด็ดขาดครับ ให้ใช้ Celery ร่วมกับ Redis เพื่อแยกงานไปทำใน Background Task ไม่งั้นเว็บคุณจะโหลดช้าจนคนหนี

7. มอนิเตอร์สุขภาพของแหล่งข้อมูล

ใช้ requests ตรวจสอบ Status Code ถ้าเจอ 404 หรือ 500 ติดต่อกัน 3 ครั้ง ให้ระบบสั่งปิด Feed นั้นชั่วคราวและส่งแจ้งเตือนเข้า Slack หรือ Telegram เพื่อให้คุณเข้าไปเช็คว่าแหล่งข้อมูลนั้นเปลี่ยนโครงสร้างหรือตายไปแล้ว

เมื่อไหร่ที่ไม่ควรทำ Content Aggregator

ถ้าเป้าหมายของคุณคือการทำเว็บเพื่อหาเงินจาก AdSense ทันทีโดยไม่ใส่ความเห็นส่วนตัวลงไปเลย ผมบอกเลยว่า อย่าทำครับ Google ฉลาดพอที่จะแยกแยะได้ว่าอันไหนคือ Content คุณภาพ อันไหนคือการ Scrap ข้อมูลมาแปะ ทางเลือกที่ดีกว่าคือการทำ Curated Content ที่คุณต้องเขียนบทวิเคราะห์กำกับทุกครั้งที่ดึงเนื้อหามา สิ่งที่คุณควรทำต่อจากนี้คือลองสร้างระบบตัวเล็กๆ สำหรับดึงข่าวในกลุ่มเฉพาะ (Niche) ที่คุณสนใจ แล้ววัดผลการคลิกผ่าน (CTR) ว่าคนอ่านชอบเนื้อหาแบบไหนที่สุดก่อนขยายสเกลครับ

Python PostgreSQL RSS SEO Celery

Saiimog Dev — เขียนจากงานที่ทำจริงบน <SaiimogDev />
<p>Saiimog Dev คือผู้เชี่ยวชาญด้านการพัฒนาระบบดิจิทัลแบบครบวงจร (End-to-End Digital Solutions Provider) ไม่ว่าจะเป็นการพัฒนาเว็บไซต์ (Web Development), เว็บแอปพลิเคชัน (Web Applica...
แชร์บทความนี้