Neue commands.

main
Giò 2024-06-24 18:49:43 +02:00
parent 42cc96a14a
commit d2f1c82098
7 changed files with 2086 additions and 20 deletions

View File

@ -29,10 +29,12 @@ class scrapeProperty extends Command
$seeds = Edomizil::getAllSeeds();
foreach($seeds as $seed){
Edomizil::ScrapeProperty($seed);
$this->info('Scraping '.$seed);
$scraper = Edomizil::ScrapeProperty($seed);
$this->info($scraper.' properties were found.');
}
$this->info('Scraping was successfull.');
$this->info('Finished scraping.');
}
}

View File

@ -13,7 +13,7 @@ class scrapePropertyDate extends Command
*
* @var string
*/
protected $signature = 'scrape:propertydata {propertyId?}';
protected $signature = 'scrape:propertydata {propertyId?} {--seed=}';
/**
* The console command description.
@ -28,15 +28,23 @@ class scrapePropertyDate extends Command
public function handle()
{
$propertyId = $this->argument('propertyId');
$seed = $this->option('seed');
if($propertyId && is_numeric($propertyId)){
$property = Property::select('id','property_platform_id')->where('id', 'like', $propertyId)->get();
}else{
$property = Property::select('id','property_platform_id')->inRandomOrder()->take(1)->get();
if($seed){
$property = Property::select('id','property_platform_id')->where('seed_id', $seed)->inRandomOrder()->take(1)->get();
} else {
if($propertyId && is_numeric($propertyId)){
$property = Property::select('id','property_platform_id')->where('id', 'like', $propertyId)->get();
}else{
$property = Property::select('id','property_platform_id')->inRandomOrder()->take(1)->get();
}
}
Edomizil::scrapePropertyData($property[0]);
$this->info('Scraping for property '.$property[0]->property_platform_id.' has ended.');
$data = Edomizil::scrapePropertyData($property[0]);
$this->info('Scraping for property '.$property[0]->property_platform_id.' has ended. Here is the result: '.$data);
}
}

View File

@ -10,5 +10,10 @@ class Seed extends Model
{
use HasFactory;
protected $table = 'seeds';
protected $fillable = [
'region_id',
'uri'
];
}

View File

@ -91,13 +91,20 @@ class Edomizil{
]);
}
}
return count($json['offers']);
}else{
self::saveHttpException($response,'property', $seed->id);
return 0;
}
}
public static function scrapePropertyData($property){
$result = [];
// scrape offer details such as name etc.
$offer = Http::get('https://www.e-domizil.ch/rental/offer/'.$property->property_platform_id);
@ -114,6 +121,8 @@ class Edomizil{
self::saveHttpException($offer,'offer',$property->id);
}
$result['offer'] = $offer->body();
// scrape price of property
$price = Http::get('https://www.e-domizil.ch/booking/checkout/priceDetails/'.$property->property_platform_id);
@ -130,6 +139,8 @@ class Edomizil{
self::saveHttpException($price,'price',$property->id);
}
$result['price'] = $price->body();
// scrape calendar which contains occupancies
$calendar = Http::get('https://www.e-domizil.ch/api/v2/calendar/'.$property->property_platform_id, [
'year' => date("Y"),
@ -146,8 +157,12 @@ class Edomizil{
]);
}else{
self::saveHttpException($calendar,'price',$property->id);
self::saveHttpException($calendar,'calendar',$property->id);
}
$result['calendar'] = $calendar->body();
return json_encode($result);
}

View File

@ -6,6 +6,8 @@
"license": "MIT",
"require": {
"php": "^8.1",
"filament/filament": "^3.2",
"filament/infolists": "^3.2",
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10",
"laravel/sanctum": "^3.3",
@ -35,7 +37,8 @@
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
"@php artisan package:discover --ansi",
"@php artisan filament:upgrade"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"

2050
scraper/composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -167,6 +167,7 @@ return [
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
App\Providers\RouteServiceProvider::class,
])->toArray(),