// 에드센스
반응형
<?
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_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){
    $urls[] = 'https://api.a-bly.com/webview/goods/'.$row['gcode'].'/';
}

$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

+ Recent posts