grapper betsapi bet365 wip
This commit is contained in:
1 parent
e90a6c71f6
commit
b1a724061f
19 files changed
+93
-51
No files matched your search
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Console\Commands\Grapper;
|
||||
|
||||
use App\Console\Commands\Grapper\Betsapi\Bet365;
|
||||
use App\Console\Commands\Grapper\Betsapi\Betfair;
|
||||
use App\Console\Commands\Grapper\Betsapi\Bwin;
|
||||
use App\Console\Commands\Grapper\Betsapi\Fixtures;
|
||||
use App\Console\Commands\Grapper\Betsapi\Odds;
|
||||
@@ -27,9 +29,12 @@ class Betsapi
|
||||
case 'Bwin':
|
||||
Bwin::grap();
|
||||
break;
|
||||
case 'Bwin':
|
||||
case 'Bet365':
|
||||
Bet365::grap();
|
||||
break;
|
||||
case 'Betfair':
|
||||
Betfair::grap();
|
||||
break;
|
||||
default:
|
||||
Notice::note('prosses name does not exist', 'r', 1);
|
||||
break;
|
||||
|
||||
@@ -5,7 +5,10 @@ namespace App\Console\Commands\Grapper\Betsapi;
|
||||
use App\Console\Commands\Curl;
|
||||
use App\Console\Commands\Nuh;
|
||||
use App\Models\Event;
|
||||
use App\Utilities\Notice;
|
||||
use App\Models\Odds3way;
|
||||
use App\Models\OddsDc;
|
||||
use App\Utilities\Margin;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class Bet365
|
||||
{
|
||||
@@ -18,29 +21,59 @@ class Bet365
|
||||
*/
|
||||
$bookmaker_id = 126;
|
||||
|
||||
$res = Event::where('bet365_id', '>', 0)->pluck('id', 'bet365_id');
|
||||
$events = Event::where('bet365_id', '>', 0)->where('events.starttime', '>', Carbon::now())->get();
|
||||
|
||||
foreach ($res as $bet365_id => $txodds_id) {
|
||||
foreach ($events as $event) {
|
||||
|
||||
/**
|
||||
* BET365 ODDS (per event)
|
||||
*/
|
||||
$url = 'https://api.b365api.com/v4/bet365/prematch?token='.config('env.betsapi_token').'&FI='.$bet365_id;
|
||||
$url = 'https://api.b365api.com/v4/bet365/prematch?token='.config('env.betsapi_token').'&FI='.$event->bet365_id;
|
||||
|
||||
$data = Curl::load($url);
|
||||
|
||||
dd($data);
|
||||
$offer = $data['results'][0]['main']['sp'];
|
||||
|
||||
$betsapi_id = $data['results'][0]['id'] ?? 0;
|
||||
$bet365_id = $data['results'][0]['bet365_id'] ?? 0;
|
||||
/**
|
||||
* 1X2
|
||||
*/
|
||||
$odds = [];
|
||||
$odds['h3w'] = $offer['full_time_result']['odds'][0]['odds'];
|
||||
$odds['d3w'] = $offer['full_time_result']['odds'][1]['odds'];
|
||||
$odds['a3w'] = $offer['full_time_result']['odds'][2]['odds'];
|
||||
$odds['margin'] = (float) Margin::calculate([$odds['h3w'], $odds['d3w'], $odds['a3w']], 1);
|
||||
$odds['sport_id'] = $event->sport_id;
|
||||
$odds['provider_id'] = Nuh::$options['provider_id'];
|
||||
$odds['bmoid'] = $event->bet365_id;
|
||||
$odds['flag'] = 1;
|
||||
$odds['last_check_at'] = Carbon::now();
|
||||
|
||||
if ($debug) {
|
||||
Notice::note(["TXdds ID : $txodds_id", "Betsapi ID : $betsapi_id", "Bet365 ID : $bet365_id", "Willhill ID : $willhill_id"], 'b');
|
||||
}
|
||||
Odds3way::updateOrCreate([
|
||||
'event_id' => $event->id,
|
||||
'bookmaker_id' => $bookmaker_id,
|
||||
], $odds);
|
||||
|
||||
/**
|
||||
* DC
|
||||
*/
|
||||
$odds = [];
|
||||
$odds['dc1x'] = $offer['full_time_result']['odds'][0]['odds'];
|
||||
$odds['dc12'] = $offer['full_time_result']['odds'][1]['odds'];
|
||||
$odds['dcx2'] = $offer['full_time_result']['odds'][2]['odds'];
|
||||
$odds['margin'] = (float) Margin::calculate([$odds['dc1x'], $odds['dc12'], $odds['dcx2']], 1);
|
||||
$odds['sport_id'] = $event->sport_id;
|
||||
$odds['provider_id'] = Nuh::$options['provider_id'];
|
||||
$odds['bmoid'] = $event->bet365_id;
|
||||
$odds['flag'] = 1;
|
||||
$odds['last_check_at'] = Carbon::now();
|
||||
|
||||
OddsDc::updateOrCreate([
|
||||
'event_id' => $event->id,
|
||||
'bookmaker_id' => $bookmaker_id,
|
||||
], $odds);
|
||||
|
||||
dd($odds);
|
||||
|
||||
if ($betsapi_id) {
|
||||
Event::where('id', (int) $txodds_id)->update(['betsapi_id' => $betsapi_id, 'bet365_id' => $bet365_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,9 @@ class Betfair
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
/**
|
||||
* Bet365
|
||||
* Betfair
|
||||
*/
|
||||
exit;
|
||||
$bookmaker_id = 126;
|
||||
|
||||
$res = Event::where('bet365_id', '>', 0)->pluck('id', 'bet365_id');
|
||||
|
||||
@@ -32,6 +32,7 @@ class Willhill
|
||||
|
||||
$res = Odds3way::join('events', 'odds_3ways.event_id', 'events.id')
|
||||
->where('odds_3ways.bookmaker_id', $bookmaker_id)
|
||||
->where('events.starttime', '>', Carbon::now())
|
||||
->where('events.betsapi_id', 0)
|
||||
->where('events.sport_id', $sport_id)
|
||||
->where('odds_3ways.bmoid', '>', 0)->pluck('odds_3ways.event_id', 'odds_3ways.bmoid');
|
||||
|
||||
@@ -15,7 +15,7 @@ use App\Models\Element;
|
||||
use App\Models\Event;
|
||||
use App\Models\Group;
|
||||
use App\Utilities\Notice;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class Odds
|
||||
{
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"success":1,"results":[{"FI":"186071623","event_id":"10119813","asian_lines":{"updated_at":"1767284567","key":"#AC#B1#C1#D8#E186071623#F3#I3#","sp":{"asian_handicap":{"id":"938","name":"Asian Handicap","odds":[{"id":"136626627","odds":"2.050","header":"1","handicap":"0.0,-0.5"},{"id":"136626629","odds":"1.800","header":"2","handicap":"0.0,+0.5"}]},"goal_line":{"id":"10143","name":"Goal Line","odds":[{"id":"136626630","odds":"1.875","name":"2.5","header":"Over"},{"id":"136626631","odds":"1.975","name":"2.5","header":"Under"}]},"alternative_asian_handicap":{"id":"50138","name":"Alternative Asian Handicap","odds":[],"open":0},"alternative_goal_line":{"id":"50139","name":"Alternative Goal Line","odds":[],"open":0},"1st_half_asian_handicap":{"id":"50137","name":"1st Half Asian Handicap","odds":[],"open":0},"1st_half_goal_line":{"id":"50136","name":"1st Half Goal Line","odds":[],"open":0},"alternative_1st_half_asian_handicap":{"id":"50265","name":"Alternative 1st Half Asian Handicap","odds":[],"open":0},"alternative_1st_half_goal_line":{"id":"50266","name":"Alternative 1st Half Goal Line","odds":[],"open":0},"asian_total_corners":{"id":"10164","name":"Asian Total Corners","odds":[],"open":0},"asian_handicap_corners":{"id":"10165","name":"Asian Handicap Corners","odds":[],"open":0},"1st_half_asian_corners":{"id":"10233","name":"1st Half Asian Corners","odds":[],"open":0},"asian_total_cards":{"id":"10166","name":"Asian Total Cards","odds":[],"open":0},"asian_handicap_cards":{"id":"10239","name":"Asian Handicap Cards","odds":[],"open":0}}},"cards":{"updated_at":"1767285348","key":"#AC#B1#C1#D8#E186071623#F3#I4#","sp":{"number_of_cards_in_match":{"id":"10542","name":"Number of Cards In Match","odds":[{"id":"270679284","odds":"1.833","name":"3.5","header":"Over"},{"id":"270679291","odds":"1.833","name":"3.5","header":"Under"}]},"both_teams_to_receive_cards":{"id":"50942","name":"Both Teams to Receive Cards","odds":[{"id":"270707239","odds":"1.333","name":"a Card","header":"Yes"},{"id":"270707258","odds":"2.625","name":"2+ Cards","header":"Yes"},{"id":"271036182","odds":"67.000","name":"a Red Card","header":"Yes"},{"id":"270707249","odds":"3.250","name":"a Card","header":"No"},{"id":"270707269","odds":"1.444","name":"2+ Cards","header":"No"},{"id":"271036197","odds":"1.001","name":"a Red Card","header":"No"}]},"player_cards":{"id":"50135","name":"Player Cards","odds":[{"id":"270709742","odds":"3.100","name":"Joao Palhinha","name2":"2","header":"Booked","team":"Player\/Last 5"},{"id":"270709610","odds":"3.100","name":"Rodrigo Bentancur","name2":"2","header":"Booked","team":"Player\/Last 5"},{"id":"270709691","odds":"3.250","name":"Cristian Romero","name2":"2","header":"Booked","team":"Player\/Last 5"},{"id":"270709622","odds":"4.333","name":"Igor Thiago","name2":"1","header":"Booked","team":"Player\/Last 5"},{"id":"270709699","odds":"4.500","name":"Aaron Hickey","name2":"1","header":"Booked","team":"Player\/Last 5"},{"id":"270709615","odds":"5.000","name":"Archie Gray","name2":"2","header":"Booked","team":"Player\/Last 5"},{"id":"270709578","odds":"9.500","name":"Joao Palhinha","name2":"2","header":"1st Card","team":"Player\/Last 5"},{"id":"270709559","odds":"9.500","name":"Rodrigo Bentancur","name2":"2","header":"1st Card","team":"Player\/Last 5"},{"id":"270709576","odds":"10.000","name":"Cristian Romero","name2":"2","header":"1st Card","team":"Player\/Last 5"},{"id":"270709597","odds":"13.000","name":"Igor Thiago","name2":"1","header":"1st Card","team":"Player\/Last 5"},{"id":"270709602","odds":"15.000","name":"Aaron Hickey","name2":"1","header":"1st Card","team":"Player\/Last 5"},{"id":"270709560","odds":"17.000","name":"Archie Gray","name2":"2","header":"1st Card","team":"Player\/Last 5"},{"id":"270709942","odds":"29.000","name":"Joao Palhinha","name2":"2","header":"Red Card","team":"Player\/Last 5"},{"id":"270709906","odds":"29.000","name":"Rodrigo Bentancur","name2":"2","header":"Red Card","team":"Player\/Last 5"},{"id":"270709924","odds":"34.000","name":"Cristian Romero","name2":"2","header":"Red Card","team":"Player\/Last 5"},{"id":"270709938","odds":"34.000","name":"Igor Thiago","name2":"1","header":"Red Card","team":"Player\/Last 5"},{"id":"270709844","odds":"41.000","name":"Aaron Hickey","name2":"1","header":"Red Card","team":"Player\/Last 5"},{"id":"270709834","odds":"41.000","name":"Archie Gray","name2":"2","header":"Red Card","team":"Player\/Last 5"}]},"either_to_be_booked":{"id":"177938","name":"Either to be Booked","odds":[],"open":0},"card_handicap":{"id":"10240","name":"Card Handicap","odds":[],"open":0},"alternative_card_handicap":{"id":"10241","name":"Alternative Card Handicap","odds":[],"open":0},"first_card_received":{"id":"476","name":"First Card Received","odds":[],"open":0},"time_of_first_card":{"id":"1183","name":"Time of First Card","odds":[],"open":0},"team_cards":{"id":"10242","name":"Team Cards","odds":[],"open":0},"red_card_in_match_half":{"id":"50241","name":"Red Card in Match\/Half","oLine truncated
|
||||
@@ -122,6 +122,7 @@ class EventsTable
|
||||
|
||||
return $table
|
||||
->striped()
|
||||
->deferLoading()
|
||||
->columns([
|
||||
IconColumn::make('sport.icon')
|
||||
->label('')
|
||||
@@ -132,7 +133,7 @@ class EventsTable
|
||||
->tooltip(fn ($record) => $record->id)
|
||||
->visibleFrom('lg'),
|
||||
|
||||
MatchIds::make('match_ids')->grow(false)->visibleFrom('xl'),
|
||||
// MatchIds::make('match_ids')->grow(false)->visibleFrom('xl'),
|
||||
|
||||
TextColumn::make('starttime')
|
||||
->label('Start')
|
||||
@@ -162,43 +163,37 @@ class EventsTable
|
||||
->visible(fn () => in_array(1, self::$bettype_settings))
|
||||
->verticalAlignment(VerticalAlignment::Start)
|
||||
->width(225)
|
||||
->label('1 X 2')
|
||||
->extraCellAttributes(['class' => 'border-l border-gray-200 dark:border-gray-800']),
|
||||
->label('1 X 2'),
|
||||
|
||||
ColumnDc::make('oddsdc')->bookmakers(self::$odds_dc)
|
||||
->visible(fn () => in_array(2, self::$bettype_settings))
|
||||
->verticalAlignment(VerticalAlignment::Start)
|
||||
->width(225)
|
||||
->label('Double Chance')
|
||||
->extraCellAttributes(['class' => 'border-l border-gray-200 dark:border-gray-800']),
|
||||
->label('Double Chance'),
|
||||
|
||||
ColumnDnb::make('oddsdnb')->bookmakers(self::$odds_dnb)
|
||||
->visible(fn () => in_array(3, self::$bettype_settings))
|
||||
->verticalAlignment(VerticalAlignment::Start)
|
||||
->width(190)
|
||||
->label('Draw No Bet')
|
||||
->extraCellAttributes(['class' => 'border-l border-gray-200 dark:border-gray-800']),
|
||||
->label('Draw No Bet'),
|
||||
|
||||
ColumnGgng::make('oddsggng')->bookmakers(self::$odds_ggng)
|
||||
->visible(fn () => in_array(4, self::$bettype_settings))
|
||||
->verticalAlignment(VerticalAlignment::Start)
|
||||
->width(190)
|
||||
->label('Goal No Goal')
|
||||
->extraCellAttributes(['class' => 'border-l border-gray-200 dark:border-gray-800']),
|
||||
->label('Goal No Goal'),
|
||||
|
||||
ColumnTq::make('oddstq')->bookmakers(self::$odds_tq)
|
||||
->visible(fn () => in_array(5, self::$bettype_settings))
|
||||
->verticalAlignment(VerticalAlignment::Start)
|
||||
->width(190)
|
||||
->label('To Qualify')
|
||||
->extraCellAttributes(['class' => 'border-l border-gray-200 dark:border-gray-800']),
|
||||
->label('To Qualify'),
|
||||
|
||||
ColumnTotal::make('oddstotal')->bookmakers(self::$odds_totals)
|
||||
->visible(fn () => in_array(6, self::$bettype_settings))
|
||||
->verticalAlignment(VerticalAlignment::Start)
|
||||
->width(225)
|
||||
->label('Totals')
|
||||
->extraCellAttributes(['class' => 'border-l border-gray-200 dark:border-gray-800']),
|
||||
->label('Totals'),
|
||||
])->searchable(['id', 'betsapi_id', 'betradar_id', 'bet365_id', 'bwin_id'])
|
||||
->poll('10s')
|
||||
->defaultSort('starttime', 'ASC')
|
||||
|
||||
@@ -18,6 +18,12 @@ class SupervisorsTable
|
||||
->striped()
|
||||
->columns([
|
||||
TextColumn::make('id')->badge(),
|
||||
TextColumn::make('provider.name')->badge()
|
||||
->color(fn ($record): string => match ($record->provider_id) {
|
||||
1 => 'danger',
|
||||
2 => 'success',
|
||||
default => 'warning',
|
||||
}),
|
||||
SelectColumn::make('name')
|
||||
->options([
|
||||
'Fixtures' => 'Fixtures',
|
||||
@@ -27,8 +33,7 @@ class SupervisorsTable
|
||||
'Bet365' => 'Bet365',
|
||||
'Betfair' => 'Betfair',
|
||||
]),
|
||||
TextColumn::make('provider.name')->badge(),
|
||||
TextColumn::make('sport.name')->label('Sport'),
|
||||
TextColumn::make('sport.name')->label('Sport')->color(fn ($record): string => $record->sport->color),
|
||||
TextColumn::make('sleep')->numeric(),
|
||||
TextColumn::make('runtime')->label('Run Time'),
|
||||
TextColumn::make('maxsconds')->label('Max Time'),
|
||||
|
||||
@@ -19,7 +19,9 @@ class SupervisorSeeder extends Seeder
|
||||
(3, 'Fixtures', 2, 0, 15, 0, NULL, 1800, 0, 1, 1, '2025-12-19 11:42:35', '2025-12-22 06:41:47'),
|
||||
(4, 'Willhill', 2, 0, 15, 0, '0.235', 1800, 0, 1, 1, '2025-12-19 11:48:05', '2025-12-22 06:41:51'),
|
||||
(5, 'Bwin', 2, 0, 15, 0, NULL, 1800, 0, 1, 1, '2025-12-22 06:41:18', '2025-12-22 06:41:52'),
|
||||
(6, 'Fixtures', 4, 1, 10, 0, '0', 30, 0, 1, 1, '2025-12-18 17:44:33', '2025-12-22 06:41:48');
|
||||
(6, 'Bet365', 2, 0, 10, 0, '0', 30, 0, 0, 1, '2025-12-18 17:44:33', '2026-01-01 17:09:28'),
|
||||
(7, 'Betfair', 2, 0, 10, 0, '0', 30, 0, 0, 1, '2025-12-18 17:44:33', '2026-01-01 17:09:35'),
|
||||
(8, 'Fixtures', 4, 0, 10, 0, '0', 30, 0, 1, 1, '2025-12-18 17:44:33', '2026-01-01 17:08:53');
|
||||
";
|
||||
DB::unprepared($sql);
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ button[wire\:click="resetTableFiltersForm"] {
|
||||
@apply !text-center
|
||||
}
|
||||
|
||||
|
||||
#mapper {
|
||||
@layer components {
|
||||
.fi-ta-ctn {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@if ($hasData())
|
||||
<div x-data="{ message: 'loading..' }" class="mx-3 my-auto">
|
||||
<div class="mx-3 my-auto">
|
||||
<template x-ref="template">
|
||||
<div class="grid grid-cols-5 grid-rows-5 gap-1 m-5">
|
||||
<div class="grid grid-cols-5 grid-rows-5 gap-1 m-5 z-10">
|
||||
|
||||
@foreach ($getData() as $item)
|
||||
@include('filament.tables.columns.multiline.bkm', [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@if ($hasData())
|
||||
<div x-data="{ message: 'loading..' }" class="mx-3 my-auto">
|
||||
<div class="mx-3 my-auto">
|
||||
<template x-ref="template">
|
||||
<div class="grid grid-cols-5 grid-rows-5 gap-1 m-5">
|
||||
<div class="grid grid-cols-5 grid-rows-5 gap-1 m-5 z-10">
|
||||
|
||||
@foreach ($getData() as $item)
|
||||
@include('filament.tables.columns.multiline.bkm', [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@if ($hasData())
|
||||
<div x-data="{ message: 'loading..' }" class="mx-3 my-auto">
|
||||
<div class="mx-3 my-auto">
|
||||
<template x-ref="template">
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-1 m-5">
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-1 m-5 z-10">
|
||||
|
||||
@foreach ($getData() as $item)
|
||||
@include('filament.tables.columns.multiline.bkm', [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@if ($hasData())
|
||||
<div x-data="{ message: 'loading..' }" class="mx-3 my-auto">
|
||||
<div class="mx-3 my-auto">
|
||||
<template x-ref="template">
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-1 m-5">
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-1 m-5 z-10">
|
||||
|
||||
@foreach ($getData() as $item)
|
||||
@include('filament.tables.columns.multiline.bkm', [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@if ($hasData())
|
||||
<div x-data="{ message: 'loading..' }" class="mx-3 my-auto">
|
||||
<div class="mx-3 my-auto">
|
||||
<template x-ref="template">
|
||||
<div class="grid grid-cols-5 grid-rows-5 gap-1 m-5">
|
||||
<div class="grid grid-cols-5 grid-rows-5 gap-1 m-5 z-10">
|
||||
|
||||
@foreach ($getData() as $item)
|
||||
@include('filament.tables.columns.multiline.bkm', [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@if ($hasData())
|
||||
<div x-data="{ message: 'loading..' }" class="mx-3 my-auto">
|
||||
<div class="mx-3 my-auto">
|
||||
<template x-ref="template">
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-1 m-5">
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-1 m-5 z-10">
|
||||
|
||||
@foreach ($getData() as $item)
|
||||
@include('filament.tables.columns.multiline.bkm', [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<li class="bg-white dark:bg-gray-900 w-full h-full overflow-hidden p-1 cursor-grab flex space-x-4 drag-and-drop__item px-4"
|
||||
x-data="{ moveoverleft: false }" id={{ $record->id }}
|
||||
<li class="w-full h-full overflow-hidden p-1 cursor-grab flex space-x-4 drag-and-drop__item px-4" x-data="{ moveoverleft: false }"
|
||||
id={{ $record->id }}
|
||||
x-on:dragstart.self="
|
||||
dragging = true;
|
||||
event.dataTransfer.effectAllowed = 'move';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<li class="bg-white dark:bg-gray-900 w-full h-full overflow-hidden p-1 cursor-grab flex
|
||||
space-x-4 drag-and-drop__item px-4"
|
||||
x-data="{ moveoverright: false }" id={{ $record->event_id }}
|
||||
<li class="h-full overflow-hidden p-1 cursor-grab flex
|
||||
space-x-4 drag-and-drop__item px-4" x-data="{ moveoverright: false }"
|
||||
id={{ $record->event_id }}
|
||||
x-on:dragstart.self="
|
||||
dragging = true;
|
||||
event.dataTransfer.effectAllowed = 'move';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
@endphp
|
||||
|
||||
@if (isset($icon))
|
||||
<div class="h-4 m-0 bg-contain bg-center bg-no-repeat my-auto" title="{{ $bookmaker_id }}"
|
||||
<div class="h-4 m-0 bg-contain bg-center bg-no-repeat my-auto dark:opacity-80" title="{{ $bookmaker_id }}"
|
||||
style="background-image: url('{{ BkmIconMap::get($icon) }}')">
|
||||
</div>
|
||||
@endif
|
||||
Reference in new issue
Block a user