You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xshop/app/Http/Controllers/ImpexController.php

390 lines
38 KiB
PHTML

2 years ago
<?php
namespace App\Http\Controllers;
use App\Models\Cat;
use App\Models\Customer;
use App\Models\Invoice;
use App\Models\Product;
use App\Models\User;
use Illuminate\Http\Request;
use Symfony\Component\DomCrawler\Crawler;
use GuzzleHttp\Client;
class ImpexController extends Controller
{
public $client;
2 years ago
public $invLinks = array();
2 years ago
2 years ago
public $proLinks = array();
2 years ago
public function __construct()
{
$this->client = new Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false,),));
}
function getState($val)
{
2 years ago
// $b = array_search($val, $states);
// if (!$b) {
// return null;
// }
// return $b;
2 years ago
}
function getCity($val, $st)
{
2 years ago
2 years ago
$cities = array(1 => array(1 => 'اسکو', 2 => 'اهر', 3 => 'ایلخچی', 4 => 'آبش احمد', 5 => 'آذرشهر', 6 => 'آقکند', 7 => 'باسمنج', 8 => 'بخشایش', 9 => 'بستان آباد', 10 => 'بناب', 11 => 'بناب جدید', 12 => 'تبریز', 13 => 'ترک', 14 => 'ترکمانچای', 15 => 'تسوج', 16 => 'تیکمه داش', 17 => 'جلفا', 18 => 'خاروانا', 19 => 'خامنه', 20 => 'خراجو', 21 => 'خسروشهر', 22 => 'خضرلو', 23 => 'خمارلو', 24 => 'خواجه', 25 => 'دوزدوزان', 26 => 'زرنق', 27 => 'زنوز', 28 => 'سراب', 29 => 'سردرود', 30 => 'سهند', 31 => 'سیس', 32 => 'سیه رود', 33 => 'شبستر', 34 => 'شربیان', 35 => 'شرفخانه', 36 => 'شندآباد', 37 => 'صوفیان', 38 => 'عجب شیر', 39 => 'قره آغاج', 40 => 'کشکسرای', 41 => 'کلوانق', 42 => 'کلیبر', 43 => 'کوزه کنان', 44 => 'گوگان', 45 => 'لیلان', 46 => 'مراغه', 47 => 'مرند', 48 => 'ملکان', 49 => 'ملک کیان', 50 => 'ممقان', 51 => 'مهربان', 52 => 'میانه', 53 => 'نظرکهریزی', 54 => 'هادی شهر', 55 => 'هرگلان', 56 => 'هریس', 57 => 'هشترود', 58 => 'هوراند', 59 => 'وایقان', 60 => 'ورزقان', 61 => 'یامچی',), 2 => array(62 => 'ارومیه', 63 => 'اشنویه', 64 => 'ایواوغلی', 65 => 'آواجیق', 66 => 'باروق', 67 => 'بازرگان', 68 => 'بوکان', 69 => 'پلدشت', 70 => 'پیرانشهر', 71 => 'تازه شهر', 72 => 'تکاب', 73 => 'چهاربرج', 74 => 'خوی', 75 => 'دیزج دیز', 76 => 'ربط', 77 => 'سردشت', 78 => 'سرو', 79 => 'سلماس', 80 => 'سیلوانه', 81 => 'سیمینه', 82 => 'سیه چشمه', 83 => 'شاهین دژ', 84 => 'شوط', 85 => 'فیرورق', 86 => 'قره ضیاءالدین', 87 => 'قطور', 88 => 'قوشچی', 89 => 'کشاورز', 90 => 'گردکشانه', 91 => 'ماکو', 92 => 'محمدیار', 93 => 'محمودآباد', 94 => 'مهاباد', 95 => 'میاندوآب', 96 => 'میرآباد', 97 => 'نالوس', 98 => 'نقده', 99 => 'نوشین',), 3 => array(100 => 'اردبیل', 101 => 'اصلاندوز', 102 => 'آبی بیگلو', 103 => 'بیله سوار', 104 => 'پارس آباد', 105 => 'تازه کند', 106 => 'تازه کندانگوت', 107 => 'جعفرآباد', 108 => 'خلخال', 109 => 'رضی', 110 => 'سرعین', 111 => 'عنبران', 112 => 'فخرآباد', 113 => 'کلور', 114 => 'کوراییم', 115 => 'گرمی', 116 => 'گیوی', 117 => 'لاهرود', 118 => 'مشگین شهر', 119 => 'نمین', 120 => 'نیر', 121 => 'هشتجین', 122 => 'هیر',), 4 => array(123 => 'ابریشم', 124 => 'ابوزیدآباد', 125 => 'اردستان', 126 => 'اژیه', 127 => 'اصفهان', 128 => 'افوس', 129 => 'انارک', 130 => 'ایمانشهر', 131 => 'آران وبیدگل', 132 => 'بادرود', 133 => 'باغ بهادران', 134 => 'بافران', 135 => 'برزک', 136 => 'برف انبار', 137 => 'بهاران شهر', 138 => 'بهارستان', 139 => 'بوئین و میاندشت', 140 => 'پیربکران', 141 => 'تودشک', 142 => 'تیران', 143 => 'جندق', 144 => 'جوزدان', 145 => 'جوشقان و کامو', 146 => 'چادگان', 147 => 'چرمهین', 148 => 'چمگردان', 149 => 'حبیب آباد', 150 => 'حسن آباد', 151 => 'حنا', 152 => 'خالدآباد', 153 => 'خمینی شهر', 154 => 'خوانسار', 155 => 'خور', 157 => 'خورزوق', 158 => 'داران', 159 => 'دامنه', 160 => 'درچه', 161 => 'دستگرد', 162 => 'دهاقان', 163 => 'دهق', 164 => 'دولت آباد', 165 => 'دیزیچه', 166 => 'رزوه', 167 => 'رضوانشهر', 168 => 'زاینده رود', 169 => 'زرین شهر', 170 => 'زواره', 171 => 'زیباشهر', 172 => 'سده لنجان', 173 => 'سفیدشهر', 174 => 'سگزی', 175 => 'سمیرم', 176 => 'شاهین شهر', 177 => 'شهرضا', 178 => 'طالخونچه
$b = array_search($val, $cities[$st]);
if (!$b) {
return null;
}
return $b;
// $c = [];
// foreach ($cities as $city) {
// $c[$city['state_id']][$city['id']] = $city['name'];
// }
// var_export($c);
}
//
function customer()
{
2 years ago
$cs = [];
2 years ago
$txt = '';
foreach ($cs as $c) {
$txt .= $c[3] . '<hr>';
if (Customer::where('id', $c[1])->orWhere('mobile', $c[4])->count() == 0) {
$cn = new Customer();
$cn->id = $c[1];
} else {
$cn = Customer::where('id', $c[1])->orWhere('mobile', $c[4])->first();
}
$cn->name = trim($c[3]);
$cn->email = null;
$cn->mobile = trim($c[4]);
$cn->colleague = 0;
$cn->state = $this->getState(trim($c[6]));
if ($cn->state != null) {
$cn->city = $this->getCity(trim($c[7]), $cn->state);
}
$cn->address = trim($c[8]);
$cn->postal_code = trim($c[9]);
$cn->save();
}
return $txt;
}
function col()
{
2 years ago
$cs = [];
2 years ago
$txt = '';
foreach ($cs as $c) {
$txt .= $c[3] . '<hr>';
if (Customer::where('id', $c[1])->orWhere('mobile', $c[4])->count() == 0) {
$cn = new Customer();
$cn->id = $c[1];
} else {
$cn = Customer::where('id', $c[1])->orWhere('mobile', $c[4])->first();
}
$cn->name = trim($c[2]);
$cn->email = null;
$cn->mobile = trim($c[4]);
$cn->colleague = 1;
$cn->state = null;
$cn->city = null;
$cn->address = null;
$cn->postal_code = null;
$cn->description = $c[3];
$cn->save();
}
return $txt;
}
function getPage($url)
{
$jar = \GuzzleHttp\Cookie\CookieJar::fromArray(
[
'ny_ny_sntral_session' => 'eyJpdiI6Ik1qT3B1ZVdRWnVWeG4rb0JTMFlKR0E9PSIsInZhbHVlIjoibWtlVjc3VGtHTU54bVFPN3JEZXdzQ1pROTJHQzFnUnB3TVZhY2NEZEZwa05jYXRXdkpLRVZsSzlGWjdYeXIrcCtqMW5lbm1iMWVZNWRPY0YwL0lMZ0hhbkIxUFRhMW5jNHdCNXN1ZVFTV1RmcHpRTUIrSDJNd2lTUjRkK2hlejEiLCJtYWMiOiI5YTAwYzgzNzM3N2IzNTNmZjRiYTUxZDRhOGQ1YTMyZWQ2NzhhYzQ1OWM0ZDg0YmM3MmVkYTFjNDFjMjA3MTQ1In0%3D',
'nynysntral_session' => 'eyJpdiI6Im5ha2h2ZTJ3QTRrTzBCT0FTOTk1TVE9PSIsInZhbHVlIjoib21uYmw5alFGMVNaUFlrOFFhTjY4eGZVTERqYzhmWWxhRzlFalpJU053NW1STWkveXpPK21HM0NhRi80ZVNMV0RsKzVCeE1PUlcyZTd5MUhOWFpYZVpRNkFWQ0tjcWlLWTdIK1FUTW9lVUhxS2gzZXlCUXZKbTl0UnN0UVpJUG4iLCJtYWMiOiI4ZTQ2MGUzYzk2NGQ5Yjc1NDJlOTQwMTAyNmFhMTM2ZWY2Yjc4NWQwMDVjNjNlZTAyYjY2NGFjOWMwZGVkNGU1IiwidGFnIjoiIn0%3D',
'XSRF-TOKEN' => 'eyJpdiI6IlZ4enFDazVkL3UycERkeVZxbmlVNlE9PSIsInZhbHVlIjoia0tQbFppOXFlbWc0SUdjekwrVkxhODc2UlNVaEx2RzAwemEyUjl3NS93bUFYaFYwekplaElXem5mSHhwSWxEbUY5aGJuSFZxYU8vSTd5V0YrbkxLbVlWQ28zZ2xnQ1doT0VTTWdjQ21YeitJdkJsMDhyZG1ELzFhWVc3aFEwMmwiLCJtYWMiOiI1OWVmNGMxZmMzYjdhNDQ1ODUyNzFjNzU2ZTY1OTVkM2IxMzRiODkzMGM5MjNlZDBkYzcwYTI4YjlkZDM0NDNjIn0%3D',
],
'ninicenteral.com'
);
$res = $this->client->request('GET', $url, [
'cookies' => $jar,
]);
// echo $res->getStatusCode();
// "200"
// echo $res->getHeader('content-type')[0];
// 'application/json; charset=utf8'
if ($res->getStatusCode() == 200){
return $res->getBody();
}else{
return false;
}
}
function crwl()
{
$links = [];
2 years ago
//
// for ($i = 1; $i <= 16; $i++) {
// $html = $this->getPage('https://ninicenteral.com/ninicenteral/product?page=' . $i);
// $crawler = new Crawler($html);
//
//// $x = $crawler->filter("table.table-hover tr td:nth-child(4) a")->first()
// foreach ($crawler->filter("table.table-hover tr td:nth-child(4) a") as $k => $el) {
// $node = new Crawler($el);
// $n = $k + 1;
// $id = $crawler->filter("table.table-hover tr:nth-child({$n}) td:nth-child(1)")->first()->innerText();
// $links[$id] = $node->attr('href');
// }
// }
2 years ago
// $links = array_reverse($links);
var_export($links);
// var_dump($x);
}
function crwl2()
{
$links = [];
2 years ago
// for ($i = 1; $i <= 37; $i++) {
// $html = $this->getPage('https://ninicenteral.com/ninicenteral/order/all?page=' . $i);
// $crawler = new Crawler($html);
//
// //$id = $crawler->filter("table.table-hover tr:nth-child({$n}) td:nth-child(1)")->first()->innerText();
//// $x = $crawler->filter("table.table-hover tr td:nth-child(4) a")->first()
// foreach ($crawler->filter("table.table-hover tr td:nth-child(7) a") as $k => $el) {
// $node = new Crawler($el);
// if ($node->filter("table.table-hover tr:nth-child({$k}) .badge-danger")->count() == 0) {
// $links[] = $node->attr('href');
// }
// }
// }
2 years ago
$links = array_reverse($links);
var_export($links);
// var_dump($x);
}
//
//$cats = json_decode('[
// {
// "id": "1",
// "text": "پوشاک پاییزه زمستونی"
// },
// {
// "id": "7",
// "text": " زمستانی دخترانه"
// },
// {
// "id": "3",
// "text": "دخترانه بلوز شلوار "
// },
// {
// "id": "4",
// "text": " دخترانه هودی شلوار "
// },
// {
// "id": "5",
// "text": "دخترانه سویشرت شلوار "
// },
// {
// "id": "8",
// "text": " زمستانی پسرانه"
// },
// {
// "id": "9",
// "text": "پسراته بلوز شلوار "
// },
// {
// "id": "10",
// "text": " پسرانه هودی شلوار "
// },
// {
// "id": "12",
// "text": " پسرانه سویشرت شلوار "
// },
// {
// "id": "13",
// "text": "پوشاک بهاره تابستانه"
// },
// {
// "id": "14",
// "text": " تاسبتانی پسرانه"
// },
// {
// "id": "15",
// "text": "پسرانه تیشرت و شلوارک "
// },
// {
// "id": "16",
// "text": " تابستانی دخترانه"
// },
// {
// "id": "17",
// "text": "دخترانه تیشرت و شلوارک "
// },
// {
// "id": "18",
// "text": "حراجی تک سایز"
// }
//]');
//foreach ($cats as $cat){
//$c = new Cat();
//$c->id = $cat->id;
//$c->name = $cat->text;
//$c->slug = \StarterKit::slug($cat->text);
//$c->save();
//}
function getPro()
{
ini_set('max_execution_time', 0);
set_time_limit(0);
// $k = 2;
foreach ($this->proLinks as $k => $url) {
// if ($k <= 0){
// continue;
// }
$url = $this->proLinks[$k];
usleep(300000);
$html = $this->getPage($url);
if ($html != false){
$crawler = new Crawler($html);
if ($crawler->filter('#inputState option:selected')->first()->attr('value') != 'تحویل به پست') {
continue;
}
$p = new Product();
$p->id = $k;
$p->name = $crawler->filter('#title')->first()->attr('value');
$p->active = true;
$p->excerpt = $p->name;
$part = explode('/', $url);
$p->slug = urldecode($part[count($part) - 1]);
$p->description = str_replace('html', 'div', $crawler->filter('#textarea')->first()->innerText());
$cats = [];
$crawler->filter('#select option:selected')->each(function ($node) use (&$cats) {
$cats[] = $node->attr('value');
});
$p->cat_id = $cats[0];
$p->user_id = User::first()->id;
$p->save();
$p->syncMeta(['type' => $crawler->filter('#type_id option:selected')->first()->attr('value')]);
$p->categories()->sync($cats);
$crawler->filter('img.m-2')->each(function ($node) use (&$p) {
$pUrl = $node->attr('src');
$this->client->request('GET', $pUrl, [
'sink' => storage_path('test.jpg')
]);
$p->addMedia(storage_path('test.jpg'))->toMediaCollection();
});
$p->save();
print $p->name . ' Done! <hr>';
}else{
print $k.' | '.$url.' skip: <hr>';
}
}
}
public function getInv()
{
ini_set('max_execution_time', 0);
set_time_limit(0);
foreach ($this->invLinks as $i => $url) {
$html = $this->getPage($url); // coleage
// $html = $this->getPage('https://ninicenteral.com/ninicenteral/order/1451');
// $html = $this->getPage('https://ninicenteral.com/ninicenteral/order/1473');
$crawler = new Crawler($html);
$inv = new Invoice();
$inv->transport_id = 1;
$inv->transport_price = $crawler->filter('.pc.mx-3.d-inline')->first()->innerText();
$inv->total_price = $crawler->filter('.pc.b')->first()->text();
$inv->status = 'COMPLETED';
$inv->hash = md5(time() . $inv->total_price . rand(0, 9999));
// $('.border-1 span').length
if ($crawler->filter('.border-1 span')->count() == 39) {
// hamkarr
$number = $crawler->filter('.border-1 .b.mr-3')->eq(8)->innerText();
$inv->desc = $crawler->filter('.border-1 .b.mr-3')->eq(4)->innerText().', ';
$inv->desc .= $crawler->filter('.border-1 .b.mr-3')->eq(5)->innerText().', ';
$inv->desc .= $crawler->filter('.border-1 .b.mr-3')->eq(6)->innerText();
} else {
$number = $crawler->filter('.border-1 span')->eq(7)->innerText();
}
$inv->tracking_code = $crawler->filter('#tracking_code')->first()->attr('value');
if (Customer::where('mobile', trim($number))->count() == 0) {
$inv->customer_id = null;
} else {
$inv->customer_id = Customer::where('mobile', trim($number))->first()->id;
}
$inv->save();
$crawler->filter('.scroll-x tr')->each(function ($node) use (&$inv) {
// $node = new Crawler($el);
if ($node->filter('td')->count() > 4) {
$id = trim($node->filter('td:first-child')->innerText());
$p = Product::where('id', $id)->first();
if ($p != null) {
$inv->products()->save(
$p,
[
'count' => $node->filter('td:nth-child(4)')->innerText(),
'price_total' => $node->filter('td:nth-child(5)')->innerText(),
]
);
}
// echo $node->filter('td:nth-child(3)')->innerText() . '<br>';
}
});
echo $i . $url . ' Done! <hr>';
}
}
public function login(){
if (!auth()->check()){
return abort(403);
}
2 years ago
return \Auth::guard('customer')->loginUsingId(Customer::inRandomOrder()->first()->id);
}
public function loginas($tel){
if (!auth()->check()){
return abort(403);
}
2 years ago
return \Auth::guard('customer')->loginUsingId(Customer::whereMobile($tel)->first()->id);
}
}