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;
 | |
|     }
 | |
| }
 |