Browse Source

add ComicsService

feature/new_bilibili_and_instagram_sxs20191126
shixuesen 4 years ago
parent
commit
8344d8e6bb
19 changed files with 12311 additions and 27 deletions
  1. +6
    -0
      app/BilibiliVideos.php
  2. +6
    -4
      app/Console/Commands/BiliVideoCode.php
  3. +45
    -0
      app/Console/Commands/ComicsScrape.php
  4. +1
    -1
      app/Console/Commands/RenameTest.php
  5. +7
    -6
      app/Console/Kernel.php
  6. +1
    -1
      app/Http/Controllers/WeiboController.php
  7. +7
    -1
      app/Services/BilibiliService.php
  8. +922
    -0
      app/Services/BilibiliServiceV2.php
  9. +42
    -0
      app/Services/ComicsService.php
  10. +14
    -3
      app/Services/HandBrakeService.php
  11. +1
    -1
      app/Services/InstagramService.php
  12. +3
    -1
      app/Services/NewNvshenService.php
  13. +6
    -2
      app/Services/NewXiuGirlsService.php
  14. +7
    -7
      composer.lock
  15. +35
    -0
      database/migrations/2021_02_21_203243_add_mid_and_bv_id.php
  16. +13
    -0
      fail.log
  17. +11181
    -0
      package-lock.json
  18. +3
    -0
      package.json
  19. +11
    -0
      tailwind.config.js

+ 6
- 0
app/BilibiliVideos.php View File

@ -33,6 +33,12 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereTotalParts($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereTotalParts($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereUpdatedAt($value)
* @mixin \Eloquent * @mixin \Eloquent
* @property int $bv_id B站 video bv id
* @property int $up_mid up的唯一识别 id
* @property int $collection_mid 收藏夹的唯一识别 id
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereBvId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereCollectionMid($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideos whereUpMid($value)
*/ */
class BilibiliVideos extends Model class BilibiliVideos extends Model
{ {


+ 6
- 4
app/Console/Commands/BiliVideoCode.php View File

@ -3,6 +3,7 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Services\BilibiliService; use App\Services\BilibiliService;
use App\Services\BilibiliServiceV2;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class BiliVideoCode extends Command class BiliVideoCode extends Command
@ -41,19 +42,20 @@ class BiliVideoCode extends Command
{ {
// dump($this->arguments());exit; // dump($this->arguments());exit;
// //
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
// $bilibili->checkVideoHasDownload(); // $bilibili->checkVideoHasDownload();
// $bilibili->queryLocalUpVideoList();exit; // $bilibili->queryLocalUpVideoList();exit;
// $bilibili->insertDBTest();exit; // $bilibili->insertDBTest();exit;
// $bilibili->queryPlayList(); // $bilibili->queryPlayList();
// $bilibili->queryUpVideoList(10278125);
$bilibili->queryUpVideoList(10278125);
// exit; // exit;
// $bilibili->queryDBCollectionList();
$bilibili->queryDBCollectionList();
// exit;
// $bilibili->queryForVideoParts(); // $bilibili->queryForVideoParts();
// $bilibili->compareAndDownloadUpVideos();
$bilibili->compareAndDownloadUpVideos();
// exit; // exit;
$bilibili->compareAndDownloadCollectionVideos(); $bilibili->compareAndDownloadCollectionVideos();
// $bilibili->queryCollectionList(); // $bilibili->queryCollectionList();


+ 45
- 0
app/Console/Commands/ComicsScrape.php View File

@ -0,0 +1,45 @@
<?php
namespace App\Console\Commands;
use App\Services\ComicsService;
use Illuminate\Console\Command;
class ComicsScrape extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'comic:scrape';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$comic = new ComicsService();
$comic->scrapeAllAlbum("https://www.003004.com/papa/page/1");
//
}
}

+ 1
- 1
app/Console/Commands/RenameTest.php View File

@ -41,7 +41,7 @@ class RenameTest extends Command
// //
$rename = new RenameService(); $rename = new RenameService();
// $rename->rename("/Volumes/WD/tmp/尤果网/尤G网", "尤果网-"); // $rename->rename("/Volumes/WD/tmp/尤果网/尤G网", "尤果网-");
$rename->rename("/Volumes/intel660p/image/宇航员", "");
$rename->rename("/Volumes/Backup/images/写真/【写真】Shika小鹿鹿 – 69套图合集", "");
// $rename->rename(); // $rename->rename();
// $rename->mvFiles("/Users/shixuesen/Documents/tmp/秀人旗下《MFStar模范学院》套图及视频写真-TLoB/视频/"); // $rename->mvFiles("/Users/shixuesen/Documents/tmp/秀人旗下《MFStar模范学院》套图及视频写真-TLoB/视频/");
} }


+ 7
- 6
app/Console/Kernel.php View File

@ -3,6 +3,7 @@
namespace App\Console; namespace App\Console;
use App\Services\BilibiliService; use App\Services\BilibiliService;
use App\Services\BilibiliServiceV2;
use App\Services\CompressImageService; use App\Services\CompressImageService;
use App\Services\DailySignService; use App\Services\DailySignService;
use App\Services\NewNvshenService; use App\Services\NewNvshenService;
@ -44,7 +45,7 @@ class Kernel extends ConsoleKernel
Log::info("schedule queryUpVideoList skipped at: " .date("Y-m-d H:i:s")); Log::info("schedule queryUpVideoList skipped at: " .date("Y-m-d H:i:s"));
exit; exit;
} }
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
Log::info("schedule queryUpVideoList started at: ". date("Y-m-d H:i:s")); Log::info("schedule queryUpVideoList started at: ". date("Y-m-d H:i:s"));
$bilibili->queryUpVideoList(); $bilibili->queryUpVideoList();
})->hourlyAt(5); })->hourlyAt(5);
@ -57,30 +58,30 @@ class Kernel extends ConsoleKernel
Log::info("schedule queryDBCollectionList skipped at: " .date("Y-m-d H:i:s")); Log::info("schedule queryDBCollectionList skipped at: " .date("Y-m-d H:i:s"));
exit; exit;
} }
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
Log::info("schedule queryDBCollectionList started at: ". date("Y-m-d H:i:s")); Log::info("schedule queryDBCollectionList started at: ". date("Y-m-d H:i:s"));
$bilibili->queryDBCollectionList(); $bilibili->queryDBCollectionList();
})->hourlyAt(35); })->hourlyAt(35);
// })->yearly(); // })->yearly();
$schedule->call(function () { $schedule->call(function () {
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
Log::info("schedule queryForVideoParts started at: ". date("Y-m-d H:i:s")); Log::info("schedule queryForVideoParts started at: ". date("Y-m-d H:i:s"));
$bilibili->queryForVideoParts(); $bilibili->queryForVideoParts();
})->dailyAt("02:00"); })->dailyAt("02:00");
$schedule->call(function () { $schedule->call(function () {
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
Log::info("schedule compareAndDownloadUpVideos started at: ". date("Y-m-d H:i:s")); Log::info("schedule compareAndDownloadUpVideos started at: ". date("Y-m-d H:i:s"));
$bilibili->compareAndDownloadUpVideos(); $bilibili->compareAndDownloadUpVideos();
})->dailyAt('03:00'); })->dailyAt('03:00');
$schedule->call(function () { $schedule->call(function () {
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
Log::info("schedule compareAndDownloadCollectionVideos started at: ". date("Y-m-d H:i:s")); Log::info("schedule compareAndDownloadCollectionVideos started at: ". date("Y-m-d H:i:s"));
$bilibili->compareAndDownloadCollectionVideos(); $bilibili->compareAndDownloadCollectionVideos();
})->dailyAt('04:00'); })->dailyAt('04:00');
$schedule->call(function () { $schedule->call(function () {
$bilibili = new BilibiliService();
$bilibili = new BilibiliServiceV2();
Log::info("schedule checkVideoHasDownload started at: ". date("Y-m-d H:i:s")); Log::info("schedule checkVideoHasDownload started at: ". date("Y-m-d H:i:s"));
$bilibili->checkVideoHasDownload(); $bilibili->checkVideoHasDownload();
})->dailyAt('09:30'); })->dailyAt('09:30');


