61 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Database\Seeders;
 | 
						|
 | 
						|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 | 
						|
use Illuminate\Database\Seeder;
 | 
						|
use App\Models\Episode;
 | 
						|
use App\Models\Podcast;
 | 
						|
use Illuminate\Support\Facades\Http;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
use Carbon\Carbon;
 | 
						|
 | 
						|
class EpisodeSeeder extends Seeder
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Run the database seeds.
 | 
						|
     */
 | 
						|
    public function run(): void
 | 
						|
    {
 | 
						|
        $current_page = 1;
 | 
						|
        $response = $this->getResponseFromApi($current_page);
 | 
						|
        $last_page = $response->object()->last_page;
 | 
						|
        $this->command->info('Last Page: ' . $last_page);
 | 
						|
        $podcast = Podcast::find(1);
 | 
						|
        while ($current_page <= $last_page) {
 | 
						|
            $this->command->info('Getting Page ' . $current_page);
 | 
						|
            foreach ($response->object()->data as $episode) {
 | 
						|
                $podcastEpisode = Episode::where('title', $episode->title)->first();
 | 
						|
                if (!$podcastEpisode) {
 | 
						|
                    $podcastEpisode = Episode::factory()->state([
 | 
						|
                        'podcast_id' => 1,
 | 
						|
                        'episode_date' => Carbon::parse($episode->show_date),
 | 
						|
                        'published' => (bool)$episode->published,
 | 
						|
                        'artwork_id' => null,
 | 
						|
                        'slug' => $episode->episode_number . '_' . Str::slug($episode->title),
 | 
						|
                        'title' => $episode->title,
 | 
						|
                        'mp3' => $episode->link,
 | 
						|
                        'created_at' => Carbon::parse($episode->created_at),
 | 
						|
                        'updated_at' => Carbon::parse($episode->updated_at),
 | 
						|
                        'legacy_id' => $episode->id ?? null
 | 
						|
                    ])->create();
 | 
						|
                } else {
 | 
						|
                    $podcastEpisode->legacy_id = $episode->id ?? null;
 | 
						|
                    if ($podcastEpisode->isDirty()) {
 | 
						|
                        $podcastEpisode->save();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                $this->command->info('Created ' . $episode->show_date . ' - (' . $episode->episode_number . ') ' . $episode->title);
 | 
						|
            }
 | 
						|
            $current_page++;
 | 
						|
            $response = $this->getResponseFromApi($current_page);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    private function getResponseFromApi($current_page) {
 | 
						|
        $response = Http::timeout(180)
 | 
						|
            ->get('https://noagendaartgenerator.com/episodesjson?p=7476&page=' . $current_page);
 | 
						|
        return $response;
 | 
						|
    }
 | 
						|
}
 |