<?php namespace App\Console\Commands\Keeng; use App\Helpers\Constants; use App\Models\Crontjob; use App\Models\Track; use App\Repositories\TrackRepository; use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; class KeengCrawlerByCateCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'keeng:get-track-by-cate'; /** * The console command description. * * @var string */ protected $description = 'Lấy những bài hát mới phát hành'; protected $trackRepository; /** * Create a new command instance. * * KeengCrawlerByCateCommand constructor. * @param TrackRepository $trackRepository */ public function __construct(TrackRepository $trackRepository) { parent::__construct(); ini_set('max_execution_time', -1); $this->trackRepository = $trackRepository; } /** * Execute the console command. * * @return mixed */ public function handle() { echo "\nBắt đầu xử lý lấy 100 bài hát theo từng trang từ Keeng."; // Lấy mảng ID của Zing những bài hát đã insert $inserted = $this->trackRepository->getTrackInserted('title', 'original', []); // Lấy ds BXH về $domain = config('api.keeng.domain'); $tracks = []; $index = 0; for ($i = 1; $i <= 5; $i++) { $url = getKeengUrlCategoryByPopViet($i); $curl = cURL($url); $data = json_decode($curl); if (isset($data->data)) { foreach ($data->data as $key => $track) { $tracks[$index]['title'] = isset($track->name) ? $track->name : 'unknown-title'; $tracks[$index]['slug'] = isset($track->slug) ? $track->slug : null; $tracks[$index]['userid'] = 0; $tracks[$index]['tag'] = 'vmusic'; $tracks[$index]['genre'] = 1; $tracks[$index]['download_hash'] = md5($track->id); $tracks[$index]['time'] = time(); $tracks[$index]['link_keeng'] = isset($track->url) ? $track->url : null; $tracks[$index]['id_keeng'] = isset($track->identify) ? $track->identify : null; $tracks[$index]['singer_list'] = isset($track->singer) ? $track->singer : null; $tracks[$index]['composer_list'] = isset($track->info_extra->author_name) ? $track->info_extra->author_name : null; $tracks[$index]['src_thumbnail'] = isset($track->image) ? $track->image : null; $tracks[$index]['src_thumbnail_medium'] = isset($track->image310) ? $track->image310 : null; $index++; } } } $bulk_track_insert = []; $bulk_track_update = []; $key_insert = 0; $key_update = 0; foreach ($tracks as $key => $track) { // Xử lý insert/update dựa vào tên bài hát if (is_array($inserted) && count($inserted) > 0 && in_array($track['title'], $inserted)) { $track_db = Track::where('title', $track['title'])->take(1)->get(); if (isset($track_db[0])) { $track_db[0]->link_keeng = $track['link_keeng']; $track_db[0]->id_keeng = $track['id_keeng']; if (empty($track_db[0]->singer_list)) { $track_db[0]->singer_list = $track['singer_list']; } if (empty($track_db[0]->composer_list)) { $track_db[0]->composer_list = $track['composer_list']; } $track_db[0]->crawler_at = Carbon::now(); $track_db[0]->save(); } $key_update++; } else { $bulk_track_insert[$key_insert]['title'] = $track['title']; $bulk_track_insert[$key_insert]['slug'] = $track['slug']; $bulk_track_insert[$key_insert]['userid'] = 0; $bulk_track_insert[$key_insert]['tag'] = 'vmusic'; $bulk_track_insert[$key_insert]['genre'] = 1; $bulk_track_insert[$key_insert]['download_hash'] = md5($track['download_hash']); $bulk_track_insert[$key_insert]['time'] = time(); $bulk_track_insert[$key_insert]['link_keeng'] = $track['link_keeng']; $bulk_track_insert[$key_insert]['id_keeng'] = $track['id_keeng']; $bulk_track_insert[$key_insert]['singer_list'] = $track['singer_list']; $bulk_track_insert[$key_insert]['composer_list'] = $track['composer_list']; $bulk_track_insert[$key_insert]['src_thumbnail'] = $track['src_thumbnail']; $bulk_track_insert[$key_insert]['src_thumbnail_medium'] = $track['src_thumbnail_medium']; $bulk_track_insert[$key_insert]['crawler_at'] = Carbon::now(); $key_insert++; } } echo "\nSố bài hát insert: " . $key_insert; echo "\nSố bài hát update: " . $key_update; if ($key_insert > 0) { DB::table(Constants::TABLE_TRACKS)->insert($bulk_track_insert); echo "\nInsert thành công."; } else { echo "\nKhông lấy được bài hát nào."; } // Ghi log Crontjob::create(['message' => 'KeengCrawlerByCateCommand is called at ' . Carbon::now()]); } }