+ 1
- 1
app/Http/Controllers/WeiboController.php View File

@ -32,7 +32,7 @@ class WeiboController extends Controller
// for( $i = 341; $i >= 1 ; $i-- ) // for( $i = 341; $i >= 1 ; $i-- )
// $url[] = 'https://m.weibo.cn/api/container/getIndex?containerid=1076035893812490&openApp=0&page='.$i; // $url[] = 'https://m.weibo.cn/api/container/getIndex?containerid=1076035893812490&openApp=0&page='.$i;
for( $i = 2; $i >= 1 ; $i-- )
for( $i = 12; $i >= 1 ; $i-- )
$url[] = 'https://m.weibo.cn/api/container/getIndex?containerid=230259&openApp=0&page='.$i; $url[] = 'https://m.weibo.cn/api/container/getIndex?containerid=230259&openApp=0&page='.$i;
// for ($i = 5; $i >= 1; $i--) { // for ($i = 5; $i >= 1; $i--) {
// $url[] = 'https://m.weibo.cn/feed/group?gid=4423532052076817&&page=' . $i; // $url[] = 'https://m.weibo.cn/feed/group?gid=4423532052076817&&page=' . $i;


+ 7
- 1
app/Services/BilibiliService.php View File

@ -249,6 +249,9 @@ class BilibiliService
// $videoList[] = "av" . $value; // $videoList[] = "av" . $value;
$videoList = []; $videoList = [];
$videoList[$value] = $vItem->total_parts; $videoList[$value] = $vItem->total_parts;
if (strtotime(date("H:i:s")) >= strtotime("09:00:00")) {
exit();
}
if ($item['mid'] == 27174777) { if ($item['mid'] == 27174777) {
$this->partDownloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/", "女团"); $this->partDownloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/", "女团");
} else { } else {
@ -263,7 +266,7 @@ class BilibiliService
} }
} }
public function compareAndDownloadCollectionVideos()
public function compareAndDownloadCollectionVideos($isAll = false)
{ {
$list = BilibiliCollections::all(); $list = BilibiliCollections::all();
foreach ($list as $item) { foreach ($list as $item) {
@ -294,6 +297,9 @@ class BilibiliService
$videoList[] = "av" . $value; $videoList[] = "av" . $value;
$videoMap = []; $videoMap = [];
$videoMap[$value] = $vItem->total_parts; $videoMap[$value] = $vItem->total_parts;
if (strtotime(date("H:i:s")) >= strtotime("09:00:00")) {
exit();
}
if ($item['title'] == "默认收藏夹") { if ($item['title'] == "默认收藏夹") {
// continue; // continue;
dump("xxxxxxxxxxxx----------------"); dump("xxxxxxxxxxxx----------------");


+ 922
- 0
app/Services/BilibiliServiceV2.php View File

@ -0,0 +1,922 @@
<?php
namespace App\Services;
use App\BilibiliCollections;
use App\BilibiliUpVideos;
use App\BilibiliVideoParts;
use App\BilibiliVideos;
use GuzzleHttp\Client;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class BilibiliServiceV2
{
private $collectionNumberListUrl = "https://api.bilibili.com/medialist/gateway/base/created?ps=100&up_mid=279025&is_space=0&jsonp=jsonp";
private $collectionListUrl = "https://api.bilibili.com/medialist/gateway/base/spaceDetail?ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp";
private $videoPartsUrl = "https://api.bilibili.com/x/player/pagelist?jsonp=jsonp&aid=";
private $invalidTitle = "已失效视频";
private $baseDir = "/Volumes/intel660p/video/mv/";
public function queryPlayList()
{
$pageNo = 1;
$url = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid=391073761&pagesize=30&tid=0&keyword=&order=pubdate&page=";
for ($i = 1; $i < 30; $i++) {
# code...
$result = json_decode(file_get_contents($url . $i), true);
foreach ($result['data']['vlist'] as $item) {
echo "av" . $item['aid'] . " ";
}
// echo $result['data']['vlist'][0]['aid'] . "\t";
// $pageNo++;
}
}
/**
* 获取各个 up 主的视频 id
* @param int $mediaId
* @throws \Exception
*/
public function queryUpVideoList($mediaId = 320491072)
{
Log::info("schedule queryUpVideoList inner started at: " . date("Y-m-d H:i:s"));
// 475250 kyokyo
// 3489535 熊小颖
// 320491072 绯绯
// 10139490 短短
// 116683 咬人猫
// 16539048 小仙若
// 10278125 香草猫饼
// 391073761 女团直拍
// 267781236 韩国女团饭拍直拍
// 23400436 小雪_juvia
$list = BilibiliUpVideos::all();
foreach ($list as $item) {
Log::info("schedule queryUpVideoList current up is {$item['up_name']}, started at: " . date("Y-m-d H:i:s"));
// $files = scandir($this->baseDir . "bilibili/" . $item['up_name']);
$mediaId = $item['mid'];
$videos = [];
$pageNo = 1;
$url = "https://api.bilibili.com/x/space/arc/search?mid={$mediaId}&ps=30&tid=0&keyword=&order=pubdate&jsonp=jsonp&pn=";
// https://space.bilibili.com/475250/video
for ($i = 1; $i < 10; $i++) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.bilibili.com/x/space/arc/search?mid={$mediaId}&ps=30&tid=0&keyword=&order=pubdate&jsonp=jsonp&pn={$i}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ja;q=0.5",
"Cache-Control: no-cache",
"Connection: keep-alive",
"Referer: https://www.bilibili.com",
"Pragma: no-cache",
"Sec-Fetch-Mode: navigate",
"Sec-Fetch-Site: none",
"Sec-Fetch-User: ?1",
"Upgrade-Insecure-Requests: 1",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// echo $response;exit;
$result = json_decode($response, true);
$result = Arr::get($result["data"]["list"], "vlist", []);
if (count($result) > 0) {
foreach ($result as $vItem) {
$bVideo = BilibiliVideos::firstOrCreate(["aid" => $vItem["aid"]],
[
"title" => $vItem["title"],
"from_type" => 2,
"from_up_name" => $item["up_name"],
"bv_id" => $vItem["bvid"],
"up_mid" => $mediaId,
"collection_mid" => 0
]);
if ($bVideo->from_type != 2) {
$bVideo->from_type = 3;
}
$bVideo->bv_id = $vItem["bvid"];
$bVideo->up_mid = $mediaId;
$bVideo->from_up_name = $item["up_name"];
$bVideo->save();
$videos[] = $vItem["aid"];
}
} else {
break;
}
}
usleep(random_int(1000, 10000) * 1000);
}
$item['videos'] = json_encode($videos);
// $item['downloaded_videos'] = json_encode([]);
$item->save();
}
}
/**
* 手动执行查询
* @param int $mediaId
* @throws \Exception
*/
public function queryLocalUpVideoList($mediaId = 320491072)
{
Log::info("schedule queryUpVideoList inner started at: " . date("Y-m-d H:i:s"));
// 475250 kyokyo
// 3489535 熊小颖
// 320491072 绯绯
// 10139490 短短
// 116683 咬人猫
// 16539048 小仙若
// 10278125 香草猫饼
// 391073761 女团直拍
// $list = BilibiliUpVideos::all();
$list = [];
$up = ["mid" => 391073761, "up_name" => "女团直拍"];
$up = ["mid" => 254624554, "up_name" => "女团能量站"];
$list[] = $up;
foreach ($list as $item) {
Log::info("schedule queryUpVideoList current up is {$item['up_name']}, started at: " . date("Y-m-d H:i:s"));
$files = scandir($this->baseDir . "bilibili/" . $item['up_name']);
$mediaId = $item['mid'];
$videos = [];
$pageNo = 1;
$url = "https://api.bilibili.com/x/space/arc/search?mid={$mediaId}&ps=30&tid=0&keyword=&order=pubdate&jsonp=jsonp&pn=";
// https://space.bilibili.com/475250/video
for ($i = 1; $i < 50; $i++) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.bilibili.com/x/space/arc/search?mid={$mediaId}&ps=30&tid=0&keyword=&order=pubdate&jsonp=jsonp&pn={$i}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ja;q=0.5",
"Cache-Control: no-cache",
"Connection: keep-alive",
"Referer: https://www.bilibili.com",
"Pragma: no-cache",
"Sec-Fetch-Mode: navigate",
"Sec-Fetch-Site: none",
"Sec-Fetch-User: ?1",
"Upgrade-Insecure-Requests: 1",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// echo $response;
$result = json_decode($response, true);
$result = Arr::get($result["data"]["list"], "vlist", []);
if (count($result) > 0) {
foreach ($result as $vItem) {
echo "av" . $vItem["aid"] . " ";
// $videos[] = $vItem["aid"];
}
} else {
break;
}
}
usleep(random_int(1000, 10000) * 1000);
}
// $item['videos'] = json_encode($videos);
// $item['downloaded_videos'] = json_encode([]);
// $item->save();
}
}
public function compareAndDownloadUpVideos($isAll = false)
{
$list = BilibiliUpVideos::all();
foreach ($list as $item) {
dump("当前 up名称是: " . $item["up_name"] . "\n");
if ($item["is_downloaded"] == 1) {
continue;
}
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();
} else {
$vItems = BilibiliVideos::where('up_mid', $item["mid"])
->where('created_at', '>=', date("Y-m-d H:i:s", strtotime("-1 week")))->get();
}
$videoList = [];
if (count($vItems) > 0) {
foreach ($vItems as $vItem) {
if ($vItem["is_download"] == 1 && $vItem["is_downloaded"] == 0) {
$videoList[] = "av" . $vItem["aid"];
if ($item['mid'] == 27174777) {
$this->downloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/", "女团");
} else {
$this->downloadBSitePlaylist($videoList, $this->baseDir . "bilibili/", $item['up_name']);
}
}
}
}
}
}
public function compareAndDownloadCollectionVideos($isAll = false)
{
$list = BilibiliCollections::all();
foreach ($list as $item) {
dump("收藏夹名称是: " . $item["title"] . "\n");
if ($item["is_downloaded"] == 1) {
continue;
}
Log::info("schedule compareAndDownloadCollectionVideos current collection is {$item['title']}, started at: " . date("Y-m-d H:i:s"));
$videoList = [];
if ($isAll) {
$vItems = BilibiliVideos::where("collection_mid", $item["media_id"])->get();
} else {
$vItems = BilibiliVideos::where('collection_mid', $item["media_id"])
->where('created_at', '>=', date("Y-m-d H:i:s", strtotime("-1 week")))->get();
}
if (count($vItems) > 0) {
foreach ($vItems as $vItem) {
if ($vItem["is_download"] == 1 && $vItem["is_downloaded"] == 0) {
$videoList[] = "av" . $vItem["aid"];
if ($item['title'] == "默认收藏夹") {
dump("xxxxxxxxxxxx----------------");
$this->downloadBSitePlaylist($videoList, "/Volumes/WD/tmp/", "bilibili");
} else if ($item['title'] == '少女时代') {
$this->downloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/少女时代", "");
} else if ($item['title'] == 'aoa') {
$this->downloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/aoa", "");
} else if ($item['title'] == 'blackpink') {
$this->downloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/blackpink", "");
} else if ($item['title'] == 'wjsn') {
$this->downloadBSitePlaylist($videoList, "/Volumes/WD/tmp/bilibili/wjsn", "");
} else {
$this->downloadBSitePlaylist($videoList, $this->baseDir . "bilibili/", $item['title']);
}
}
}
}
}
}
public function queryFavList()
{
// aoa 50076725
// default 50069625
// 美腿 156009025
// 允儿 154442125
// 少女时代 153944525
$invalidTitle = "已失效视频";
$pageNo = 1;
for ($i = 1; $i < 65; $i++) {
$curl = curl_init();
$url = "https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=154442125&pn={$i}&ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp";
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: application/json, text/plain, */*",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6,ja;q=0.5",
"Cache-Control: no-cache",
"Connection: keep-alive",
// "Cookie: buvid3=5566647C-DDE5-4AFF-8711-89C9DB2B7061110244infoc; LIVE_BUVID=AUTO2315591376644842; sid=kbyrjw72; stardustvideo=1; CURRENT_FNVAL=16; rpdid=|(J~|JluJmmk0J\'ullmuJ~~kJ; CURRENT_QUALITY=80; UM_distinctid=16b11bb4099eb-033fd8b69a435d-37647e03-13c680-16b11bb40bf97; fts=1562149769; im_notify_type_279025=0; _uuid=69A60E94-E8FE-54B8-DCCD-0F519F0DEF7480343infoc; DedeUserID=279025; DedeUserID__ckMd5=9a79e15294e6b8bb; SESSDATA=b114a39d%2C1573361994%2C2ed0a2a1; bili_jct=b35f8e9780e4a80dd07f316f781f179b; bp_t_offset_279025=315386152995357818",
"Cookie: SESSDATA=64a15917%2C1578628130%2Ceb05cdc1",
"Host: api.bilibili.com",
"Origin: https://space.bilibili.com",
"Postman-Token: c7f849ec-aaf9-4c71-851d-4ca061e725d0,f8f582bc-4872-4aa7-b209-b926364d4d1a",
"Referer: https://space.bilibili.com/279025/favlist",
"Sec-Fetch-Mode: cors",
"Sec-Fetch-Site: same-site",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$responseArr = json_decode($response, true);
if ($responseArr['code'] == 0) {
$data = $responseArr['data'];
$medias = $data['medias'];
if (count($medias) > 0) {
foreach ($medias as $item) {
if ($item['title'] != $invalidTitle) {
echo "av" . $item['id'] . " ";
}
}
}
}
}
usleep(random_int(1000, 10000) * 1000);
}
}
public function getAoaFavList($id = 50076725)
{
$invalidTitle = "已失效视频";
$pageNo = 1;
for ($i = 1; $i < 65; $i++) {
$curl = curl_init();
$url = "https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=50076725&pn={$i}&ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp";
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: application/json, text/plain, */*",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6,ja;q=0.5",
"Cache-Control: no-cache",
"Connection: keep-alive",
"Cookie: buvid3=5566647C-DDE5-4AFF-8711-89C9DB2B7061110244infoc; LIVE_BUVID=AUTO2315591376644842; sid=kbyrjw72; stardustvideo=1; CURRENT_FNVAL=16; rpdid=|(J~|JluJmmk0J'ullmuJ~~kJ; CURRENT_QUALITY=80; UM_distinctid=16b11bb4099eb-033fd8b69a435d-37647e03-13c680-16b11bb40bf97; fts=1562149769; im_notify_type_279025=0; _uuid=69A60E94-E8FE-54B8-DCCD-0F519F0DEF7480343infoc; DedeUserID=279025; DedeUserID__ckMd5=9a79e15294e6b8bb; SESSDATA=b114a39d%2C1573361994%2C2ed0a2a1; bili_jct=b35f8e9780e4a80dd07f316f781f179b; bp_t_offset_279025=317592473398470273",
"Host: api.bilibili.com",
"Origin: https://space.bilibili.com",
"Postman-Token: c7f849ec-aaf9-4c71-851d-4ca061e725d0,f8f582bc-4872-4aa7-b209-b926364d4d1a",
"Referer: https://space.bilibili.com/279025/favlist",
"Sec-Fetch-Mode: cors",
"Sec-Fetch-Site: same-site",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$responseArr = json_decode($response, true);
if ($responseArr['code'] == 0) {
$data = $responseArr['data'];
$medias = $data['medias'];
if (count($medias) > 0) {
foreach ($medias as $item) {
if ($item['title'] != $invalidTitle) {
echo "av" . $item['id'] . " ";
}
}
}
}
}
usleep(random_int(1000, 10000) * 1000);
}
}
public function queryCollectionList()
{
// $curl = curl_init();
//
// curl_setopt_array($curl, array(
// CURLOPT_URL => "https://api.bilibili.com/medialist/gateway/base/created?pn=1&ps=100&up_mid=279025&is_space=0&jsonp=jsonp",
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => "",
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 0,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => "GET",
// CURLOPT_HTTPHEADER => array(
// "Connection: keep-alive",
// "Pragma: no-cache",
// "Cache-Control: no-cache",
// "Accept: application/json, text/plain, */*",
// "Origin: https://space.bilibili.com",
// "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36",
// "Sec-Fetch-Site: same-site",
// "Sec-Fetch-Mode: cors",
// "Referer: https://space.bilibili.com/279025/favlist?spm_id_from=333.851.b_696e7465726e6174696f6e616c486561646572.15",
// "Accept-Encoding: gzip, deflate, br",
// "Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ja;q=0.5",
// "Cookie: _uuid=D6E5438B-5A95-439F-7512-FC3509457A9A28409infoc; buvid3=5566647C-DDE5-4AFF-8711-89C9DB2B7061110244infoc; LIVE_BUVID=AUTO3415734420289108; UM_distinctid=16e62db8b9934b-0f76f63ae51bee-1c3c6a5a-13c680-16e62db8b9acaf; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(ku|l|lRYlJ0J'ul~JYuYY|u; finger=0539dad4; im_notify_type_279025=0; sid=llgc5h9q; DedeUserID=279025; DedeUserID__ckMd5=9a79e15294e6b8bb; bili_jct=07b8811aa5ca68020eb0c11e0e01c22f; laboratory=1-1; CURRENT_QUALITY=80; SESSDATA=64a15917%2C1578628130%2Ceb05cdc1; bp_t_offset_279025=336855788264916597; INTVER=1"
// ),
// ));
//
// $response = curl_exec($curl);
$response = $this->requestCollectionNumberList($this->collectionNumberListUrl, 1);
$res = json_decode($response, true);
if ($res['code'] == 0) {
$list = $res['data']['list'];
foreach ($list as $item) {
$collection = new BilibiliCollections();
$collection->title = $item["title"];
$collection->is_downloaded = 0;
$collection->media_id = $item["id"];
$currentList = [];
for ($pageNo = 1; $pageNo < 100; $pageNo++) {
$listResponse = $this->requestCollectionList($this->collectionListUrl, $item['id'], $pageNo);
dump("pageNo: " . $pageNo);
dump($listResponse);
$responseArr = json_decode($listResponse, true);
if ($responseArr['code'] == 0) {
$data = $responseArr["data"];
$medias = Arr::get($data, "medias", []);
if (count($medias) > 0) {
foreach ($medias as $media) {
if ($media['title'] != $this->invalidTitle) {
$currentList[] = $media["id"];
}
}
} else {
break;
}
}
}
$collection->videos = json_encode($currentList);
$collection->save();
}
}
// curl_close($curl);
echo $response;
}
public function queryDBCollectionList()
{
$list = BilibiliCollections::all();
foreach ($list as $item) {
Log::info("schedule queryDBCollectionList current collection is: " . $item['title'] . " started at :" . date("Y-m-d H:i:s"));
$currentList = [];
for ($pageNo = 1; $pageNo < 100; $pageNo++) {
$listResponse = $this->requestCollectionList($this->collectionListUrl, $item['media_id'], $pageNo);
// dump("pageNo: " . $pageNo);
// dump($listResponse);
$responseArr = json_decode($listResponse, true);
if ($responseArr['code'] == 0) {
$data = $responseArr["data"];
$medias = Arr::get($data, "medias", []);
if (count($medias) > 0) {
foreach ($medias as $media) {
if ($media['title'] != $this->invalidTitle) {
$bVideo = BilibiliVideos::firstOrCreate(["aid" => $media["id"]],
[
"title" => $media["title"],
"from_type" => 1,
"from_collection_name" => $item['title'],
"bv_id" => $media["bv_id"],
"collection_mid" => $item["media_id"],
"up_mid" => 0
]);
if ($bVideo->from_type != 1) {
$bVideo->from_type = 3;
$bVideo->from_collection_name = $item["title"];
}
$bVideo->bv_id = $media["bv_id"];
$bVideo->collection_mid = $item["media_id"];
$bVideo->save();
$currentList[] = $media["id"];
}
}
} else {
break;
}
}
}
$item->videos = json_encode($currentList);
$item->save();
}
}
public function queryForVideoParts()
{
$i = 1;
$list = BilibiliVideos::simplePaginate(50, null, 'page', $i);
// dump($list->items()[0]->aid);
while ($list->isNotEmpty()) {
foreach ($list->items() as $item) {
// dump("current item", [$item->getAttributes()]);
$response = $this->requestVideoParts($item->aid);
$partList = Arr::get(json_decode($response, true), "data");
if (count($partList) > 0) {
foreach ($partList as $part) {
if ($item["from_type"] == 1) {
if ($item["from_collection_name"] == "默认收藏夹") {
$downloadPath = $this->baseDir . "bilibili";
} else {
$downloadPath = $this->baseDir . "bilibili/" . $item["from_collection_name"];
}
} else {
$downloadPath = $this->baseDir . "bilibili/" . $item["from_up_name"];
}
$pItem = BilibiliVideoParts::firstOrCreate([
"aid" => $item->aid,
"page" => $part["page"]
], [
"title" => $item["title"],
"part" => $part["part"],
"duration" => $part["duration"],
"to_download_path" => $downloadPath
]);
$pItem["title"] = $item["title"];
$pItem["to_download_path"] = $downloadPath;
$pItem->save();
}
$item->total_parts = count($partList);
$item->save();
}
}
$i++;
$list = BilibiliVideos::simplePaginate(50, null, 'page', $i);
try {
usleep(random_int(10, 1000) * 1000);
} catch (\Exception $e) {
}
}
// while ($list->hasPages()) {
// foreach ($list as $item) {
// $item->
// }
// $list = BilibiliVideos::simplePaginate()
// }
}
/**
* 检查是否已下载
*/
public function checkVideoHasDownload()
{
$i = 1;
$list = BilibiliVideos::simplePaginate(50, null, 'page', $i);
$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/少女时代");
while ($list->isNotEmpty()) {
foreach ($list->items() as $item) {
// dump("current item", [$item->getAttributes()]);
if ($item['is_download'] == 0) {
continue;
}
$list = BilibiliVideoParts::where(['aid' => $item['aid']])->get();
if (count($list) > 0) {
foreach ($list as $part) {
// dump("here is parts", [$part->getAttributes()]);
if (is_dir($part["to_download_path"])) {
// dump("this is path ".$part["to_download_path"]);
if (array_key_exists($part["to_download_path"], $dirFiles)) {
$files = Arr::get($dirFiles, $part["to_download_path"]);
} else {
$files = scandir($part["to_download_path"]);
$dirFiles[$part["to_download_path"]] = $files;
}
// dump($files);
$itemCount = 0;
$toRemove = [];
foreach ($files as $file) {
if ($file == "." || $file == "..") {
continue;
} else {
// dump("current file: ". $file ." ".$part["title"]);
$pos = strpos($file, $part["title"]);
// dump("current compare result " . $pos);
if ($pos !== false) {
// dump($file);
$itemCount++;
if (strpos($file, $part["title"] . " P" . $part["page"]) !== false) {
Log::info("file matched " . $file);
$toRemove[] = $file;
$part["is_downloaded"] = 1;
$part->save();
}
}
}
}
$dirFiles[$part["to_download_path"]] = array_diff($files, $toRemove);
if ($itemCount == $item["total_parts"]) {
$item["is_downloaded"] = 1;
$item->save();
}
}
}
}
// exit;
}
$i++;
$list = BilibiliVideos::simplePaginate(50, null, 'page', $i);
// exit;
}
}
public function checkVideoHasDownloadV2()
{
$i = 1;
$list = BilibiliVideos::simplePaginate(50, null, 'page', $i);
$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/少女时代");
while ($list->isNotEmpty()) {
foreach ($list->items() as $item) {
dump("current item", [$item->getAttributes()]);
if ($item['is_download'] == 0) {
continue;
}
$list = BilibiliVideoParts::where(['aid' => $item['aid']])->get();
if (count($list) > 0) {
foreach ($list as $part) {
// dump("here is parts", [$part->getAttributes()]);
if (is_dir($part["to_download_path"])) {
// dump("this is path ".$part["to_download_path"]);
if (array_key_exists($part["to_download_path"], $dirFiles)) {
$files = Arr::get($dirFiles, $part["to_download_path"]);
} else {
$files = scandir($part["to_download_path"]);
$dirFiles[$part["to_download_path"]] = $files;
}
// dump($files);
$itemCount = 0;
$toRemove = [];
foreach ($files as $file) {
if ($file == "." || $file == "..") {
continue;
} else {
dump("current file: ". $file ." ".$part["title"]);
$pos = strpos($file, $part["title"]);
// dump("current compare result " . $pos);
if ($pos !== false) {
dump($file);
$itemCount++;
if (strpos($file, $part["title"] . " P" . $part["page"]) !== false) {
Log::info("file matched " . $file);
$toRemove[] = $file;
$part["is_downloaded"] = 1;
$part->save();
}
}
}
}
$dirFiles[$part["to_download_path"]] = array_diff($files, $toRemove);
if ($itemCount == $item["total_parts"]) {
$item["is_downloaded"] = 1;
$item->save();
}
}
}
}
// exit;
}
$i++;
$list = BilibiliVideos::simplePaginate(50, null, 'page', $i);
// exit;
}
}
public function requestVideoParts($aid)
{
return $this->request($this->videoPartsUrl . $aid);
}
public function requestCollectionList($url, $mediaId, $pn)
{
return $this->request($url . "&media_id=" . $mediaId . "&pn=" . $pn, true);
}
public function requestCollectionNumberList($url, $pn)
{
return $this->request($url . "&pn=" . $pn);
}
public function request($url, $userCookie = false)
{
$curl = curl_init();
$headerArray = array(
"Connection: keep-alive",
"Pragma: no-cache",
"Cache-Control: no-cache",
"Accept: application/json, text/plain, */*",
"Origin: https://space.bilibili.com",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36",
"Sec-Fetch-Site: same-site",
"Sec-Fetch-Mode: cors",
"Referer: https://space.bilibili.com/279025/favlist?spm_id_from=333.851.b_696e7465726e6174696f6e616c486561646572.15",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ja;q=0.5",
// "Cookie: SESSDATA=64a15917%2C1578628130%2Ceb05cdc1"
);
if ($userCookie) {
$headerArray[] = "Cookie: SESSDATA=75ed2a5a%2C1620866280%2Cc0fab*b1;";
// $headerArray[] = "Cookie: _uuid=D6E5438B-5A95-439F-7512-FC3509457A9A28409infoc; buvid3=5566647C-DDE5-4AFF-8711-89C9DB2B7061110244infoc; LIVE_BUVID=AUTO3415734420289108; UM_distinctid=16e62db8b9934b-0f76f63ae51bee-1c3c6a5a-13c680-16e62db8b9acaf; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(ku|l|lRYlJ0J'ul~JYuYY|u; im_notify_type_279025=0; sid=llgc5h9q; laboratory=1-1; CURRENT_QUALITY=80; INTVER=1; DedeUserID=279025; DedeUserID__ckMd5=9a79e15294e6b8bb; SESSDATA=b169300a%2C1581262828%2C3654f611; bili_jct=597a5b9adb6170698e396fb053bc4aba; bp_t_offset_279025=343238964368145599";
}
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => $headerArray
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
\Log::error($err);
return null;
}
return $response;
}
public function downloadBSitePlaylist($aidList, $dir = "/Volumes/intel660p/video/mv/mp4", $subDir)
{
dump("downloadBSitePlaylist : xxxxxxxxxxxxxxxxxxxxxxxxxxxx");
$dirExists = is_dir($dir);
if ($dirExists) {
$innerDir = $dir . "/" . $subDir;
if (!is_dir($innerDir)) {
mkdir($innerDir);
}
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);
Log::info($downloadResult);
Log::info("current download result: " . $downloadResult);
try {
usleep(random_int(1000, 10000) * 1000);
} catch (\Exception $e) {
}
}
}
}
/**
* p 下载视频
* @param $aidMap
* @param string $dir
* @param $subDir
*/
public function partDownloadBSitePlaylist($aidMap, $dir = "/Volumes/intel660p/video/mv/mp4", $subDir)
{
dump("partDownloadBSitePlaylist");
dump($aidMap);
dump($dir);
$dirExists = is_dir($dir);
dump($dirExists);
if ($dirExists) {
$innerDir = $dir . "/" . $subDir;
dump($innerDir);
if (!is_dir($innerDir)) {
mkdir($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);
$downloadResult = shell_exec('cd "' .$innerDir .'" && url="https://www.bilibili.com/video/av' . $aid . '?p="
for i in $(seq 1 ' . $parts . ')
do
annie -c "SESSDATA=75ed2a5a%2C1620866280%2Cc0fab*b1" $url$i
done ' );
Log::info($downloadResult);
Log::info("current download result: " . $downloadResult);
try {
usleep(random_int(1000, 10000) * 1000);
} catch (\Exception $e) {
}
}
}
}
public function deleteFileNotContainP()
{
$dir = "/Volumes/intel660p/video/mv/mp4";
$files = scandir($dir);
foreach ($files as $file) {
if ($file == "." || $file == "..") {
continue;
}
if (preg_match("#P\d{1,2}#", $file)) {
echo $file . "\n";
} else {
echo "to delete file " . $file . "\n";
unlink($dir . "/" . $file);
}
}
}
public function compareAndDownloadNewVideos()
{
$list = BilibiliCollections::all();
foreach ($list as $item) {
if ($item['is_downloaded'] == 1) {
continue;
}
$undownloaded = array_diff($item['videos'], $item['downloaded_videos']);
}
dump($list);
}
public function commonRequest($url, $cookie, $media_id, $pageNo)
{
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'https://api.bilibili.com',
// You can set any number of default request options.
'timeout' => 2.0,
]);
$jar = new \GuzzleHttp\Cookie\CookieJar;
$r = $client->request('GET', 'http://httpbin.org/cookies', [
'cookies' => $jar
]);
}
public function insertDBTest()
{
$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');";
$result = DB::insert($sql);
if ($i % 100 == 0) {
print_r($result);
}
usleep(10);
}
}
}

