<?php
class caijiAction extends baseAction
{
    /**
    采集淘宝地址
     */
    public function taobaoAddr()
    {
        $Ypw = new YpwBase();
        $content = file_get_contents('https://g.alicdn.com//vip/address/6.0.5/index-min.js');
        $preg = '/s=function\(\w+\)\{var\s+\w+=(\{.*?\})\;/';
        preg_match($preg, $content, $province);
        $province = json_decode($province[1], true);
        $provinceData = array();
        foreach ($province as $key => $value) {
            foreach ($value as $i => $j) {
                $provinceData[] = array('code' => $j[0], 'name' => $j[1][0]);
            }
        }
        $prerCity = '/r=function\(\w+\)\{var\s+\w+=(\[.*\])\;/';
        preg_match($prerCity, $content, $r);
        $city = json_decode($r[1], true);
        $cityData = array();
        $extend = array();
        foreach ($city as $key => $value) 
        {
            if ($value[3] !== '0') 
            {
                $extend[$value[3]][$value[2]][] = $value;
                continue;
            }
            $cityData[$value[2]][$value[0]] = array('code' => $value[0], 'name' => $value[1][0], 'pcode' => $value[2]);
        }
        // file_put_contents('2.php', serialize($extend));
        $ids = array();
        $tag = 1;
        foreach ($provinceData as $key => $value) 
        {
            echo $tag, '<br/><br/>';
            $code = $value['code'];
            $name = $value['name'];
            $exit = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $code, true);
            if ($exit['data']['count'] == 0) 
            {
                $res = $Ypw->Add('taobao_province_city', ['pc_pid' => 0, 'pc_name' => $name, 'pc_id_path' => 0, 'pc_fromid' => $code]);
                $pid = $res['data'];
                echo $pid, '<br/>';
                echo $name, '<br/>';
            }
            else 
            {
                $pid = $exit['data']['pc_id'];
            }

            foreach ($cityData[$code] as $i => $j) 
            {
                $cityCode = $j['code'];
                $cityName = $j['name'];
                $cityPath = '0,' . $pid;
                $exit2 = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $cityCode, true);
                if ($exit2['data']['count'] == 0) 
                {
                    $re = $Ypw->Add('taobao_province_city', ['pc_pid' => $pid, 'pc_name' => $cityName, 'pc_id_path' => $cityPath, 'pc_fromid' => $cityCode]);
                    $cityPid = $re['data'];
                    echo $cityPid, '<br/>';
                    echo $cityName, '<br/>';
                } 
                else 
                {
                    $cityPid = $exit2['data']['pc_id'];
                }

                $townCode = '';
                $townPid = '';
                $townName = '';
                if (isset($cityData[$cityCode])) 
                {
                    foreach ($cityData[$cityCode] as $f => $h) 
                    {
                        $townCode = $h['code'];
                        $townName = $h['name'];
                        $townPath = '0,' . $pid . ',' . $cityPid;
                        $exit3 = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $townCode, true);
                        if ($exit3['data']['count'] == 0) 
                        {
                            $r = $Ypw->Add('taobao_province_city', ['pc_pid' => $cityPid, 'pc_name' => $townName, 'pc_id_path' => $townPath, 'pc_fromid' => $townCode]);
                            $townPid = $r['data'];
                            echo $townPid, '<br/>';
                            echo $townName, '<br/>';
                        } 
                        else 
                        {
                            $townPid = $exit3['data']['pc_id'];
                        }

                        // die;
                        $ids[$townPid] = array('provinceCode' => $code, 'cityCode' => $cityCode, 'townCode' => $townCode, 'provinceId' => $pid, 'cityId' => $cityPid, 'townId' => $townPid, 'provinceName' => $name, 'cityName' => $cityName, 'townName' => $townName);
                    }
                    unset($cityData[$cityCode]);
                } 
                else 
                {
                    $ids[$cityPid] = array('provinceCode' => $code, 'cityCode' => $cityCode, 'townCode' => $townCode, 'provinceId' => $pid, 'cityId' => $cityPid, 'townId' => $townPid, 'provinceName' => $name, 'cityName' => $cityName, 'townName' => $townName);
                }
            }
            $tag++;
        }
        // die;
        file_put_contents('1.php', serialize($ids));
        preg_match('/c=function\(\w+\)\{var[\s]+\w+=(\[\[.*\]\])\;/iUs', $content, $other);
        $hongkong = json_decode($other[1], true);
        preg_match('/o=function\(\w+\)\{var[\s]+\w+=(\[\[.*\]\])\;/iUs', $content, $island);
        $islandArr = json_decode($island[1], true);
        $root = array();
        $child = array();
        foreach ($hongkong as $k => $v) 
        {
            if ($v[2] == 1) 
            {
                $root[] = $v;
                unset($hongkong[$k]);
            } 
            else 
            {
                $child[$v[2]][] = $v;
            }
        }
        foreach ($islandArr as $k => $v) 
        {
            if ($v[2] == 2) 
            {
                $root[] = $v;
                unset($hongkong[$k]);
            } 
            else 
            {
                $child[$v[2]][] = $v;
            }
        }
        foreach ($root as $k => $v) 
        {
            $pcode = $v[0];
            $provinceName = $v[1][0];
            $path = 0;
            $exit = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $pcode, true);
            if ($exit['data']['count'] == 0) 
            {
                $res = $Ypw->Add('taobao_province_city', ['pc_pid' => 0, 'pc_name' => $provinceName, 'pc_id_path' => $path, 'pc_fromid' => $pcode]);
                $provinceId = $res['data'];
            } 
            else 
            {
                $provinceId = $exit['data']['pc_id'];
            }

            foreach ($child[$pcode] as $i => $j) 
            {
                $cityCode = $j[0];
                $cityName = $j[1][0];
                $cityPath = '0,' . $provinceId;
                $exit2 = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $cityCode, true);
                if ($exit2['data']['count'] == 0) 
                {
                    $re = $Ypw->Add('taobao_province_city', ['pc_pid' => $provinceId, 'pc_name' => $cityName, 'pc_id_path' => $cityPath, 'pc_fromid' => $cityCode]);
                    $cityId = $re['data'];
                } 
                else 
                {
                    $cityId = $exit2['data']['pc_id'];
                }

                if (isset($child[$cityCode])) 
                {
                    foreach ($child[$cityCode] as $h => $f) 
                    {
                        $townCode = $f[0];
                        $townName = $f[1][0];
                        $townPath = $cityPath . ',' . $cityId;
                        $exit3 = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $townCode, true);
                        if ($exit3['data']['count'] == 0) 
                        {
                            $r = $Ypw->Add('taobao_province_city', ['pc_pid' => $cityId, 'pc_name' => $townName, 'pc_id_path' => $townPath, 'pc_fromid' => $townCode]);
                        }
                    }
                    unset($child[$cityCode]);
                }
            }
        }
    }
    /*
    采集街道
     */
    public function getData()
    {
        $Ypw = new YpwBase();
        $http = new LibHttp();
        $handle = fopen('1.php', 'r');
        $cacheArray = unserialize(fread($handle, filesize('1.php')));
        foreach ($cacheArray as $k => $v) 
        {
            $path = '0,' . $v['provinceId'] . ',' . $v['cityId'];
            if (!empty($v['townId'])) 
            {
                $path .= ',' . $v['townId'];
            }
            $info = $http->fetch('https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do', array('l1' => $v['provinceCode'], 'l2' => $v['cityCode'], 'l3' => $v['townCode'], 'lang' => 'zh-S'));
            preg_match('/result\:(.*)\}/', $info, $result);
            $re = str_replace('\'', '"', $result[1]);
            $stree = json_decode($re, true);
            $exit1 = $Ypw->Get('taobao_province_city', ['count(*) as count'], ' and pc_pid=' . $k, true);
            if ($exit['data']['count'] == count($stree)) 
            {
                continue;
            }
            foreach ($stree as $i => $j) 
            {
                $exit = $Ypw->Get('taobao_province_city', ['count(*) as count', 'pc_id'], ' and pc_fromid=' . $j[0], true);
                if ($exit['data']['count'] == 0) {
                    echo $v['provinceName'], $v['cityName'], $v['townName'], '<br/>';
                    echo $v['provinceCode'], '&nbsp;&nbsp;', $v['cityCode'], '&nbsp;&nbsp;', $v['townCode'], '<br/>';
                    echo '<br/>';
                    echo '<br/>';
                    $re = $Ypw->Add('taobao_province_city', ['pc_pid' => $k, 'pc_name' => $j[1], 'pc_id_path' => $path, 'pc_fromid' => $j[0]]);
                    echo $re['data'], '<br/>';
                }
            }
        }
    }
    /*
    对比原有数据
     */
    public function compareData()
    {
        $Ypw = new YpwBase();
        $oldData = $Ypw->Get('yp_province_city', ['*'], ' and pc_pid=0');
        $province = $Ypw->Get('taobao_province_city', ['*'], ' and pc_pid=0');
        $new_province = $province['data']; //淘宝数据
        // $new_province=array(array('pc_id'=>3228,'pc_name'=>'香港','pc_pid'=>0,'pc_path'=>0,'pc_fromid'=>810000));
        // $new_province=array(array('pc_id'=>1,'pc_name'=>'北京','pc_pid'=>0,'pc_path'=>0,'pc_fromid'=>110000));
        // $new_province=array(array('pc_id'=>2766,'pc_name'=>'天津','pc_pid'=>0,'pc_path'=>0,'pc_fromid'=>120000));
        foreach ($new_province as $i => $j) 
        {
            $province_id = $j['pc_id']; //省份id(市父id)//香港
            $new_province_name = $j['pc_name'];
            $s_new_province_name = mb_substr($new_province_name, 0, 2, 'utf-8');
            $enName = ucwords(LibFc::PinYin($new_province_name));
            $Ypw->Set('yp_province_city', ['pc_fromid' => $j['pc_fromid'], 'pc_path' => 0], ' and pc_name like "%' . $s_new_province_name . '%" and pc_pid=0');
            $Ypw->Set('yp_province_city', ['pc_en_name' => $enName], ' and pc_name like "%' . $s_new_province_name . '%" and pc_pid=0 and (pc_en_name="" or pc_en_name is null)');
            $city = $Ypw->Get('taobao_province_city', ['*'], ' and pc_pid=' . $province_id); //取出源数据市
            foreach ($city['data'] as $f => $h) 
            {
                //香港
                // print_r($h);
                $cityName = mb_substr($h['pc_name'], 0, 2, 'utf-8');
                $oldProvinceData = $Ypw->Get('yp_province_city', ['*'], ' and pc_name like "%' . $s_new_province_name . '%" and pc_pid=0', true);
                $exit = $Ypw->Get('yp_province_city', ['*'], ' and pc_name like "%' . $cityName . '%" and pc_pid=' . $oldProvinceData['data']['pc_id'], true);
                $cityPath = '0,' . $oldProvinceData['data']['pc_id'];
                $cityEname = ucwords(LibFc::PinYin($h['pc_name']));
                if (!empty($exit['data'])) 
                {
                    //找到
                    $cityId = $exit['data']['pc_id'];
                    $Ypw->Set('yp_province_city', ['pc_fromid' => $h['pc_fromid'], 'pc_path' => $cityPath], ' and pc_id=' . $cityId);
                    if ($exit['data']['pc_en_name'] == null || $exit['data']['pc_en_name'] == '') 
                    {
                        $Ypw->Set('yp_province_city', ['pc_en_name' => $cityEname], ' and pc_id=' . $cityId . ' and (pc_en_name="" or pc_en_name is null)');
                    }
                } 
                else 
                {
                    $re = $Ypw->Add('yp_province_city', ['pc_pid' => $oldProvinceData['data']['pc_id'], 'pc_name' => $h['pc_name'], 'pc_fromid' => $h['pc_fromid'], 'pc_path' => $cityPath, 'pc_en_name' => $cityEname]);
                    $cityId = $re['data'];
                }
                $town = $Ypw->Get('taobao_province_city', ['*'], ' and pc_pid=' . $h['pc_id']); //取出源数据区
                foreach ($town['data'] as $a => $c) 
                {
                    $townName = mb_substr($c['pc_name'], 0, 2, 'utf-8');
                    $oldTownData = $Ypw->Get('yp_province_city', ['*'], ' and pc_name like "%' . $townName . '%" and pc_pid=' . $cityId, true);
                    $townPath = '0,' . $oldProvinceData['data']['pc_id'] . ',' . $cityId;
                    $townEname = ucwords(LibFc::PinYin($c['pc_name']));
                    if (!empty($oldTownData['data'])) 
                    {
                        $townId = $oldTownData['data']['pc_id'];
                        $Ypw->Set('yp_province_city', ['pc_fromid' => $c['pc_fromid'], 'pc_path' => $townPath], ' and pc_id=' . $townId);
                        if ($oldTownData['data']['pc_en_name'] == null || $oldTownData['data']['pc_en_name'] == '') 
                        {
                            $Ypw->Set('yp_province_city', ['pc_en_name' => $townEname], ' and pc_id=' . $townId . ' and (pc_en_name="" or pc_en_name is null)');
                        }
                    } 
                    else 
                    {
                        $r = $Ypw->Add('yp_province_city', ['pc_pid' => $cityId, 'pc_name' => $c['pc_name'], 'pc_fromid' => $c['pc_fromid'], 'pc_path' => $townPath, 'pc_en_name' => $townEname]);
                        $townId = $r['data'];
                    }
                    $oldStree = $Ypw->Get('yp_province_city', ['*'], ' and pc_pid=' . $townId);
                    $stree = $Ypw->Get('taobao_province_city', ['*'], ' and pc_pid=' . $c['pc_id']);
                    if (!empty($stree['data'])) 
                    {
                        if (count($oldStree['data']) == count($stree['data'])) 
                        {
                            continue;
                        }
                        foreach ($stree['data'] as $o => $p) 
                        {
                            $streePath = $townPath . ',' . $townId;
                            $streeEname = ucwords(LibFc::PinYin($p['pc_name']));
                            $result1 = $Ypw->Add('yp_province_city', ['pc_pid' => $townId, 'pc_name' => $p['pc_name'], 'pc_fromid' => $p['pc_fromid'], 'pc_path' => $streePath, 'pc_en_name' => $streeEname]);
                            echo $result1['data'], '<br/>';
                        }
                    }
                }
            }
        }
    }
    /*
    更新拼音
     */
    public function updateEname()
    {
        $Ypw = new YpwBase();
        $data = $Ypw->Get('yp_province_city', ['*']);
        foreach ($data['data'] as $k => $v) 
        {
            if ($v['pc_en_name'] == null || $v['pc_en_name'] == '') 
            {
                continue;
            }
            $Ypw->Set('yp_province_city', ['pc_en_name' => ucwords(LibFc::PinYin($v['pc_name']))], ' and (pc_en_name="" or pc_en_name is null) and pc_id=' . $v['pc_id']);
        }
    }
}
