一个基于Java实现的Github issue图片自动下载工具

简介: 一个基于Java实现的Github issue图片自动下载工具
package youdao;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class Github {
  private static String mTitle = null;
  private static final String PREFIX = "C:\\Users\\i042416\\Pictures\\";
  private static void createFolder(String title){
    DownloadTask.FOLDER = PREFIX + title;
    File file = new File( DownloadTask.FOLDER);
    file.mkdir();
  }
  private static List<DownloadTask> getGithubPicUrlList(String formattedUrl){
    HttpClient client = HttpClients.createDefault();
    List<DownloadTask> resultPic = new ArrayList<DownloadTask>();
    int index = 0;
      HttpGet get = new HttpGet(formattedUrl);
          try {
              HttpResponse response = client.execute(get);
              HttpEntity entity = response.getEntity();
              String result = EntityUtils.toString(entity, "UTF-8");
              JSONObject obj = new JSONObject(result);
              mTitle = obj.get("tl").toString();
              createFolder(mTitle);
              String content = obj.get("content").toString();
              // System.out.println("content: " + content);
              Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(content);
              while (m.find()) {
                      // System.out.println(m.group(1));
                      DownloadTask task = new DownloadTask(m.group(1), index++);
                      resultPic.add(task);
              }
          } catch (Exception e){
            e.printStackTrace();
          }
          return resultPic;
  }
  private static List<DownloadTask> getGithubIssuePicUrlList(String githubIssueUrl){
    HttpClient client = HttpClients.createDefault();
    List<DownloadTask> resultPic = new ArrayList<DownloadTask>();
    int index = 0;
      HttpGet get = new HttpGet(githubIssueUrl);
          try {
              HttpResponse response = client.execute(get);
              HttpEntity entity = response.getEntity();
              String result = EntityUtils.toString(entity, "UTF-8");
              JSONObject obj = new JSONObject(result);
              mTitle = obj.get("title").toString();
              createFolder(mTitle);
              String content = obj.get("body").toString();
              System.out.println("content: " + content);
              // ![clipboard2](https://user-int.com/5669954/32708736946.png)
              // Matcher m = Pattern.compile("^\\d{n,}$").matcher(content);
              Matcher m = Pattern.compile(".*!\\[.*?\\]\\(.*?\\).*").matcher(content);
              while (m.find()) {
                      // System.out.println(m.group(1));
                      DownloadTask task = new DownloadTask(m.group(1), index++);
                      resultPic.add(task);
              }
          } catch (Exception e){
            e.printStackTrace();
          }
          return resultPic;
  }
  private static void start(List<DownloadTask> task){
    if( task.isEmpty()){
      System.out.println("No picture to download!");
      return;
    }
    System.out.println("Total pic to be downloaded: " + task.size());
    ExecutorService executor = Executors.newFixedThreadPool(10);
    for( int i = 0; i < task.size(); i++){
      PictureDownloader cc = new PictureDownloader(task.get(i));
      executor.execute(cc);     
    }
    executor.shutdown();
    while (!executor.isTerminated()) {
        }
    System.out.println("download finished");
  }
  public static void main(String[] args) {
    /*String urlStr = "https://api.github.com/repos/i042416/KnowlegeRepository/issues/955";
    System.out.println(urlStr);
    List<DownloadTask> task = getGithubIssuePicUrlList(urlStr);
    start(task);*/
    String a = "![clipboard1](https://user-images.githubusercontent.com/5669954/32708735-bc205af6-c866-11e7-8314-cdcd2b33f050.png) fuck";
    a = a + "\n" + "![clipboard2](https://user-images.githubusercontent.com/5669954/32708736-bc54ae78-c866-11e7-9ab8-40b2fde6c946.png)";
    Matcher m = Pattern.compile(".*\\!\\[.*\\]\\((.*)\\).*").matcher(a);
        while (m.find()) {
            int group_code = m.groupCount();
            System.out.println("group count: " + group_code);
                System.out.println("image: " + m.group(1));
        }
  }
}


相关文章
|
17天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
13天前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
1月前
|
Java
Java系列之 重命名文件/图片,renameTo() 方法的使用
这篇文章介绍了Java中File类的renameTo()方法,包括其使用方式、参数、返回值以及一些使用时的注意事项,并通过示例代码演示了如何使用该方法来重命名文件。
Java系列之 重命名文件/图片,renameTo() 方法的使用
|
13天前
|
Java 数据处理
技术分享:高效与灵活并存——Java版通用树形结构转换工具的实现与应用
在软件开发中,树形结构的数据表现形式无处不在,从文件系统的目录树到组织架构的部门树,再到各类产品的分类结构。处理这些具有层级关系的数据时,将其转换为树形结构以便展示和操作显得尤为重要。Java作为一门成熟的编程语言,虽然提供了强大的集合框架,但并未直接提供树形结构转换的内置工具。因此,开发一个高效且灵活的通用树形结构转换工具成为许多项目中的必备需求。
23 2
|
13天前
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
33 1
|
20天前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
1月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
1月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
38 1
|
1月前
|
Java
在Java编程的广阔天地中,条件语句是控制程序流程、实现逻辑判断的重要工具。
在Java编程中,if-else与switch作为核心条件语句,各具特色。if-else以其高度灵活性,适用于复杂逻辑判断,支持多种条件组合;而switch在多分支选择上表现优异,尤其适合处理枚举类型或固定选项集,通过内部跳转表提高执行效率。两者各有千秋:if-else擅长复杂逻辑,switch则在多分支选择中更胜一筹。理解它们的特点并在合适场景下使用,能够编写出更高效、易读的Java代码。
29 1
|
21天前
|
开发者 存储 API
Xamarin 开发者的社区资源概览:从官方文档到GitHub示例,全面探索提升开发技能与解决问题的多元化渠道与实用工具
【8月更文挑战第31天】Xamarin 开发者社区资源概览旨在提升开发效率与解决问题,涵盖官方文档、社区论坛、GitHub 项目等。官方文档详尽,涵盖 Xamarin.Forms 使用、性能优化等;社区论坛供交流心得;GitHub 提供示例代码。此外,第三方博客、视频教程及 Xamarin University 等资源也丰富多样,适合各阶段开发者学习与提升。通过综合利用这些资源,开发者可不断进步,应对技术挑战。
33 0