แหล่งข้อมูลและวิธีอ่านราคา
หน้านี้อธิบายที่มาของราคาทองบนเว็บนี้ วิธีดึงและแปลงข้อมูลจากฟีดจริง และระบบแคชที่ใช้ ทุกอย่างอ้างอิงจากซอร์สโค้ดจริงของโปรเจกต์
แหล่งข้อมูลราคา // Data sources
ราคาทั้งหมดมาจากฟีดเรียลไทม์ของ Thaigold.info ซึ่งให้ราคาสมาคมค้าทองคำ (ทองคำแท่งและทองรูปพรรณ 96.5%) ราคาทองตลาดโลก (XAU/USD) และอัตรา แลกเปลี่ยน USD/THB ในไฟล์เดียว เป็นแหล่งเดียวที่โปรเจกต์นี้เรียกใช้จริง
ข้อมูลต้นทางเป็น JSON array ที่แต่ละแถวมีฟิลด์ name, bid, ask และ diff โปรเจกต์จับคู่แถวด้วยชื่อดังนี้:
สมาคมฯ -> ทองคำแท่ง 96.5% (goldBar)
96.5% -> ทองรูปพรรณ 96.5% (goldJewelry)
GoldSpot -> ทองตลาดโลก XAU/USD (spot)
THB -> อัตราแลกเปลี่ยน USD/THB (thb)
Update -> เวลาอัปเดต (unix seconds ใน field bid)วิธีอ่านและแปลงข้อมูล // Parsing logic
ฟีดเป็น JSON จึงไม่มีการ scrape HTML การอ่านค่าใช้ JSON.parse แล้วสร้าง Map ตามชื่อแถว (parseFeed ใน src/lib/gold.ts) การทำความสะอาด ตัวเลขใช้ regexpression เดียวใน toNum:
// ตัดเครื่องหมาย +, จุลภาค (,) และช่องว่างออกก่อนแปลงเป็นตัวเลข
const cleaned = v.toString().replace(/[+,\s]/g, "");
const n = Number(cleaned);regex /[+,\s]/g ใช้เพื่อทำความสะอาดสตริงตัวเลขเท่านั้น (เช่น "+150" หรือ "64,900") ไม่ได้ใช้ดึงราคา จากมาร์กอัป ค่าที่แปลงไม่ได้จะกลายเป็น null และแสดงเป็น ---- บนหน้าเว็บ
ระบบแคชและการรีเฟรช // Caching
การดึงข้อมูลทำฝั่งเซิร์ฟเวอร์ผ่าน TanStack Start server function (getGoldData) หน้าแรกโหลดข้อมูลครั้งแรกใน route loader (server-render) จากนั้นฝั่งไคลเอนต์จะรีเฟรชเองทุก 60 วินาที และมีปุ่มรีเฟรชแบบกดเอง
โปรเจกต์นี้ไม่ได้แคชค่าราคาไว้ในหน่วยความจำหรือฐานข้อมูล แต่ละครั้งที่ เรียกจะ fetch สดจากฟีดต้นทาง (มี timeout 9 วินาที) การ "คงค่าเดิม" ทำที่ ฝั่ง client เท่านั้น: ถ้ารีเฟรชแล้วดึงไม่สำเร็จ (ok:false) จะไม่เขียนทับสเตต ทำให้ยังเห็นราคาล่าสุดที่ดึงได้ก่อนหน้า
อ่านต่อ // Continue
ไม่มีฐานข้อมูลหรือ API key ในโปรเจกต์นี้ - ดึงจากฟีดสาธารณะโดยตรง