Browse Source

refactor xiu girl site

feature/new_bilibili_and_instagram_sxs20191126
shixuesen 4 years ago
parent
commit
eb37babf84
22 changed files with 734 additions and 290 deletions
  1. +2
    -0
      app/AcfunVideo.php
  2. +30
    -0
      app/BilibiliVideoTemp.php
  3. +4
    -4
      app/Console/Commands/BiliVideoCode.php
  4. +1
    -1
      app/Console/Commands/CommonTest.php
  5. +1
    -1
      app/Console/Commands/RenameTest.php
  6. +5
    -0
      app/Console/Kernel.php
  7. +2
    -1
      app/Http/Controllers/BiCookiesController.php
  8. +1
    -1
      app/Http/Controllers/WeiboController.php
  9. +14
    -4
      app/Services/BilibiliService.php
  10. +246
    -4
      app/Services/CommonScrapeService.php
  11. +7
    -1
      app/Services/CommonService.php
  12. +4
    -4
      app/Services/HandBrakeService.php
  13. +3
    -1
      app/Services/InstagramService.php
  14. +1
    -0
      app/Services/NewNvshenService.php
  15. +241
    -202
      app/Services/NewXiuGirlsService.php
  16. +1
    -1
      app/Services/RenameService.php
  17. +66
    -65
      app/Services/TujiguService.php
  18. +16
    -0
      app/Utils/CommonUtils.php
  19. +2
    -0
      app/XiuGirl.php
  20. +32
    -0
      database/migrations/2021_02_03_221303_add_site_from.php
  21. +33
    -0
      database/migrations/2021_02_04_234057_modify_image_name.php
  22. +22
    -0
      fail.log

+ 2
- 0
app/AcfunVideo.php View File

