API LIST#
| Tên | API | Page | Ghi chú |
|---|
| 1 | Calculate all scores | /calculate-all-scores | Prediction | Tính toàn bộ dự đoán |
| 2 | Calculate live | /calculate-live | Prediction | Dự đoán trận LIVE |
| 3 | Calculate hot | /calculate-hot | Prediction | Kèo win cao |
| 4 | Predict log | /predict-log | Prediction | Log kiểm tra |
| 5 | Update soccer survey | POST ajax/updatesoccersurvey | Ajax | Fav / vote |
| 6 | Soccer Ajax | ajax/soccerAjax | Ajax | Data trận |
| 7 | JS dynamic | js/{file} | | JS data |
| 8 | Country image | assets/upload/fbcountry/{file} | asset | Img quốc gia |
| 9 | League image | assets/upload/football/league_match/images/{file} | asset | Img giải |
| 10 | Team image | assets/upload/football/team/images/{file} | asset | Img team |
| 11 | Team image by id | assets/upload/football/team/images/{id}/{file} | asset | Img team nhưng theo id |
| 12 | Info image | assets/upload/football/info/images/{file} | asset | Thông tin image |
| 13 | Player image | assets/upload/football/player/images/{file} | asset | Img cầu thủ |
| 14 | Player image by id | assets/upload/football/player/images/{id}/{file} | asset | Img cầu thủ |
| 15 | Mini image | assets/upload/mn/{file} | asset | Img nhỏ |
| 16 | TV live (empty) | gf/tvlive/tvlive_th_fb.txt | Livescore | Return null |
| 17 | Flash live iframe | soccer/flashlive?id= | Livescore | Embed iframe |
| 18 | Get Match Today | /api/get-match | Public API | Get match today |
| 19 | Get League Rank | /api/get-league-rank | Public API | Get league rank |
| 20 | Get Leagues Rank | /api/get-leagues-rank | Public API | Get leagues rank |
| 21 | AI check | /api/ai-check | AI | Kiểm tra trận đấu AI |
| 22 | AI Update | /api/ai-update | AI | Cập nhật lại kết quả AI |
| 23 | Predict match | /ajax/get-predict-match | AI | Lấy kết quả dự đoán trận đấu |
| 24 | Chi tiết trận live | /ajax/match/live | Live data | |
| 25 | Tỷ số trận | /ajax/match/match-score | Live data | |
| 26 | Trận hot | /ajax/get-hot-matches | Live data | |
| 27 | Dữ liệu match score | /ajax/get-match-core-main | Live data | |
| 28 | Odds score | /ajax/get-odds-core-main | Live data | |
| 29 | Statistics Team | /ajax/get-statistics-team | Statistics | |
| 30 | Statistics Player | /ajax/get-statistics-player | Statistics | |
| 31 | Statistics Score schedule | /ajax/get-statistics-score-schedule | Statistics | |
| 32 | Statistics AD | /ajax/get-attack-defense | Statistics | |
| 33 | Statistics first goal | /ajax/get-first-goal-win-loss | Statistics | |
| 34 | Statistics rank | /ajax/get-statistics-detail-rank | Statistics | |
| 35 | Kèo trực tuyến | /ajax/get-odds-live | Odds | |
| 36 | Kết quả kèo | /ajax/get-odds-result | Odds | |
| 37 | Kèo hỗn hợp | /ajax/get-odds-fixture | Odds | |
| 38 | Lịch sử kèo | /ajax/get-odd-detail-history | Odds | |
Danh sách API#
API: Predict Match Score#
API dùng để dự đoán tỷ số trận đấu (full-time & half-time)
Sử dụng mô hình Poisson dựa trên:
+ Sức phòng thủ (bị thủng lưới)Xác suất các tỷ số (0-0 → 5-5)
Sắp xếp theo % cao → thấp
MatchDetailService → lấy thống kê team
ScheduleRepo → lấy thông tin trận
Không cần cache (API tính realtime)
GET /calculate-all-scores?id={match_id}
Lấy thông tin trận từ scheduleRepo
Lấy stats 10 trận gần nhất của 2 đội:
Bước 2: Tính lambda (Poisson)lambdaHome = homeAttack * awayDefense
lambdaAway = awayAttack * homeDefense
lambdaHome_HT = lambdaHome * 0.5
lambdaAway_HT = lambdaAway * 0.5
Bước 3: Tạo ma trận tỷ sốLoop từ 0 → 5 bàn mỗi đội
P(homeGoals) * P(awayGoals)
Convert sang % và làm tròn 2 chữ số
Giới hạn tối đa: 5 bàn mỗi đội
thống kê 10 trận gần nhất
live event (chỉ dùng pre-match)
Half-time chỉ là scale 50% (approximation)
API: Predict Match Score Live#
API dùng để dự đoán tỷ số trận đấu (full-time & half-time) theo thời gian thực
Sử dụng thông tin cũ từ all score cập nhật thêm các biến số thời gian thực
MatchDetailService → lấy thống kê team
ScheduleRepo → lấy thông tin trận
Không cần cache (API tính realtime)
Param Type Required Mô tả
GET /calculate-live?id={match_id}
Lấy thông tin trận từ scheduleRepo
Lấy dữ liệu cache từ calculate-all-scores
Gọi realtime các dữ liệu trận như thẻ đỏ, thẻ vàng, góc, bàn thắng,...
Đánh trọng số các dữ liệu theo thời gian
API: Predict Match Score hot#
API dùng để dự đoán tỷ số trận đấu (full-time & half-time) hấp dẫn nhất
Sử dụng thông tin đã lưu trong database truy vấn thông tin hấp dẫn nhất
MatchDetailService → lấy thống kê team
ScheduleRepo → lấy thông tin trận
Không cần cache (API tính realtime)
Param Type Required Mô tả
Nhận input filter: % win, thời gian, giải đấu, limit
Query dữ liệu từ MatchPredictLog (chưa có kết quả, chưa live)
Lọc theo thời gian (mặc định: từ hiện tại -4h đến hết ngày mai)
Duyệt từng trận, build thông tin trận (team, league, time)
Parse dữ liệu 4 loại kèo: 1X2, Handicap, Over/Under, Correct Score
Chuẩn hóa dữ liệu từng kèo (label, odds, percent, hope)
Gom tất cả kèo vào danh sách candidates
Lọc kèo theo điều kiện: % nằm trong khoảng min-max
Chọn kèo có % cao nhất làm kèo tốt nhất
Trả về kết quả + thông tin trận + nhận định AI (Grok)
{"status":"success","best_percent":83.12,"best_bet":{"type":"Handicap","bet_label":"Modern Sport FC (W) +3","selection":"Modern Sport FC (W) +3","percent":83.12,"hope":0.79,"odds":0.95,"company":"Bet365"},"match":{"match_id":2964750,"league":"Egypt Premier League Women","time":"2026-03-23 19:30","home":"Wadi Degla (W)","away":"Modern Sport FC (W)","is_live":false,"home_logo":"\/assets\/upload\/football\/team\/images\/1hp5vgajagn.png","guest_logo":"\/assets\/upload\/football\/team\/images\/1jc5d4mw5d14.png","content":"Modern Sport FC d\u1ef1 ki\u1ebfn s\u1ebd gi\u00e0nh chi\u1ebfn th\u1eafng tr\u01b0\u1edbc Wadi Degla v\u1edbi t\u1ef7 l\u1ec7 th\u00e0nh c\u00f4ng cao 83.12%."}}API: Predict Match Score Dashboard#
Dùng để tra cứu kết quả dự đoán trận đấu
Nhận input filter: date, league_id, team_id, match_id, isLive
Nếu không có date → mặc định lấy ngày hiện tại
Query dữ liệu từ MatchPredictLog theo khoảng thời gian trong ngày
đội bóng (home hoặc away)
Lấy danh sách trận (data) theo thời gian tăng dần
Khởi tạo thống kê cho 4 loại kèo:1X2, Handicap, OU, Correct Score
Decode dữ liệu predict từ JSON
Kiểm tra đã có kết quả thực tế (correct_score_verify)
So sánh predict vs kết quả thật
API: Update soccer survey, getScriptsI18n, js file#
Nhận dữ liệu bình chọn kết quả bóng đá
ttl (cache, mặc định 3600s)
Gọi handleRequest để xử lý request + cache:
Key cache: thremote_post_cache + url
Throw exception (kèm status code)
API: Các API hình ảnh#
Nhận và sao chép các file dữ liệu hình ảnh
GET /assets/upload/fbcountry/{file}
GET /assets/upload/football/league_match/images/{file}
GET /assets/upload/football/team/images/{file}
GET /assets/upload/football/team/images/{id}/{file}
GET /assets/upload/football/info/images/{file}
GET /assets/upload/football/player/images/{file}
GET /assets/upload/football/player/images/{id}/{file}
GET /assets/upload/mn/{file}
Tạo đường dẫn local để lưu ảnh (assets/upload/...)
Kiểm tra ảnh đã tồn tại trong server chưa
Gọi HTTP GET tới URL remote để lấy ảnh
Nếu response = 200 → lấy nội dung ảnh
Lưu ảnh vào storage (disk assets)
Nếu đã có sẵn → không gọi API nữa
Trả về path local của ảnh
API: Flashfive iframe#
Sao chép iframe của isport
Nhận request với param id (matchId gốc)
Lấy danh sách mapping match từ cache Redis (getListScheduleBasicMultipleDaysSaveByCache)
Gán mặc định idNew = 9999
Nếu tồn tại mapping ids[id] → lấy idNew tương ứng
Tạo URL tới trang animation (flashlive) với matchId = idNew
Nhúng URL đó vào <iframe>
Trả về HTML iframe để hiển thị trực tiếp trên web
API: Get Match Today#
Nhận danh sách các trận đấu trong ngày
$isTeam (bool, default = true): có load thêm thông tin team (home/guest + intro) hay không
$timeOrderBy (string, default = 'asc'): sắp xếp theo thời gian trận (asc hoặc desc)
Đến hiện tại + 22h (gần như cover hôm nay + chút ngày mai)
Lọc MatchTime nằm trong khoảng trên
Lọc MatchState thuộc danh sách trận đang live / hiển thị
Ưu tiên MatchState (desc) → trận live lên trước
Sau đó theo MatchTime (asc/desc theo param)
Trả về toàn bộ danh sách match (get())
API: Get league rank#
Nhận bảng xếp hạng của giải trong ngày
$sclassId: ID của giải đấu
$season (optional): mùa giải (nếu không truyền → lấy mặc định từ DB)
Lấy thông tin giải (sclass), nếu không tồn tại → return data rỗng
Xác định season (ưu tiên param, fallback từ DB)
Tạo cache key → dùng Cache::remember (TTL 240s) để tối ưu
Danh sách team trong giải
Quy tắc xếp hạng (qualify: lên hạng, xuống hạng, màu)
Kiểm tra loại giải: league / cup / subleague
Lấy danh sách trận theo group
Tính thống kê team (total, home, guest)
Tính bảng xếp hạng (points = win*3 + draw)
Gán tên đa ngôn ngữ (EN/VN/TH)
Gán màu rank + loại qualify
Tách thống kê sân nhà / sân khách
Lấy thống kê cầu thủ (top ghi bàn)
Danh sách team (name + logo + đa ngôn ngữ)
info giải + bảng xếp hạng + stats + player + team + metadata
API: Get leagues rank#
Nhận bảng xếp hạng của nhiều giải trong ngày
ids (string, optional): danh sách leagueId, dạng "1,2,3"
limit (int, default = 3): số lượng giải nếu không truyền id
GET /api/get-leagues-rank
Tách chuỗi → array ID (explode)
Lấy danh sách hot leagues
Gọi getLeagueRankData(id, FALSE) để lấy data bảng xếp hạng
Gom tất cả kết quả vào mảng $results
API: AI Check#
API dùng để lấy danh sách dữ liệu AI predict theo ngày
→ Ngày cần lấy dữ liệu (YYYY-MM-DD)→ Không truyền thì mặc định hôm nay→ Ngược lại → trả view HTMLLấy date từ request, nếu không có → dùng ngày hiện tại
Convert thành khoảng thời gian: bảng AI predict (AIPredictRepo)
join thêm sclass (league info)
filter theo MatchTime trong ngày
Sort theo MatchTime DESC (trận mới nhất trước)
Nếu type=api → return JSON
Ngược lại → render view ai_predictor
API: AI update#
API dùng để gửi dữ liệu kèo trận đấu sang AI → nhận dự đoán → lưu lại → sau đó đối chiếu với kết quả thật.
Lấy danh sách trận cần predict
Lấy dữ liệu kèo: Handicap, 1X2, Over/Under
Build payload (odds mở + odds realtime)
Nhận kết quả dự đoán (0/1/2)
Lưu dữ liệu vào DB (chưa có kết quả thật)
Lấy danh sách trận đã có kết quả thực tế
Tính kết quả (thắng/hòa/thua)
Update lại DB (result, ai_result, score)
API: Get predict match#
API tổng hợp dữ liệu phân tích trận đấu (predict match)
lang: Ngôn ngữ hiển thị (vi, en, th, …)
GET /api/get-predict-match
Lấy dữ liệu trận từ scheduleRepo->getPredictMatch
Lấy phong độ 6 trận gần nhất:home → getRecentResults(..., 6)
guest → getRecentResults(..., 6)
Lấy danh sách cầu thủ của 2 đội
Phân loại cầu thủ theo vị trí: danh sách cầu thủ đá chính
danh sách cầu thủ theo vị trí
đội hình + tuổi trung bình
API: Find#
API tìm kiếm toàn hệ thống theo từ khóa
Lấy keyword từ request (w)
Query dữ liệu từ các repo:schedules → tìm trận theo tên
API: Find League, Team, Player, Match#
API tìm kiếm giải đấu, đội, cầu thủ, trận theo từ khóa
Lấy keyword từ request (w)
Query league/team/player/match
API: Match live#
API trả về chi tiết thống kê trận đấu dạng JS (script) cho frontend
Lấy scheduleId và lang từ request
Nếu có lang → set locale hệ thống
Lấy dữ liệu từ cache (TTL: 1 phút):nếu chưa có → gọi getMatchDetailStatistics(scheduleId)
tạo các object JS (d_f, tT_f, s_f)
gán dữ liệu theo scheduleId
chứa JS code để frontend render trực tiếp
API: Match score#
API trả về chi tiết tỉ số trận đấu dạng JS (script) cho frontend
GET /ajax/match/match-score
Nhận scheduleId và lang từ request
Nếu có lang → set locale cho hệ thống
Tạo cacheKey theo scheduleId + lang
Nếu có → trả luôn dữ liệu cache
Gọi matchDetailService->getSchedule() để lấy dữ liệu trận
Nếu không có trận → trả lỗi Match not found
Dựa vào MatchState → build HTML hiển thị:Đang đá → hiển thị score + trạng thái live
Hiệp 1/2 → hiển thị thêm tỷ số hiệp
Kết thúc → hiển thị full + half time score
Hoãn / hủy / gián đoạn → hiển thị trạng thái đặc biệt
Format lại thời gian trận (trừ 7 tiếng)
stateName (text trạng thái)
API: Match score main#
API trả về thông tin các trận đấu chính
isHot: lọc trận hot (0/1)
scheduleID: lọc theo trận cụ thể
lang: ngôn ngữ (vn, th,…)
datefrom, dateto: filter khoảng ngày
leagueID: filter theo giải
timeRange: filter theo khung giờ
GET /ajax/get-match-core-main
Tạo cacheKey + cacheTTL (60s hoặc 1 ngày tùy date)
Nếu cache sắp hết hạn → call API ngầm để refresh
Gọi scheduleRepo->getMatchCoreMain() để lấy danh sách trận
Lấy danh sách giải + hot league để phục vụ sort
Nếu không có → theo ID giải
Bỏ qua nếu thiếu team / league
Xử lý đa ngôn ngữ (league + team)
API: Match hot#
API trả về thông tin các trận đấu hot
GET /ajax/get-hot-matches
Nếu sclassIDs rỗng → trả về collection rỗng
Tạo orderByRaw để giữ thứ tự ưu tiên theo mảng sclassIDs
MatchState = 0 → chỉ lấy trận chưa diễn ra
SclassID IN (...) → lọc theo danh sách giải
Group theo SclassID → mỗi giải chỉ lấy 1 trận
Dùng MIN(MatchTime) → lấy trận sớm nhất của mỗi giải
Theo thứ tự sclassIDs (ưu tiên giải hot)
Sau đó theo thời gian trận sớm nhất
kèo: multiLetGoals, standards, multiTotalScores
API: Odds main#
API trả về thông tin các kèo các trận chính
- scheduleID: lọc theo trận- datefrom, dateto: khoảng ngày- typeOdd: loại kèo cần lấy- halfOdd: có lấy kèo hiệp 1 hay không (0/1)GET /ajax/get-odds-core-main
Tạo cacheKey + TTL (60s hoặc 1 ngày tùy thời điểm)
Nếu gần hết hạn → call API ngầm để refresh
Gọi scheduleRepo->getOddsCoreMain() lấy danh sách trận + odds
Loop từng trận → build oddsList:
Lấy record đầu (Num lớn nhất)
Type (1x2, OU, HDP, Half…)
First, Real, Current odds
API: Thống kê team#
API lấy thống kê đội bóng theo giải + mùa giải
- type: loại thống kê (optional)- lang: ngôn ngữ (vn, en, th…)GET /ajax/get-statistics-team
teamTechStatisticsRepo->getStatisticsTechTeam
Lấy Count = giá trị field
Tính Avg = Count / số trận (SchSum)
Trả raw data full stats từ repo
API: Thống kê player#
API lấy thống kê cầu thủ theo giải + mùa
- season: mùa giải (optional)- type: loại thống kê (optional)- playerID: lọc theo cầu thủ (optional)GET /ajax/get-statistics-team
playerTechStatisticsRepo->getPlayerTechStatics(...)
/assets/upload/football/player/images/
Trả full raw data từ repo
API: Thống kê đối đầu#
API tạo ma trận đối đầu (score matrix) giữa các đội trong 1 giải
- lang: ngôn ngữ hiển thị tên độiGET /ajax/get-statistics-score-schedule
Lấy toàn bộ match từ scheduleRepo->getStatisticsScoreSchedule
Lấy từ homeTeam + guestTeam
Khởi tạo matrix n x n (n = số team) API: Thống kê tỷ số#
Thống kê phân bố tỷ số trận đấu trong 1 giải
lang: ngôn ngữ (không dùng trong logic chính)
GET /ajax/get-attack-defense
Lấy danh sách trận đã kết thúc:scheduleRepo->getScheduleFinish
"home - guest" (vd: 2 - 1)
Đếm số lần xuất hiện của từng tỷ số
percentage: % trên tổng trận
API: Thống kê ghi bàn trước / bị ghi bàn trước#
Thống kê đội nào ghi bàn trước / bị ghi bàn trước
GET /ajax/get-first-goal-win-loss
Lấy danh sách trận đã kết thúc:scheduleRepo->getScheduleFinish
Init team nếu chưa có trong mảng: detailResultRepo->getFirstGoalOfMatch(ScheduleID)
Xác định team ghi bàn đầu tiên
theo scored_first_total DESC
API: Thống kê tổng hợp giải đấu#
API thống kê tổng hợp giải đấu (league statistics)
GET /ajax/get-statistics-detail-rank
nếu MatchState == -1 → tính stats
cho phép nhiều team đồng hạng
API: Thống kê ghi bàn trước / bị ghi bàn trước#
Thống kê đội nào ghi bàn trước / bị ghi bàn trước
Lấy danh sách trận đã kết thúc:scheduleRepo->getScheduleFinish
Init team nếu chưa có trong mảng: detailResultRepo->getFirstGoalOfMatch(ScheduleID)
Xác định team ghi bàn đầu tiên
theo scored_first_total DESC
API: Danh sách trận đấu#
API lấy danh sách trận đấu + odds theo thời gian thực
- timezone: Vùng thời gianLấy danh sách trận đấu theo sclassID + season
Nếu MatchState = -1 → tính thống kê
Ngược lại → tăng số trận chưa diễn ra
Cộng tổng bàn thắng (home + away)
Xác định thắng / hòa / thua
Cộng số trận, bàn thắng, bàn thua cho từng đội
Gom dữ liệu theo từng đội (teamList)
thắng sân nhà / hòa / thắng sân khách
Tìm đội ghi nhiều / ít bàn nhất
Tìm đội thủng lưới ít / nhiều nhất
Cho phép nhiều đội đồng hạng
API: Lấy danh sách trận đã kết thúc theo ngày#
Lấy danh sách trận đã kết thúc theo ngày
date: ngày cần lấy (Y-m-d)
isHot: lọc giải hot (0/1)
page: phân trang (chưa dùng)
scheduleID: ID trận (0 = lấy tất cả)
timezone: múi giờ (hiện chưa dùng)
GET /ajax/get-odds-result
Xác định khoảng thời gian:startDate = date 00:00:00
Chỉ lấy trận có trạng thái kết thúc:MatchState IN (-1, -10, -11, -12, -13, -14)
Có tên đội (homeTeam, guestTeam)
Nếu scheduleID != 0 → lấy đúng 1 trận
Nếu scheduleID = 0 → filter theo ngày + trạng thái
Nếu isHot = 1 → chỉ lấy giải hot
homeTeam, guestTeam + introTeam
multiLetGoals (lọc theo companyID, lấy odds HDP, sort Num desc)
Ưu tiên giải 103 → 113 → còn lại
Sau đó theo MatchTime ASC
Trả về danh sách schedules có đầy đủ info trận + odds
API: Lấy danh sách trận sắp diễn ra (fixture)#
Lấy danh sách trận sắp diễn ra (fixture)
date: ngày cần lấy (Y-m-d)
isHot: lọc giải hot (0/1)
page: phân trang (chưa dùng)
scheduleID: ID trận (0 = lấy tất cả)
timezone: múi giờ (hiện chưa dùng)
GET /ajax/get-odds-fixture
Xác định khoảng thời gian:startDate = date 00:00:00
Chỉ lấy trận chưa diễn ra: Nếu scheduleID != 0 → lấy đúng 1 trận
Nếu scheduleID = 0 → filter theo ngày + trạng thái
Nếu isHot = 1 → chỉ lấy giải hot
homeTeam, guestTeam + introTeam
multiLetGoals → odds HDP (lấy Num lớn nhất)
multiTotalScores → odds OU (lấy Num lớn nhất)
Ưu tiên giải 103 → 113 → còn lại
Sau đó theo MatchTime ASC
Danh sách schedules gồm thông tin trận + full odds trước trận
API: Lấy lịch sử biến động odds theo trận#
Lấy lịch sử biến động odds theo trận
companyID: danh sách ID nhà cái (VD: "1,2,3")
GET /ajax/get-odd-detail-history
Nếu companyID rỗng → return []Convert companyID → mảng sốLấy danh sách odds từ multiLetGoalVới mỗi record → lấy OddsIDQuery multiLetGoalDetail để lấy historyQuery multiTotalScoreDetail lấy historyQuery standardDetail lấy historyValue = danh sách biến động odds theo thời gianNếu type không hợp lệ → return []Modified at 2026-03-25 09:14:21