반응형
<?
exit;
include "./inc/attr_db.php";
class MultiCurl{
public $maxConn = 10; # 최대 요청 수
public $activeConn = 0; # 현재 처리 중인 요청 수
function data($urls=[],$method=''){ # method 부분으로 response값 넘김
$header = ['User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36'];
$ch = curl_init(); //curl 초기화
curl_setopt($ch, CURLOPT_URL, 'https://m.a-bly.com/search?screen_name=SEARCH_RESULT&keyword=%EC%95%84%EB%9C%A8%EB%9E%91%EC%8A%A4&search_type=RECENT');
curl_setopt($ch, CURLOPT_HEADER, 1); // 요청 헤더 설정
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //요청 결과를 문자열로 반환
$str = curl_exec($ch);
curl_close($ch);
preg_match('/set-cookie: ably-anonymous-token=(.*?);/',$str,$cookie);
$cookie = $cookie[1];
$header = [
'User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36',
'X-Anonymous-Token: '.$cookie,
];
$mh = curl_multi_init();
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
CURLOPT_HTTPHEADER => $header
];
for ($i = 0; $i < $this->maxConn; $i++) {
if (!empty($urls)) {
$url = array_shift($urls);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
curl_multi_add_handle($mh, $ch);
$this->activeConn++;
}
}
do {
while (curl_multi_exec($mh, $running) === CURLM_CALL_MULTI_PERFORM) ;
while ($info = curl_multi_info_read($mh)) {
$ch = $info['handle'];
$response = curl_multi_getcontent($ch);
if( $method ){
$this->${'method'}($response);
}
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
$this->activeConn--;
if (!empty($urls)) {
$url = array_shift($urls);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
curl_multi_add_handle($mh, $ch);
$this->activeConn++;
}
}
} while ($running || !empty($urls));
curl_multi_close($mh);
}
function ably_soldout($data){ # 에이블리 품절
$res = json_decode($data,1);
$is_sale = $res['goods']['is_soldout']?'N':'Y';
echo $res['goods']['sno'].'_'.$is_sale.'<br>';
ob_end_flush();
flush();
}
}
$a = time();
$sql = "SELECT
a.index_no,
a.goods_idx,
a.view_url,
a.gcode,
b.gname
FROM
inshop_market_goods AS a JOIN
shop_goods AS b ON a.goods_idx = b.index_no
WHERE b.isopen_jp = '2' AND
b.isshow_jp = 'Y' AND
a.view_url != '' AND
a.view_url REGEXP '.*a-bly.*'
LIMIT
0,500
";
$arr_row = $sona_db->query($sql)->fetch_all(MYSQLI_ASSOC);
$urls = [];
foreach($arr_row as $row){
}
$MultiCurl = new MultiCurl();
$MultiCurl->data($urls,'ably_soldout');
echo time()-$a;
?>
반응형
'프로그램 > PHP' 카테고리의 다른 글
python db tunnel (0) | 2023.10.17 |
---|---|
crontab error log 따로 지정 (1) | 2023.10.10 |
에이블리 리뷰 가져오기 (0) | 2023.10.05 |
php 암호화 복호화 (0) | 2023.09.26 |
php 자동응답기 만들기 (0) | 2023.02.08 |