@ -6,6 +6,7 @@ namespace App\Services;
use App\BilibiliCollections ;
use App\BilibiliUpVideos ;
use App\BilibiliVideoParts ;
use App\BilibiliVideoRepository ;
use App\BilibiliVideos ;
use Exception ;
use GuzzleHttp\Client ;
@ -27,7 +28,14 @@ class BilibiliServiceV2
private $baseDir = " /Volumes/intel660p/video/mv/ " ;
private $remoteDir = " /data " ;
private $remoteDir = " /data/ " ;
protected $repository ;
public function __construct ( BilibiliVideoRepository $repository )
{
$this -> repository = $repository ;
}
public function queryPlayList ()
{
@ -249,6 +257,10 @@ class BilibiliServiceV2
if ( $item [ " is_downloaded " ] == 1 ) {
continue ;
}
if ( ! $this -> checkDiskSpace ()) {
Log :: info ( '磁盘空间不足' );
exit ;
}
Log :: info ( " schedule compareAndDownloadUpVideos current up is { $item [ 'up_name' ] } , started at: " . date ( " Y-m-d H:i:s " ));
if ( $isAll ) {
$vItems = BilibiliVideos :: where ( " up_mid " , $item [ " mid " ]) -> get ();
@ -258,40 +270,59 @@ class BilibiliServiceV2
}
$videoList = [];
$videoPartsMap = [];
if ( count ( $vItems ) > 0 ) {
foreach ( $vItems as $vItem ) {
if ( $vItem [ " is_download " ] == 1 && $vItem [ " is_downloaded " ] == 0 ) {
if ( count ( $vItems ) > 0 ) {
foreach ( $vItems as $vItem ) {
if ( $vItem [ " is_download " ] == 1 && $vItem [ " is_downloaded " ] == 0 || $vItem [ " download_status " ] != 1 ) {
// $videoList[] = "av" . $vItem["aid"];
$videoPartsMap = [];
$videoPartsMap [ $vItem [ " aid " ]] = $vItem [ " total_parts " ];
echo " 当前 up名称是: " . $item [ " up_name " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ] . " \n " ;
Log :: info ( " 当前 up名称是: " . $item [ " up_name " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ]);
if ( $env == " local " ) {
$result = false ;
if ( $item [ 'mid' ] == 27174777 ) {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , " /Volumes/WD/tmp/bilibili/ " , " 女团 " );
} else if ( $item [ " mid " ] == 391316322 ) {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , " /Volumes/WD/tmp/bilibili/ " , " 娜娜 " );
} else if ( $item [ " mid " ] == 396501206 ) {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , " /Volumes/WD/tmp/bilibili/ " , " 佳佳 " );
} else {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , $this -> baseDir . " bilibili/ " , $item [ 'up_name' ]);
}
if ( $result ) {
$vItem [ " is_downloaded " ] = 1 ;
$vItem -> save ();
}
if ( ! $this -> repository -> softLockUpdate ([ " id " => $vItem [ " id " ]], $vItem [ " version " ], [ " download_status " => 1 ])) {
Log :: warning ( " soft Lock failed id : " . $vItem [ " id " ]);
continue ;
}
$videoPartsMap = [];
$videoPartsMap [ $vItem [ " aid " ]] = $vItem [ " total_parts " ];
echo " 当前 up名称是: " . $item [ " up_name " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ] . " \n " ;
Log :: info ( " 当前 up名称是: " . $item [ " up_name " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ]);
if ( $env == " local " ) {
$result = false ;
if ( $item [ 'mid' ] == 27174777 ) {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , " /Volumes/WD/tmp/bilibili/ " , " 女团 " );
} else if ( $item [ " mid " ] == 391316322 ) {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , " /Volumes/WD/tmp/bilibili/ " , " 娜娜 " );
} else if ( $item [ " mid " ] == 396501206 ) {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , " /Volumes/WD/tmp/bilibili/ " , " 佳佳 " );
} else {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , $this -> remoteDir . " bilibili/ " , $item [ " up_name " ]);
if ( $result ) {
$vItem [ " is_downloaded " ] = 1 ;
$vItem -> save ();
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , $this -> baseDir . " bilibili/ " , $item [ 'up_name' ]);
}
if ( $result ) {
if ( ! $this -> repository -> softLockUpdate (
[ " id " => $vItem [ " id " ]],
$vItem [ " version " ],
[ " download_status " => 0 ,
" is_downloaded " => 1
])) {
Log :: warning ( " soft Lock failed id : " . $vItem [ " id " ]);
}
}
} else {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , $this -> remoteDir . " bilibili/ " , $item [ " up_name " ]);
if ( $result ) {
if ( ! $this -> repository -> softLockUpdate (
[ " id " => $vItem [ " id " ]],
$vItem [ " version " ],
[ " download_status " => 0 ,
" is_downloaded " => 1
])) {
Log :: warning ( " soft Lock failed id : " . $vItem [ " id " ]);
}
}
}
}
}
}
}
}
}
@ -304,6 +335,10 @@ class BilibiliServiceV2
if ( $item [ " is_downloaded " ] == 1 ) {
continue ;
}
if ( ! $this -> checkDiskSpace ()) {
Log :: info ( '磁盘空间不足' );
exit ;
}
Log :: info ( " schedule compareAndDownloadCollectionVideos current collection is { $item [ 'title' ] } , started at: " . date ( " Y-m-d H:i:s " ));
$videoList = [];
$videoPartsMap = [];
@ -317,11 +352,15 @@ class BilibiliServiceV2
if ( count ( $vItems ) > 0 ) {
foreach ( $vItems as $vItem ) {
if ( $vItem [ " is_download " ] == 1 && $vItem [ " is_downloaded " ] == 0 ) {
if ( $vItem [ " is_download " ] == 1 && $vItem [ " is_downloaded " ] == 0 && $vItem [ " download_status " ] == 0 ) {
// $videoList[] = "av" . $vItem["aid"];
if ( ! $this -> repository -> softLockUpdate ([ " id " => $vItem [ " id " ]], $vItem [ " version " ], [ " download_status " => 1 ])) {
Log :: warning ( " soft Lock failed id : " . $vItem [ " id " ]);
continue ;
}
$videoPartsMap = [];
$videoPartsMap [ $vItem [ " aid " ]] = $vItem [ " total_parts " ];
echo " 收藏夹名称是: " . $item [ " title " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ] . " \n " ;
echo " 收藏夹名称是: " . $item [ " title " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ] . " \n " ;
Log :: info ( " 收藏夹名称是: " . $item [ " title " ] . " 当前下载的视频 title: " . $vItem [ " title " ] . " 当前下载的视频 aid 是: " . $vItem [ " aid " ]);
if ( $env == " local " ) {
$result = false ;
@ -340,17 +379,28 @@ class BilibiliServiceV2
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , $this -> baseDir . " bilibili/ " , $item [ 'title' ]);
}
if ( $result ) {
$vItem [ " is_downloaded " ] = 1 ;
$vItem -> save ();
if ( ! $this -> repository -> softLockUpdate (
[ " id " => $vItem [ " id " ]],
$vItem [ " version " ],
[ " download_status " => 0 ,
" is_downloaded " => 1
])) {
Log :: warning ( " soft Lock failed id : " . $vItem [ " id " ]);
}
}
} else {
$result = $this -> partDownloadBSitePlaylist ( $videoPartsMap , $this -> remoteDir . " bilibili " , $item [ " title " ]);
if ( $result ) {
$vItem [ " is_downloaded " ] = 1 ;
$vItem -> save ();
if ( ! $this -> repository -> softLockUpdate (
[ " id " => $vItem [ " id " ]],
$vItem [ " version " ],
[ " download_status " => 0 ,
" is_downloaded " => 1
])) {
Log :: warning ( " soft Lock failed id : " . $vItem [ " id " ]);
}
}
}
}
}
}
@ -678,8 +728,8 @@ class BilibiliServiceV2
$dirFiles = [];
$dirFiles [ " /Volumes/WD/tmp/bilibili " ] = scandir ( " /Volumes/WD/tmp/bilibili " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/aoa " ] = scandir ( " /Volumes/WD/tmp/bilibili/aoa " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/女团 " ] = scandir ( " /Volumes/WD/tmp/bilibili/女团 " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/少女时代 " ] = scandir ( " /Volumes/WD/tmp/bilibili/少女时代 " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/女团 " ] = scandir ( " /Volumes/WD/tmp/bilibili/女团 " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/少女时代 " ] = scandir ( " /Volumes/WD/tmp/bilibili/少女时代 " );
while ( $list -> isNotEmpty ()) {
foreach ( $list -> items () as $item ) {
// dump("current item", [$item->getAttributes()]);
@ -743,8 +793,8 @@ class BilibiliServiceV2
$dirFiles = [];
$dirFiles [ " /Volumes/WD/tmp/bilibili " ] = scandir ( " /Volumes/WD/tmp/bilibili " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/aoa " ] = scandir ( " /Volumes/WD/tmp/bilibili/aoa " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/女团 " ] = scandir ( " /Volumes/WD/tmp/bilibili/女团 " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/少女时代 " ] = scandir ( " /Volumes/WD/tmp/bilibili/少女时代 " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/女团 " ] = scandir ( " /Volumes/WD/tmp/bilibili/女团 " );
$dirFiles [ " /Volumes/WD/tmp/bilibili/少女时代 " ] = scandir ( " /Volumes/WD/tmp/bilibili/少女时代 " );
while ( $list -> isNotEmpty ()) {
foreach ( $list -> items () as $item ) {
dump ( " current item " , [ $item -> getAttributes ()]);
@ -770,7 +820,7 @@ class BilibiliServiceV2
if ( $file == " . " || $file == " .. " ) {
continue ;
} else {
dump ( " current file: " . $file . " " . $part [ " title " ]);
dump ( " current file: " . $file . " " . $part [ " title " ]);
$pos = strpos ( $file , $part [ " title " ]);
// dump("current compare result " . $pos);
if ( $pos !== false ) {
@ -874,7 +924,7 @@ class BilibiliServiceV2
}
foreach ( $aidList as $aid ) {
Log :: info ( " current download command is : cd ' { $innerDir } ' && annie -r https://www.bilibili.com/video/av80815149 -p " . $aid );
$downloadResult = shell_exec ( 'cd "' . $innerDir . '" && annie -r https://www.bilibili.com/video/av80815149 -p ' . $aid );
$downloadResult = shell_exec ( 'cd "' . $innerDir . '" && annie -r https://www.bilibili.com/video/av80815149 -p ' . $aid );
Log :: info ( $downloadResult );
Log :: info ( " current download result: " . $downloadResult );
try {
@ -896,14 +946,19 @@ class BilibiliServiceV2
$env = App :: environment ();
$dirExists = is_dir ( $dir );
dump ( $dirExists );
echo " dir is $dir , and $dirExists " ;
if ( $dirExists ) {
$innerDir = $dir . " / " . $subDir ;
dump ( $innerDir );
if ( ! is_dir ( $innerDir )) {
mkdir ( $innerDir );
}
if ( ! $this -> checkDiskSpace ( $innerDir )) {
Log :: info ( '磁盘空间不足' );
exit ;
}
echo " 当前视频的下载路径是: " . $innerDir . " \n " ;
Log :: info ( " 当前视频的下载路径是: " . $innerDir );
Log :: info ( " 当前视频的下载路径是: " . $innerDir );
foreach ( $aidMap as $aid => $parts ) {
dump ( $aid );
Log :: info ( " current download command is : cd ' { $innerDir } ' && annie -r https://www.bilibili.com/video/av80815149 -p " . $aid );
@ -985,7 +1040,7 @@ done && echo "ok"');
$aNo = 484525 ;
for ( $i = 0 ; $i < 5000000 ; $i ++ ) {
$tempANo = $aNo + $i ;
$sql = " insert into `bilibili_video_temps`( `aid`, `title`, `from_type`, `from_collection_name`, `from_up_name`, `is_download`, `is_downloaded`, `total_parts`, `created_at`, `updated_at`) VALUES ( " . $tempANo . " , '【钢琴】《鬼灭之刃》OP《红莲华》by LiSA', 2, '', '绯绯', 1, 1, 1, '2020-01-08 10:05:40', '2020-01-13 23:35:17'); " ;
$sql = " insert into `bilibili_video_temps`( `aid`, `title`, `from_type`, `from_collection_name`, `from_up_name`, `is_download`, `is_downloaded`, `total_parts`, `created_at`, `updated_at`) VALUES ( " . $tempANo . " , '【钢琴】《鬼灭之刃》OP《红莲华》by LiSA', 2, '', '绯绯', 1, 1, 1, '2020-01-08 10:05:40', '2020-01-13 23:35:17'); " ;
$result = DB :: insert ( $sql );
if ( $i % 100 == 0 ) {
print_r ( $result );
@ -996,7 +1051,15 @@ done && echo "ok"');
public function searchVideoFiles ( $filename )
{
$list = BilibiliVideos :: where ( " title " , " like " , " % " . trim ( $filename ) . " % " ) -> get ();
$list = BilibiliVideos :: where ( " title " , " like " , " % " . trim ( $filename ) . " % " ) -> get ();
dump ( $list );
}
public function checkDiskSpace ( $dir = " /data " )
{
if ( disk_free_space ( $dir ) > 5 * 1024 * 1024 * 1024 ) {
return true ;
}
return false ;
}
}