# 🚀 แดชบอร์ดแนวโน้มการเมืองไทย - PHP Version ## 📋 ภาพรวม แดชบอร์ดวิเคราะห์แนวโน้มการเมืองไทยที่ใช้ **PHP** แทน Node.js เพื่อความง่ายในการใช้งานและไม่ต้องติดตั้ง Node.js ## ✨ ฟีเจอร์หลัก - 📊 **ข้อมูลเศรษฐกิจ** จากธนาคารแห่งประเทศไทย - 🗳️ **ข้อมูลการเมือง** จากสำนักงานคณะกรรมการการเลือกตั้ง - 👥 **ข้อมูลประชากร** จากสำนักงานสถิติแห่งชาติ - 📱 **วิเคราะห์ Social Media** แบบ Real-time - 🔄 **ระบบ Cache** เพื่อเพิ่มประสิทธิภาพ - 📤 **ส่งออกข้อมูล** เป็น CSV, JSON, XML - 📱 **Responsive Design** รองรับทุกอุปกรณ์ ## 🛠️ การติดตั้ง ### ข้อกำหนดระบบ - PHP 7.4+ - Web Server (Apache/Nginx) - ไม่ต้องติดตั้ง Node.js! ### ขั้นตอนการติดตั้ง 1. **วางไฟล์ในโฟลเดอร์เว็บ** ```bash # ตัวอย่างสำหรับ XAMPP C:\xampp\htdocs\political-dashboard\ # หรือสำหรับ Linux /var/www/html/political-dashboard/ ``` 2. **ตรวจสอบสิทธิ์ไฟล์** ```bash chmod 755 api.php chmod 755 index-php.html ``` 3. **เปิดใช้งาน** ``` http://localhost/political-dashboard/index-php.html ``` ## 📁 โครงสร้างไฟล์ ``` political-dashboard/ ├── api.php # PHP API หลัก ├── index-php.html # หน้าแดชบอร์ด ├── index.html # หน้าเดิม (ข้อมูลจำลอง) ├── cache/ # โฟลเดอร์ Cache (สร้างอัตโนมัติ) ├── exports/ # โฟลเดอร์ส่งออกข้อมูล (สร้างอัตโนมัติ) └── README-PHP.md # คู่มือนี้ ``` ## 🔌 การใช้งาน API ### ข้อมูลเศรษฐกิจ ```bash GET api.php?action=economic&timeframe=6months ``` ### ข้อมูลการเมือง ```bash GET api.php?action=political&timeframe=6months ``` ### ข้อมูลประชากร ```bash GET api.php?action=demographic®ion=all ``` ### วิเคราะห์ Social Media ```bash GET api.php?action=social_media&keywords=การเมืองไทย,รัฐบาล ``` ### ข้อมูลทั้งหมด ```bash GET api.php?action=all&timeframe=6months®ion=all ``` ### ส่งออกข้อมูล ```bash POST api.php?action=export Content-Type: application/json { "type": "csv", "data": {...} } ``` ## 📊 ตัวอย่างการใช้งาน ### เรียกข้อมูลผ่าน JavaScript ```javascript // โหลดข้อมูลเศรษฐกิจ const response = await fetch('api.php?action=economic&timeframe=6months'); const data = await response.json(); if (data.success) { console.log('GDP Growth:', data.data.gdp_growth); console.log('Inflation:', data.data.inflation_rate); } ``` ### เรียกข้อมูลผ่าน cURL ```bash # ข้อมูลเศรษฐกิจ curl "http://localhost/political-dashboard/api.php?action=economic&timeframe=6months" # ข้อมูลการเมือง curl "http://localhost/political-dashboard/api.php?action=political&timeframe=6months" ``` ## 🔧 การปรับแต่ง ### เปลี่ยนแหล่งข้อมูล แก้ไขใน `api.php`: ```php private function fetchEconomicDataFromAPI($timeframe) { // เปลี่ยน URL API จริง $url = "https://api.bot.or.th/v1/economic-indicators"; // ใช้ cURL หรือ file_get_contents $response = file_get_contents($url); $data = json_decode($response, true); return $data; } ``` ### เพิ่มแหล่งข้อมูลใหม่ ```php public function getNewData($params = []) { $cacheKey = "new_data_" . md5(serialize($params)); if ($this->isCacheValid($cacheKey)) { return $this->getCache($cacheKey); } $data = $this->fetchNewDataFromAPI($params); $this->setCache($cacheKey, $data); return $data; } ``` ### ปรับ Cache Timeout ```php private $cacheTimeout = 300; // 5 นาที // เปลี่ยนเป็น 600 สำหรับ 10 นาที ``` ## 🗄️ ระบบ Cache - **ไฟล์ Cache**: เก็บในโฟลเดอร์ `cache/` - **Timeout**: 5 นาที (ปรับได้) - **รูปแบบ**: JSON - **การล้าง Cache**: อัตโนมัติตามเวลา ### ล้าง Cache เอง ```bash rm -rf cache/* ``` ## 📤 การส่งออกข้อมูล ### รูปแบบที่รองรับ - **CSV**: สำหรับ Excel - **JSON**: สำหรับ API - **XML**: สำหรับระบบอื่น ### ตัวอย่างการส่งออก ```javascript // ส่งออกเป็น CSV const response = await fetch('api.php?action=export', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'csv', data: dashboardData }) }); const result = await response.json(); if (result.success) { // ดาวน์โหลดไฟล์ window.open(result.data.download_url); } ``` ## 🔒 ความปลอดภัย ### การป้องกัน - ✅ **Input Validation** - ✅ **SQL Injection Protection** (ถ้าใช้ฐานข้อมูล) - ✅ **XSS Protection** - ✅ **CORS Configuration** ### การตั้งค่าเพิ่มเติม ```php // เพิ่มใน api.php header('X-Content-Type-Options: nosniff'); header('X-Frame-Options: DENY'); header('X-XSS-Protection: 1; mode=block'); ``` ## 🚀 การพัฒนาต่อ ### เพิ่มฐานข้อมูล ```php // เชื่อมต่อ MySQL $pdo = new PDO( "mysql:host=localhost;dbname=political_data;charset=utf8", "username", "password" ); // บันทึกข้อมูล $stmt = $pdo->prepare("INSERT INTO economic_data (gdp_growth, inflation_rate, created_at) VALUES (?, ?, NOW())"); $stmt->execute([$gdpGrowth, $inflationRate]); ``` ### เพิ่ม Authentication ```php // ตรวจสอบ API Key $apiKey = $_GET['api_key'] ?? ''; if (!in_array($apiKey, $validApiKeys)) { http_response_code(401); echo json_encode(['error' => 'Invalid API key']); exit; } ``` ### เพิ่ม Rate Limiting ```php // จำกัดการเรียก API $clientIP = $_SERVER['REMOTE_ADDR']; $rateLimit = checkRateLimit($clientIP, 100, 3600); // 100 calls/hour if (!$rateLimit) { http_response_code(429); echo json_encode(['error' => 'Rate limit exceeded']); exit; } ``` ## 📈 การติดตามประสิทธิภาพ ### Log การใช้งาน ```php // เพิ่มใน api.php error_log("API Call: " . $_GET['action'] . " from " . $_SERVER['REMOTE_ADDR']); ``` ### ตรวจสอบ Cache Hit Rate ```php private function logCacheHit($key, $hit) { $log = date('Y-m-d H:i:s') . " - Cache " . ($hit ? "HIT" : "MISS") . " for key: $key\n"; file_put_contents('logs/cache.log', $log, FILE_APPEND); } ``` ## 🐛 การแก้ไขปัญหา ### ปัญหาที่พบบ่อย 1. **API ไม่ตอบสนอง** ```bash # ตรวจสอบ PHP error log tail -f /var/log/apache2/error.log ``` 2. **Cache ไม่ทำงาน** ```bash # ตรวจสอบสิทธิ์โฟลเดอร์ chmod 755 cache/ chmod 755 exports/ ``` 3. **CORS Error** ```php // เพิ่มใน api.php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); ``` ### Debug Mode ```php // เพิ่มใน api.php error_reporting(E_ALL); ini_set('display_errors', 1); ``` ## 📞 การสนับสนุน ### การรายงานปัญหา 1. ตรวจสอบ PHP error log 2. ตรวจสอบ Network tab ใน Developer Tools 3. รายงานพร้อมข้อมูล: - PHP Version - Web Server - Error Message - Steps to Reproduce ### การขอฟีเจอร์ใหม่ - ส่งคำขอพร้อมรายละเอียด - ระบุประโยชน์ที่คาดหวัง - แนบตัวอย่างการใช้งาน ## 📄 License MIT License - ใช้งานได้อย่างอิสระ ## 🙏 ขอบคุณ - ธนาคารแห่งประเทศไทย สำหรับข้อมูลเศรษฐกิจ - สำนักงานคณะกรรมการการเลือกตั้ง สำหรับข้อมูลการเมือง - สำนักงานสถิติแห่งชาติ สำหรับข้อมูลประชากร - Chart.js สำหรับการแสดงกราฟ - PHP Community สำหรับเครื่องมือที่ยอดเยี่ยม --- **🎯 เริ่มต้นใช้งานได้ทันทีโดยไม่ต้องติดตั้ง Node.js!**