430 lines
18 KiB
PHP
430 lines
18 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands\Grapper\TxOdds;
|
|
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_2Way;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_2WayS1;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_3Way;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_3WayHt;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_Dc;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_Dnb;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_Ggng;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_Points;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_PointsHt;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_PointsQ1;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_Totals;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_TotalsHt;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_TotalsQ1;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Odds_Tq;
|
|
use App\Console\Commands\Grapper\TxOdds\Odds\Tools\ActiveSpread;
|
|
use App\Console\Commands\Nuh;
|
|
use App\Console\Commands\Xml;
|
|
use App\Models\CompetitionGroup;
|
|
use App\Models\Element;
|
|
use App\Models\ElementGroup;
|
|
use App\Models\Event;
|
|
use App\Models\EventBookmaker;
|
|
use App\Models\Group;
|
|
use App\Models\Supervisor;
|
|
use App\Models\TxoddsMarket;
|
|
use App\Utilities\Notice;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class Odds
|
|
{
|
|
public static function grap()
|
|
{
|
|
|
|
$debug = Nuh::$options['d'] ?? 0;
|
|
|
|
if ($debug) {
|
|
Notice::note('TXODD ODD sport: '.Nuh::$options['sport_id'], 'b');
|
|
}
|
|
|
|
/**
|
|
* Delete
|
|
*/
|
|
// $info = Event::where('starttime', '<', Carbon::now()->subMinutes(10))->delete();
|
|
// if ($debug) {
|
|
// Notice::note("Deleted: $info");
|
|
// }
|
|
|
|
switch (Nuh::$options['sport_id']) {
|
|
case 1:
|
|
$res = TxoddsMarket::where('soccer', 1)->pluck('market_id', 'id')->toArray();
|
|
break;
|
|
case 2:
|
|
$res = TxoddsMarket::where('ice_hockey', 1)->pluck('market_id', 'id')->toArray();
|
|
break;
|
|
case 3:
|
|
$res = TxoddsMarket::where('basketball', 1)->pluck('market_id', 'id')->toArray();
|
|
break;
|
|
case 5:
|
|
$res = TxoddsMarket::where('tennis', 1)->pluck('market_id', 'id')->toArray();
|
|
break;
|
|
}
|
|
|
|
/*************************************************
|
|
* markets
|
|
*************************************************/
|
|
$markets = '&ot='.implode(',', $res);
|
|
|
|
/*************************************************
|
|
* URL
|
|
* https://xml2.txodds.com/feed/odds/xml.php?36152-aeTRNnZxSPUwGe&all_odds=2&peid=14190947
|
|
*************************************************/
|
|
if (Nuh::$options['sport_id'] == 1) {
|
|
$url = 'https://xml2.txodds.com/feed/odds/xml.php?'.config('env.txodds_betaid1').'&all_odds=2';
|
|
} else {
|
|
$url = 'https://xml2.txodds.com/feed/odds/xml.php?'.config('env.txodds_betaid2').'&all_odds=2';
|
|
}
|
|
|
|
$_calls = [];
|
|
|
|
$sport = '&spid='.Nuh::$options['sport_id'];
|
|
|
|
if (Nuh::$options['provider_id'] == 8) {
|
|
|
|
/*************************************************
|
|
* TXODDS MARKET LASTCALL
|
|
*************************************************/
|
|
|
|
if ($debug) {
|
|
Notice::note('TXOdds MARKET Lastcall', 'p');
|
|
}
|
|
|
|
$market = '&ot='.Nuh::$options['txodds_market_id'];
|
|
|
|
$lastcall = Nuh::$options['lastcall'] > time() - 600 ? '&last='.Nuh::$options['lastcall'] : '&last='.time() - 600;
|
|
|
|
$_calls[] = $url.$sport.$market.$lastcall;
|
|
|
|
} elseif (Nuh::$options['id']) {
|
|
|
|
/*************************************************
|
|
* BY ID
|
|
*************************************************/
|
|
|
|
if ($debug) {
|
|
Notice::note("BY ID \nsport_id: ".Nuh::$options['sport_id'], 'p');
|
|
}
|
|
|
|
$id = '&peid='.Nuh::$options['id'];
|
|
|
|
$_calls[] = $url.$markets.$id;
|
|
|
|
} elseif (Nuh::$options['gid']) {
|
|
|
|
/*************************************************
|
|
* BY GROUP ID
|
|
*************************************************/
|
|
if ($debug) {
|
|
Notice::note("GROUP_ID \nsport_id: ".Nuh::$options['sport_id'], 'p');
|
|
}
|
|
|
|
$from_to = '&days='.Nuh::$options['days_from'].','.Nuh::$options['days_to'];
|
|
|
|
$events = Event::where('starttime', '>', Carbon::now())->where('group_id', Nuh::$options['gid'])->pluck('id');
|
|
|
|
foreach ($events as $event_id) {
|
|
$_calls[] = $url.$markets.$from_to.'&peid='.$event_id;
|
|
}
|
|
} elseif (Nuh::$options['g']) {
|
|
|
|
/*************************************************
|
|
* ALL BY GROUP ID for last changes
|
|
*************************************************/
|
|
if ($debug) {
|
|
Notice::note("GROUP_ID \nsport_id: ".Nuh::$options['sport_id'], 'p');
|
|
}
|
|
|
|
$from_to = '&days='.Nuh::$options['days_from'].','.Nuh::$options['days_to'];
|
|
|
|
$groupids = Event::where('starttime', '>', Carbon::now())->groupBy('group_id')->pluck('group_id');
|
|
|
|
foreach ($groupids as $groupid) {
|
|
$_calls[] = $url.$markets.$from_to.'&pgid='.$groupid;
|
|
}
|
|
|
|
} elseif (Nuh::$options['t']) {
|
|
|
|
/*************************************************
|
|
* TODAY by ID
|
|
*************************************************/
|
|
|
|
if ($debug) {
|
|
Notice::note("TODAY \nsport_id: ".Nuh::$options['sport_id'], 'p');
|
|
}
|
|
|
|
$res = Event::where('sport_id', Nuh::$options['sport_id'])->where('starttime', '>=', Carbon::now())->where('starttime', '<', Carbon::now()->addDays(1))->pluck('id');
|
|
|
|
foreach ($res as $id) {
|
|
$_calls[] = $url.$sport.$markets.'&peid='.$id;
|
|
}
|
|
|
|
} elseif (Nuh::$options['w']) {
|
|
|
|
/*************************************************
|
|
* ONE WEEK FROM NOW
|
|
*************************************************/
|
|
|
|
if ($debug) {
|
|
Notice::note("ONE WEEK FROM NOW \nsport_id: ".Nuh::$options['sport_id'], 'p');
|
|
}
|
|
|
|
$res = Event::where('sport_id', Nuh::$options['sport_id'])->where('starttime', '>=', Carbon::now())->where('starttime', '<', Carbon::now()->addDays(7))->pluck('id');
|
|
|
|
foreach ($res as $id) {
|
|
$_calls[] = $url.$sport.$markets.'&peid='.$id;
|
|
}
|
|
|
|
} elseif (Nuh::$options['a']) {
|
|
|
|
/*************************************************
|
|
* ALL BY ID (reload)
|
|
*************************************************/
|
|
|
|
if ($debug) {
|
|
Notice::note("ALL \nsport_id: ".Nuh::$options['sport_id'], 'p');
|
|
}
|
|
|
|
$res = Event::where('sport_id', Nuh::$options['sport_id'])->where('starttime', '>=', Carbon::now())->pluck('id');
|
|
|
|
foreach ($res as $id) {
|
|
$_calls[] = $url.$sport.$markets.'&peid='.$id;
|
|
}
|
|
} else {
|
|
Notice::note('BASH PARAMETER MISSING [--t, --w, --g, --a, --id=]', 'r', 1);
|
|
}
|
|
|
|
/*************************************************
|
|
* CALL
|
|
*************************************************/
|
|
$counter = 0;
|
|
foreach ($_calls as $url) {
|
|
|
|
$counter++;
|
|
|
|
$data = Xml::load($url);
|
|
|
|
if (Nuh::$options['provider_id'] == 8) {
|
|
Supervisor::where('id', Nuh::$options['supervisor_id'])->update(['lastcall' => (int) $data['timestamp']]);
|
|
}
|
|
|
|
if ($debug) {
|
|
Notice::note('counter: '.count($_calls).'/'.$counter, 'g');
|
|
}
|
|
|
|
foreach ($data as $row) {
|
|
|
|
$event_id = (int) $row['id'];
|
|
$sport_id = (int) $row->group['spid'];
|
|
|
|
$event = [
|
|
'has_markets' => 1,
|
|
'provider_id' => (int) Nuh::$options['provider_id'],
|
|
'starttime' => Carbon::parse($row->time)->toDateTimeString(),
|
|
'sport_id' => $sport_id,
|
|
'home_id' => (int) $row->hteam['id'],
|
|
'away_id' => (int) $row->ateam['id'],
|
|
'country_id' => (int) $row->group['cnid'],
|
|
'group_id' => (int) $row->group['id'],
|
|
'competition_group_id' => (int) $row->group['cgid'],
|
|
];
|
|
|
|
$res = DB::transaction(function () use ($row, $event) {
|
|
return Event::updateOrCreate(['id' => (int) $row['id']], $event);
|
|
}, 5);
|
|
$event_id = $res->id;
|
|
|
|
$group = [
|
|
'competition_group_id' => (string) $row->group['cgid'],
|
|
'sport_id' => $sport_id,
|
|
'country_id' => (int) $row->group['cnid'],
|
|
'name' => (string) $row->group['cname'],
|
|
'fullname' => (string) $row->group,
|
|
];
|
|
|
|
Group::updateOrCreate(['id' => (int) $row->group['id']], $group);
|
|
|
|
$compgroup = [
|
|
'sport_id' => $sport_id,
|
|
'country_id' => $event['country_id'],
|
|
'name' => (string) $row->group['cname'],
|
|
];
|
|
|
|
CompetitionGroup::updateOrCreate(['id' => (int) $row->group['cgid']], $compgroup);
|
|
|
|
$element = [
|
|
'name' => (string) $row->hteam,
|
|
'sport_id' => $sport_id,
|
|
'country_id' => (int) $row->group['cnid'],
|
|
];
|
|
Element::updateOrCreate(['id' => (int) $row->hteam['id']], $element);
|
|
|
|
$element_group = [
|
|
'competition_group_id' => (int) $row->group['cgid'],
|
|
];
|
|
ElementGroup::updateOrCreate(['element_id' => (int) $row->hteam['id'], 'group_id' => (int) $row->group['id']], $element_group);
|
|
|
|
$element = [
|
|
'name' => (string) $row->ateam,
|
|
'sport_id' => $sport_id,
|
|
'country_id' => (int) $row->group['cnid'],
|
|
];
|
|
Element::updateOrCreate(['id' => (int) $row->ateam['id']], $element);
|
|
|
|
$element_group = [
|
|
'competition_group_id' => (int) $row->group['cgid'],
|
|
];
|
|
ElementGroup::updateOrCreate(['element_id' => (int) $row->ateam['id'], 'group_id' => (int) $row->group['id']], $element_group);
|
|
|
|
if ($event_id && Event::where('id', $event_id)->exists()) {
|
|
// inconsistency with CONSTRAINT when getting only market updates
|
|
|
|
foreach ($row->bookmaker as $book) {
|
|
|
|
ActiveSpread::start();
|
|
|
|
$bookmaker_id = (int) $book['bid'];
|
|
|
|
$odds = [];
|
|
$odds['event_id'] = $event_id;
|
|
$odds['bookmaker_id'] = $bookmaker_id;
|
|
$odds['sport_id'] = $sport_id;
|
|
$odds['provider_id'] = Nuh::$options['provider_id'];
|
|
$odds['flags'] = 1;
|
|
|
|
foreach ($book->offer as $offer) {
|
|
|
|
$bettypeid = 0;
|
|
|
|
foreach ($offer->attributes() as $attributeName => $attributeValue) {
|
|
switch ($attributeName) {
|
|
case 'id':
|
|
$odds['offer_id'] = (int) $attributeValue;
|
|
break;
|
|
case 'ot':
|
|
$bettypeid = (int) $attributeValue;
|
|
break;
|
|
case 'bmoid':
|
|
$odds['bmoid'] = (string) $attributeValue;
|
|
break;
|
|
case 'flags':
|
|
$odds['flags'] = (string) $attributeValue;
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch ($bettypeid) {
|
|
case 0:
|
|
foreach ($offer->odds->attributes() as $attributeName => $attributeValue) {
|
|
switch ($attributeName) {
|
|
case 'starting_time':
|
|
DB::transaction(function () use ($odds, $sport_id, $event_id, $bookmaker_id, $attributeValue) {
|
|
EventBookmaker::updateOrCreate([
|
|
'event_id' => $event_id,
|
|
'sport_id' => $sport_id,
|
|
'bookmaker_id' => $bookmaker_id,
|
|
], ['in_feed' => 1, 'bmoid' => $odds['bmoid'], 'starttime' => $attributeValue]);
|
|
|
|
}, 5);
|
|
break;
|
|
}
|
|
}
|
|
|
|
Odds_3Way::grap($odds, $offer);
|
|
break;
|
|
case 1:
|
|
foreach ($offer->odds->attributes() as $attributeName => $attributeValue) {
|
|
switch ($attributeName) {
|
|
case 'starting_time':
|
|
DB::transaction(function () use ($odds, $sport_id, $event_id, $bookmaker_id, $attributeValue) {
|
|
EventBookmaker::updateOrCreate([
|
|
'event_id' => $event_id,
|
|
'sport_id' => $sport_id,
|
|
'bookmaker_id' => $bookmaker_id,
|
|
], ['in_feed' => 1, 'bmoid' => $odds['bmoid'], 'starttime' => $attributeValue]);
|
|
|
|
}, 5);
|
|
break;
|
|
}
|
|
}
|
|
|
|
Odds_2Way::grap($odds, $offer);
|
|
|
|
break;
|
|
case 3:
|
|
foreach ($offer->odds->attributes() as $attributeName => $attributeValue) {
|
|
switch ($attributeName) {
|
|
case 'starting_time':
|
|
DB::transaction(function () use ($odds, $sport_id, $event_id, $bookmaker_id, $attributeValue) {
|
|
EventBookmaker::updateOrCreate([
|
|
'event_id' => $event_id,
|
|
'sport_id' => $sport_id,
|
|
'bookmaker_id' => $bookmaker_id,
|
|
], ['in_feed' => 1, 'bmoid' => $odds['bmoid'], 'starttime' => $attributeValue]);
|
|
|
|
}, 5);
|
|
break;
|
|
}
|
|
}
|
|
|
|
Odds_Points::grap($odds, $offer);
|
|
break;
|
|
case 4:
|
|
Odds_Totals::grap($odds, $offer);
|
|
break;
|
|
|
|
case 131073:
|
|
Odds_2WayS1::grap($odds, $offer);
|
|
break;
|
|
|
|
case 65536:
|
|
Odds_3WayHt::grap($odds, $offer);
|
|
break;
|
|
case 65540:
|
|
Odds_TotalsHt::grap($odds, $offer);
|
|
break;
|
|
case 65539:
|
|
Odds_PointsHt::grap($odds, $offer);
|
|
break;
|
|
|
|
case 131075:
|
|
Odds_PointsQ1::grap($odds, $offer);
|
|
break;
|
|
case 131076:
|
|
Odds_TotalsQ1::grap($odds, $offer);
|
|
break;
|
|
|
|
case 5242880:
|
|
Odds_Dc::grap($odds, $offer);
|
|
break;
|
|
case 6291457:
|
|
Odds_Dnb::grap($odds, $offer);
|
|
break;
|
|
case 11534337:
|
|
Odds_Ggng::grap($odds, $offer);
|
|
break;
|
|
case 7340033:
|
|
Odds_Tq::grap($odds, $offer);
|
|
break;
|
|
|
|
default:
|
|
Notice::note('switch bettype ID not found: '.$bettypeid, 'r');
|
|
break;
|
|
}
|
|
}
|
|
ActiveSpread::set($event_id, $bookmaker_id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($debug) {
|
|
Notice::note('DONE - EVENTS: '.$counter, 'g');
|
|
}
|
|
}
|
|
}
|