package cn.******.******.****;
/**
 * 时间:90624
 * 作者:沏茶人
 * 用途:下载一组ts
 */
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class tsDown {

	static String kinleStr[] = {"", ".m3u8.", "-"};
	static String version[] = {"v1", "v2", "v3"};
	static String type[] = {"mp4", "ts", "video"};
	static Integer err = 0;

	public static void main(String[] args) throws IOException {

	    Integer m_id = 101;
        Integer id[] = {800,801,802,803,804,805,806,807};
        String code[] = {
                "8e19e9a74b",
                "09f0cc3018",
                "1972dd68ca",
                "6c65444e36",
                "1ca9b967cd",
                "5b8e3f76e4",
                "bbd9366740",
                "06e2d23287"};
        Integer indexMax[] = {488,476,490,531,454,367,449,406};

        for(int i = 0; i<id.length; i++ ){
            System.out.println("开启"+code[i]+"任务...");
            System.out.println("任务信息: "+ m_id+", "+ id[i]+", "+ code[i]+", "+ indexMax[i]);
            downloadTS("H","Python\\"+i+"\\"+ code[i], m_id, id[i], code[i], 1, indexMax[i], 2);
        }

        System.out.println("当前任务"+m_id+"已经全部完成");
	}

	/**
	 * 暂时淘汰
	 * 葫芦娃、葫芦娃、合体
	 * @param souPath 源路径
	 * @param tarPath 目标路径
	 * @param newFileName 合成文件名
	 */
	public static void synthesisTemp(String souPath,String tarPath,String newFileName){
		/* 合成TS文件*/
		//synthesisTemp(path + code,path,code);

		if(newFileName.equals("")){ //如果为空,则默认获取文件名文文件夹名

		}
		execCMD("copy /b "+souPath+"\\*.ts "+tarPath+newFileName+".ts");
		//System.out.println("copy /b "+souPath+"\\*.ts "+tarPath+newFileName+".ts");
		System.out.println("合成完成!");
	}
	
    /**
     * 给我一个盘,给我一支禁卫军,我带你攻占一城
     * @param pan
     * @param indexMain
     * @param indexSub
     * @param code
     * @param number
     * @param indexMax
     * @param verNum
     * @throws IOException
     */
    private static void downloadTS(String pan,String path, Integer indexMain,Integer indexSub,String code,Integer number,Integer indexMax, Integer verNum) throws IOException{
        createFolder(pan, path);
        Integer n = 0;
        if(number!=0){
            n = number;
        }
        //下载执行体
        for(;n<indexMax+1;n++){
            //判断文件是否存在,即下载中或下载成功
            File fileExists = new File(pan+":\\"+path+"\\"+code + kinleStr[verNum] + num(n)
                    + kinleStr[verNum]
                    + code + kinleStr[verNum] + num(n) +".ts");

            if(noExists(fileExists)){

                String tempZeroNumber = num(n); //初始化 临时变量体零数

                //规则 .m3u8.
                if(kinleStr[verNum].equals(".m3u8.")){
                    if(n==0 || n==number)System.out.println("以\".\"为规则,执行下载体");
                    String resp = execCMD("dl "
                            + "--exec \"move {} "
                            +pan+":\\"
                            +path+"\\{}\" http://" + version[verNum] + ".******.com/" + type[verNum] + "/"
                            +indexMain+"/"
                            +indexSub+"/"
                            +code+kinleStr[verNum]
                            +n+".ts");
                }

                //规则 -
                if(kinleStr[verNum].equals("-")){
                    if(n==0 || n==number) System.out.println("以\"-\"为规则,执行下载体.(" + (n==0 || n==number) + ")");

                    String resp = execCMD("dl "
                            + "--exec \"move {} "
                            +pan+":\\"
                            +path+"\\{}\" http://" + version[verNum] + ".******.com/" + type[verNum] + "/"
                            +indexMain+"/"
                            +indexSub+"/"
                            +code+kinleStr[verNum]
                            +tempZeroNumber+".ts");
                }

                //判断文件是否存在,即下载中或下载成功
                File fileDownSucc = new File(pan+":\\"+path+"\\"+code + kinleStr[verNum] + tempZeroNumber
                        + kinleStr[verNum]
                        + code + kinleStr[verNum] + tempZeroNumber +".ts");

                if(!fileDownSucc.exists()){
                    System.err.println("正在执行(已执行"+n+"次),已完成  "
                            +((float)n/indexMax*100)+"%"
                            +", 下载失败:"
                            + pan+":\\"+path+"\\"+code + kinleStr[verNum] + tempZeroNumber
                            + kinleStr[verNum]
                            + code + kinleStr[verNum] + tempZeroNumber +".ts");

                    err = err + 1;

                    n--;
                    if(err>=5){
                        System.err.println("下载失败。请检查网络是否畅通或下载地址是否正确!");

                        if(!errInfo.equals(""))
                            errInfo = errInfo + ", ";

                        errInfo = errInfo
                                + "\""  +code
                                + "\":[{\"code\":\"" + code
                                + "\", \"m_id\":\"" + indexMain
                                + "\", \"id\":\"" + indexSub
                                + "\", \"version\":\"" + version[verNum]
                                + "\", \"index\":\"" + n
                                + "}]";

                        break;
                    }
                }else {
                    err = 0;
                    System.out.println("正在执行(已执行" + n + "次),已完成  " + ((float) n / indexMax * 100) + "%");
                }//判断是否有错误信息
            }//判断文件是否已经存在
        } //循环结束

        if(!(errInfo == "")){
            System.out.println(errInfo);
        }
        System.out.println("下载结束! ");
    }

	/**
	 * 623 已淘汰
	 * 我种下一个苹果,终于得到一堆
	 * @param pan
	 * @param indexMain
	 * @param indexSub
	 * @param code
	 * @param number
	 * @param indexMax
	 * @param verNum
	 * @throws IOException
	 */
	private static void downloadTS(String pan,int indexMain,int indexSub,String code,int number,int indexMax, int verNum) throws IOException{
		createFolder(code);
		int n = 0;
		if(number!=0){
			n = number;
		}
		//下载执行体
		for(;n<indexMax+1;n++){
			//判断文件是否存在,即下载中或下载成功
			File fileExists = new File(pan+":\\"+code+"\\"+code + kinleStr[verNum] + num(n)
					+ kinleStr[verNum]
					+ code + kinleStr[verNum] + num(n) +".ts");

			if(noExists(fileExists)){

				String tempZeroNumber = num(n); //初始化 临时变量体零数

				//规则 .m3u8.
				if(kinleStr[verNum].equals(".m3u8.")){
					if(n==0 || n==number)System.out.println("以\".\"为规则,执行下载体");
					String resp = execCMD("dl "
							+ "--exec \"move {} "
							+pan+":\\"
							+code+"\\{}\" http://" + version[verNum] + ".*****.com/" + type[verNum] + "/"
							+indexMain+"/"
							+indexSub+"/"
							+code+kinleStr[verNum]
							+n+".ts");
				}

				//规则 -
				if(kinleStr[verNum].equals("-")){
					if(n==0 || n==number) System.out.println("以\"-\"为规则,执行下载体.(" + (n==0 || n==number) + ")");

					String resp = execCMD("dl "
							+ "--exec \"move {} "+pan+":\\"
							+code+"\\{}\" http://" + version[verNum] + ".*****.com/" + type[verNum] + "/"
							+indexMain+"/"
							+indexSub+"/"
							+code+kinleStr[verNum]
							+tempZeroNumber+".ts");
				}

				//判断文件是否存在,即下载中或下载成功
				File fileDownSucc = new File(pan+":\\"+code+"\\"+code + kinleStr[verNum] + tempZeroNumber
																+ kinleStr[verNum]
																+ code + kinleStr[verNum] + tempZeroNumber +".ts");

				if(!fileDownSucc.exists()){
					System.err.println("正在执行(已执行"+n+"次),已完成  "+((float)n/indexMax*100)+"%"+", 下载失败:"+ code+kinleStr[verNum] +tempZeroNumber+".ts");
					err = err+1;
					n--;
					if(err>=5){
						System.err.println("下载失败。请检查网络是否畅通或下载地址是否正确!");
						break;
					}
				}else {
					err = 0;
					System.out.println("正在执行(已执行" + n + "次),已完成  " + ((float) n / indexMax * 100) + "%");
				}

			}
		} //循环结束

		System.out.println("下载结束! ");
	}

	

    /**
	 * 6.18 已淘汰
     * 我可不可以横道夺爱?
     * @param indexMain 哪个省份
     * @param indexSub 哪个城市
     * @param folder 欲横道夺爱的人
     * @param number 到底要不到中间插一脚?
     * @param indexMax 这个世界人口就这么多
     * @throws IOException
     */
	public static void downloadTS(int indexMain,int indexSub,String folder,int number,int indexMax, String kinleStr, String version, String type) throws IOException{

		//downloadTS(101,800,code,1,400,2);
		//downloadTS(65,896,code,0,400,"-","v3","video");

		createFolder(folder);
		int n = 0;
		if(number!=0){
			n = number;
		}

		//下载执行体
		for(;n<indexMax+1;n++){
			System.out.println("正在执行(已执行"+n+"次),已完成  "+((float)n/indexMax*100)+"%");

			if(kinleStr.equals(".")){
				if(n==0 || n==number){System.out.println("以\".\"为规则,执行下载体");}
				String resp = execCMD("dl "
						+ "--exec \"move {} H:\\"
						+folder+"\\{}\" http://" + version + ".*****.com/" + type + "/"
						+indexMain+"/"
						+indexSub+"/"
						+folder+".m3u8."
						+n+".ts");
				System.out.println(resp);

			}

			if(kinleStr.equals("-")){
				String tempZeroNumber = ""; //初始化 临时变量体零数
				if(n==0 || n==number){System.out.println("以\"-\"为规则,执行下载体.(" + (n==0 || n==number) + ")");}
				if(n>999){
					tempZeroNumber="0"+n;
				}else if(n>99){
					tempZeroNumber="00"+n;
				}else if(n>9){
					tempZeroNumber="000"+n;
				}else if(n>-1){
					tempZeroNumber="0000"+n;
				}else{
					System.out.println("系统异常!");
				}
				String resp = execCMD("dl "
						+ "--exec \"move {} H:\\"
						+folder+"\\{}\" http://" + version + ".*****.com/" + type + "/"
						+indexMain+"/"
						+indexSub+"/"
						+folder+kinleStr
						+tempZeroNumber+".ts");
				System.out.println(resp);
			}
		}

		//下载结束提示语
		System.out.println("下载结束! ");
	}
	/**
	 * 看什么看,编号而已
	 * @param n
	 * @return
	 */
	private static String num(int n){
		if(n>999) return "0"+n;
		else if(n>99) return "00"+n;
		else if(n>9) return "000"+n;
		else if(n>-1) return "0000"+n;
		else return "系统异常";
	}

	/**
	 *  看一下文件是不是不在
	 * @param file 给我地址啊,要不然怎么约会?
	 * @return 如果不在,返回true;如果在,返回false
	 */
	private static boolean noExists(File file){
		if(file.exists()){
			System.out.println("该文件已存在,跳过...");
			return false;
		}else{
			return true;
		}
	}
    /**
     * 隔壁
     * @param folder  要我接生也行啊,给我地址啊
     * @throws IOException
     */
    private static boolean createFolder(String pan,String folder) throws IOException{
        File file = new File(pan+":\\"+folder);
        System.out.println(pan+":\\"+folder);
        if(!file.exists()){
            //file.mkdir();
            file.mkdirs();
            System.out.println("文件夹"+folder+"创建成功");
            return true;
        }else{
            System.out.println("文件夹"+folder+"已经存在");
            return false;
        }
    }

    /**
	 * 自家
     * 男孩纸生个宝宝不过分吧?
     * @param folder
     * @throws IOException
     */
    private static boolean createFolder(String folder) throws IOException{
        File file = new File("H:\\"+folder);
        System.out.println("H:\\"+folder);
        if(!file.exists()){
            file.mkdir();
            System.out.println("文件夹"+folder+"创建成功");
            return true;
        }else{
            System.out.println("文件夹"+folder+"已经存在");
            return false;
        }
    }
    /**
     * 不检查DNA
     * @param command
     * @return 返回字符串
     */
	private static String execCMD(String command) {
        StringBuilder sb =new StringBuilder();
        try {
            Process process=Runtime.getRuntime().exec(command);
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while((line=bufferedReader.readLine())!=null)
            {
                sb.append(line+"\n");
            }
        } catch (Exception e) {
            return e.toString();
        }
        return sb.toString();
    }

	/**
	 * 检查DNA
	 * @param command
	 * @param encode
	 * @return
	 */
	private static String execCMD(String command,String encode) {

		StringBuilder sb =new StringBuilder();
		try {
			// 执行ping命令
			Process process = Runtime.getRuntime().exec(command);
			BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName(encode)));
			String line = null;
			while ((line = br.readLine()) != null) {
				//System.out.println(line);
				sb.append(line+"\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