diff --git a/.env.local b/.env.local index 0bc3ef8..83c7b46 100644 --- a/.env.local +++ b/.env.local @@ -24,6 +24,11 @@ REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 +TXY4_REDIS_HOST=127.0.0.1 +TXY4_REDIS_PASSWORD=null +TXY4_REDIS_PORT=16379 +TXY4_REDIS_CACHE_DB=0 + MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 diff --git a/.idea/php.xml b/.idea/php.xml index ca6342a..19f1daa 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -212,7 +212,7 @@ - + diff --git a/app/Console/Commands/AcfunScrape.php b/app/Console/Commands/AcfunScrape.php index 905f647..e5c2451 100644 --- a/app/Console/Commands/AcfunScrape.php +++ b/app/Console/Commands/AcfunScrape.php @@ -45,15 +45,15 @@ class AcfunScrape extends Command // 苏子怡 13651121 $service = new AcfunService(); $upItems = [ - 10703951 => "几兔灰", - 4537972 => "香菜猫饼", - 2277346 => "小清晨儿", - 13215999 => "kyokyo", - 13651121 => "苏子怡", - 3540234 => "雾奈奈-", - 826046 => "Sakuya十六", - 16146427 => "椰汁兔", - 36414290 => "你的清清呀", +// 10703951 => "几兔灰", +// 4537972 => "香菜猫饼", +// 2277346 => "小清晨儿", +// 13215999 => "kyokyo", +// 13651121 => "苏子怡", +// 3540234 => "雾奈奈-", +// 826046 => "Sakuya十六", +// 16146427 => "椰汁兔", +// 36414290 => "你的清清呀", 44328882 => "cc君辣", 41347405 => "香波妖精 Gikiki", 66565394 => "舞小喵 w", @@ -65,7 +65,8 @@ class AcfunScrape extends Command 12892608 => "可心喵", 70864147 => "凛凛苏Sue", 1702633 => "扛扛扛扛扛", - 71421930 => "慕慕有奶糖" + 71421930 => "慕慕有奶糖", + 71075628 => "大保健" // 14047168 => "特喵冲冲" ]; $service = new AcfunService(); diff --git a/app/Console/Commands/BiliVideoCode.php b/app/Console/Commands/BiliVideoCode.php index 4b8a3ec..56a087c 100644 --- a/app/Console/Commands/BiliVideoCode.php +++ b/app/Console/Commands/BiliVideoCode.php @@ -50,9 +50,9 @@ class BiliVideoCode extends Command // $bilibili->queryLocalUpVideoList();exit; // $bilibili->insertDBTest();exit; // $bilibili->queryPlayList(); - +// $bilibili->downloadDynamics();exit; $bilibili->queryUpVideoList(10278125); - // exit; + exit; // $bilibili->queryDBCollectionList(); // dump($bilibili->requestVideoParts("33483603"));exit; diff --git a/app/Console/Commands/InstagramScrape.php b/app/Console/Commands/InstagramScrape.php index fb08625..409dc47 100644 --- a/app/Console/Commands/InstagramScrape.php +++ b/app/Console/Commands/InstagramScrape.php @@ -50,10 +50,17 @@ class InstagramScrape extends Command // print_r($userList);exit; $ins = new InstagramService(); - $ins->scrapeFeedsV2(); - sleep(60*2); - $ins->scrapeUsersV2(89, null); - // $ins->scrapeUsersV2(89, ["lxx.baby", "nyanchan22", "doly0818", "17_chill", "aoi_sola", "sejinming", "tngnlo"]); +// $ins->scrapeFeedsV2(); +// sleep(60*2); +// $ins->scrapeUsersV2(89, ["ngoctrinh89", "changchinlan", "na0912mi", "janed_404", "amandacerny", "beargenie", "beauty.leg"]); + + $ins->scrapeUsersV2(89, null); +// $ins->scrapeUsersV2(89, ["maggiewu1008", "e_s2_e", "anran.1033", "yura_936", "masami_nagasawa", "jen2jen2_"]); + // $ins->scrapeUsersV2(89, ["candiceswanepoel", "maggiewu1008", "janie.lin", "cxxsomi", "naughty_rabbit_", "cho_hyunyoung", "2km2km", "ms_puiyi", "ms_puiyi"]); + // "candiceswanepoel", "maggiewu1008, janie.lin, cxxsomi, naughty_rabbit_, cho_hyunyoung, 2km2km, ms_puiyi, irishuo_ + // sleep(60*2); + // $ins->scrapeUsersV2(89, null); +// exit; // $ins->getUserNameById('4156629214');exit; diff --git a/app/Console/Commands/RenameTest.php b/app/Console/Commands/RenameTest.php index 4f0fd38..7bfefe2 100644 --- a/app/Console/Commands/RenameTest.php +++ b/app/Console/Commands/RenameTest.php @@ -64,7 +64,7 @@ class RenameTest extends Command // asort($arr); // dump($rename->getNameLevel()); // dump($arr);exit; - // $rename->rename($path, $prefix); + $rename->rename($path, $prefix); $rename->splitCustomSizeOfFolder($path, $prefix, 500);exit; // $rename->rename("/Volumes/WD/tmp/写真图/猫九", "猫九-"); diff --git a/app/Console/Commands/TestCommand.php b/app/Console/Commands/TestCommand.php index 901d4a1..6c733c6 100644 --- a/app/Console/Commands/TestCommand.php +++ b/app/Console/Commands/TestCommand.php @@ -6,7 +6,10 @@ namespace App\Console\Commands; use App\Services\GooglePhotoSyncService; //use App\Services\LiveStreamService; +use GuzzleHttp\Client; +use GuzzleHttp\Psr7\Request; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Redis; class TestCommand extends Command { @@ -41,6 +44,11 @@ class TestCommand extends Command */ public function handle() { +// $this->test02(); +// exit; + $this->test5();exit; + $this->test01();exit; + $this->test04();exit; // echo strlen("[VLOG] 메이드와 단 둘이 청소하실래요-ㅣ메이드복 입고 청소하기__ㅣ모델 일상 코스프레 브이로그ㅣCleaning Maid Cosplayㅣメイドといっしょに掃除しませんか?");exit; // $service = new GooglePhotoSyncService(); @@ -49,13 +57,14 @@ class TestCommand extends Command // $service->syncImageFiles(); // exit; // $baseDir = "/Users/shixuesen/Documents/sync/image"; - $baseDir = "/Users/shixuesen/Documents/otherSync"; - $dirs = ["tumblr__0048"]; + $baseDir = "/Users/shixuesen/Documents/otherSync/very"; + $baseDir = "/Users/shixuesen/Downloads/y"; + $dirs = ["mv"]; $files = []; foreach ($dirs as $dir) { $currentFiles = scandir($baseDir . DIRECTORY_SEPARATOR . $dir); foreach ($currentFiles as $file) { - if ($file == "." || $file == ".." || $file == ".DS_Store") { + if ($file == "." || $file == ".." || $file == ".DS_Store" || is_dir($baseDir . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $file)) { continue; } $files[] = $baseDir . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $file; @@ -172,4 +181,122 @@ class TestCommand extends Command // dump($stat); } + + public function test01() + { + $keys = Redis::connection("cache_txy4")->lrange("file_to_encode", 0, -1); + foreach ($keys as $key) { + if (str_contains($key, "崔兔子")) { +// echo $key; + Redis::connection("cache_txy4")->lrem("file_to_encode", 0, $key); + } + } +// dump($keys); +// echo Redis::connection("cache_txy4")->get("aaaaaa");exit; + } + + public function test02() + { + $url = "https://wx4.sinaimg.cn/large/a2ca2fd3ly1hdcbwq251wj20h70fi0zi.jpg"; + $urlInfo = parse_url($url); + $host = $urlInfo["host"]; + $client = new Client(); + $headers = [ + 'authority' => $host, + 'accept' => 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cache-control' => 'no-cache', + 'pragma' => 'no-cache', + 'referer' => 'https://m.weibo.cn/', + 'sec-ch-ua' => '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', + 'sec-ch-ua-mobile' => '?0', + 'sec-ch-ua-platform' => '"macOS"', + 'sec-fetch-dest' => 'image', + 'sec-fetch-mode' => 'no-cors', + 'sec-fetch-site' => 'cross-site', + 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' + ]; + $request = new Request('GET', $url, $headers); + $res = $client->sendAsync($request)->wait(); + return $res->getBody(); + } + + public function test03() + { + $list = Redis::connection()->smembers("永远别问为什么"); + $files = scandir("/Volumes/Xcode"); + foreach ($files as $file) { + if ($file == "." || $file == "..") { + continue; + } + if (!in_array($file, $list)) { + echo "$file not in array \n"; + } + } + } + + + public function test04() + { +// $baseDir = "/Volumes/Xcode/"; + $baseDir = "/Users/shixuesen/Documents/otherSync/very"; + $dirs = ["weibo_image03"]; + $files = []; + foreach ($dirs as $dir) { + $currentFiles = scandir($baseDir . DIRECTORY_SEPARATOR . $dir); + foreach ($currentFiles as $file) { + if ($file == "." || $file == ".." || $file == ".DS_Store" || is_dir($baseDir . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $file)) { + continue; + } + $files[] = $baseDir . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $file; + } + +// $files = array_merge($files, $currentFiles); + } + + $md5Set = []; + +// $newDir = "/Users/shixuesen/Downloads/y/Nagisa魔物喵202003fantia会员合集/魔物喵__001"; +// mkdir($newDir); + $i = 0; + foreach ($files as $file) { + if ($file == "." || $file == ".." || $file == ".DS_Store") { + continue; + } + $hash = md5_file($file); + if (array_key_exists($hash, $md5Set)) { + echo "file is same $file, and {$md5Set[$hash]} \n"; +// rename($dir . DIRECTORY_SEPARATOR . $file, $newDir . DIRECTORY_SEPARATOR . $file); +// exit; + $i++; + } else { + $md5Set[$hash] = $file; + } + } + echo "all same file count is $i"; + exit; + } + + public function test5() + { + $dir = "/Volumes/Crucial X6/Image/6001-6050/6001-6050.7z"; + $files = scandir($dir); + $set = []; + foreach ($files as $file) { + if ($file == "." || $file == ".." || $file == ".DS_Store") { + continue; + } + preg_match("#NO.\d+\s(\S+)\[#", $file, $matches); + $owner_name = $matches[1]; + if (array_key_exists($owner_name, $set)) { + dump("$owner_name exists"); + } else { + $set[$owner_name] = 1; + } +// dump($owner_name); + + + } + + } } diff --git a/app/Http/Controllers/GooglePhotoController.php b/app/Http/Controllers/GooglePhotoController.php index 672264c..c99704a 100644 --- a/app/Http/Controllers/GooglePhotoController.php +++ b/app/Http/Controllers/GooglePhotoController.php @@ -36,8 +36,8 @@ class GooglePhotoController extends Controller { */ $photosLibraryClient = new PhotosLibraryClient(['credentials' => $credentials]); -// $this->queryAlbumsList($photosLibraryClient);exit; - $this->queryImageListInAlbum($photosLibraryClient, "AN5jk266WOQuZQzWrt9ci-NfP7a5rYDfqsC-72LTMa4D9SeBis41vuAQRGnQ3odxgdo3Zl8pskVh");exit; + // $this->queryAlbumsList($photosLibraryClient);exit; + $this->queryImageListInAlbum($photosLibraryClient, "AN5jk24bD4OEqFqtDy8e_gdAvmRSQAs5xwEHDDpK4mi5Du0c_Hm7iJqk4A0DbaT0eeeQrp39xaKc");exit; $service = new GooglePhotoSyncService(); // $service->getAuthToken("4/0AX4XfWj_bDRqhnNLf4MGTMCAwt52Q4v6Dz1CLe1sx8I__Qu41z0fhX87I-amFAwpDGY0jA", ['https://www.googleapis.com/auth/photoslibrary'], config('app.albums_authentication_redirect_url')); @@ -61,9 +61,9 @@ class GooglePhotoController extends Controller { // 1. 获取相册里的照片 // 2. 获取相册列表 - // $this->queryAlbumsList($photosLibraryClient); + $this->queryAlbumsList($photosLibraryClient); // 2. 获取相册列表 - // exit; + exit; $options["pageSize"] = 100; $options["pageToken"] = "CkgKQnR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnBob3Rvcy5saWJyYXJ5LnYxLkxpc3RNZWRpYUl0ZW1zUmVxdWVzdBICCGQSogFBSF91UTQyZWo2TWdQb3cyZDVOOHdubldId0JwakJ0cUJwbHk4akV3Qm8tZ2xvTWpuWHdlRHlzX2VBRzRWZkgzUS0yNVdpRlE4cnhGTVVCaEF0ZEp1UFJuZzN4dncta0pIOWZJalZuVk1jbFZVWnpzdzRSVDNvTkt0SXVKNGpDUlVWTnh5NS12MTVhd3BHaTRrY2ZUTEhEeUVrbHVrMUVhRncaGzJvcFczVXpwQ3ZnU1hZTlNUVVQwVmd0V19Ecw"; $pagedResponse = $photosLibraryClient->listMediaItems($options); diff --git a/app/Http/Controllers/WeiboController.php b/app/Http/Controllers/WeiboController.php index 6ea6e18..e786dd9 100644 --- a/app/Http/Controllers/WeiboController.php +++ b/app/Http/Controllers/WeiboController.php @@ -66,7 +66,14 @@ class WeiboController extends Controller "腐团儿" => "1076032304291523", "聂小雨" => "1076032579189065", "小何同学" => "1076032104580380", - "只有一个9521" => "1076037504338957" + "只有一个9521" => "1076037504338957", + "娜扎工作室" => "2304136001863056", + "刘教師特别授業" => "1076037686776705", + "Nana姐姐的微博" => "1076037764879728", + "小蓝蓝 plus" => "1076037409360499", + "露露" => "1076037731119705" +// "娜扎工作室" => "2304136001863056_-_WEIBO_SECOND_PROFILE_WEIBO", + ]; diff --git a/app/Services/AcfunService.php b/app/Services/AcfunService.php index 2362a70..9a1343c 100644 --- a/app/Services/AcfunService.php +++ b/app/Services/AcfunService.php @@ -62,17 +62,19 @@ class AcfunService 'authority: www.acfun.cn', 'accept: application/json, text/plain, */*', 'accept-language: zh-CN,zh;q=0.9', + 'cache-control: no-cache', 'content-type: application/x-www-form-urlencoded', - 'cookie: _did=web_49890374118F8C83; _did=web_49890374118F8C83; csrfToken=z0M8iPhQeBXdQKahCT9eh9IF; cur_req_id=188114995840AAD3_self_2d45c537a4f93b4689463857c3114dd1; cur_group_id=188114995840AAD3_self_2d45c537a4f93b4689463857c3114dd1_0; webp_supported=%7B%22lossy%22%3Atrue%2C%22lossless%22%3Atrue%2C%22alpha%22%3Atrue%2C%22animation%22%3Atrue%7D; Hm_lvt_2af69bc2b378fb58ae04ed2a04257ed1=1676524023,1677578838,1679105811; stochastic=OGh4ZW56ZTE5OGk%3D; acPasstoken=ChVpbmZyYS5hY2Z1bi5wYXNzdG9rZW4ScC3mFmJ0_Ny_jdlp2zX4A9m4Cdsr9h5Pz1Ee1jfyHlfDWB14lyEDrxjlR_wDpBDHlFj2MoPPKJhFw_vhgMWL4oYye4jeI4T-EkCJXSuh19UabKnU00Rj84eEQK-wqRckMqhgZC0Uy5rTTIRkXkrqgDcaEsGnuGb9hF53qaZMO1JuGKUpeyIgPM38QqVI2JkcsDH48S4w8MCRIEl_3M4VqTyPWTyDS2coBTAB; auth_key=572984; ac_username=Nicksxs; acPostHint=e4d65708dfdada24d2843be08d79cff2c1da; ac_userimg=https%3A%2F%2Fimgs.aixifan.com%2Fstyle%2Fimage%2F201907%2FuQ5Vc06d3HSVTjY3VZocT81X40FByVpw.jpg; lsv_js_player_v2_main=e4d400; Hm_lpvt_2af69bc2b378fb58ae04ed2a04257ed1=1679105822', + 'cookie: _did=web_49890374118F8C83; _did=web_49890374118F8C83; acPasstoken=ChVpbmZyYS5hY2Z1bi5wYXNzdG9rZW4ScC3mFmJ0_Ny_jdlp2zX4A9m4Cdsr9h5Pz1Ee1jfyHlfDWB14lyEDrxjlR_wDpBDHlFj2MoPPKJhFw_vhgMWL4oYye4jeI4T-EkCJXSuh19UabKnU00Rj84eEQK-wqRckMqhgZC0Uy5rTTIRkXkrqgDcaEsGnuGb9hF53qaZMO1JuGKUpeyIgPM38QqVI2JkcsDH48S4w8MCRIEl_3M4VqTyPWTyDS2coBTAB; auth_key=572984; ac_username=Nicksxs; acPostHint=e4d65708dfdada24d2843be08d79cff2c1da; ac_userimg=https%3A%2F%2Fimgs.aixifan.com%2Fstyle%2Fimage%2F201907%2FuQ5Vc06d3HSVTjY3VZocT81X40FByVpw.jpg; csrfToken=ImnwOlsler0iTnGD_YS1hxQ8; cur_req_id=3800241004A0CFD7_self_2d45c537a4f93b4689463857c3114dd1; cur_group_id=3800241004A0CFD7_self_2d45c537a4f93b4689463857c3114dd1_0; webp_supported=%7B%22lossy%22%3Atrue%2C%22lossless%22%3Atrue%2C%22alpha%22%3Atrue%2C%22animation%22%3Atrue%7D; Hm_lvt_2af69bc2b378fb58ae04ed2a04257ed1=1677578838,1679105811,1680140982; Hm_lpvt_2af69bc2b378fb58ae04ed2a04257ed1=1680141307', 'origin: https://www.acfun.cn', + 'pragma: no-cache', 'referer: https://www.acfun.cn/member/favourite', - 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"', + 'sec-ch-ua: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"', 'sec-ch-ua-mobile: ?0', 'sec-ch-ua-platform: "macOS"', 'sec-fetch-dest: empty', 'sec-fetch-mode: cors', 'sec-fetch-site: same-origin', - 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36' + 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36' ), )); @@ -153,9 +155,13 @@ class AcfunService $mainQl = QueryList::getInstance(); $pCursor = ""; $queried = 0; + $reqId = 1; do { - $result = $this->requestUpPageApi($upId, $pCursor); + $result = $this->requestUpPageApi($upId, $reqId, $pCursor); // dump($result); + if (!$result) { + return; + } $resourceIds = $mainQl->setHtml($result["html"])->find(".video-item")->attrs("resource-id"); $titles = $mainQl->setHtml($result["html"])->find(".video-name")->htmls(); dump($resourceIds); @@ -178,6 +184,7 @@ class AcfunService } if (array_key_exists("pcursor", $result)) { $pCursor = $result["pcursor"]; + $reqId ++; } else { break; } @@ -219,12 +226,14 @@ class AcfunService return $response; } - public function requestUpPageApi($upId, $pcursor = "") + public function requestUpPageApi($upId, $reqId, $pcursor = "") { if ($upId == null) { return ""; } - $url = "https://m.acfun.cn/upPage/$upId?pagelets=video-list&reqID=4&ajaxpipe=1&userId=$upId&type=3"; + $t = time() * 1000; + $url = "https://m.acfun.cn/upPage/$upId?pagelets=video-list&reqID=$reqId&ajaxpipe=1&userId=$upId&type=3&pcursor=$pcursor&t=$t"; +// https://m.acfun.cn/upPage/1702633?pagelets=video-list&reqID=1&ajaxpipe=1&userId=1702633&type=3&pcursor=1677145407113&t=1680146711555 if ($pcursor != null && $pcursor != "") { $url .= "&pcursor=$pcursor"; @@ -265,6 +274,11 @@ class AcfunService // echo $response; $replaced = str_replace("/**/", "", $response); $result = json_decode($replaced, true); + if ($result == null || !array_key_exists("scripts", $result)) { + echo "=========================scripts not exist ===========================\n" . $url; + echo "=========================scripts not exist ===========================\n" . $response; + return false; + } $scripts = $result["scripts"][0]; preg_match_all("#no_more#", $scripts, $noMore); if (count($noMore[0]) > 0) { diff --git a/app/Services/BilibiliServiceV2.php b/app/Services/BilibiliServiceV2.php index 1ff341c..e31c746 100644 --- a/app/Services/BilibiliServiceV2.php +++ b/app/Services/BilibiliServiceV2.php @@ -8,13 +8,16 @@ use App\BilibiliUpVideos; use App\BilibiliVideoParts; use App\BilibiliVideos; use App\Repositories\BilibiliVideoRepository; +use DateTime; use Exception; -use GuzzleHttp\Client; +use GuzzleHttp\Psr7\Request; use Illuminate\Support\Arr; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Redis; +use Psr\Http\Message\{RequestInterface, ResponseInterface}; +use GuzzleHttp\{Client, HandlerStack, Middleware, RetryMiddleware}; class BilibiliServiceV2 { @@ -33,12 +36,49 @@ class BilibiliServiceV2 // private $remoteDir = "/data/"; private $remoteDir = "/Volumes/Crucial X6/Video/"; + private $mixinKeyEncTab = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + ]; + protected $repository; + protected $client; + public function __construct(BilibiliVideoRepository $repository) { $this->repository = $repository; + $maxRetries = 3; + + $decider = function (int $retries, RequestInterface $request, ResponseInterface $response = null) use ($maxRetries): bool { + return + $retries < $maxRetries + && null !== $response + && 429 === $response->getStatusCode(); + }; + + $delay = function (int $retries, ResponseInterface $response): int { + if (!$response->hasHeader('Retry-After')) { + return RetryMiddleware::exponentialDelay($retries); + } + + $retryAfter = $response->getHeaderLine('Retry-After'); + + if (!is_numeric($retryAfter)) { + $retryAfter = (new DateTime($retryAfter))->getTimestamp() - time(); + } + + return (int)$retryAfter * 1000; + }; + + $stack = HandlerStack::create(); + $stack->push(Middleware::retry($decider, $delay)); + + + $this->client = new Client(['handler' => $stack]); } public function queryPlayList() @@ -76,10 +116,9 @@ class BilibiliServiceV2 // 391073761 女团直拍 // 267781236 韩国女团饭拍直拍 // 23400436 小雪_juvia - $list = BilibiliUpVideos - ::orderBy('updated_at', 'asc') - ->take(110) - ->get(); + $list = BilibiliUpVideos::where("id", "<", "150") + ->orderBy('id', 'desc') + ->get(); // $list = $list->slice(87); foreach ($list as $item) { Log::info("schedule queryUpVideoList current up is {$item['up_name']}, started at: " . date("Y-m-d H:i:s")); @@ -88,14 +127,39 @@ class BilibiliServiceV2 $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="; - $pageAll = 10; + $url = "https://api.bilibili.com/x/space/wbi/arc/search?mid={$mediaId}&ps=30&tid=0&keyword=&pn="; + $pageAll = 2; + + // https://api.bilibili.com/x/space/wbi/arc/search? + // mid=363430107& + //ps=30& + //tid=0& + //pn=1& + //keyword=& + //order=pubdate& + //platform=web& + //web_location=1550101& + //order_avoided=true& + //w_rid=a1011501119a6d795f369ec2bafa1af2& + //wts=1685087658 // https://space.bilibili.com/475250/video for ($i = 1; $i < $pageAll; $i++) { $curl = curl_init(); + $params = [ + "mid" => $mediaId, + "ps" => 30, + "tid" => 0, + "keyword" => "", + "order" => "pubdate", + "platform" => "web", + "web_location" => 1550101, + "order_avoided" => true, + "pn" => $i + ]; + $query = $this->build_params($params); 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_URL => "https://api.bilibili.com/x/space/wbi/arc/search?$query", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, @@ -730,7 +794,7 @@ class BilibiliServiceV2 } } $i++; - $list = BilibiliVideos::simplePaginate(20, null, 'page', $i); + $list = BilibiliVideos::simplePaginate(50, null, 'page', $i); try { usleep(random_int(10, 1000) * 1000); } catch (Exception $e) { @@ -1140,4 +1204,154 @@ done && echo "ok"'); } return false; } + + public function downloadDynamics() + { + $env = App::environment(); + $list = BilibiliUpVideos::orderBy("created_at", "desc")->where("id", "<", "94")->limit(100)->get(); + foreach ($list as $item) { + $mid = $item["mid"]; + $offset = null; + $response = null; + do { + $jsonResponse = $this->dynamicsRequest($mid, $offset); + $response = json_decode($jsonResponse, true); + if (array_key_exists("code", $response) && $response["code"] == '0' && array_key_exists("data", $response) && array_key_exists("items", $response["data"])) { + $dynamics = $response["data"]["items"]; + foreach ($dynamics as $dynamic) { + if ($dynamic["type"] == "DYNAMIC_TYPE_DRAW") { + if (array_key_exists("modules", $dynamic) && + array_key_exists("module_dynamic", $dynamic["modules"]) && + array_key_exists("major", $dynamic["modules"]["module_dynamic"]) && + array_key_exists("draw", $dynamic["modules"]["module_dynamic"]["major"]) && + array_key_exists("items", $dynamic["modules"]["module_dynamic"]["major"]["draw"]) + ) { + $imageItems = $dynamic["modules"]["module_dynamic"]["major"]["draw"]["items"]; + foreach ($imageItems as $imageItem) { + $imageUrl = $imageItem["src"]; + $this->downloadImage($imageUrl, "/Users/shixuesen/Downloads/y/bili", $item["up_name"]); + } + } + } + } + } + if (array_key_exists("data", $response) && array_key_exists("offset", $response["data"])) { + $offset = $response["data"]["offset"]; + echo "{$item["up_name"]} offset: $offset \n"; + } + usleep(random_int(10, 100) * 100); + } while ($response != null && array_key_exists("data", $response) && array_key_exists("has_more", $response["data"]) && $response["data"]["has_more"]); + + } + + } + + public function dynamicsRequest($mid, $offset) + { + $client = new Client(); + $headers = [ + 'authority' => 'api.bilibili.com', + 'accept' => 'application/json, text/plain, */*', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cache-control' => 'no-cache', + 'origin' => 'https://space.bilibili.com', + 'pragma' => 'no-cache', + 'referer' => "https://space.bilibili.com/$mid/dynamic", + 'sec-ch-ua' => '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', + 'sec-ch-ua-mobile' => '?0', + 'sec-ch-ua-platform' => '"macOS"', + 'sec-fetch-dest' => 'empty', + 'sec-fetch-mode' => 'cors', + 'sec-fetch-site' => 'same-site', + 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' + ]; + if ($offset != null) { + $url = "https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?offset={$offset}&host_mid={$mid}&timezone_offset=-480&features=itemOpusStyle"; + } else { + $url = "https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?offset=&host_mid={$mid}&timezone_offset=-480&features=itemOpusStyle"; + } + $request = new Request('GET', $url, $headers); + $res = $client->sendAsync($request)->wait(); + return $res->getBody(); + } + + public function downloadImage($imageUrl, $path, $upName) + { + $filePathInfo = pathinfo($imageUrl); + $filename = $filePathInfo['basename']; + $request = new Request('GET', $imageUrl); + try { + $res = $this->client->sendAsync($request)->wait(); + } catch (\Exception $e) { + Log::error("$upName, $imageUrl, is error " . $e->getMessage()); + return; + } + $fileLocalName = $path . DIRECTORY_SEPARATOR . $upName . "_" . $filename; + if (is_file($fileLocalName) && filesize($fileLocalName) > 10000) { + echo $fileLocalName . " exists \n"; + } else { + file_put_contents($path . DIRECTORY_SEPARATOR . $upName . "_" . $filename, $res->getBody()); + } + } + + + public function getMixinKey($orig) + { + // '对 imgKey 和 subKey 进行字符顺序打乱编码' + return substr(implode('', array_map(function ($i) use ($orig) { + return $orig[$i]; + }, $this->mixinKeyEncTab)), 0, 32); + } + + public function encWbi($params, $img_key, $sub_key) + { + // '为请求参数进行 wbi 签名' + $mixin_key = $this->getMixinKey($img_key . $sub_key); + $curr_time = round(time()); + $params['wts'] = $curr_time; // 添加 wts 字段 + ksort($params); // 按照 key 重排参数 + $params = array_map(function ($v) { + return preg_replace("#[!'()*/]#", '', $v); // 过滤 value 中的 "!'()*" 字符 + }, $params); + $query = http_build_query($params); // 序列化参数 + $wbi_sign = md5($query . $mixin_key); // 计算 w_rid + $params['w_rid'] = $wbi_sign; + return $params; + } + public function getWbiKeys() + { + $img_key = Redis::connection()->get("img_key"); + $sub_key = Redis::connection()->get("sub_key"); + if ($img_key != null && $sub_key != null) { + return [$img_key, $sub_key]; + } + // '获取最新的 img_key 和 sub_key' + $resp = file_get_contents('https://api.bilibili.com/x/web-interface/nav'); + $json_content = json_decode($resp, true); + $img_url = $json_content['data']['wbi_img']['img_url']; + $sub_url = $json_content['data']['wbi_img']['sub_url']; + $img_key = substr($img_url, strrpos($img_url, '/') + 1, strrpos($img_url, '.') - strrpos($img_url, '/') - 1); + $sub_key = substr($sub_url, strrpos($sub_url, '/') + 1, strrpos($sub_url, '.') - strrpos($sub_url, '/') - 1); + Redis::connection()->setex("img_key", strtotime('23:59:59')-time(), $img_key); + Redis::connection()->setex("sub_key", strtotime('23:59:59')-time(), $sub_key); + return [$img_key, $sub_key]; + } + + public function build_params($params) + { + list($img_key, $sub_key) = $this->getWbiKeys(); +// dump($img_key); +// dump($sub_key); + $signed_params = $this->encWbi( + $params, + $img_key, + $sub_key + ); +// dump($signed_params);exit; + $query = http_build_query($signed_params); +// print_r($signed_params); + return $query; + } } + + diff --git a/app/Services/FfmpegService.php b/app/Services/FfmpegService.php index 505f171..46c8d3d 100644 --- a/app/Services/FfmpegService.php +++ b/app/Services/FfmpegService.php @@ -128,8 +128,10 @@ class FfmpegService public function processVideo($pathFile) { $slowFlag = false; - if (date("H") >= 22 || date("H") < 8) { - $slowFlag = true; + if (date("H") >= 6 && date("i") > 30 && date("H") < 9) { + Log::info("H > 6 stopFlag is set"); + dump("H > 6 stopFlag is set"); + exit; } // while () { // Log::info("now is " . date("Y-m-d H:i:s") . " sleep 5 minutes"); @@ -195,16 +197,12 @@ class FfmpegService Log::info("process target file : $targetFile"); if ($this->getDimension($pathFile)->getWidth() > 3840) { // $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -threads 16 -i ". escapeshellarg($pathFile) ." -preset ultrafast -crf 25 -c:v libx265 -x265-params pools=8 -vtag hvc1 " . escapeshellarg($targetFile) . " && echo 'ok'"); - if ($slowFlag) { - $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -i ". escapeshellarg($pathFile) ." -c:v libx265 -x265-params pools=2 -vtag hvc1 -vf \"scale=4096:-1\" " . escapeshellarg($targetFile) . " && echo 'ok'"); - } else { - $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -i ". escapeshellarg($pathFile) ." -c:v libx265 -x265-params pools=8 -vtag hvc1 -vf \"scale=4096:-1\" " . escapeshellarg($targetFile) . " && echo 'ok'"); - } + $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -i ". escapeshellarg($pathFile) ." -c:v libx265 -x265-params pools=8 -vtag hvc1 -vf \"scale=4096:-1\" " . escapeshellarg($targetFile) . " && echo 'ok'"); } else { if ($slowFlag) { - $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -threads 2 -i ". escapeshellarg($pathFile) ." -preset fast -c:v libx265 -x265-params pools=2 -vtag hvc1 " . escapeshellarg($targetFile) . " && echo 'ok'"); + $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -threads 2 -i ". escapeshellarg($pathFile) ." -c:v libx265 -x265-params pools=14 -vtag hvc1 " . escapeshellarg($targetFile) . " && echo 'ok'"); } else { - $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -threads 8 -i ". escapeshellarg($pathFile) ." -preset fast -c:v libx265 -x265-params pools=8 -vtag hvc1 " . escapeshellarg($targetFile) . " && echo 'ok'"); + $result = shell_exec("/Users/shixuesen/Downloads/ffmpeg -threads 2 -i ". escapeshellarg($pathFile) ." -c:v libx265 -x265-params pools=14 -vtag hvc1 " . escapeshellarg($targetFile) . " && echo 'ok'"); } } // echo $result; @@ -336,8 +334,8 @@ class FfmpegService Log::error("ffprobe has error just return false for test, exception: ". $e->getMessage()); return false; } - return false; -// return trim($codecName) == "hevc"; +// return false; + return trim($codecName) == "hevc"; } public function getDimension($file): Dimension diff --git a/app/Services/InstagramService.php b/app/Services/InstagramService.php index 3d31800..0699b2c 100644 --- a/app/Services/InstagramService.php +++ b/app/Services/InstagramService.php @@ -68,7 +68,7 @@ class InstagramService "queena820628" => 12991274468, "bitnara1105" => 5849529154, "mobe_carrie0223" => 566598605, - "mikamikatn" => 4156629214, + "mikamikatn" => 45602633214, "inkyung97" => 5763414441, "e_seoa" => 6859472347, "r_ap82_" => 11599648301, @@ -964,6 +964,7 @@ class InstagramService "gawonaa" => 6552618014, "bitnara_daily" => 56599499536, "bonnie.90106_" => 55798122328, + "zennyrt" => 9676745878, ]; @@ -1541,7 +1542,9 @@ class InstagramService $toQueryUsers = Redis::connection()->lrange(self::INS_USER_KEY, 0, 9); Redis::connection()->ltrim(self::INS_USER_KEY, 10, -1); } - $alwaysNeedToQueryUsers = ["bonnie.90106_", "amy00522", "bitnara1105", "zhizhibooty", "_azhua", "exy_s2", "colin.anthony2", "7alice77", "leeesovelys2", "anran.1033", "doly0818", "siawase726", "yifei_cc", "17_chill", "shinapit46", "crissielee_", "boram__jj", "cho_hyunyoung", "cxxsomi", "inkyung97", "na0912mi", "naughty_rabbit_", "sejinming", "zyzyxin222"]; + $alwaysNeedToQueryUsers = []; +// $alwaysNeedToQueryUsers = ["bonnie.90106_","jiee_wen", "hazyryu", "mikamikatn", "boram__jj", "cho_hyunyoung", "cxxsomi", "inkyung97", "na0912mi", "naughty_rabbit_", "sejinming", "zyzyxin222"]; + // "bonnie.90106_", "amy00522", "bitnara1105", "zhizhibooty", "_azhua", "exy_s2", "colin.anthony2", "7alice77", "leeesovelys2", "anran.1033", "doly0818", "siawase726", "yifei_cc", "17_chill", "shinapit46", "crissielee_", $toQueryUsers = array_unique(array_merge($alwaysNeedToQueryUsers, $toQueryUsers)); } else { if (is_array($singleUser)) { @@ -1691,7 +1694,8 @@ class InstagramService // This will be a null value again when we've reached the last page! // And we will stop looping through pages as soon as maxId becomes null. if ($singleUser != null || (is_array($singleUser) && count($singleUser) > 0)) { - if ($count - $existCount > 200) { + if ($count - $existCount > 200 ) { + // || $count > (50 + random_int(0, 20)) Log::info("new count bigger than 100", ['user' => $trueName]); goto a; } @@ -2210,24 +2214,26 @@ class InstagramService 'accept-language' => 'zh-CN,zh;q=0.9', 'cache-control' => 'no-cache', 'content-type' => 'application/x-www-form-urlencoded', - 'cookie' => 'ig_did=1E87B96C-B061-484F-89A8-C76BF8E11C52; ig_nrcb=1; mid=Y0QEJQAEAAGK3xW8v5Uwszo_cBzM; ds_user_id=361404591; datr=qAREY1W0Mocw3OoikuJcsL1c; csrftoken=o8uqypXnqzLbV4MKBo7ZeI4Tn7s4WwUt; dpr=2; shbid="10286\\054361404591\\0541710812830:01f7d29af58e88473b6537a789f05c33c9f3f0f41339fa59de8559924c7f8c1d51dc5202"; shbts="1679276830\\054361404591\\0541710812830:01f7cc9321450385cca359a813811464e1a637e9e4e8c2080b2e323f8303e37bd9c73a7c"; sessionid=361404591%3AVuUxqubuMmj6HZ%3A25%3AAYfVauWYX0ZMLkdbLaUmu6w7hi0OYzqf9Jz9qHPWqg; rur="NAO\\054361404591\\0541710813556:01f78e24f3dfa349efc89a199901cd50d645eacbe61d0bee262a5684ed303d140ae38986"', + 'cookie' => 'ig_did=1E87B96C-B061-484F-89A8-C76BF8E11C52; ig_nrcb=1; mid=Y0QEJQAEAAGK3xW8v5Uwszo_cBzM; datr=qAREY1W0Mocw3OoikuJcsL1c; ds_user_id=361404591; dpr=2; csrftoken=CFl1Ud94y0bme7hQP8Uvp8Xl4sKcFViX; shbid="16067\\054361404591\\0541716949395:01f70eef8d26bcb8f7f993fc31a064d0ee750f7e2b3649a97f4749d0bcd9f95d657910dc"; shbts="1685413395\\054361404591\\0541716949395:01f7e9d7690bc741b7e96b090605dad786de17d15651400beab2a35ea38e28ded2f59495"; sessionid=361404591%3AfFydERGFX9GaEm%3A10%3AAYc8JRCrHUvc9fh9IM2HBM5cX6oontDKzd6Ea01oMA; fbm_124024574287414=base_domain=.instagram.com; fbsr_124024574287414=L9kVkvYFJVPwU5BRVImtTBmcvaV1dkQ0ydKNAcOEhZ8.eyJ1c2VyX2lkIjoiMTAwMDA3ODU5ODI1MDQ3IiwiY29kZSI6IkFRQXp0UzBiQTVnYnNBSl9pNW1Dd01idS1rbEZuRENvTHZqRnpkNFplR01qb1FZekRDS3BQY3huZGpYSU04NzltM3hwQnZkbFhQbEh5cFlLMU5USEJ4RnV6ejZEZFN2MFREejhWdHd1dF85MHAtWEdEVENfZDhpdEpKM3JPY1ptLS1KSHNROXJIemtuZkFyNE5SdFpRY19RNUJSd2lGZmRndUd2MUFXU3ZOSFV1RW40TUE0d1hKYm5ZMV80WjFzNktGdEZ3UXVDR3MwUGdIOFQ2QnltQ0lzeGh6NHA2UWgtdlp0VGFoR0Q1VlBMZ1hqZG9fVDM4bE9xREs4SzYzX1dlZ3JySno0S2dCMkRXdlJuUGc1OTRqcXU5WGlUNUFMbURhbUMxdjFlYlVFQnA2S20ta2drYmdPMXMxR2JIQmEzbEw3OS0zelNreUVmekF3X2NsVUdsYTFSIiwib2F1dGhfdG9rZW4iOiJFQUFCd3pMaXhuallCQUhJcWNmdFBBRkhNcDZuVlU4ZDVSaWs1WkFCYWtUN3NTUE1VWkN2WkE2cHNxWkFZQ21sWXF6YUQ1Tk5GQTNUa0JSQjcxTmxTWHhRZTVVSEEzdm9CbGlsODJ3ZFVxMjZnZm91TUxTVWFucDNCejlpaDlFRFhGT1RnaEN0SnVEbGE3clpCbnNIWElqMGlCbnNMMUhOSzZ3Z0FaQ25jOVY3TVpDWkFJaVpCQU9BbHRLNDRkZzVuYkVUQVpEIiwiYWxnb3JpdGhtIjoiSE1BQy1TSEEyNTYiLCJpc3N1ZWRfYXQiOjE2ODU0MTM4ODZ9; rur="NAO\\054361404591\\0541716949889:01f7a134fbbef26c1e76c0c6ed205588018f90a91254d1626ab18e1df4c3a418faa2853b"', 'origin' => 'https://www.instagram.com', 'pragma' => 'no-cache', 'referer' => 'https://www.instagram.com/', 'sec-ch-prefers-color-scheme' => 'light', - 'sec-ch-ua' => '"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"', + 'sec-ch-ua' => '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', + 'sec-ch-ua-full-version-list' => '"Chromium";v="112.0.5615.137", "Google Chrome";v="112.0.5615.137", "Not:A-Brand";v="99.0.0.0"', 'sec-ch-ua-mobile' => '?0', 'sec-ch-ua-platform' => '"macOS"', + 'sec-ch-ua-platform-version' => '"12.6.0"', 'sec-fetch-dest' => 'empty', 'sec-fetch-mode' => 'cors', 'sec-fetch-site' => 'same-origin', - 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36', + 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', 'viewport-width' => '1512', - 'x-asbd-id' => '198387', - 'x-csrftoken' => 'o8uqypXnqzLbV4MKBo7ZeI4Tn7s4WwUt', + 'x-asbd-id' => '129477', + 'x-csrftoken' => 'CFl1Ud94y0bme7hQP8Uvp8Xl4sKcFViX', 'x-ig-app-id' => '936619743392459', - 'x-ig-www-claim' => 'hmac.AR2DN3JP5T1uzerp-Udyl58luFekDMO1MUYZolRys4KAvCnY', - 'x-instagram-ajax' => '1007137483', + 'x-ig-www-claim' => 'hmac.AR2DN3JP5T1uzerp-Udyl58luFekDMO1MUYZolRys4KAvCTz', + 'x-instagram-ajax' => '1007579192', 'x-requested-with' => 'XMLHttpRequest' ]; $options = [ @@ -2303,22 +2309,24 @@ class InstagramService 'accept' => '*/*', 'accept-language' => 'zh-CN,zh;q=0.9', 'cache-control' => 'no-cache', - 'cookie' => 'ig_did=1E87B96C-B061-484F-89A8-C76BF8E11C52; ig_nrcb=1; mid=Y0QEJQAEAAGK3xW8v5Uwszo_cBzM; ds_user_id=361404591; datr=qAREY1W0Mocw3OoikuJcsL1c; csrftoken=o8uqypXnqzLbV4MKBo7ZeI4Tn7s4WwUt; dpr=2; shbid="10286\\054361404591\\0541710812830:01f7d29af58e88473b6537a789f05c33c9f3f0f41339fa59de8559924c7f8c1d51dc5202"; shbts="1679276830\\054361404591\\0541710812830:01f7cc9321450385cca359a813811464e1a637e9e4e8c2080b2e323f8303e37bd9c73a7c"; sessionid=361404591%3AVuUxqubuMmj6HZ%3A25%3AAYfVauWYX0ZMLkdbLaUmu6w7hi0OYzqf9Jz9qHPWqg; rur="NAO\\054361404591\\0541710812852:01f76d935ed50ff550dbf89bb5f923ab7d02cb0ac4fc6bc8ff913d9232e56beed0c17b72"', + 'cookie' => 'ig_did=1E87B96C-B061-484F-89A8-C76BF8E11C52; ig_nrcb=1; mid=Y0QEJQAEAAGK3xW8v5Uwszo_cBzM; datr=qAREY1W0Mocw3OoikuJcsL1c; ds_user_id=361404591; dpr=2; csrftoken=CFl1Ud94y0bme7hQP8Uvp8Xl4sKcFViX; shbid="16067\\054361404591\\0541716949395:01f70eef8d26bcb8f7f993fc31a064d0ee750f7e2b3649a97f4749d0bcd9f95d657910dc"; shbts="1685413395\\054361404591\\0541716949395:01f7e9d7690bc741b7e96b090605dad786de17d15651400beab2a35ea38e28ded2f59495"; sessionid=361404591%3AfFydERGFX9GaEm%3A10%3AAYc8JRCrHUvc9fh9IM2HBM5cX6oontDKzd6Ea01oMA; fbm_124024574287414=base_domain=.instagram.com; fbsr_124024574287414=5BhPy3xcwHNWy1YFi8Wok9t4T5MmacABKqStGCMBouI.eyJ1c2VyX2lkIjoiMTAwMDA3ODU5ODI1MDQ3IiwiY29kZSI6IkFRQ2drOGExb05lZXNUb1JBQzBteG4xV3JoQUVyYXQyR0RJczdnRlUwYXlVdVlGTkFBNlZiMTBWNC1aUDJKaDdTSkVLS1pwTDN2bHkxZG9UVTVpSXhQcHB0bU15QXhiMWN6MjVjdm9jTDBZSTlKdENoRDhWU3o0aERGaVRqS3FRQUdaNWJ6NG9laVFzU0ZkRDFMdm5iTndoajR1OS1jLW5GLXZXaDVKb0dIbUY1VENqNTM4aDJNYzRaQ2VQNjlLb0xJTExrMm5RYVBLNVIxUDljWDZrUzEySlJvTmtPQlpJNDM0S2RQN2ozVnhpelRRRU5uVUhlM09BYm16WUdIM3ZNUTlxR3ZNSm51UHdXbDBIZVF6U1ltUmt5OS1iRU1ueFZyb3hMR0pIOW1hOXYzb21VNURvMXhCMWJ4c094enJOZjRqQXpBSHBOazJuOGJpRkpmalVidlVMIiwib2F1dGhfdG9rZW4iOiJFQUFCd3pMaXhuallCQU05R2NQTlBXb2pQNkE5Umh0UTF5RVNDSWVSVVBUQ01mRkw2cXBockhqQUFrdzdVdzB6ME11RjQ0WVpBNTc1Nmo4cXJzbnFtemZVVGk4UVpDdjlaQXlTQ0taQWFyalpBSnVaQUpLMFpBanVFa3Z2VndMbVdWa05WWExHMnRtQTNVZjFlWkJYeUxmQTVOUjI5THYzVTdIYW1pWkNDUnh4R1JxNVVsYm03cVlyZWhSWkNSQTYyanhKVDBaRCIsImFsZ29yaXRobSI6IkhNQUMtU0hBMjU2IiwiaXNzdWVkX2F0IjoxNjg1NDEzNDAxfQ; rur="NAO\\054361404591\\0541716949402:01f7509be66ac75e565c9d7c696b9b0dbd0250d0cc7339c745db84662c633f6d9aa2b055"', 'pragma' => 'no-cache', - 'referer' => 'https://www.instagram.com/yifaer_chen/', + 'referer' => 'https://www.instagram.com/cho_hyunyoung/', 'sec-ch-prefers-color-scheme' => 'light', - 'sec-ch-ua' => '"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"', + 'sec-ch-ua' => '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', + 'sec-ch-ua-full-version-list' => '"Chromium";v="112.0.5615.137", "Google Chrome";v="112.0.5615.137", "Not:A-Brand";v="99.0.0.0"', 'sec-ch-ua-mobile' => '?0', 'sec-ch-ua-platform' => '"macOS"', + 'sec-ch-ua-platform-version' => '"12.6.0"', 'sec-fetch-dest' => 'empty', 'sec-fetch-mode' => 'cors', 'sec-fetch-site' => 'same-origin', - 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36', + 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', 'viewport-width' => '1512', - 'x-asbd-id' => '198387', - 'x-csrftoken' => 'o8uqypXnqzLbV4MKBo7ZeI4Tn7s4WwUt', + 'x-asbd-id' => '129477', + 'x-csrftoken' => 'CFl1Ud94y0bme7hQP8Uvp8Xl4sKcFViX', 'x-ig-app-id' => '936619743392459', - 'x-ig-www-claim' => 'hmac.AR2DN3JP5T1uzerp-Udyl58luFekDMO1MUYZolRys4KAvCnY', + 'x-ig-www-claim' => 'hmac.AR2DN3JP5T1uzerp-Udyl58luFekDMO1MUYZolRys4KAvCTz', 'x-requested-with' => 'XMLHttpRequest' ]; $url = "https://i.instagram.com/api/v1/feed/user/{$userId}/?count=12"; diff --git a/app/Services/WeiboService.php b/app/Services/WeiboService.php index d49e076..2ea92fd 100644 --- a/app/Services/WeiboService.php +++ b/app/Services/WeiboService.php @@ -2,6 +2,8 @@ namespace App\Services; use App\ImageRecord; +use GuzzleHttp\Client; +use GuzzleHttp\Psr7\Request; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Log; @@ -46,6 +48,8 @@ class WeiboService // file_put_contents( $fname , $content ); $decoded_json = json_decode($content, true); $cards = $decoded_json['data']['cards']; +// $cards = array_slice($cards, 3, 1); + // Log::info(json_encode($cards));exit; foreach ($cards as $card) { if (!array_key_exists("mblog", $card)) { continue; @@ -55,8 +59,10 @@ class WeiboService // if (!file_exists($subdir)) { // mkdir($subdir); // } - echo json_encode($mblog); + // echo json_encode($mblog); + Log::info("mblog info: " . json_encode($mblog)); if (array_key_exists("pics", $mblog)) { + Log::info("-------enter 1"); $pics = $mblog['pics']; $user = Arr::get($mblog, "user", []); $text = Arr::get($mblog, "text", ''); @@ -83,6 +89,7 @@ class WeiboService // } // } } else if (array_key_exists("retweeted_status", $mblog)) { + Log::info("-------enter 2"); if (array_key_exists("pics", $mblog["retweeted_status"])) { $pics = $mblog["retweeted_status"]['pics']; # code... @@ -93,10 +100,13 @@ class WeiboService # code... } else if (array_key_exists("page_info", $mblog) && array_key_exists("media_info", $mblog["page_info"])) { # code... + Log::info("-------enter 3"); + Log::info("page_info: ". json_encode($mblog["page_info"])); $page_info = $mblog["page_info"]; $media_info = $mblog["page_info"]["media_info"]; $medis_urls = $mblog["page_info"]["urls"]; $video_url = Arr::get($medis_urls, "mp4_720p_mp4", ""); + Log::info("video_urls: " . $video_url); if ($video_url == "") { $video_url = Arr::get($medis_urls, "mp4_hd_url", ""); } @@ -245,7 +255,7 @@ class WeiboService $file_name = $subDir . DIRECTORY_SEPARATOR . $picName . "." . $picExt; $baseName = $picName . "." . $picExt; if (!file_exists($file_name) && !$this->checkFileHasDownload($baseName)) { - $pic_content = file_get_contents($pic_url); + $pic_content = $this->downloadImg($pic_url); // echo $pic_content; file_put_contents($file_name, $pic_content); $this->files[] = $baseName; @@ -255,6 +265,31 @@ class WeiboService } } + public function downloadImg($url) + { + $urlInfo = parse_url($url); + $host = $urlInfo["host"]; + $client = new Client(); + $headers = [ + 'authority' => $host, + 'accept' => 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cache-control' => 'no-cache', + 'pragma' => 'no-cache', + 'referer' => 'https://m.weibo.cn/', + 'sec-ch-ua' => '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', + 'sec-ch-ua-mobile' => '?0', + 'sec-ch-ua-platform' => '"macOS"', + 'sec-fetch-dest' => 'image', + 'sec-fetch-mode' => 'no-cors', + 'sec-fetch-site' => 'cross-site', + 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' + ]; + $request = new Request('GET', $url, $headers); + $res = $client->sendAsync($request)->wait(); + return $res->getBody(); + } + function process_video($video_url, $subdir, $video_name) { Log::info("video_url: " . $video_url); @@ -303,7 +338,7 @@ class WeiboService } public function scrapeWeiboComments($content) { - + } diff --git a/config/database.php b/config/database.php index 22347a4..b5a4899 100644 --- a/config/database.php +++ b/config/database.php @@ -126,6 +126,13 @@ return [ 'database' => env('REDIS_CACHE_DB', 1), ], + 'cache_txy4' => [ + 'host' => env('TXY4_REDIS_HOST', '127.0.0.1'), + 'password' => env('TXY4_REDIS_PASSWORD', null), + 'port' => env('TXY4_REDIS_PORT', 16379), + 'database' => env('TXY4_REDIS_CACHE_DB', 1), + ], + ], ]; diff --git a/fail.log b/fail.log index 85a9580..41314dd 100644 --- a/fail.log +++ b/fail.log @@ -2771,3 +2771,30 @@ /Users/shixuesen/OneDrive/Pictures/instagram/shinapit46/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/333812454_199637476048632_4591223738887286501_n.webp?stp=dst-jpg_e35&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=100&_nc_ohc=FJ9l_3smNHoAX_nEuJo&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA0OTExNDk1NjQwNzgzMzY1Ng%3D%3D.2-ccb7-5&oh=00_AfBF5NrM2CqjLXBJfJHMKu__34W1hlxMwXBchXXe1Z2qWQ&oe=640589E2&_nc_sid=6136e7 /Users/shixuesen/OneDrive/Pictures/instagram/shinapit46/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/334218038_762443441819964_4415681788775980429_n.webp?stp=dst-jpg_e35&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=100&_nc_ohc=49gREt8DAKoAX_H1urc&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA0OTExMzE4MDM5MzA1ODU1Nw%3D%3D.2-ccb7-5&oh=00_AfCN-af6ApbOzxVC1J9WljbNTvJ3JjtGstF8iuVr9l6kzA&oe=6404DF58&_nc_sid=6136e7 /Users/shixuesen/OneDrive/Pictures/instagram/yifei_cc/ https://scontent-lax3-1.cdninstagram.com/v/t66.30100-16/10000000_3350498921867992_1199864389448827511_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjEwODAuY2xpcHMuaGlnaCIsInFlX2dyb3VwcyI6IltcImlnX3dlYl9kZWxpdmVyeV92dHNfb3RmXCJdIn0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=KZF8w_5QIb0AX8Nv_ep&edm=ABmJApABAAAA&vs=769980204489005_1297028759&_nc_vs=HBksFQAYJEdJQ1dtQURZNmc3U1F1Y0xBSGNDdlJkT3hxWVFicFIxQUFBRhUAAsgBABUAGCRHTElMOEFLdUYwakF6cndBQURuTExudXJ0WFZHYnBSMUFBQUYVAgLIAQAoABgAGwAVAAAmyprWgZGQ%2Bz8VAigCQzMsF0BlcQ5WBBiTGBJkYXNoX2hpZ2hfMTA4MHBfdjERAHX%2BBwA%3D&ccb=7-5&oh=00_AfC-7KhPX_Hgl_eyHz-5FLuX2_rOBJEGIiae26Bs_vNswQ&oe=64102159&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-1.cdninstagram.com/o1/v/t16/f1/m82/5846546C73E0665AEA9420B6B9CCB8A4_video_dashinit.mp4?efg=eyJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSIsInZlbmNvZGVfdGFnIjoidnRzX3ZvZF91cmxnZW4uNjQwLmNsaXBzLmJhc2VsaW5lIn0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=102&vs=1834925800186288_3854764589&_nc_vs=HBkcFQIYT2lnX3hwdl9yZWVsc19wZXJtYW5lbnRfcHJvZC81ODQ2NTQ2QzczRTA2NjVBRUE5NDIwQjZCOUNDQjhBNF92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAoABgAGwAVAAAm0LTanNKQwz8VAigCQzMsF0ArzMzMzMzNGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX%2BBwA%3D&ccb=9-4&oh=00_AfCyki-C5d2wX_rD_BFvK2kIPh5Rs2P7V4J3nOYMxjU4VA&oe=641B62D9&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/306088673_784529202669973_6631828299179648744_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=101&_nc_ohc=mvQ_YWo09Y4AX-A6khI&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MjkyMzMwNTkyNjYzMTc0OTk0NA%3D%3D.2-ccb7-5&oh=00_AfAtmUd1yBkSCHZ1Qu0XRrNJBK1kNmc_muMB3Coo-bgWhA&oe=641E9FED&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/305124165_598769655039510_1933641232736451451_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5jbGlwcy5oaWdocHJvZmlsZS1iYXNlbGluZSIsInFlX2dyb3VwcyI6IltcImlnX3dlYl9kZWxpdmVyeV92dHNfb3RmXCJdIn0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=DmQRSbL4218AX_gxdIK&edm=ABmJApABAAAA&vs=1023702468270994_860552630&_nc_vs=HBksFQAYJEdFWFRMeElXUnBmc2t5QUNBSHY3VGRCMHJOVWFicV9FQUFBRhUAAsgBABUAGCRHRmZvQlJKbTVnN1pDNE1CQUU4aXg4aEVoRk1GYnFfRUFBQUYVAgLIAQAoABgAGwAVAAAmjJT22p2Y7z8VAigCQzMsF0AriDEm6XjVGB5kYXNoX2hpZ2hwcm9maWxlLWJhc2VsaW5lXzFfdjERAHX%2BBwA%3D&ccb=7-5&oh=00_AfBXqw3CFdbhU4xmGbndM_uwvpXCsKJm8J7GLAqCCmSXXA&oe=641B8A7C&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/305361102_139069971899385_7510875558892705482_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjQ4MC5jbGlwcy5iYXNlbGluZSIsInFlX2dyb3VwcyI6IltcImlnX3dlYl9kZWxpdmVyeV92dHNfb3RmXCJdIn0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=109&_nc_ohc=PLLlJVO3JsUAX90sdCT&edm=ABmJApABAAAA&vs=1254846885266196_46387278&_nc_vs=HBksFQAYJEdNNXdNeEw1STBiQWUzNEFBTXFXOXNlRy1UdG9icV9FQUFBRhUAAsgBABUAGCRHTjI4TWhLaDBRZ3lQMUFFQU5ELWxGbGM3TnRmYnFfRUFBQUYVAgLIAQAoABgAGwAVAAAmlt3htI%2FEuD8VAigCQzMsF0AkVP3ztkWiGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX%2BBwA%3D&ccb=7-5&oh=00_AfBs8QTJvCzpgi7geCd6ARWx44s4oD4_WBAPdE1-hnV8QQ&oe=641B68FE&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/302566877_471591661539634_7387245564608654630_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=110&_nc_ohc=61-ysoJ2GJcAX_V8Egz&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MjkxODk2NDIyMDAzMzUwMDAwOA%3D%3D.2-ccb7-5&oh=00_AfDb3z1kIQquOqUstQ-lLM4iWCbZw3a3Z2y4jkA_nVWIAQ&oe=641F7026&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/305001137_611317280348187_5078299659422184300_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=103&_nc_ohc=CI0d-jyt9KQAX_6KHKH&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MjkxODk2NDIyMDAzMzU2MDQyMA%3D%3D.2-ccb7-5&oh=00_AfAMjbxKRt5qjonUfmj0NgwiBK3ICHF38g68vH1CQOdL2g&oe=641E343B&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/doly0818/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/305018179_3261658000789252_5515474327167614441_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=D6k58qRmnf4AX8S1zlR&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MjkxODk2NDIyMDA1ODg0ODAzNw%3D%3D.2-ccb7-5&oh=00_AfDZ7LIW7qBOH3OGlf7MSTz_tgyJX1viNWxAiOy9K93d5g&oe=641E934E&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/ms_puiyi/ https://scontent-sjc3-1.cdninstagram.com/v/t51.2885-15/337421739_1216479642343049_8410880872104146798_n.jpg?stp=dst-jpg_e15&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_cat=1&_nc_ohc=npBktsRTy0UAX8hXOTH&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA2NDg1MDE3NjU2ODM0ODM4OQ%3D%3D.2-ccb7-5&oh=00_AfCl4P4h4DoOlKFS0Z1JGvTfF_jW0L4q91a1C5JsdProoQ&oe=64233C6C&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/ms_puiyi/ https://scontent-sjc3-1.cdninstagram.com/v/t51.2885-15/337306479_2336046279922454_9056320335810269011_n.jpg?stp=dst-jpg_e15&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_cat=1&_nc_ohc=qgK5KFU9GuEAX_xnoVa&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA2NDg1MDE3NzgxNTc4MDk1MA%3D%3D.2-ccb7-5&oh=00_AfAutpSD5f0vyy0n0zTob0ZEE1SIjgQzUAfh-WkHM_PkSA&oe=64219F9E&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/20130235_151752535397634_7513382081271955456_n.mp4?efg=eyJxZV9ncm91cHMiOiJbXCJpZ19wcm9ncmVzc2l2ZV91cmxnZW4ucHJvZHVjdF90eXBlLmZlZWRcIl0ifQ&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=MNRZQ3-cQH0AX88I0Na&edm=ABmJApABAAAA&ccb=7-5&oh=00_AfD9bhIkZBLrdKT729eyQLlH3Ai-WNMuOzWbFzrAwA6dig&oe=6428975F&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/parlovetati/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/10000000_245196011073450_3978577606703858329_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5pZ3R2LmRlZmF1bHQiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=nXMrQTxFlmMAX__4nEm&edm=ABmJApABAAAA&vs=17926200065077094_1786842476&_nc_vs=HBksFQAYJEdJQ1dtQUNxN3lNbEFkOEFBSmxDNlA1QXZ6WTNicUNCQUFBRhUAAsgBABUAGCRHR2daT2hBS0Nnb0o3MVlDQU03TTN1OWtlaFlmYnFDQkFBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaKmqvc39XgPxUCKAJDMywXQIRqysCDEm8YEmRhc2hfYmFzZWxpbmVfMV92MREAdewHAA%3D%3D&ccb=7-5&oh=00_AfDYFEFAeo5lktgvJBqWcxa8RVJlQdKRSpMZfiPRsMOCfg&oe=64299384&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/parlovetati/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/10000000_816231449228512_5275018916717540040_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5pZ3R2LmRlZmF1bHQiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=VvMcxZsDxakAX9ocPYz&edm=ABmJApABAAAA&vs=17947165330715929_1686556750&_nc_vs=HBksFQAYJEdJQ1dtQURnOUpXeFdfWUNBTWd5YXFyQm9UUkpicUNCQUFBRhUAAsgBABUAGCRHQjh2TFJCYnhJWWNUUVFFQUpkeFdFUU1PY2d6YnFDQkFBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaEoY3t3Z%2FOPxUCKAJDMywXQIf8ZFocrAgYEmRhc2hfYmFzZWxpbmVfMV92MREAdewHAA%3D%3D&ccb=7-5&oh=00_AfDnFfx6juYdYgKHYBr_3cnh7QBqsvVvyS8gqMWJiFRwQw&oe=642958B1&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/parlovetati/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/10000000_139437671818534_5289898710386471027_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5pZ3R2LmRlZmF1bHQiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=110&_nc_ohc=lc8Rr9pNX2wAX8KGfQt&edm=ABmJApABAAAA&vs=17947752697636528_1895491438&_nc_vs=HBksFQAYJEdJQ1dtQUFtcGVWYzBYNEFBSFB3WVpyWmZtbEpicUNCQUFBRhUAAsgBABUAGCRHTlA4S3hESTV3MG5PdHdRQU5uZ2hJV1lhekp4YnFDQkFBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACawu5%2FNpoT1PxUCKAJDMywXQJJg7peNT98YEmRhc2hfYmFzZWxpbmVfMV92MREAdewHAA%3D%3D&ccb=7-5&oh=00_AfBjqWxCiruBiLsI_jEVBS4vfSiEKQVCqAcv8QH3oNA-Tg&oe=64299377&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/parlovetati/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/10000000_1243738766137779_3185429725621617173_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5pZ3R2LmRlZmF1bHQiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=103&_nc_ohc=7T1YP-72N2UAX9QUkSt&edm=ABmJApABAAAA&vs=17917081925055221_998335223&_nc_vs=HBksFQAYJEdJQ1dtQUN6V1ZsLUxHc0VBQldDcFZSMTZ6UXNicUNCQUFBRhUAAsgBABUAGCRHSUx6RmhBS1FRRnh3bEVCQUVGMnBEMHkyUGRCYnFDQkFBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbI7Pnotb7uQBUCKAJDMywXQJWFSLQ5WBAYEmRhc2hfYmFzZWxpbmVfMV92MREAdewHAA%3D%3D&ccb=7-5&oh=00_AfDlPwg8jkxK-UCR0YgszmEOhNEfSldm79XyzWSS06-Eyg&oe=642951A2&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/parlovetati/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/10000000_818668099004730_3134112962501818641_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5pZ3R2LmRlZmF1bHQiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=pBAkz9vHdBgAX_5tMRx&edm=ABmJApABAAAA&vs=17873430806254603_239911059&_nc_vs=HBksFQAYJEdJQ1dtQUE2NlRvRmtfZ0NBQkU1M2xjaW0zNHJicUNCQUFBRhUAAsgBABUAGCRHRHBCT1FtX1dDNlZYa0FFQUJsSThNV010dGhsYnFDQkFBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaW3Z7IzPK%2FPxUCKAJDMywXQI4llYEGJN0YEmRhc2hfYmFzZWxpbmVfMV92MREAdewHAA%3D%3D&ccb=7-5&oh=00_AfCPSPtP-wSAlKwGEBEO61TbzN1qrCRKv86DGJlLHnqAEg&oe=64299EE1&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/parlovetati/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/10000000_607349996700251_264575771520038342_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5pZ3R2LmRlZmF1bHQiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=111&_nc_ohc=heHUslkae_UAX-l3CL3&edm=ABmJApABAAAA&vs=18083510356236989_432273197&_nc_vs=HBksFQAYJEdJQ1dtQUJid3M2d1lTZ0NBTVoxb0MxRDlxc0RicUNCQUFBRhUAAsgBABUAGCRHSUNXbUFBVGFrc01TaUlCQUlqQkVJV09aOVlhYnFDQkFBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACb6wd6R67afQBUCKAJDMywXQJypul41P30YFWRhc2hfYmFzZWxpbmVfNzIwcF92MREAdewHAA%3D%3D&ccb=7-5&oh=00_AfCGPmAnGhTcVsWapAUxpJejxk6lxRspmgwIIiXK3FiQXQ&oe=6429DFDD&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/jeonjisu92/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/341412046_158039300251202_4524950755884184369_n.jpg?stp=dst-jpg_e15&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=102&_nc_ohc=ut6RkQ2VYFEAX8FWov_&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA4MzQzNzk3MDAwNTczNTk2Mg%3D%3D.2-ccb7-5&oh=00_AfCincNWSWVG_QMs2qhZFkXxku22bHMlfBbSuPQ1T5XrGw&oe=644C775F&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/jeonjisu92/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/341924248_788079609196411_3832985151774792148_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=107&_nc_ohc=SirlS_gyozMAX8k0qwD&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA4MzQzODc1NDQ0MTI3NDcyNg%3D%3D.2-ccb7-5&oh=00_AfAXY2SbjeZFwzWY06dSBL4psEEguXdZoMPvcjHyZXp89Q&oe=644C5BB4&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/amberchenslife/ https://scontent-lax3-2.cdninstagram.com/v/t66.30100-16/10000000_966609704344935_1907735401525748622_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjEwODAuY2xpcHMuYmFzZWxpbmUiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=103&_nc_ohc=wrFCWP2NfdkAX8hQ_GP&edm=ABmJApABAAAA&vs=944047243415528_3241796991&_nc_vs=HBksFQAYJEdJQ1dtQUJuWFJCY0lHOERBSTRqWVhVOW8za2FicFIxQUFBRhUAAsgBABUAGCRHRWg0c0FrcktfOWl5RU1EQVBjNGhxX0VDazFDYnBSMUFBQUYVAgLIAQAoABgAGwAVAAAmgtusyrTpgkAVAigCQzMsF0BN92yLQ5WBGBZkYXNoX2Jhc2VsaW5lXzEwODBwX3YxEQB1%2FgcA&ccb=7-5&oh=00_AfA6r3msZo0dUDrqHPifPQ-wSeWkco0IbwnBzpmsexbipQ&oe=645A1E27&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/lurehsu/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/345238611_605050394683705_2910951418340466386_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=101&_nc_ohc=KXMXWTAX2A8AX-U71YP&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzA5NTk4NTgyMTg1Mzc5Mzg0NQ%3D%3D.2-ccb7-5&oh=00_AfCDzIGNvHtCcTIf1-H9y11n3Vpf1SsNWpTCVbL2iWmFqQ&oe=6460E234&_nc_sid=6136e7 +/Users/shixuesen/OneDrive/Pictures/instagram/Likes_new/ https://scontent-lax3-1.cdninstagram.com/v/t66.30100-16/10000000_136084739454377_6272574686122322584_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjEwODAuY2xpcHMuYmFzZWxpbmUiLCJxZV9ncm91cHMiOiJbXCJpZ193ZWJfZGVsaXZlcnlfdnRzX290ZlwiXSJ9&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=WssCkmW5UT4AX8NDmvv&edm=AJ9x6zYBAAAA&vs=611618730904331_491832877&_nc_vs=HBksFQAYJEdJQ1dtQUNwOVkyeXhIc0FBSmlxYllseHFReFhicFIxQUFBRhUAAsgBABUAGCRHSDFGQmhNLVc4S1AyZUlBQUlzeEJVU1BKQkkyYnBSMUFBQUYVAgLIAQAoABgAGwAVAAAmxLW3%2Fo%2FihEAVAigCQzMsF0BoKIMSbpeNGBZkYXNoX2Jhc2VsaW5lXzEwODBwX3YxEQB1%2FgcA&ccb=7-5&oh=00_AfBKFJQstZ1ekwrOI7GsvbRpyEC02zPCdwVrYYw7D-LN2g&oe=6460A938&_nc_sid=cff2a4 +/Users/shixuesen/OneDrive/Pictures/instagram/Likes_new/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/345931432_625184756148113_9138877017364304521_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=stWmcUrBW20AX8XtRKs&edm=AJ9x6zYBAAAA&ccb=7-5&ig_cache_key=MzA5OTQ0NTg4NTU0MDM2NDYyNA%3D%3D.2-ccb7-5&oh=00_AfAvIt3oxtboi00s03xaFTVq8cn2EZNfQWNFsjv7hEtJBA&oe=646362EE&_nc_sid=cff2a4 +/Users/shixuesen/OneDrive/Pictures/instagram/Likes_new/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/346099706_899919744403864_7120782227451009418_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=EwQpmrDMOHYAX94fhzP&edm=AJ9x6zYBAAAA&ccb=7-5&ig_cache_key=MzA5OTMyMTg4NzEzMjk1MTI3OQ%3D%3D.2-ccb7-5&oh=00_AfDud-YAzBD4Cdja7JFSEx1TY2YumruNKdLIZuRo0X4TgA&oe=64649584&_nc_sid=cff2a4 +/Users/shixuesen/OneDrive/Pictures/instagram/Likes_new/ https://scontent-iad3-1.cdninstagram.com/v/t51.2885-15/346459754_955189092187244_3132305561500628055_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-iad3-1.cdninstagram.com&_nc_cat=108&_nc_ohc=C98RI21lRWAAX8fkxKH&edm=AJ9x6zYBAAAA&ccb=7-5&ig_cache_key=MzEwMTgwMDU0NzA5NjIwODIwOQ%3D%3D.2-ccb7-5&oh=00_AfCRSZqn9t83cur5cC9OXeY1JyXxYGRfQ0IP9pUH4d7ZgQ&oe=646660F6&_nc_sid=cff2a4 +/Users/shixuesen/OneDrive/Pictures/instagram/naughty_rabbit_/ https://scontent-iad3-2.cdninstagram.com/v/t51.2885-15/347463511_1035962154032722_6961171125783130309_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-iad3-2.cdninstagram.com&_nc_cat=1&_nc_ohc=LSu6GP7rqQcAX9Ej9TO&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzEwNTc1NjA2ODEzNjQ5ODU5OA%3D%3D.2-ccb7-5&oh=00_AfDiIVH4gjZiGlaN66rQK4SUVgkIoZT8DbPiMVV_sk87Yg&oe=64707769&_nc_sid=a1ad6c +/Users/shixuesen/OneDrive/Pictures/instagram/beargenie/ https://scontent-iad3-2.cdninstagram.com/v/t51.2885-15/347725126_201443812840049_8752093749535121235_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-iad3-2.cdninstagram.com&_nc_cat=105&_nc_ohc=VDWn6gqwcC8AX9UtXT-&edm=ABmJApABAAAA&ccb=7-5&ig_cache_key=MzEwNjc3NTI1NTg1NTUyMDY2NQ%3D%3D.2-ccb7-5&oh=00_AfC3fPRjXm30Ie7RhuORR07U1obFzYUNICZiXNWZszM9nQ&oe=6471ED97&_nc_sid=a1ad6c +/Users/shixuesen/OneDrive/Pictures/instagram/Likes_new/ https://scontent-ord5-1.cdninstagram.com/v/t51.2885-15/350240208_624666975993937_7913994115751187492_n.jpg?stp=dst-jpg_e35&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_cat=101&_nc_ohc=zb6WaSWvg5MAX9TntT8&edm=AJ9x6zYBAAAA&ccb=7-5&ig_cache_key=MzExMzE2ODAwMDU5ODYyNjkxOQ%3D%3D.2-ccb7-5&oh=00_AfBMMq50XQ70XGfBqt7mUx0xdx5b2Trd-vCGyghefYWI6A&oe=647AF0B2&_nc_sid=5f7460