+ 42
- 0
app/Services/ComicsService.php View File

@ -0,0 +1,42 @@
<?php
namespace App\Services;
use App\Utils\CommonUtils;
use QL\QueryList;
class ComicsService {
private $queryInstance;
public function __construct()
{
$this->queryInstance = QueryList::getInstance();
}
/**
* @return QueryList|null
*/
public function getQueryInstance(): ?QueryList
{
return $this->queryInstance;
}
public function scrapeAllAlbum($rootUrl)
{
$content = $this->getQueryInstance()->get($rootUrl);
$rules = [
// 采集文章标题
'title' => ['.thumbnail','title'],
// 采集链接
'link' => ['.thumbnail','href'],
// 采集缩略图
'totalNum' => ['body > section > div.content-wrap > div > div.pagination.pagination-multi > ul > li:nth-child(8) > span','text'],
];
// $links = $content->find("a.thumbnail")->attrs("href");
$range = ".pb article";
$list = $content->rules($rules)->range($range)->query()->getData();;
dump($list->all());
// $totalPageNum = body > section > div.content-wrap > div > div.pagination.pagination-multi > ul > li:nth-child(8) > span
// $links->dump();
}
}

+ 14
- 3
app/Services/HandBrakeService.php View File

@ -53,7 +53,7 @@ class HandBrakeService
} }
// public function processDir($baseDir = "/Volumes/WD/Video/HuaVid/") // public function processDir($baseDir = "/Volumes/WD/Video/HuaVid/")
public function processDir($baseDir = "/Volumes/intel660p/image/宇航员/010期-北京商务模特苏苏")
public function processDir($baseDir = "/Volumes/Samsung/weibo/old_video")
{ {
$files = scandir($baseDir); $files = scandir($baseDir);
foreach ($files as $file) { foreach ($files as $file) {
@ -73,10 +73,21 @@ class HandBrakeService
public function processVideo($pathFile) public function processVideo($pathFile)
{ {
$mime = mime_content_type($pathFile); $mime = mime_content_type($pathFile);
// dump("file type", [$mime, $subPathFile]);
// dump("file type", [$mime, $pathFile]);exit;
// continue; // continue;
if (strstr($mime, "video/")) {
$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('use_oldxml_mediainfo_output_format', true);
if (strstr($mime, "video/") || strstr($mime, "application/octet-stream")) {
if (is_file($pathFile)) { if (is_file($pathFile)) {
$mediaContainer = $mediaInfo->getInfo($pathFile);
foreach ($mediaContainer->getVideos() as $video) {
$height = $video->get('height')->getAbsoluteValue();
$width = $video->get('width')->getAbsoluteValue();
if ($width <= 1280 && $height <= 720) {
echo "$pathFile 分辨率小于 720p 跳过\n";
return;
}
}
$fileInfo = pathinfo($pathFile); $fileInfo = pathinfo($pathFile);
dump("fileInfo", $fileInfo); dump("fileInfo", $fileInfo);
if (ends_with($fileInfo["filename"], "-720p")) { if (ends_with($fileInfo["filename"], "-720p")) {


+ 1
- 1
app/Services/InstagramService.php View File

@ -306,7 +306,7 @@ class InstagramService
try { try {
$userList = file("/Users/shixuesen/OneDrive/Pictures/instagram/user.txt"); $userList = file("/Users/shixuesen/OneDrive/Pictures/instagram/user.txt");
$userList = array_slice($userList, 0, 65);
$userList = array_slice($userList, 65, 65);
// $userList = ['1992.ai_']; // $userList = ['1992.ai_'];
// print_r($userList);exit; // print_r($userList);exit;
// print_r($userList); // print_r($userList);


+ 3
- 1
app/Services/NewNvshenService.php View File

@ -6,6 +6,7 @@ namespace App\Services;
use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\ConnectException;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Log;
use QL\QueryList; use QL\QueryList;
use Illuminate\Http\File; use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
@ -93,10 +94,11 @@ class NewNvshenService
$NUM_OF_ATTEMPTS = 50; $NUM_OF_ATTEMPTS = 50;
$mainQl = QueryList::getInstance(); $mainQl = QueryList::getInstance();
// self::$name_dir = array_slice(self::$name_dir, 6, 1);
self::$name_dir = array_slice(self::$name_dir, 1, 1);
foreach (self::$name_dir as $username => $name) { foreach (self::$name_dir as $username => $name) {
// $baseDir = "/Users/shixuesen/Documents/tmp/image/xg/" . $name['dir'] . "/"; // $baseDir = "/Users/shixuesen/Documents/tmp/image/xg/" . $name['dir'] . "/";
$baseDir = "/Volumes/intel660p/image/xg/" . $name["dir"] . "/"; $baseDir = "/Volumes/intel660p/image/xg/" . $name["dir"] . "/";
Log::info("当前用户 " . $name["name"] . " from nvshen.org 站点");
$albumCodeMap = []; $albumCodeMap = [];
// 处理两个网站对应图册名不一致,直接取图册 id 作为唯一性判断的 map // 处理两个网站对应图册名不一致,直接取图册 id 作为唯一性判断的 map
if (is_dir($baseDir)) { if (is_dir($baseDir)) {


+ 6
- 2
app/Services/NewXiuGirlsService.php View File

@ -297,9 +297,10 @@ class NewXiuGirlsService
/** /**
* xiugirl网站个人页展示的是全部的相册,不用分页查 * xiugirl网站个人页展示的是全部的相册,不用分页查
* @param $name * @param $name
* @param bool $isAll 是否抓取全部的,默认否,只抓前 5 个相册
* @return array * @return array
*/ */
private function queryAllAlbum($name): array
private function queryAllAlbum($name, $isAll = false): array
{ {
CommonUtils::randomSleep(100); CommonUtils::randomSleep(100);
$peopleUrl = "https://xsnvshen.com/girl/"; $peopleUrl = "https://xsnvshen.com/girl/";
@ -310,6 +311,9 @@ class NewXiuGirlsService
$ql = $baseQl->find($albumSelector)->attrs("href"); $ql = $baseQl->find($albumSelector)->attrs("href");
$items = $ql->all(); $items = $ql->all();
if (!$isAll) {
$items = array_slice($items, 0, 5);
}
return $items; return $items;
} }
@ -317,7 +321,7 @@ class NewXiuGirlsService
* 获取相册名 * 获取相册名
* @param string $baseUrl * @param string $baseUrl
* @param $item * @param $item
* @return array
* @return \Illuminate\Support\Collection|\Tightenco\Collect\Support\Collection
* @throws Exception * @throws Exception
*/ */
private function getAlbumTitle(string $baseUrl, $item) private function getAlbumTitle(string $baseUrl, $item)


+ 7
- 7
composer.lock View File

@ -7232,16 +7232,16 @@
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v4.4.18",
"version": "v4.4.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b"
"reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b",
"reference": "ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b",
"url": "https://api.github.com/repos/symfony/finder/zipball/25d79cfccfc12e84e7a63a248c3f0720fdd92db6",
"reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -7276,10 +7276,10 @@
"homepage": "https://symfony.com/contributors" "homepage": "https://symfony.com/contributors"
} }
], ],
"description": "Symfony Finder Component",
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v4.4.18"
"source": "https://github.com/symfony/finder/tree/v4.4.19"
}, },
"funding": [ "funding": [
{ {
@ -7295,7 +7295,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-12-08T16:59:59+00:00"
"time": "2021-01-27T09:09:26+00:00"
}, },
{ {
"name": "symfony/http-client-contracts", "name": "symfony/http-client-contracts",


+ 35
- 0
database/migrations/2021_02_21_203243_add_mid_and_bv_id.php View File

@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddMidAndBvId extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('bilibili_videos', function (Blueprint $table) {
//
$table->bigInteger("bv_id")->comment("B站 video 的 bv id")->after("aid");
$table->bigInteger("up_mid")->comment("up的唯一识别 id")->after("from_up_name");
$table->bigInteger("collection_mid")->comment("收藏夹的唯一识别 id")->after("up_mid");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('bilibili_videos', function (Blueprint $table) {
//
});
}
}

+ 13
- 0
fail.log View File

@ -956,3 +956,16 @@
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88591352_881513622667389_5753091001765484414_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=109&_nc_ohc=5yCVmPLXfroAX-DxC2p&vs=18138201010179125_2316458820&_nc_vs=HBksFQAYJEdQakxSd1Y5QUZoaXV5RURBSDVYdXZESUZkZFBidXFIQUFBQRUAAsgBABUAGCRHR09JdndpekkwR0ZNNnNCQUVPWExWZW9tTTB2YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbqvbynoKa4QBUCKAJDMywXQA0QYk3S8aoYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=ef3a164828&oe=6020A4EB&oh=0c9e885bf732abca283e3d51c9aa03de /Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88591352_881513622667389_5753091001765484414_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=109&_nc_ohc=5yCVmPLXfroAX-DxC2p&vs=18138201010179125_2316458820&_nc_vs=HBksFQAYJEdQakxSd1Y5QUZoaXV5RURBSDVYdXZESUZkZFBidXFIQUFBQRUAAsgBABUAGCRHR09JdndpekkwR0ZNNnNCQUVPWExWZW9tTTB2YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbqvbynoKa4QBUCKAJDMywXQA0QYk3S8aoYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=ef3a164828&oe=6020A4EB&oh=0c9e885bf732abca283e3d51c9aa03de
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/88498343_858631314710303_1002606118230272058_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=111&_nc_ohc=2Qjig67nmwcAX-9D44j&vs=17844815267522965_734675443&_nc_vs=HBksFQAYJEdLZGdSZ1VmbjRHdTZ3d0RBRHFvdjliel9Pa05idXFIQUFBQRUAAsgBABUAGCRHQ1I2eFFqbFptd2R0R29BQUo0UHNPMUtQSTh1YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaq6KHn%2BfCyPxUCKAJDMywXQCCZmZmZmZoYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=ef3a1930ff&oe=6020A658&oh=554d86fdbd0148fb3830f672fc87dc37 /Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/88498343_858631314710303_1002606118230272058_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=111&_nc_ohc=2Qjig67nmwcAX-9D44j&vs=17844815267522965_734675443&_nc_vs=HBksFQAYJEdLZGdSZ1VmbjRHdTZ3d0RBRHFvdjliel9Pa05idXFIQUFBQRUAAsgBABUAGCRHQ1I2eFFqbFptd2R0R29BQUo0UHNPMUtQSTh1YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaq6KHn%2BfCyPxUCKAJDMywXQCCZmZmZmZoYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=ef3a1930ff&oe=6020A658&oh=554d86fdbd0148fb3830f672fc87dc37
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88694445_436245440835372_1907501062184922896_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=100&_nc_ohc=PUgmGvOvjKgAX_gheqV&vs=17894860897826886_3142486695&_nc_vs=HBkcFQAYJEdLMWVTUVVzTDRsT3c0d0JBQkJ2TmhRY3puZ2FidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJoydy4%2F%2F0ck%2FFQIoAkMzLBdAGAAAAAAAABgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=ef3a1e2efa&oe=60208514&oh=c0481a04dff6ce570f98830509400b5b /Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88694445_436245440835372_1907501062184922896_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=100&_nc_ohc=PUgmGvOvjKgAX_gheqV&vs=17894860897826886_3142486695&_nc_vs=HBkcFQAYJEdLMWVTUVVzTDRsT3c0d0JBQkJ2TmhRY3puZ2FidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJoydy4%2F%2F0ck%2FFQIoAkMzLBdAGAAAAAAAABgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=ef3a1e2efa&oe=60208514&oh=c0481a04dff6ce570f98830509400b5b
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/98718102_483038106400482_6563406374261603681_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=g3-hx3rOvbQAX8N4W4R&vs=17896626757794657_1228905172&_nc_vs=HBksFQAYJEdKWlI0Z1hpdHI0U1VyY0JBR0c5WmE1UzV4VmJidXFIQUFBQRUAAsgBABUAGCRHQURvN0FpSzVsWDFLZVFEQUQ0WmtfbDR4cUpMYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbCgtvX3rjKPxUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a17be22&oe=60303C68&oh=704a5dfe70010c1816a2bcc180f6000e
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/98761296_176398180627954_4471036845934528637_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=110&_nc_ohc=PaarczUDF1wAX9FsZ6b&vs=17882471885081878_1382840552&_nc_vs=HBksFQAYJEdGRDY0Z1h5TmVYbWJxQUFBSDFJbktOU1VBd19idXFIQUFBQRUAAsgBABUAGCRHQUVVQlFrVEpmNDV2OU1BQUhsdXZDVnV5d29TYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACasx5z65IDEPxUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a18c9c9&oe=603051B2&oh=1eb87202e70a8cc9332996661cd88718
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/98800315_177335230524528_4466794279106676615_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=100&_nc_ohc=M0Urp2rBwgQAX9lJM57&vs=17906522353673493_101130783&_nc_vs=HBksFQAYJEdMdVM0d1Z3N0dzVFNhRUFBSWVINWhLN1BmMDlidXFIQUFBQRUAAsgBABUAGCRHQktJOHdna2J1d2lpS1FCQU5Xelp2djQzNmdQYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaqpr2a4PjOPxUCKAJDMywXQCgAAAAAAAAYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a13b22d&oe=602FFFA5&oh=a11be7693a99b13fbed15c19aed1a0b1
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/79554601_4059898470709681_6246754312442947262_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=101&_nc_ohc=FB4aiqXbT5YAX_bf0PB&vs=17926429171510253_3336684490&_nc_vs=HBksFQAYJEdDbm92UVN4dVN2R2RHd09BTDRtVFZEejdiQldidXFIQUFBQRUAAsgBABUAGCRHTkxyLWdoTDNDXzM3MDRCQUxncWpzMHJEaTVWYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACba6Krov%2F%2FXPxUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a1c93a9&oe=603077A1&oh=b4d7d28fdbc36692fad51c751fafc065
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88882615_458653825492741_4130741908065075950_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=101&_nc_ohc=T3MLnqacsjwAX-n2p7t&vs=17861812892408223_2267838721&_nc_vs=HBksFQAYJEdMYzlUQVVGNTFlcUpLRUJBTzdDQ1RuaFYxTTVidXFIQUFBQRUAAsgBABUAGCRHRVkyQVFsR3RZNnhiblVBQU9DQk1nM0lzNUpWYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACa%2Bk9LSq866PxUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a164164&oe=6030079D&oh=4a5edd5e0c1ea98ed166cc8c0bd71981
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/98619778_1355927518122035_4889043463383305826_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=111&_nc_ohc=YEz5yD_Rs4AAX-qiHvX&vs=17844826292524313_1676675520&_nc_vs=HBksFQAYJEdJTFI0QVV6RUE5Nk5kRUVBR0pPYUc0Z1g5bERidXFIQUFBQRUAAsgBABUAGCRHRS0zQWdteG0yZXRjeEFLQU5KMGpyVFZHZmRmYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACay%2Bdb0ufGyPxUCKAJDMywXQA2ZmZmZmZoYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a10fa3b&oe=60307B85&oh=544c4038361aee720199649dce2f5a6f
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/102214756_333249654689248_8764333667972610246_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=jPeUcwKAkbUAX_0Qkpl&vs=18198914008054226_3953612047&_nc_vs=HBksFQAYJEdHU3NGd2JnRFVxN0ZpOEJBTWI0Z0J3Sks2RjVidXFIQUFBQRUAAsgBABUAGCRHTXJKRGdubkQ3RllkYTBCQUQ1RlE5S2NKdXA3YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaktbyxmvTTQBUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=931a1aaba0&oe=60308D9E&oh=bd3c4d71755eadc9f59c1ada37fdc35f
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/98889212_231017842018014_2213336687349923831_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=JdeH03eqOEcAX9Q-CmS&vs=18129431554197082_3635915449&_nc_vs=HBksFQAYJEdQenQ1QVhlQm1rSUhOSUFBUGYtMUluOVdiY2VidXFIQUFBQRUAAsgBABUAGCRHT1BSQndsM1NHWjJzY3NBQUh2bnhFQzhtcndnYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACa06JKY5qe0QBUCKAJDMywXQCtEGJN0vGoYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=931a15ad74&oe=60301D8E&oh=a31b5e6e2047bc2fbbba9518678e9bf2
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/98955863_430140551569180_4607909544824071200_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=T3oNAuaRmhYAX9ukBIQ&vs=18073004470251261_2225388185&_nc_vs=HBksFQAYJEdGZnk1UVVjbjhmbU5ZY0JBQ0RrWGpoUmxmSS1idXFIQUFBQRUAAsgBABUAGCRHRHlDQkFrMlFFSUd6ZElBQUxWUzN6TmxJYXQyYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACb6guOOp9OaQBUCKAJDMywXQAgAAAAAAAAYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=931a1319e4&oe=60306466&oh=653795ebf0d202774cc0fc889169b5b1
/Users/shixuesen/OneDrive/Pictures/instagram/amandacerny/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88490076_905856376621949_3203572252368019011_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=k5uB42JKOhcAX-r7doz&vs=17865327464360969_147131145&_nc_vs=HBksFQAYJEdGeEFSZ1Y5eTRzZjN6Y0RBRU9lc1lMOVgzVXNidXFIQUFBQRUAAsgBABUAGCRHQ0ZFOXdpdjhjZ2hweXdEQUlZSmtIRXJEMWhmYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaS0LK59Zq8PxUCKAJDMywXQB%2B7ZFocrAgYEmRhc2hfYmFzZWxpbmVfNF92MREAdegHAA%3D%3D&_nc_rid=931a1759ee&oe=6030151A&oh=8ee0fcd2560e65b42db11ada294420c3
/Users/shixuesen/OneDrive/Pictures/instagram/cxxsomi/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/150928119_699242484043058_7630353759629458952_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=102&_nc_ohc=hz1rRFqvOisAX8BGhBY&se=7&tp=1&oh=cb0318c22f162a4530bb3182f1b93387&oe=605B49BD&ig_cache_key=MjUxMjU0NzY5NTU3NTc1MTk1Mg%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/angelachong_99/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/e35/151302909_356631788711874_2200316248623901481_n.jpg?_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=GjvGznhEI6MAX-OtKRo&se=8&tp=1&oh=23b6af9b76ad6839721d668dfa40304a&oe=605FB7AD&ig_cache_key=MjUxNDU2NzM2Mzc1MDYyMDU4Nw%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/2km2km/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/153398333_179791520578347_3415261100805801786_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=103&_nc_ohc=Lr2poZjMVRUAX8EhpKu&se=7&tp=1&oh=5e0ddaa4084e18af4d1acd6ef5d91ff6&oe=6061B5BE&ig_cache_key=MjUxNTk1MDE1Njk3MzYxNzE0OQ%3D%3D.2

+ 11181
- 0
package-lock.json
File diff suppressed because it is too large
View File


+ 3
- 0
package.json View File

@ -10,6 +10,7 @@
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^10.2.4",
"axios": "^0.18", "axios": "^0.18",
"bootstrap": "^4.0.0", "bootstrap": "^4.0.0",
"cross-env": "^5.1", "cross-env": "^5.1",
@ -17,9 +18,11 @@
"laravel-mix": "^4.0.7", "laravel-mix": "^4.0.7",
"lodash": "^4.17.5", "lodash": "^4.17.5",
"popper.js": "^1.12", "popper.js": "^1.12",
"postcss": "^8.2.6",
"resolve-url-loader": "^2.3.1", "resolve-url-loader": "^2.3.1",
"sass": "^1.15.2", "sass": "^1.15.2",
"sass-loader": "^7.1.0", "sass-loader": "^7.1.0",
"tailwindcss": "^2.0.3",
"vue": "^2.5.17" "vue": "^2.5.17"
} }
} }

+ 11
- 0
tailwind.config.js View File

@ -0,0 +1,11 @@
module.exports = {
purge: [],
darkMode: false, // or 'media' or 'class'
theme: {
extend: {},
},
variants: {
extend: {},
},
plugins: [],
}

Loading…
Cancel
Save