URL ผลิตภัณฑ์: https://euromillions.api.pedromealha.dev
URL การแสดงละคร: https://euromillions.staging.api.pedromealha.dev
กองเทคโนโลยี : Python, Flask, PostgreSQL, Docker, Terraform, Github Actions
การปฏิเสธความรับผิด : ข้อมูลผลลัพธ์ใน API นี้แยกวิเคราะห์จากเว็บไซต์ https://www.euro-millions.com ข้อมูลนี้มีวัตถุประสงค์เพื่อให้ข้อมูลเท่านั้น คุณไม่ควรตีความข้อมูลดังกล่าวหรือข้อมูลอื่น ๆ ว่าเป็นคำแนะนำทางการเงิน ไม่มีสิ่งใดใน API นี้ที่ถือเป็นการชักชวน คำแนะนำ การรับรอง หรือข้อเสนอเพื่อซื้อตั๋ว Euromillions API นี้ไม่มีส่วนเกี่ยวข้องกับองค์กร Euromillions ทุกประเภท
REST API ขนาดเล็กสำหรับการแข่งขัน Euromillions ที่นี่คุณจะพบผลลัพธ์ทั้งหมดตั้งแต่ปี 2004 และสถิติ/การวิเคราะห์บางส่วนที่นี่
จุดสิ้นสุดของการจับรางวัลมีฟีเจอร์เจ๋งๆ สำหรับการกรองการจับรางวัลตาม year
หรือ dates
สิ่งนี้เกิดขึ้นเนื่องจากไม่มีวิธีรับข้อมูลนี้อย่างง่ายดาย เนื่องจากข้อมูลนี้เป็นความรู้สาธารณะ สถาบันจึงควรจัดให้มี API สำหรับข้อมูลดังกล่าว ในขณะเดียวกัน ด้วยอุปกรณ์ปลายทางเหล่านี้ ชุมชนก็สามารถสร้างผลิตภัณฑ์ที่น่าทึ่งเกี่ยวกับบริบทของ Euromillions ได้ ไม่ว่าจะเป็นแอปมือถือหรือเว็บแอป
เป้าหมายของฉันคือการสร้างเว็บแอปเพื่อสร้างตัวเลขเพื่อเล่นตามสถิติ/การวิเคราะห์
สำหรับเอกสารประกอบ เราใช้ข้อกำหนด OpenAPI เรามีตำแหน่งข้อมูลทั้งหมดพร้อมสคีมาและตัวอย่างสำหรับกรณีการใช้งานแต่ละกรณี ไม่ใช่เพียงเพราะเป็นมาตรฐานอุตสาหกรรมในการใช้งาน แต่ยังเป็นเพราะสามารถอัปเดตและอ่านได้ง่ายมาก
เกี่ยวกับฐานข้อมูล เราใช้ภาษามาร์กอัปฐานข้อมูล -- เรียกสั้น ๆ ว่า DBML มันน่าทึ่งจริงๆ อีกครั้งและสามารถทำให้ช่างไม้หน้าใหม่เร่งความเร็วได้ทันที นอกจากนี้ยังมีเครื่องมือออนไลน์เพื่อแสดงภาพสคีมาตาราง
คุณสามารถตรวจสอบเอกสารปัจจุบัน ได้ที่นี่
สำหรับผลการออกรางวัล Euromillions เราใช้เว็บไซต์ https://www.euro-millions.com มีหน้าเว็บที่มีข้อมูลประวัติสำหรับผลการออกรางวัลที่มีอยู่ทั้งหมด เราไม่ใช้ API ใด ๆ เราแยกวิเคราะห์หน้าเว็บสำหรับข้อมูลเฉพาะที่เราต้องการ
สำหรับการออกรางวัลใหม่ เรามี cronjob ดังต่อไปนี้:
# ทุกวันอังคารและวันศุกร์ ทุก 15 นาทีระหว่าง 21 ชม.-23 ชม.*/15 21-23 * * 2,5 flyctl ssh console -a prod-euromillions-api -C "sh app/scripts/cronjobs/add_draws.sh"*/15 21 -23 * * 2,5 คอนโซล flyctl ssh -a staging-euromillions-api -C "sh แอป/สคริปต์/cronjobs/add_draws.sh"
คำสั่งนี้จะรันสคริปต์เพื่อเพิ่มการดึงภายในคอนเทนเนอร์การผลิตและการจัดเตรียมของเรา วิธีนี้ช่วยให้เรามั่นใจได้ว่าโค้ดจะทำงานในสภาพแวดล้อมเดียวกัน และเราไม่จำเป็นต้องใช้ตำแหน่งข้อมูลแบบเปิดเผยในการดำเนินการ
เราใช้ประโยชน์จากพลังและความเรียบง่ายที่ Github Actions มี การผสานรวมโฟลว์การปรับใช้ของเราสำหรับการจัดเตรียมและการใช้งานจริงเป็นเรื่องง่าย นอกจากนี้เรายังมี Terraform ที่ทำงานอยู่ในเวิร์กโฟลว์ทั้งหมดของเราอีกด้วย ขณะนี้ เรากำลังใช้รีจีสทรีคอนเทนเนอร์ Github เพื่อพุชอิมเมจนักเทียบท่าที่เราจะใช้เพื่อรัน API ของเรา เนื่องจาก Fly.io ไม่อนุญาตให้เรามีสภาพแวดล้อมที่แตกต่างกัน เราจึงจำเป็นต้องสร้างแอปที่แตกต่างกันสำหรับการจัดเตรียมและการผลิต ทันทีที่เราผลักดันอิมเมจ เราเพียงแต่สร้างรีลีสใหม่เพื่อให้เวอร์ชันใหม่พร้อมใช้งาน นี่เป็นการปรับปรุงครั้งใหญ่เนื่องจากตอนนี้ API ของเราทำงานในคอนเทนเนอร์ ทำให้ปรับใช้และบำรุงรักษาได้ง่ายขึ้น
โชคดีที่เราสามารถใช้ Terraform เพื่อจัดการอินฟาเรด Fly.io ด้วยโค้ดได้ เนื่องจากยังไม่มีอะไรให้ทำมากนัก ตอนนี้เราใช้ Terraform เพื่อสร้างแอป IP สาธารณะของแอป และใบรับรองโดเมน สำหรับฐานข้อมูล Fly.io ยังไม่อนุญาตให้จัดการโดยใช้ Terraform ดังนั้นเราจึงต้องสร้างด้วยตนเองโดยใช้ flyctl
สิ่งนี้ถูกรวมเข้ากับ CI ของเราในเวิร์กโฟลว์การแสดงละครและขั้นตอนการผลิตพร้อมพื้นที่ทำงานที่เกี่ยวข้อง
เรามีสองวิธีในการทำงานภายในโปรเจ็กต์นี้: นักเทียบท่าหรือเรียกใช้แอปแฟลช
ในการเริ่มต้นการโคลน repo
โคลนคอมไพล์ https://github.com/pedro-mealha/euromillions-apicd euromillions-api
สร้างและเริ่มคอนเทนเนอร์นักเทียบท่า
สร้าง start_docker
สิ่งนี้จะเริ่มต้นคอนเทนเนอร์ด้วยฐานข้อมูล postgres และคอนเทนเนอร์อื่นที่มีอิมเมจหลาม ในคอนเทนเนอร์ Python มันจะคัดลอกไฟล์โปรเจ็กต์ทั้งหมด ติดตั้งข้อกำหนด และสุดท้ายรันแอป Flask
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง python 3.12 และฐานข้อมูล postgres แล้ว
ข้อกำหนดในการติดตั้ง
pip ติดตั้ง -r ข้อกำหนด.txt
เรียกใช้แอปขวด
เริ่มต้น
สำหรับการโยกย้ายเราใช้โยโย่ มันตรงไปตรงมามาก แต่ถึงกระนั้น เรามีคำสั่งบางอย่างใน Makefile:
หากต้องการดำเนินการย้ายข้อมูล:
ทำให้การโยกย้าย
หากต้องการย้อนกลับการโยกย้ายครั้งล่าสุด:
ทำการโยกย้าย_ย้อนกลับ
หากต้องการสร้างการย้ายข้อมูลใหม่ อาจยุ่งยากเล็กน้อย เนื่องจากเราไม่ชอบไฟล์ .py จึงตัดสินใจใช้ไฟล์ raw sql แต่สิ่งนี้มาพร้อมกับค่าใช้จ่ายที่เราต้องสร้างไฟล์ใหม่ด้วยตนเอง
เพียงทำตามรูปแบบที่มีอยู่แล้วก็น่าจะค่อนข้างง่าย
ได้รับอนุญาตจาก MIT (ไฟล์ลิขสิทธิ์)