@ -33,6 +33,8 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\AcfunVideo whereTotalParts($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\AcfunVideo whereTotalParts($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\AcfunVideo whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\AcfunVideo whereUpdatedAt($value)
* @mixin \Eloquent * @mixin \Eloquent
* @property int $from_up_user_id up 用户 id
* @method static \Illuminate\Database\Eloquent\Builder|\App\AcfunVideo whereFromUpUserId($value)
*/ */
class AcfunVideo extends Model class AcfunVideo extends Model
{ {


+ 30
- 0
app/BilibiliVideoTemp.php View File

@ -4,6 +4,36 @@ namespace App;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/**
* App\BilibiliVideoTemp
*
* @property int $id
* @property int $aid B站 video id
* @property string $title 视频标题
* @property int $from_type 来源类型,1:收藏夹,2:up,3:共有
* @property string $from_collection_name 来源的收藏夹
* @property string $from_up_name 来源的 up 名字
* @property int $is_download 是否要下载
* @property int $is_downloaded 是否已下载
* @property int $total_parts 总的分 P
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereAid($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereFromCollectionName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereFromType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereFromUpName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereIsDownload($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereIsDownloaded($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereTotalParts($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\BilibiliVideoTemp whereUpdatedAt($value)
* @mixin \Eloquent
*/
class BilibiliVideoTemp extends Model class BilibiliVideoTemp extends Model
{ {
// //


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

@ -48,12 +48,12 @@ class BiliVideoCode extends Command
// $bilibili->insertDBTest();exit; // $bilibili->insertDBTest();exit;
// $bilibili->queryPlayList(); // $bilibili->queryPlayList();
$bilibili->queryUpVideoList(10278125);
// $bilibili->queryUpVideoList(10278125);
// exit; // exit;
$bilibili->queryDBCollectionList();
$bilibili->queryForVideoParts();
$bilibili->compareAndDownloadUpVideos();
// $bilibili->queryDBCollectionList();
// $bilibili->queryForVideoParts();
// $bilibili->compareAndDownloadUpVideos();
// exit; // exit;
$bilibili->compareAndDownloadCollectionVideos(); $bilibili->compareAndDownloadCollectionVideos();
// $bilibili->queryCollectionList(); // $bilibili->queryCollectionList();


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

@ -42,7 +42,7 @@ class CommonTest extends Command
public function handle() public function handle()
{ {
$commonScrapeService = new CommonScrapeService(); $commonScrapeService = new CommonScrapeService();
$commonScrapeService->scrapeBeautyLegImage();exit;
$commonScrapeService->scrapeAlbum();exit;
dump(FileUtils::scanDuplicateDir("/Volumes/intel660p/image/xg/ycc"));exit; dump(FileUtils::scanDuplicateDir("/Volumes/intel660p/image/xg/ycc"));exit;
$fileService = new FileService(); $fileService = new FileService();
$fileService->segmentFiles("/Volumes/Samsung/weibo/old_image"); $fileService->segmentFiles("/Volumes/Samsung/weibo/old_image");


+ 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/WD/tmp/写真图/面饼仙儿/019/面饼仙儿 1-20", "");
$rename->rename("/Volumes/intel660p/image/宇航员", "");
// $rename->rename(); // $rename->rename();
// $rename->mvFiles("/Users/shixuesen/Documents/tmp/秀人旗下《MFStar模范学院》套图及视频写真-TLoB/视频/"); // $rename->mvFiles("/Users/shixuesen/Documents/tmp/秀人旗下《MFStar模范学院》套图及视频写真-TLoB/视频/");
} }


+ 5
- 0
app/Console/Kernel.php View File

@ -62,6 +62,11 @@ class Kernel extends ConsoleKernel
$bilibili->queryDBCollectionList(); $bilibili->queryDBCollectionList();
})->hourlyAt(35); })->hourlyAt(35);
// })->yearly(); // })->yearly();
$schedule->call(function () {
$bilibili = new BilibiliService();
Log::info("schedule queryForVideoParts started at: ". date("Y-m-d H:i:s"));
$bilibili->queryForVideoParts();
})->dailyAt("02:00");
$schedule->call(function () { $schedule->call(function () {
$bilibili = new BilibiliService(); $bilibili = new BilibiliService();
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"));


+ 2
- 1
app/Http/Controllers/BiCookiesController.php View File

@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\BiCookies; use App\BiCookies;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Log;
class BiCookiesController extends Controller class BiCookiesController extends Controller
{ {
@ -11,7 +12,7 @@ class BiCookiesController extends Controller
public function receiveCookie(Request $request) { public function receiveCookie(Request $request) {
// \Log::info("here"); // \Log::info("here");
// \Log::info(json_encode($request->input())); // \Log::info(json_encode($request->input()));
\Log::info($request->input("cookies"));
Log::info($request->input("cookies"));
BiCookies::updateOrCreate(['id' => 1], ["cookie" => base64_encode($request->input("cookies"))]); BiCookies::updateOrCreate(['id' => 1], ["cookie" => base64_encode($request->input("cookies"))]);
// echo json_encode($request); // echo json_encode($request);
} }


+ 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 = 5; $i >= 1 ; $i-- )
for( $i = 2; $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;


+ 14
- 4
app/Services/BilibiliService.php View File

@ -280,7 +280,13 @@ class BilibiliService
} }
dump($unDownloaded); dump($unDownloaded);
$videoList = []; $videoList = [];
$flag = true;
foreach ($unDownloaded as $value) { foreach ($unDownloaded as $value) {
// if ($flag && $value != 542977286) {
// continue;
// } else {
// $flag = false;
// }
$vItems = BilibiliVideos::where('aid', $value)->get(); $vItems = BilibiliVideos::where('aid', $value)->get();
if (count($vItems) > 0) { if (count($vItems) > 0) {
foreach ($vItems as $vItem) { foreach ($vItems as $vItem) {
@ -294,13 +300,17 @@ class BilibiliService
$this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/", "bilibili"); $this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/", "bilibili");
// $this->partDownloadBSitePlaylist($videoMap, $this->baseDir, "bilibili"); // $this->partDownloadBSitePlaylist($videoMap, $this->baseDir, "bilibili");
} else if ($item['title'] == '少女时代') { } else if ($item['title'] == '少女时代') {
continue;
// continue;
$this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/bilibili/少女时代", ""); $this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/bilibili/少女时代", "");
} else if ($item['title'] == 'aoa') { } else if ($item['title'] == 'aoa') {
$this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/bilibili/aoa", ""); $this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/bilibili/aoa", "");
} else if ($item['title'] == 'blackpink') {
$this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/bilibili/blackpink", "");
} else if ($item['title'] == 'wjsn') {
$this->partDownloadBSitePlaylist($videoMap, "/Volumes/WD/tmp/bilibili/wjsn", "");
} }
else { else {
continue;
// continue;
$this->partDownloadBSitePlaylist($videoMap, $this->baseDir . "bilibili/", $item['title']); $this->partDownloadBSitePlaylist($videoMap, $this->baseDir . "bilibili/", $item['title']);
} }
} }
@ -781,7 +791,7 @@ class BilibiliService
// "Cookie: SESSDATA=64a15917%2C1578628130%2Ceb05cdc1" // "Cookie: SESSDATA=64a15917%2C1578628130%2Ceb05cdc1"
); );
if ($userCookie) { if ($userCookie) {
$headerArray[] = "Cookie: SESSDATA=622d365f%2C1611483669%2C8c222*71;";
$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"; // $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";
} }
@ -850,7 +860,7 @@ class BilibiliService
$downloadResult = shell_exec('cd "' .$innerDir .'" && url="https://www.bilibili.com/video/av' . $aid . '?p=" $downloadResult = shell_exec('cd "' .$innerDir .'" && url="https://www.bilibili.com/video/av' . $aid . '?p="
for i in $(seq 1 ' . $parts . ') for i in $(seq 1 ' . $parts . ')
do do
annie -c "SESSDATA=622d365f%2C1611483669%2C8c222*71" $url$i
annie -c "SESSDATA=75ed2a5a%2C1620866280%2Cc0fab*b1" $url$i
done ' ); done ' );
Log::info($downloadResult); Log::info($downloadResult);
Log::info("current download result: " . $downloadResult); Log::info("current download result: " . $downloadResult);


+ 246
- 4
app/Services/CommonScrapeService.php View File

@ -1,9 +1,16 @@
<?php <?php
namespace App\Services; namespace App\Services;
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Cookie\SetCookie;
use Illuminate\Support\Facades\Log;
use QL\QueryList; use QL\QueryList;
use function Zend\Diactoros\parseCookieHeader;
class CommonScrapeService {
class CommonScrapeService
{
public function scrapeBLImage() public function scrapeBLImage()
{ {
@ -17,10 +24,245 @@ class CommonScrapeService {
public function scrapeBeautyLegImage() public function scrapeBeautyLegImage()
{ {
$queryInstance = QueryList::getInstance(); $queryInstance = QueryList::getInstance();
$content = $queryInstance->get("https://www.v2ph.com/album/z3x469oa.html?hl=en");
// dump($content);exit;
$attrs = $content->find("img.img-fluid.album-photo.d-block.mx-auto")->attrs("data-src");
// $content = $queryInstance->get("https://www.v2ph.com/album/ax86795a.html?page=2");
$client = new Client(['base_uri' => 'https://www.v2ph.com']);
$cookieStr = "__cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; _gid=GA1.2.22159331.1610804846; __cf_bm=19f3172d7b8d3c97ce28f86ec56af4da3c3560a2-1610805781-1800-Adr3Ph9l2oeHE9Ms+YrTrKfE1uwMO7Tpcw/WxfRrPldspHy/AcwPovSpDcrz+DE3UHWhrw60voIaOsPy3VvpvTV9fjU9F1Hk3y1U5O6V1RZeclh6+YoIpZc1UfRyixPrKw==; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _ga_170M3FX3HZ=GS1.1.1610804845.1.1.1610806191.0; _ga=GA1.2.6396742.1610804846; _gat_UA-140713725-1=1";
$cookieArr = parseCookieHeader($cookieStr);
$cookieJar = CookieJar::fromArray($cookieArr, ".v2ph.com");
// dump($cookieJar->getCookieByName("__cfduid")->getDomain());exit;
$response = $client->request('GET', '/album/am4x838z.html?page=6', [
'cookies' => $cookieJar,
'headers' => [
'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'authority' => 'www.v2ph.com',
'referer' => 'https://www.v2ph.com/company/beautyleg',
// 'cookie' => '__cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; _gid=GA1.2.22159331.1610804846; __cf_bm=19f3172d7b8d3c97ce28f86ec56af4da3c3560a2-1610805781-1800-Adr3Ph9l2oeHE9Ms+YrTrKfE1uwMO7Tpcw/WxfRrPldspHy/AcwPovSpDcrz+DE3UHWhrw60voIaOsPy3VvpvTV9fjU9F1Hk3y1U5O6V1RZeclh6+YoIpZc1UfRyixPrKw==; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _ga_170M3FX3HZ=GS1.1.1610804845.1.1.1610806191.0; _ga=GA1.2.6396742.1610804846; _gat_UA-140713725-1=1'
],
// 'timeout' => 3.14,
// 'proxy' => 'tcp://localhost:8125',
// 'cert' => ['/path/server.pem', 'password'],
]);
$body = $response->getBody();
$html = (string)$body;
echo $html;
$attrs = $this->queryInstance->html($html)->find("img.img-fluid.album-photo.d-block.mx-auto")->attrs("data-src");
// foreach ($attrs as $attr) {
// CommonService::downloadImage("/Users/shixuesen/Pictures/bl", $attr);
// }
// = $content->find("img.img-fluid.album-photo.d-block.mx-auto")->attrs("data-src");
dump($attrs);
}
public $domainUrl = "https://www.v2ph.com";
public $albumRootUrl = "https://www.v2ph.com/company/beautyleg";
// public $rootDir = "/Users/shixuesen/Documents/tmp/xiuren/";
public $rootDir = "/Volumes/Backup/images/beautyleg/";
public $queryInstance;
public function __construct()
{
$this->queryInstance = QueryList::getInstance();
}
public function scrapeAlbum()
{
$pageSize = 16;
$html = $this->curlContent("https://www.v2ph.com/company/beautyleg");
echo $html;exit;
$pageCount = $this->queryInstance->html($html)->find("body > div.container.main-wrap > div.pt-2 > div.py-2.text-center > span")->htmls()->get(0);
print_r($pageCount);
if ((int)$pageCount > 0) {
for ($i = 1; $i <= ceil($pageCount / $pageSize); $i++) {
$urlSuffix = "";
if ($i == 1) {
$urlSuffix = "";
} else {
$urlSuffix = "?page=" . $i;
}
$this->scrapePageAlbum($this->albumRootUrl . $urlSuffix);
exit;
}
}
}
public function scrapePageAlbum($url)
{
echo "scrapePageAlbum : ". $url . "\n";
$html = $this->curlContent($url);
// echo $html;
$pageContent = $this->queryInstance->html($html);
dump($pageContent);
$items = $pageContent->find(".media-cover")->getElements();
dump($items);exit;
foreach ($items as $item) {
dump($item->getAttribute("href"));
// $this->scrapeSingleAlbum($this->domainUrl . $item->getAttribute("href"));
}
}
public function scrapeSingleAlbum($url)
{
echo "scrapeSingleAlbum : ". $url . "\n";
$html = $this->curlContent($url);
$pageContent = $this->queryInstance->html($html);
$pageSize = 3;
// body > div > div.py-2 > nav > ul > li:nth-child(6)
$items = $pageContent->find(".ina p:nth-child(2)")->texts();
$pageItems = $pageContent->find(".py-2 > nav > ul > li:eq(-1) a")->getElements();
// /album/z3x469oa.html?page=5
dump($pageItems[0]->attr("href"));exit;
preg_match_all("#=(\d+)#", $pageItems[0]->attr("href"), $matchContent);
dump($matchContent);
$pageCount = (int)($matchContent[1]);
if ($pageCount <= 0) {
dump("this album is error: " . $url);
Log::error("this album is error: " . $url);
return;
}
$albumName = $pageContent->find("body > div > div.pt-2 > div > div > h1")->texts()[0];
$this->parseContent($this->rootDir . $albumName, $pageContent);
dump("albumName: " . $albumName);
// dump("item: ". $item);
// exit;
for ($i = 1; $i < $pageCount; $i++) {
$pageContent = $this->curlContent($url . "?page=" . $i);
$this->parseContent($this->rootDir . $albumName, $pageContent);
}
}
public function parseContent($dir, $pageContent)
{
if (!is_dir($dir)) {
try {
mkdir($dir);
} catch (Exception $e) {
Log::error($e->getTraceAsString());
return;
}
}
$attrs = $pageContent->find("img.img-fluid.album-photo.d-block.mx-auto")->attrs("data-src");
foreach ($attrs as $attr) {
CommonService::downloadImage($dir, $attr);
}
}
public function getEncodeHtmlContent($url)
{
$attempts = 0;
$html = "";
do {
try {
$html = iconv('gb2312', 'UTF-8//IGNORE', file_get_contents($url));
} catch (Exception $e) {
echo $e->getTraceAsString() . "\n";
$sleepTime = 10000 * random_int(100, 1000);
echo "sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$attempts++;
continue;
}
break;
} while ($attempts < 100);
return $this->queryInstance->setHtml($html);
}
public function urlContent($url = "")
{
// dump(parse_url("https://www.v2ph.com/album/am4x838z.html?page=6"));exit;
$urlParts = parse_url($url);
$queryInstance = QueryList::getInstance();
$client = new Client(['base_uri' => 'https://www.v2ph.com']);
$cookieStr = "__cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; _gid=GA1.2.22159331.1610804846; __cf_bm=19f3172d7b8d3c97ce28f86ec56af4da3c3560a2-1610805781-1800-Adr3Ph9l2oeHE9Ms+YrTrKfE1uwMO7Tpcw/WxfRrPldspHy/AcwPovSpDcrz+DE3UHWhrw60voIaOsPy3VvpvTV9fjU9F1Hk3y1U5O6V1RZeclh6+YoIpZc1UfRyixPrKw==; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _ga_170M3FX3HZ=GS1.1.1610804845.1.1.1610806191.0; _ga=GA1.2.6396742.1610804846; _gat_UA-140713725-1=1";
$cookieArr = parseCookieHeader($cookieStr);
$cookieJar = CookieJar::fromArray($cookieArr, ".v2ph.com");
$response = $client->request('GET', !array_key_exists("query", $urlParts) ? $urlParts["path"] : $urlParts["path"] . "?" . $urlParts["query"], [
// $response = $client->request('GET', '/album/am4x838z.html?page=6', [
'cookies' => $cookieJar,
'headers' => [
// 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
// 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
// 'authority' => 'www.v2ph.com',
// 'referer' => 'https://www.v2ph.com/company/beautyleg',
'authority: www.v2ph.com',
'pragma: no-cache',
'cache-control: no-cache',
'sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"',
'sec-ch-ua-mobile: ?0',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site: none',
'sec-fetch-mode: navigate',
'sec-fetch-user: ?1',
'sec-fetch-dest: document',
'accept-language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6,ja;q=0.5',
'cookie: __cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _gid=GA1.2.1263326024.1610897479; __cf_bm=71e492fc72ab21fa0b8fad836744d6d4ee44ca16-1610983571-1800-AbpNw81XY8UC9/wkttHDeMEvoRLW9Ej47TMOzfg8UySIsXqAnw5o2BvBsa7ik49xS6LTQ1VtXHfvxN+N7uo7GOuwRq8CCsdTkB10/++FWTJqVSTf6HQtvc1/ftTQZi5nuw==; _ga_170M3FX3HZ=GS1.1.1610983570.3.1.1610983709.0; _ga=GA1.2.6396742.1610804846'
// 'cookie' => '__cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; _gid=GA1.2.22159331.1610804846; __cf_bm=19f3172d7b8d3c97ce28f86ec56af4da3c3560a2-1610805781-1800-Adr3Ph9l2oeHE9Ms+YrTrKfE1uwMO7Tpcw/WxfRrPldspHy/AcwPovSpDcrz+DE3UHWhrw60voIaOsPy3VvpvTV9fjU9F1Hk3y1U5O6V1RZeclh6+YoIpZc1UfRyixPrKw==; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _ga_170M3FX3HZ=GS1.1.1610804845.1.1.1610806191.0; _ga=GA1.2.6396742.1610804846; _gat_UA-140713725-1=1'
],
// 'timeout' => 3.14,
// 'proxy' => 'tcp://localhost:8125',
// 'cert' => ['/path/server.pem', 'password'],
]);
$body = $response->getBody();
$html = (string)$body;
return $html;
echo $html;
$attrs = $this->queryInstance->html($html)->find("img.img-fluid.album-photo.d-block.mx-auto")->attrs("data-src");
// foreach ($attrs as $attr) {
// CommonService::downloadImage("/Users/shixuesen/Pictures/bl", $attr);
// }
// = $content->find("img.img-fluid.album-photo.d-block.mx-auto")->attrs("data-src");
dump($attrs); dump($attrs);
} }
public function curlContent($url = "")
{
$curl = curl_init();
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 => array(
'authority: www.v2ph.com',
'pragma: no-cache',
'cache-control: no-cache',
'sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"',
'sec-ch-ua-mobile: ?0',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site: none',
'sec-fetch-mode: navigate',
'sec-fetch-user: ?1',
'sec-fetch-dest: document',
'accept-language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6,ja;q=0.5',
'cookie: __cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _gid=GA1.2.1263326024.1610897479; __cf_bm=71e492fc72ab21fa0b8fad836744d6d4ee44ca16-1610983571-1800-AbpNw81XY8UC9/wkttHDeMEvoRLW9Ej47TMOzfg8UySIsXqAnw5o2BvBsa7ik49xS6LTQ1VtXHfvxN+N7uo7GOuwRq8CCsdTkB10/++FWTJqVSTf6HQtvc1/ftTQZi5nuw==; _ga_170M3FX3HZ=GS1.1.1610983570.3.1.1610983709.0; _ga=GA1.2.6396742.1610804846'
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
} }

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

@ -3,6 +3,8 @@
namespace App\Services; namespace App\Services;
use GuzzleHttp; use GuzzleHttp;
use GuzzleHttp\Cookie\CookieJar;
use function Zend\Diactoros\parseCookieHeader;
class CommonService class CommonService
@ -15,9 +17,13 @@ class CommonService
$host = parse_url($imageUrl, PHP_URL_HOST); $host = parse_url($imageUrl, PHP_URL_HOST);
$dirList = explode("/", $dir); $dirList = explode("/", $dir);
$albumName = array_pop($dirList); $albumName = array_pop($dirList);
$cookieStr = "__cfduid=d959b19dbaa25a5fac7c5fe1d3988d15e1610778634; frontend=36ab879e6d75ae4e19e4843a1bdf2e45; _gid=GA1.2.22159331.1610804846; __cf_bm=19f3172d7b8d3c97ce28f86ec56af4da3c3560a2-1610805781-1800-Adr3Ph9l2oeHE9Ms+YrTrKfE1uwMO7Tpcw/WxfRrPldspHy/AcwPovSpDcrz+DE3UHWhrw60voIaOsPy3VvpvTV9fjU9F1Hk3y1U5O6V1RZeclh6+YoIpZc1UfRyixPrKw==; frontend-rmu=qUl6oIQSib76RH6A4ZJGALhooK63; frontend-rmt=3d1i%2F0DU5cuBB%2BII5MzosWl0MPonPRchZyJyhL73PzaHWBzoq9RFDWJG%2FDPtCncI; _ga_170M3FX3HZ=GS1.1.1610804845.1.1.1610806191.0; _ga=GA1.2.6396742.1610804846; _gat_UA-140713725-1=1";
$cookieArr = parseCookieHeader($cookieStr);
$cookieJar = CookieJar::fromArray($cookieArr, ".v2ph.com");
$client = new GuzzleHttp\Client(['headers' => [ $client = new GuzzleHttp\Client(['headers' => [
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36', 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
'Referer' => $host
'Referer' => $host,
'cookies' => $cookieJar
]]); ]]);
$fileParts = pathinfo($imageUrl); $fileParts = pathinfo($imageUrl);
$completeFile = $dir . "/" . $albumName . "-" . $fileParts["filename"] . "." . $fileParts["extension"]; $completeFile = $dir . "/" . $albumName . "-" . $fileParts["filename"] . "." . $fileParts["extension"];


+ 4
- 4
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/Backup/legsjapan/")
public function processDir($baseDir = "/Volumes/intel660p/image/宇航员/010期-北京商务模特苏苏")
{ {
$files = scandir($baseDir); $files = scandir($baseDir);
foreach ($files as $file) { foreach ($files as $file) {
@ -79,14 +79,14 @@ class HandBrakeService
if (is_file($pathFile)) { if (is_file($pathFile)) {
$fileInfo = pathinfo($pathFile); $fileInfo = pathinfo($pathFile);
dump("fileInfo", $fileInfo); dump("fileInfo", $fileInfo);
if (ends_with($fileInfo["filename"], "-1")) {
if (ends_with($fileInfo["filename"], "-720p")) {
return; return;
} }
if (is_file($fileInfo["dirname"] . '/' .$fileInfo["filename"] . '-1'. '.' . $fileInfo["extension"])) {
if (is_file($fileInfo["dirname"] . '/' .$fileInfo["filename"] . '-720p'. '.' . $fileInfo["extension"])) {
unlink($pathFile); unlink($pathFile);
return; return;
} }
$targetFile = $fileInfo["dirname"] . '/' .$fileInfo["filename"] . '-1'. '.' . $fileInfo["extension"];
$targetFile = $fileInfo["dirname"] . '/' .$fileInfo["filename"] . '-720p'. '.' . $fileInfo["extension"];
dump("targetFile", [$targetFile]); dump("targetFile", [$targetFile]);
// $result = shell_exec("handBrakeCli -Z 'Very Fast 720p30' -i '". $subPathFile ."' -o '". $targetFile . " && echo 'success'"); // $result = shell_exec("handBrakeCli -Z 'Very Fast 720p30' -i '". $subPathFile ."' -o '". $targetFile . " && echo 'success'");
$result = shell_exec("handBrakeCli -Z 'Very Fast 720p30' -i '". $pathFile ."' -o '". $targetFile . "'"); $result = shell_exec("handBrakeCli -Z 'Very Fast 720p30' -i '". $pathFile ."' -o '". $targetFile . "'");


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

@ -298,13 +298,15 @@ class InstagramService
echo 'Something went wrong: ' . $e->getMessage() . "\n"; echo 'Something went wrong: ' . $e->getMessage() . "\n";
exit(0); exit(0);
} }
// $list = $ig->collection->getFeed("17906577283646940");
// dump($list->getItems()[0]->getMedia()->getCarouselMedia());exit;
$baseImageDir = "/Users/shixuesen/OneDrive/Pictures/instagram/"; $baseImageDir = "/Users/shixuesen/OneDrive/Pictures/instagram/";
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, 35);
$userList = array_slice($userList, 0, 65);
// $userList = ['1992.ai_']; // $userList = ['1992.ai_'];
// print_r($userList);exit; // print_r($userList);exit;
// print_r($userList); // print_r($userList);


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

@ -93,6 +93,7 @@ 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);
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"] . "/";


+ 241
- 202
app/Services/NewXiuGirlsService.php View File

@ -4,13 +4,32 @@
namespace App\Services; namespace App\Services;
use App\XiuGirl;
use Exception;
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;
use App\Utils\FileUtils; use App\Utils\FileUtils;
use App\Utils\CommonUtils;
class NewXiuGirlsService class NewXiuGirlsService
{ {
private $queryInstance;
public function __construct()
{
$this->queryInstance = QueryList::getInstance();
}
/**
* @return QueryList|null
*/
public function getQueryInstance(): ?QueryList
{
return $this->queryInstance;
}
private static $name_dir = [ private static $name_dir = [
"周韦彤" => [ "周韦彤" => [
"dir" => "周韦彤", "dir" => "周韦彤",
@ -85,22 +104,15 @@ class NewXiuGirlsService
$NUM_OF_ATTEMPTS = 50; $NUM_OF_ATTEMPTS = 50;
// self::$name_dir = array_slice(self::$name_dir, 8, 10);
foreach (self::$name_dir as $username => $name) { foreach (self::$name_dir as $username => $name) {
usleep(random_int(1000, 10000) * 1000);
$peopleUrl = "https://xsnvshen.com/girl/";
$peopleUrl .= $name['code'];
$albumSelector = ".entryAblum > .star-mod-bd > ul > li > a";
$baseQl = QueryList::get($peopleUrl);
$ql = $baseQl->find($albumSelector)->attrs("href");
$items = $ql->all();
$items = $this->queryAllAlbum($name);
// $items = array_slice($items, 49); // $items = array_slice($items, 49);
// print_r($items);exit; // print_r($items);exit;
$baseUrl = "https://www.xsnvshen.com"; $baseUrl = "https://www.xsnvshen.com";
// $baseDir = "/Users/shixuesen/Documents/xg/" . $name['dir']. "/";
$baseDir = "/Volumes/intel660p/image/xg/" . $name['dir'] . "/";
// $baseDir = "/Users/shixuesen/Documents/xg/" . $name["dir"]. "/";
$baseDir = "/Volumes/intel660p/image/xg/" . $name["dir"] . "/";
if (!file_exists($baseDir)) { if (!file_exists($baseDir)) {
mkdir($baseDir); mkdir($baseDir);
} }
@ -111,57 +123,15 @@ class NewXiuGirlsService
// $items = array_slice($items, 1); // $items = array_slice($items, 1);
// print_r($items);continue; // print_r($items);continue;
foreach ($items as $item) { foreach ($items as $item) {
usleep(random_int(1000, 10000) * 1000);
CommonUtils::randomSleep(100);
echo "相册子链接: " .$item . "\n"; echo "相册子链接: " .$item . "\n";
$queryItemUrlTimes = 1;
do {
try {
$html = (new \QL\QueryList)->get($baseUrl . $item);
} catch (\Exception $e) {
\Log::error("查询相册子链接失败,将重试, 异常信息: " . $e->getMessage());
$sleepTime = 1000 * random_int(1000, 10000);
echo "查询相册子链接失败 sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$queryItemUrlTimes++;
}
break;
} while ($queryItemUrlTimes < 10);
$title = $html->find("h1 > a")->texts();
dump($title);
echo "相册名: " . $title[0] . "\n";
while (trim($title[0]) == "古诗文") {
echo "here error happenned \n";
// dump($html->getHtml());
usleep(random_int(1, 1000) * 50000);
$html = QueryList::get($baseUrl. $item);
$title = $html->find("h1 > a")->texts();
// continue;
}
$title = $this->getAlbumTitle($baseUrl, $item);
// break; // break;
$albumPath = ""; $albumPath = "";
$albumCode = explode("/", $item)[2]; $albumCode = explode("/", $item)[2];
if (array_key_exists($albumCode, $baseMap)) {
$albumPath = $baseMap[$albumCode];
}
if ($albumPath == "" && !file_exists($baseDir .explode("/", $item)[2] . "-" .$title[0])) {
$albumPath = $baseDir .explode("/", $item)[2]. "-" .$title[0];
mkdir($albumPath);
}
$albumPath = $this->generateAlbumPath($albumPath, $albumCode, $baseMap, $baseDir, $item, $title[0]);
$attempts = 0; $attempts = 0;
$images = [];
do {
try {
$images = QueryList::get($baseUrl . $item)->find(".swi-hd > img")->attrs("src");
} catch (\Exception $e) {
echo $e->getTraceAsString() . "\n";
$sleepTime = 10000 * random_int(100, 1000);
echo "sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$attempts ++;
continue;
}
break;
} while ($attempts <= $NUM_OF_ATTEMPTS);
$images = $this->queryImages($baseUrl, $item, $attempts, $NUM_OF_ATTEMPTS);
foreach ($images as $image) { foreach ($images as $image) {
if (strpos($image, "thumb_600x900") !== false) { if (strpos($image, "thumb_600x900") !== false) {
$image = str_replace( "thumb_600x900/", "", $image); $image = str_replace( "thumb_600x900/", "", $image);
@ -170,147 +140,19 @@ class NewXiuGirlsService
* todo 修改 * todo 修改
* CommonService::downloadImage($albumPath, "https:" . $image); * CommonService::downloadImage($albumPath, "https:" . $image);
*/ */
if (file_exists($albumPath."/".pathinfo("http:".$image)['filename'].".jpg") || file_exists($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:".$image)['filename'].".jpg")) {
if (!$this->checkIfNeedDownload($image, $username, $albumCode, $name, $albumPath)){
continue; continue;
} }
$opts = array('http'=> ['header' =>
$opts = array("http"=> ["header" =>
"User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 \r\n "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 \r\n
Referer:".$baseUrl.$item."\r\n" Referer:".$baseUrl.$item."\r\n"
]); ]);
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,"https:".$image);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2000);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36');
curl_setopt($curl_handle, CURLOPT_REFERER, $baseUrl . $item);
$query = curl_exec($curl_handle);
$i = 1;
while ($query === false) {
echo 'Curl error: ' . curl_error($curl_handle) ."\n";
echo "retry times: " .$i++ ." times \n";
sleep(1);
$sleepTime = 1000 * random_int(1000, 10000);
echo "retry sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$query = curl_exec($curl_handle);
if ($i >= 100) {
break;
}
}
echo curl_error($curl_handle);
$fp = fopen($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:".$image)['filename'].".jpg", 'x');
fwrite($fp, $query);
fclose($fp);
$sleepTime = 1000 * random_int(100, 1000);
echo "after write image sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$this->processDownloadImage($image, $baseUrl, $item, $albumPath, $username, $albumCode);
} }
usleep(1000 * random_int(100, 1000)); usleep(1000 * random_int(100, 1000));
} }
}
exit;
$baseUrl = "https://www.xsnvshen.com/girl/22162";
$albumSelector = ".entryAblum > .star-mod-bd > ul > li > a";
$baseQl = QueryList::get($baseUrl);
$ql = $baseQl->find($albumSelector)->attrs("href");
// /*
// new dir ----
$titles = $baseQl->find($albumSelector)->attrs("*");
// print_r($titles->all());exit;
$baseDir = "/Users/shixuesen/Documents/xg/ycc/";
foreach ($titles->all() as $item) {
if (file_exists($baseDir .explode("/", $item['href'])[2])) {
echo "old name :".$baseDir .explode("/", $item['href'])[2] . "\n";
rename($baseDir.explode("/", $item['href'])[2], $baseDir.explode("/", $item['href'])[2] ."-".$item['title']);
}
}
exit;
// new dir ----
// */
$items = $ql->all();
// $items = array_slice($items, 49);
// print_r($items);exit;
$baseUrl = "https://www.xsnvshen.com";
$baseDir = "/Users/shixuesen/Documents/xg/ycc/";
// $items = array_slice($items, 1);
// print_r($items);exit;
foreach ($items as $item) {
print_r($item);
$html = QueryList::get($baseUrl. $item);
$title = $html->find("h1 > a")->texts();
print_r($title);
// print_r(is_dir($baseDir));exit;
$albumPath = "";
// if (count($title) >0 ) {
// if (!file_exists($baseDir .$title[0])) {
// mkdir($baseDir .$title[0]);
// }
// $albumPath = $baseDir.$title[0];
// } else {
if (!file_exists($baseDir .explode("/", $item)[2])) {
mkdir($baseDir .explode("/", $item)[2]);
}
$albumPath = $baseDir.explode("/", $item)[2];
// }
$images = QueryList::get($baseUrl . $item)->find(".swi-hd > img")->attrs("src");
// mkdir("")
// print_r($images);
foreach ($images as $image) {
if (file_exists($albumPath."/".pathinfo("http:".$image)['filename'].".jpg")) {
continue;
// unlink($albumPath."/".pathinfo("http:".$image)['filename'].".jpg");
}
$opts = array('http'=> ['header' =>
"User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 \r\n
Referer:".$baseUrl.$item."\r\n"
]);
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,"https:".$image);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2000);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36');
curl_setopt($curl_handle, CURLOPT_REFERER, $baseUrl . $item);
$query = curl_exec($curl_handle);
$i = 1;
while ($query === false) {
echo 'Curl error: ' . curl_error($curl_handle) ."\n";
echo "retry times: " .$i++ ." times \n";
sleep(1);
$query = curl_exec($curl_handle);
if ($i >= 100) {
break;
}
}
echo curl_error($curl_handle);
$fp = fopen($albumPath."/".pathinfo("http:".$image)['filename'].".jpg", 'x');
fwrite($fp, $query);
fclose($fp);
// file_put_contents("1.jpg", $query);
// curl_close($curl_handle);
// exit;
// $context = stream_context_create($opts);
// $a = file_get_contents("http:".$image, false, $context);exit;
// Storage::put($item.pathinfo($image)["filename"], file_get_contents("http:".$image, false, $context));
}
// exit;
} }
} }
@ -321,10 +163,10 @@ class NewXiuGirlsService
print_r([self::$name_dir[$iUser]]); print_r([self::$name_dir[$iUser]]);
foreach ([self::$name_dir[$iUser]] as $username => $name) { foreach ([self::$name_dir[$iUser]] as $username => $name) {
$username = $iUser; $username = $iUser;
dump("here {$username}, {$name['code']}");
dump("here {$username}, {$name["code"]}");
usleep(random_int(1000, 10000) * 1000); usleep(random_int(1000, 10000) * 1000);
$peopleUrl = "https://xsnvshen.com/girl/"; $peopleUrl = "https://xsnvshen.com/girl/";
$peopleUrl .= $name['code'];
$peopleUrl .= $name["code"];
$albumSelector = ".entryAblum > .star-mod-bd > ul > li > a"; $albumSelector = ".entryAblum > .star-mod-bd > ul > li > a";
$baseQl = QueryList::get($peopleUrl); $baseQl = QueryList::get($peopleUrl);
@ -335,8 +177,8 @@ class NewXiuGirlsService
// print_r($items);exit; // print_r($items);exit;
$baseUrl = "https://www.xsnvshen.com"; $baseUrl = "https://www.xsnvshen.com";
// $baseDir = "/Users/shixuesen/Documents/xg/" . $name['dir']. "/";
$baseDir = "/Volumes/intel660p/image/xg/" . $name['dir'] . "/";
// $baseDir = "/Users/shixuesen/Documents/xg/" . $name["dir"]. "/";
$baseDir = "/Volumes/intel660p/image/xg/" . $name["dir"] . "/";
if (!file_exists($baseDir)) { if (!file_exists($baseDir)) {
mkdir($baseDir); mkdir($baseDir);
} }
@ -356,9 +198,9 @@ class NewXiuGirlsService
$queryItemUrlTimes = 1; $queryItemUrlTimes = 1;
do { do {
try { try {
$html = (new \QL\QueryList)->get($baseUrl . $item);
} catch (\Exception $e) {
\Log::error("查询相册子链接失败,将重试, 异常信息: " . $e->getMessage());
$html = (new QueryList)->get($baseUrl . $item);
} catch (Exception $e) {
Log::error("查询相册子链接失败,将重试, 异常信息: " . $e->getMessage());
$sleepTime = 1000 * random_int(1000, 10000); $sleepTime = 1000 * random_int(1000, 10000);
echo "查询相册子链接失败 sleep {$sleepTime} nano second \n"; echo "查询相册子链接失败 sleep {$sleepTime} nano second \n";
usleep($sleepTime); usleep($sleepTime);
@ -389,7 +231,7 @@ class NewXiuGirlsService
do { do {
try { try {
$images = QueryList::get($baseUrl . $item)->find(".swi-hd > img")->attrs("src"); $images = QueryList::get($baseUrl . $item)->find(".swi-hd > img")->attrs("src");
} catch (\Exception $e) {
} catch (Exception $e) {
echo $e->getTraceAsString() . "\n"; echo $e->getTraceAsString() . "\n";
$sleepTime = 10000 * random_int(100, 1000); $sleepTime = 10000 * random_int(100, 1000);
echo "sleep {$sleepTime} nano second \n"; echo "sleep {$sleepTime} nano second \n";
@ -408,10 +250,10 @@ class NewXiuGirlsService
* CommonService::downloadImage($albumPath, "https:" . $image); * CommonService::downloadImage($albumPath, "https:" . $image);
*/ */
if (file_exists($albumPath."/".pathinfo("http:".$image)['filename'].".jpg") || file_exists($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:".$image)['filename'].".jpg")) {
if (file_exists($albumPath."/".pathinfo("http:".$image)["filename"].".jpg") || file_exists($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:".$image)["filename"].".jpg")) {
continue; continue;
} }
$opts = array('http'=> ['header' =>
$opts = array("http"=> ["header" =>
"User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 \r\n "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 \r\n
Referer:".$baseUrl.$item."\r\n" Referer:".$baseUrl.$item."\r\n"
]); ]);
@ -419,12 +261,12 @@ class NewXiuGirlsService
curl_setopt($curl_handle, CURLOPT_URL,"https:".$image); curl_setopt($curl_handle, CURLOPT_URL,"https:".$image);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2000); curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2000);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36');
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36");
curl_setopt($curl_handle, CURLOPT_REFERER, $baseUrl . $item); curl_setopt($curl_handle, CURLOPT_REFERER, $baseUrl . $item);
$query = curl_exec($curl_handle); $query = curl_exec($curl_handle);
$i = 1; $i = 1;
while ($query === false) { while ($query === false) {
echo 'Curl error: ' . curl_error($curl_handle) ."\n";
echo "Curl error: " . curl_error($curl_handle) ."\n";
echo "retry times: " .$i++ ." times \n"; echo "retry times: " .$i++ ." times \n";
sleep(1); sleep(1);
$sleepTime = 1000 * random_int(1000, 10000); $sleepTime = 1000 * random_int(1000, 10000);
@ -437,7 +279,7 @@ class NewXiuGirlsService
} }
echo curl_error($curl_handle); echo curl_error($curl_handle);
$fp = fopen($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:".$image)['filename'].".jpg", 'x');
$fp = fopen($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:".$image)["filename"].".jpg", "x");
fwrite($fp, $query); fwrite($fp, $query);
fclose($fp); fclose($fp);
$sleepTime = 1000 * random_int(100, 1000); $sleepTime = 1000 * random_int(100, 1000);
@ -451,4 +293,201 @@ class NewXiuGirlsService
} }
exit; exit;
} }
/**
* xiugirl网站个人页展示的是全部的相册,不用分页查
* @param $name
* @return array
*/
private function queryAllAlbum($name): array
{
CommonUtils::randomSleep(100);
$peopleUrl = "https://xsnvshen.com/girl/";
$peopleUrl .= $name["code"];
$albumSelector = ".entryAblum > .star-mod-bd > ul > li > a";
$baseQl = $this->getQueryInstance()->get($peopleUrl);
$ql = $baseQl->find($albumSelector)->attrs("href");
$items = $ql->all();
return $items;
}
/**
* 获取相册名
* @param string $baseUrl
* @param $item
* @return array
* @throws Exception
*/
private function getAlbumTitle(string $baseUrl, $item)
{
$queryItemUrlTimes = 1;
do {
try {
$html = $this->getQueryInstance()->get($baseUrl . $item);
} catch (Exception $e) {
Log::error("查询相册子链接失败,将重试, 异常信息: " . $e->getMessage());
$sleepTime = 1000 * random_int(1000, 10000);
echo "查询相册子链接失败 sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$queryItemUrlTimes++;
continue;
}
break;
} while ($queryItemUrlTimes < 10);
$title = $html->find("h1 > a")->texts();
dump($title);
echo "相册名: " . $title[0] . "\n";
while (trim($title[0]) == "古诗文") {
echo "here error happenned \n";
// dump($html->getHtml());
usleep(random_int(1, 1000) * 50000);
$html = $this->getQueryInstance()->get($baseUrl . $item);
$title = $html->find("h1 > a")->texts();
// continue;
}
return $title;
}
/**
* @param string $albumPath
* @param string $albumCode
* @param array $baseMap
* @param string $baseDir
* @param $item
* @param $title
* @return mixed|string
*/
private function generateAlbumPath(string $albumPath, string $albumCode, array $baseMap, string $baseDir, $item, $title): string
{
if (array_key_exists($albumCode, $baseMap)) {
$albumPath = $baseMap[$albumCode];
}
if ($albumPath == "" && !file_exists($baseDir . explode("/", $item)[2] . "-" . $title)) {
$albumPath = $baseDir . explode("/", $item)[2] . "-" . $title;
mkdir($albumPath);
}
return $albumPath;
}
/**
* 获取相册的所有图片链接
* @param string $baseUrl
* @param $item
* @param int $attempts
* @param int $NUM_OF_ATTEMPTS
* @return array
* @throws Exception
*/
private function queryImages(string $baseUrl, $item, int $attempts, int $NUM_OF_ATTEMPTS): array
{
$images = [];
do {
try {
$images = $this->getQueryInstance()->get($baseUrl . $item)->find(".swi-hd > img")->attrs("src");
} catch (Exception $e) {
echo $e->getTraceAsString() . "\n";
$sleepTime = 10000 * random_int(100, 1000);
echo "sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$attempts++;
continue;
}
break;
} while ($attempts <= $NUM_OF_ATTEMPTS);
return $images->all();
}
/**
* @param array $image
* @param string $username
* @param string $albumCode
* @param $name
* @param string $albumPath
* @return bool
*/
private function checkIfNeedDownload(string $image, string $username, string $albumCode, $name, string $albumPath): bool
{
$fileInfo = pathinfo("http:" . $image);
$imageFileName = $username . "-" . $albumCode . "-" . $fileInfo["filename"] . ".jpg";
$images = XiuGirl::where([
"user_id" => $name["code"],
"album_id" => $albumCode,
"image_name" => $imageFileName
])->get();
if ($images->count() > 0) {
if ($this->imageFileExists($albumPath, $image, $username, $albumCode)) {
return false;
} else {
return true;
}
} else {
if ($this->imageFileExists($albumPath, $image, $username, $albumCode)) {
$xiuGirl = new XiuGirl;
$xiuGirl->user_id = $name["code"];
$xiuGirl->album_id = $albumCode;
$xiuGirl->image_name = $username . "-" . $albumCode . "-" . $fileInfo["filename"] . ".jpg";
$xiuGirl->site_from = "xiugirl";
$xiuGirl->is_downloaded = 1;
$xiuGirl->save();
return false;
} else {
return true;
}
}
}
/**
* @param string $albumPath
* @param array $image
* @param string $username
* @param string $albumCode
* @return bool
*/
private function imageFileExists(string $albumPath, string $image, string $username, string $albumCode): bool
{
return file_exists($albumPath . "/" . pathinfo("http:" . $image)["filename"] . ".jpg") || file_exists($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:" . $image)["filename"] . ".jpg");
}
/**
* @param array $image
* @param string $baseUrl
* @param $item
* @param string $albumPath
* @param string $username
* @param string $albumCode
* @throws Exception
*/
private function processDownloadImage(string $image, string $baseUrl, $item, string $albumPath, string $username, string $albumCode): void
{
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "https:" . $image);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2000);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36");
curl_setopt($curl_handle, CURLOPT_REFERER, $baseUrl . $item);
$content = curl_exec($curl_handle);
$i = 1;
while ($content === false) {
echo "Curl error: " . curl_error($curl_handle) . "\n";
echo "retry times: " . $i++ . " times \n";
sleep(1);
$sleepTime = 1000 * random_int(1000, 10000);
echo "retry sleep {$sleepTime} nano second \n";
usleep($sleepTime);
$content = curl_exec($curl_handle);
if ($i >= 100) {
break;
}
}
echo curl_error($curl_handle);
$fp = fopen($albumPath . "/" . $username . "-" . $albumCode . "-" . pathinfo("http:" . $image)["filename"] . ".jpg", "x");
fwrite($fp, $content);
fclose($fp);
$sleepTime = 1000 * random_int(100, 1000);
echo "after write image sleep {$sleepTime} nano second \n";
usleep($sleepTime);
}
} }

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

@ -38,7 +38,7 @@ class RenameService
if (is_dir($dir . "/" .$file)) { if (is_dir($dir . "/" .$file)) {
$this->parseDir($dir . "/" . $file, $prefix); $this->parseDir($dir . "/" . $file, $prefix);
} }
if (is_file($dir . "/" .$file) && (pathinfo($file, PATHINFO_EXTENSION) == "JPG" || pathinfo($file, PATHINFO_EXTENSION) == "jpg" || pathinfo($file, PATHINFO_EXTENSION) == "jpeg" || pathinfo($file, PATHINFO_EXTENSION) == "png" || pathinfo($file, PATHINFO_EXTENSION) == "mp4")) {
if (is_file($dir . "/" .$file) && (pathinfo($file, PATHINFO_EXTENSION) == "JPG" || pathinfo($file, PATHINFO_EXTENSION) == "gif" || pathinfo($file, PATHINFO_EXTENSION) == "jpg" || pathinfo($file, PATHINFO_EXTENSION) == "jpeg" || pathinfo($file, PATHINFO_EXTENSION) == "png" || pathinfo($file, PATHINFO_EXTENSION) == "mp4" || pathinfo($file, PATHINFO_EXTENSION) == "avi")) {
echo $dir; echo $dir;
echo "\n"; echo "\n";
echo $file; echo $file;


+ 66
- 65
app/Services/TujiguService.php View File

@ -10,71 +10,71 @@ class TujiguService
{ {
private static $name_dir = [ private static $name_dir = [
// "周韦彤" => [
// "dir" => "周韦彤",
// "code" => 1456,
// "name" => "周韦彤"
// ],
// "ycc" => [
// "dir" => "ycc",
// "code" => 459,
// "name" => "杨晨晨"
// ],
// "ry" => [
// "dir" => "忍野さら",
// "code" => "1875",
// "name" => "忍野さら"
// ],
// "azu" => [
// "dir" => "azu",
// "code" => 437,
// "name" => "阿朱"
// ],
// "xq" => [
// "dir" => "xq",
// "code" => 2438,
// "name" => "小琪"
// ],
// "ygh" => [
// "dir" => "ygh",
// "code" => 550,
// "name" => "原干惠"
// ],
// "wyc" => [
// "dir" => "wyc",
// "code" => 293,
// "name" => "王语纯"
// ],
// "zz" => [
// "dir" => "zz",
// "code" => 954,
// "name" => "芝芝 booty"
// ],
// "hlr" => [
// "dir" => "hlr",
// "code" => 1289,
// "name" => "黄乐然"
// ],
// "jrq" => [
// "dir" => "jrq",
// "code" => 5034,
// "name" => "姜仁卿"
// ],
// "ny" => [
// "dir" => "ny",
// "code" => 5301,
// "name" => "奈月"
// ],
// "杉本有美" => [
// "dir" => "杉本有美",
// "code" => 632,
// "name" => "杉本有美"
// ],
// "糯美子" => [
// "dir" => "糯美子",
// "code" => 161,
// "name" => "糯美子"
// ],
"周韦彤" => [
"dir" => "周韦彤",
"code" => 1456,
"name" => "周韦彤"
],
"ycc" => [
"dir" => "ycc",
"code" => 459,
"name" => "杨晨晨"
],
"ry" => [
"dir" => "忍野さら",
"code" => "1875",
"name" => "忍野さら"
],
"azu" => [
"dir" => "azu",
"code" => 437,
"name" => "阿朱"
],
"xq" => [
"dir" => "xq",
"code" => 2438,
"name" => "小琪"
],
"ygh" => [
"dir" => "ygh",
"code" => 550,
"name" => "原干惠"
],
"wyc" => [
"dir" => "wyc",
"code" => 293,
"name" => "王语纯"
],
"zz" => [
"dir" => "zz",
"code" => 954,
"name" => "芝芝 booty"
],
"hlr" => [
"dir" => "hlr",
"code" => 1289,
"name" => "黄乐然"
],
"jrq" => [
"dir" => "jrq",
"code" => 5034,
"name" => "姜仁卿"
],
"ny" => [
"dir" => "ny",
"code" => 5301,
"name" => "奈月"
],
"杉本有美" => [
"dir" => "杉本有美",
"code" => 632,
"name" => "杉本有美"
],
"糯美子" => [
"dir" => "糯美子",
"code" => 161,
"name" => "糯美子"
],
"小雪" => [ "小雪" => [
"dir" => "小雪", "dir" => "小雪",
"code" => 388, "code" => 388,
@ -85,6 +85,7 @@ class TujiguService
public function scrapeTujiguGirls() public function scrapeTujiguGirls()
{ {
// self::$name_dir = array_slice(self::$name_dir, 1, 1);
foreach (self::$name_dir as $username => $name) { foreach (self::$name_dir as $username => $name) {
// 重置下这个 map,不同网站,不同人可能会有相册 id 重复的情况 // 重置下这个 map,不同网站,不同人可能会有相册 id 重复的情况
$albumCodeMap = []; $albumCodeMap = [];


+ 16
- 0
app/Utils/CommonUtils.php View File

@ -0,0 +1,16 @@
<?php
namespace App\Utils;
use Exception;
use Illuminate\Support\Facades\Log;
class CommonUtils {
public static function randomSleep(int $level = 1000) {
try {
usleep(random_int(1000, 10000) * $level);
} catch (Exception $e) {
Log::error("sleep error message: {$e}");
}
}
}

+ 2
- 0
app/XiuGirl.php View File

@ -27,6 +27,8 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\XiuGirl whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\XiuGirl whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\XiuGirl whereUserId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\XiuGirl whereUserId($value)
* @mixin \Eloquent * @mixin \Eloquent
* @property string $site_from 来源网站
* @method static \Illuminate\Database\Eloquent\Builder|\App\XiuGirl whereSiteFrom($value)
*/ */
class XiuGirl extends Model class XiuGirl extends Model
{ {


+ 32
- 0
database/migrations/2021_02_03_221303_add_site_from.php View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddSiteFrom extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('xiu_girls', function (Blueprint $table) {
//
$table->string("site_from")->comment("来源网站");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('xiu_girls', function (Blueprint $table) {
//
});
}
}

+ 33
- 0
database/migrations/2021_02_04_234057_modify_image_name.php View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ModifyImageName extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('xiu_girls', function (Blueprint $table) {
//
$table->string("image_name")->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('xiu_girls', function (Blueprint $table) {
//
});
}
}

+ 22
- 0
fail.log View File

@ -934,3 +934,25 @@
/Users/shixuesen/OneDrive/Pictures/instagram/jeonjisu92/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/136423432_1613515078827698_470283759236175545_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=102&_nc_ohc=qC8gLgfbxsQAX9YQqIi&se=7&tp=1&oh=d0aac96e33991114302b526c9c7480ec&oe=6028C011&ig_cache_key=MjQ4MjAxMjY5ODc5MzgzNTMxNA%3D%3D.2 /Users/shixuesen/OneDrive/Pictures/instagram/jeonjisu92/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/136423432_1613515078827698_470283759236175545_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=102&_nc_ohc=qC8gLgfbxsQAX9YQqIi&se=7&tp=1&oh=d0aac96e33991114302b526c9c7480ec&oe=6028C011&ig_cache_key=MjQ4MjAxMjY5ODc5MzgzNTMxNA%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/bivi_0420/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/75199470_1335438713487052_4443306569644757309_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=Pfk7Ks337usAX9CHA80&vs=17865513176274293_2229106847&_nc_vs=HBkcFQAYJEdPNXpld1RNLWlJT2s3NEVBRDNSMVktSXk2azlidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJurUorPdpbw%2FFQIoAkMzLBdAFqn752yLRBgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=bd4ca03fb8&oe=6002B9F9&oh=3b83efdeb3bfdb6e4a3d143d049a9fd9 /Users/shixuesen/OneDrive/Pictures/instagram/bivi_0420/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/75199470_1335438713487052_4443306569644757309_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=Pfk7Ks337usAX9CHA80&vs=17865513176274293_2229106847&_nc_vs=HBkcFQAYJEdPNXpld1RNLWlJT2s3NEVBRDNSMVktSXk2azlidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJurUorPdpbw%2FFQIoAkMzLBdAFqn752yLRBgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=bd4ca03fb8&oe=6002B9F9&oh=3b83efdeb3bfdb6e4a3d143d049a9fd9
/Users/shixuesen/OneDrive/Pictures/instagram/janie.lin/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/73401427_752847975347389_1185833149754134277_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=101&_nc_ohc=BL7DhcPq1U8AX_EZWna&vs=17907857668618875_836936642&_nc_vs=HBkcFQAYJEdGTUVZQVM5OUNNVXRxd0NBQVZQX29YMzdIUVFidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJvasstzAxs8%2FFQIoAkMzLBdAFAAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16AcA&_nc_rid=0165dd4ea4&oe=6003AE0A&oh=edb0217f8c9f734f33794fe1c1fbe72e /Users/shixuesen/OneDrive/Pictures/instagram/janie.lin/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/73401427_752847975347389_1185833149754134277_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=101&_nc_ohc=BL7DhcPq1U8AX_EZWna&vs=17907857668618875_836936642&_nc_vs=HBkcFQAYJEdGTUVZQVM5OUNNVXRxd0NBQVZQX29YMzdIUVFidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJvasstzAxs8%2FFQIoAkMzLBdAFAAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16AcA&_nc_rid=0165dd4ea4&oe=6003AE0A&oh=edb0217f8c9f734f33794fe1c1fbe72e
/Users/shixuesen/OneDrive/Pictures/instagram/ling.lingerie/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/106349917_180401126838077_8496973762480453008_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=9bfrj5Q3o8sAX_SO5bF&se=7&tp=1&oh=cbd1bbf411fce714657ec97418152c07&oe=6033CFC7&ig_cache_key=MjM0NjczNTY5MjI2NDMxOTY1OQ%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/mobeee19920223/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/141572981_418712006133100_622126056570892772_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=K-OG5ww6N8gAX9MR4Xe&se=7&tp=1&oh=cd969755e5782c2687d1ca1f245eb01c&oe=603720E4&ig_cache_key=MjQ5Mzg3NDg5Nzc3NDY5NjI5OA%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/tngnlo/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/74153820_130051285611982_6627483278920885930_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=110&_nc_ohc=6eUkvoy7mVUAX9zIHFJ&vs=17892094195882048_2912061902&_nc_vs=HBksFQAYJEdGeC1hd1RPZGE3c1IzWUFBS3FtNjZMdGpQbGJidXFIQUFBQRUAAsgBABUAGCRHTkNYZ3dndWl6SW8wc2dBQVBUaWVhdVZjeXA0YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaAnYDL%2BbDIPxUCKAJDMywXQAqp%2B%2Bdsi0QYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=47b90f3192&oe=60109E15&oh=c7a90e9a92fb6c155148a84dc3b27c9a
/Users/shixuesen/OneDrive/Pictures/instagram/boram__jj/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/88602691_509164970072575_4119782936486668629_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=107&_nc_ohc=kokdD4jggmYAX8xmFK9&vs=17889396292935336_3548659818&_nc_vs=HBksFQAYJEdFUDRSd1gtV1N3MUZjOEJBRlhwQU5IQWFDdzVidXFIQUFBQRUAAsgBABUAGCRHSjJjalFpT1BfeWp3YWtEQUxhem1rcnc5OE5YYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbQ0OCe9JPHPxUCKAJDMywXQBcQYk3S8aoYEmRhc2hfYmFzZWxpbmVfM192MREAdegHAA%3D%3D&_nc_rid=fd79a4c315&oe=6015E444&oh=a9164256c10d8b45ee2a7cf20389ae51
/Users/shixuesen/OneDrive/Pictures/instagram/boram__jj/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/74929986_146247097220394_4121725108706363573_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=YsmMGSavAnsAX-LQfGW&vs=18137102791177225_3089093333&_nc_vs=HBksFQAYJEdFSlhkd1FxZlVmT0FvVUFBTFZJUUFZbVR6TTVidXFIQUFBQRUAAsgBABUAGCRHT2VhbUFpTEQ0dDY5N2NFQUkxZWNtWTdEY2gzYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaS9q2Oqea3QBUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfNF92MREAdegHAA%3D%3D&_nc_rid=fd79af7ad8&oe=6015EFE4&oh=4493dbc112c2f453357b666f2662c59b
/Users/shixuesen/OneDrive/Pictures/instagram/boram__jj/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88579525_417662422835552_8181357780522074323_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=108&_nc_ohc=6B8-Z6VL1fgAX92FMLY&vs=17881648688072359_58113689&_nc_vs=HBksFQAYJEdNV2RSd1ZnWVZtYzNIc0JBTk9BWlFDT0JZcHhidXFIQUFBQRUAAsgBABUAGCRHQU9FbUFpazJ0NGh2Q2dLQU9zR0liOEpSdWstYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbO9cis99DDPxUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfM192MREAdegHAA%3D%3D&_nc_rid=fd79a74fdd&oe=601584AC&oh=800c4600293ce79c92fc97568506aa9c
/Users/shixuesen/OneDrive/Pictures/instagram/boram__jj/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/98933477_1863951833758841_7784172983692448158_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=k9fipFcq9RQAX9LGsk_&vs=17842093988528054_2405203657&_nc_vs=HBksFQAYJEdPV2E1UVY1LU8wYVFaOEdBSjVSTGhzVzhBWnNidXFIQUFBQRUAAsgBABUAGCRHRldhakFnMnJkVXlZdTBBQU04bU9NRUhLVGR6YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbsureBx9KxPxUCKAJDMywXQAhDlYEGJN0YEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=fd79ab9928&oe=601581D3&oh=849ff09a73fbeba6c5bfc6ff59b4afd5
/Users/shixuesen/OneDrive/Pictures/instagram/cherry_quahst/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/73719638_776271993291888_1555169847700668720_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=100&_nc_ohc=da7l8E1Xi8UAX9WiK8t&vs=17865952178291569_3928843725&_nc_vs=HBkcFQAYJEdGYmZaQVJ3eEdqb0E4SUNBRERCbUtHOEVwVVZidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJuKEx9ejv7w%2FFQIoAkMzLBdADMzMzMzMzRgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=4bc2384269&oe=601660F7&oh=3cecc3a3a63289455d0e9b6eebed936c
/Users/shixuesen/OneDrive/Pictures/instagram/cherry_quahst/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/79596116_180007600565727_5944080743810315975_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=103&_nc_ohc=cSPxvM13GUsAX92vjfD&vs=17950938955407050_4248335844&_nc_vs=HBkcFQAYJEdGU0t2Z1RmclJaSnQ2TUFBTWUyRFlQeG5YMVNidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJpTtxKCVkuM%2FFQIoAkMzLBdADzMzMzMzMxgSZGFzaF9iYXNlbGluZV8xX3YxEQB16AcA&_nc_rid=4bc234a352&oe=60163FDB&oh=18f0b4e68e700ccfe8ee9c5c216d2ff4
/Users/shixuesen/OneDrive/Pictures/instagram/cherry_quahst/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/75507535_892184541558143_7429584257777463544_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=111&_nc_ohc=bjaJVRMx1YAAX_gLR6V&vs=17915403469566202_1807337231&_nc_vs=HBkcFQAYJEdFOG5nQVItZGF6bWJ5c0RBUGp3cU5HRUx4dG5idXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJvT%2F0prd%2FdI%2FFQIoAkMzLBdAGAAAAAAAABgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=4bc23d3839&oe=6015EEB4&oh=588f32e416eb7bcf2177ad67aca58e71
/Users/shixuesen/OneDrive/Pictures/instagram/cherry_quahst/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/98852517_172076850983952_5976962641756871381_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=100&_nc_ohc=CFb2cbwnF6oAX8yHZ0G&vs=17936707564454517_485394539&_nc_vs=HBkcFQAYJEdLVmU1QVVRdEpQRGdKd0FBTlhhc3ZuYWItSlNidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJur7v5Dl1dw%2FFQIoAkMzLBdAGAAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16AcA&_nc_rid=4bc23cc6f1&oe=6015F23D&oh=4afa8ccfb65e7df0c54f2880b07f489a
/Users/shixuesen/OneDrive/Pictures/instagram/cherry_quahst/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/98903393_774220970111379_7829084268101460575_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=103&_nc_ohc=heQKcz4ryQsAX9Lfr3K&vs=17858281166442142_453480551&_nc_vs=HBksFQAYJEdHRWw1UVdUc2VaZEpzQUNBRjlpeVZ5cGZxWnNidXFIQUFBQRUAAsgBABUAGCRHS0xQbUFnb3hGcWdJeUlCQU92WEc3Qms5QTBBYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACa87%2Fri4oC5PxUCKAJDMywXQCtEGJN0vGoYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=4bc23240ef&oe=60164F6E&oh=33798b727f01f7a6db505c623b908cce
/Users/shixuesen/OneDrive/Pictures/instagram/cherry_quahst/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88456277_703584793688968_4208022839267251746_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=104&_nc_ohc=meQvbrDzp0sAX8ct5QR&vs=17856358334432227_2542779006&_nc_vs=HBkcFQAYJEdGVzhSUVdJZTdJWjZIOENBQ0pXUVMxNjVtVTZidXFIQUFBQRUAAsgBACgAGAAbAYgHdXNlX29pbAExFQAAJsbEusfskLg%2FFQIoAkMzLBdAFZmZmZmZmhgSZGFzaF9iYXNlbGluZV8yX3YxEQB16AcA&_nc_rid=4bc2386e47&oe=6015CEA5&oh=4ffc6d014c487eed981a4c818f9a2375
/Users/shixuesen/OneDrive/Pictures/instagram/ms_puiyi/ https://scontent-lax3-1.cdninstagram.com/v/t51.2885-15/e35/143410132_3601523873258580_7292488418762376054_n.jpg?_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=1&_nc_ohc=Y7j5faKt2C8AX8m6bXc&se=7&tp=1&oh=74775c9047f261448fb5042d0608fbeb&oe=603F4C18&ig_cache_key=MjQ5ODAwMjQ5MzkzNDU1NDE2Mg%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/79633987_166793231622570_3189296630622478847_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=RiwcI_LQxdgAX_reSZM&vs=18189674140002200_258935767&_nc_vs=HBksFQAYJEdFTWV2d1NxWVZLVHNwY0FBUDlobWs5anFFSXNidXFIQUFBQRUAAsgBABUAGCRHRDBCbFFqX1kyN1pJZVlBQUV1ZkNtaU05RVlKYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACaw8%2FaOsNrPQBUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=691c1db0b4&oe=601A05D0&oh=d57be446a5c0c980056fb9083ae7c339
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-2.cdninstagram.com/v/t50.2886-16/73829890_161011692280494_8425028799278796527_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=106&_nc_ohc=OINWW-AIQi8AX9fcMFt&vs=18071753083254762_1388231317&_nc_vs=HBksFQAYJEdBS09aZ1N1R3JsMGNKSUFBTy1PY2lNT3RfdDBidXFIQUFBQRUAAsgBABUAGCRHT3AybndnYnQ3TktDTkFDQUZtUkFmd053SjlQYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACbUqO2zvIqaQBUCKAJDMywXQCUQ5WBBiTcYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHAA%3D%3D&_nc_rid=691c1f7cfc&oe=6019E30A&oh=1a24db752ab760874aba1b1b283f8644
/Users/shixuesen/OneDrive/Pictures/instagram/beauty.leg/ https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/e35/145035080_232018491875903_893287958043554273_n.jpg?_nc_ht=scontent-lax3-2.cdninstagram.com&_nc_cat=111&_nc_ohc=nApOWI6U2YQAX-RKj3D&se=7&tp=1&oh=8f22d0098575e53cb87ef9ee5b4d532a&oe=6045E826&ig_cache_key=MjUwMTAwMTQ1NDQwNjA4MTIxOQ%3D%3D.2
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88846066_157009149408953_825692393345542788_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=s1yQ8hovdX4AX9dGFs3&vs=17847703451514385_1779593638&_nc_vs=HBksFQAYJEdQS3VTd1c1dHBPS3pJNEFBSVJxR21mYmNuVUxidXFIQUFBQRUAAsgBABUAGCRHTm5sc3dpY2FPd3ZYNmNCQUNwVk1VYXRhZUlnYnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACai8Knkh5m0PxUCKAJDMywXQCkAAAAAAAAYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=ef3a1cf42d&oe=60205916&oh=44d17b7d626729793eed13662394e143
/Users/shixuesen/OneDrive/Pictures/instagram/ngoctrinh89/ https://scontent-lax3-1.cdninstagram.com/v/t50.2886-16/88853433_1797999880375623_6553779289075232337_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuLjcyMC5zdG9yeS5kZWZhdWx0In0&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_cat=103&_nc_ohc=eUoO0nkCDOUAX8xTABm&vs=18192127732032398_1749248057&_nc_vs=HBksFQAYJEdMbkxTd1ZIRFMxNFJXTUdBRkV1cEQyS3MtTmFidXFIQUFBQRUAAsgBABUAGCRHTmdVdlFpdEZ6aXNoaGNLQU9XZFRUMWFIQ2g0YnBrd0FBQUYVAgLIAQAoABgAGwGIB3VzZV9vaWwBMRUAACacheb3mOnQQBUCKAJDMywXQC4AAAAAAAAYEmRhc2hfYmFzZWxpbmVfMl92MREAdegHAA%3D%3D&_nc_rid=ef3a1bb7d4&oe=60205164&oh=6fe7a8dcd191d6d11bbbe1282e688230
/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-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

Loading…
Cancel
Save