package com.yx.face;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;

@SpringBootTest
class FaceServerApplicationTests {

    @Test
    void contextLoads() {
    }
    public static final String baseUrl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/";

    //设置utf-8发现有部分字符有乱码
    public static final String CHARSET = "GBK";

    public static StringBuffer result = new StringBuffer();



    /**
     * 读省的信息
     * @throws Exception
     */
    @Test
    public  void aa() throws Exception {
        String url = baseUrl + "index.html";
        //如果需要设置代理
        //initProxy("10.10.13.200", "80");
        String str = getContent(url).toUpperCase();
        String[] arrs = str.split("<A");

        System.out.println(arrs);
            for (String s : arrs) {
                if (s.indexOf("HREF") != -1 && s.indexOf(".HTML") != -1) {
                    String htmlUrl = s.substring(7, s.indexOf("'>"));
                    String provinceName = s.substring(s.indexOf("'>")+2, s.indexOf("<BR/>"));
                    System.out.println(provinceName);

                    System.out.println("爬取:"+provinceName);
                    boolean success = false;
                    while(!success) {
                        try {
                            readShi(htmlUrl,provinceName);
                            success = true;
                        } catch (IOException e) {
                            e.printStackTrace();
                            success = false;
                            Thread.sleep(60000);
                        }
                    }

                }
            }

    }
    public  void readShi(String url,String paretName) throws Exception{
        String content = getContent(baseUrl+url).toUpperCase();
        String[] citys = content.split("CITYTR");
        for(int c=1,len=citys.length; c<len; c++){
            String[] strs = citys[c].split("<A HREF='");
            String cityUrl = null;
            String code = "";
            String areaname = "";
            for(int si = 1; si < 3; si++){
                if(si==1){//取链接和编码
                    cityUrl = strs[si].substring(0, strs[si].indexOf("'>"));
                    code = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));
                }else{
                    areaname = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));
                    System.out.println("爬取:"+strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")));
                }
            }
            String displayName=(paretName);
//            AreaEntity aaentity=new AreaEntity();
//            if(areaname.equals("市辖区")||areaname.equals("县")){
//                areaname=paretName;
//                aaentity = saveCity(code, areaname, displayName+areaname, "", 2, paretId);
//
//                boolean success = false;
//                while(!success) {
//                    try {
//                        readXian(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,code,aaentity.getDisplayName(),aaentity.getId());
//                        success = true;
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                        success = false;
//                        Thread.sleep(60000);
//                    }
//                }
//
//            }
//            else if(areaname.equals("省直辖县级行政区划")||areaname.equals("自治区直辖县级行政区划")){
//                aaentity.setId(paretId);
//                aaentity.setDisplayName(paretName);
//                boolean success = false;
//                while(!success) {
//                    try {
//                        readXianForNull(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,code,aaentity.getDisplayName(),aaentity.getId());
//                        success = true;
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                        success = false;
//                        Thread.sleep(60000);
//                    }
//                }
//            }
//            else {
//                aaentity = saveCity(code, areaname, displayName+areaname, "0", 2, paretId);
//                boolean success = false;
//                while(!success) {
//                    try {
//                        readXian(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,code,aaentity.getDisplayName(),aaentity.getId());
//                        success = true;
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                        success = false;
//                        Thread.sleep(60000);
//                    }
//                }
//            }
        }
    }


    //获取网页的内容
    public static String getContent(String strUrl) throws Exception {
        try {
            URL url = new URL(strUrl);
            BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), Charset.forName(CHARSET)));
            String s = "";
            StringBuffer sb = new StringBuffer("");
            while ((s = br.readLine()) != null) {
                sb.append(s);
            }
            br.close();
            return sb.toString();
        } catch (Exception e) {
            System.out.println("can't open url:"+strUrl);
            throw e;
        }
    }
    /**
     * 读市的数据
     * @param -list
     * @throws Exception
     */
//    public  void readShi(String url,String paretName,Integer paretId) throws Exception{
//        String content = getContent(baseUrl+url).toUpperCase();
//        String[] citys = content.split("CITYTR");
//        for(int c=1,len=citys.length; c<len; c++){
//            String[] strs = citys[c].split("<A HREF='");
//            String cityUrl = null;
//            String code = "";
//            String areaname = "";
//            for(int si = 1; si < 3; si++){
//                if(si==1){//取链接和编码
//                    cityUrl = strs[si].substring(0, strs[si].indexOf("'>"));
//                    code = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));
//                }else{
//                    areaname = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));
//                    System.out.println("爬取:"+strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")));
//                }
//            }
//            String displayName=(paretName);
//            AreaEntity aaentity=new AreaEntity();
//            if(areaname.equals("市辖区")||areaname.equals("县")){
//                areaname=paretName;
//                aaentity = saveCity(code, areaname, displayName+areaname, "", 2, paretId);
//
//                boolean success = false;
//                while(!success) {
//                    try {
//                        readXian(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,code,aaentity.getDisplayName(),aaentity.getId());
//                        success = true;
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                        success = false;
//                        Thread.sleep(60000);
//                    }
//                }
//
//            }
//            else if(areaname.equals("省直辖县级行政区划")||areaname.equals("自治区直辖县级行政区划")){
//                aaentity.setId(paretId);
//                aaentity.setDisplayName(paretName);
//                boolean success = false;
//                while(!success) {
//                    try {
//                        readXianForNull(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,code,aaentity.getDisplayName(),aaentity.getId());
//                        success = true;
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                        success = false;
//                        Thread.sleep(60000);
//                    }
//                }
//            }
//            else {
//                aaentity = saveCity(code, areaname, displayName+areaname, "0", 2, paretId);
//                boolean success = false;
//                while(!success) {
//                    try {
//                        readXian(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,code,aaentity.getDisplayName(),aaentity.getId());
//                        success = true;
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                        success = false;
//                        Thread.sleep(60000);
//                    }
//                }
//            }
//        }
//    }

}

