<?php namespace App\Console\Commands\NhacVn; 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 NhacVnCrawlerTrackCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'nhacvn:get-track'; /** * The console command description. * * @var string */ protected $description = 'Lấy bài hát từ Nhạc VN'; protected $trackRepository; /** * Create a new command instance. * * NhacVnCrawlerTrackCommand 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 "\n Bắt đầu xử lý lấy top 20 bài hát từ nhac.vn."; // 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.nhac_vn.domain'); $url = config('api.nhac_vn.ranking20'); $tracks = $this->trackRepository->processNhacVnGetTrackInfoFromTop20($url); if (count($tracks) == 0) return false; $key_insert = 0; $key_update = 0; $bulk_track_insert = []; 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)) { // Cập nhật $track_db = Track::where('title', $track['title'])->take(1)->get(); if (isset($track_db[0])) { $track_db[0]->id_nhacvn = $track['id_nhacvn']; $track_db[0]->link_nhacvn = $track['link']; if (empty($track_db[0]->singer_list)) { $track_db[0]->singer_list = $track['singer']; } $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'] = null; $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['id_nhacvn']); $bulk_track_insert[$key_insert]['time'] = time(); $bulk_track_insert[$key_insert]['id_nhacvn'] = $track['id_nhacvn']; $bulk_track_insert[$key_insert]['src_thumbnail_medium'] = $track['img']; $bulk_track_insert[$key_insert]['link_nhacvn'] = $track['link']; $bulk_track_insert[$key_insert]['singer_list'] = $track['singer']; $bulk_track_insert[$key_insert]['crawler_at'] = Carbon::now(); $key_insert++; } } echo "\n Số bài hát insert: " . $key_insert; echo "\n Số bài hát update: " . $key_update; if ($key_insert > 0) { DB::table(Constants::TABLE_TRACKS)->insert($bulk_track_insert); echo "\n Insert thành công."; } else { echo "\n Không lấy được bài hát nào."; } // Ghi log Crontjob::create(['message' => 'NhacVnCrawlerTrackCommand is called at ' . Carbon::now()]); } }