使用ABAP和 Java 两种编程语言批量下载有道云笔记中的图片

举报
汪子熙 发表于 2021/11/07 16:54:28 2021/11/07
【摘要】 Jerry喜欢用有道云笔记这款软件做自己的知识管理和知识体系的构建。当您看到一篇好的有道云笔记分享时,可能会想将其精美的图片下载到本地。作为程序猿,我们不会去手动一张张下载。写个程序帮我们自动下载吧。比如这个笔记:http://note.youdao.com/noteshare?id=62840e43da1f6b71cdbedb3b7723f7fa打开之后是这样的:我们需要研究如何知道一个有...

Jerry喜欢用有道云笔记这款软件做自己的知识管理和知识体系的构建。

当您看到一篇好的有道云笔记分享时,可能会想将其精美的图片下载到本地。作为程序猿,我们不会去手动一张张下载。写个程序帮我们自动下载吧。

比如这个笔记:http://note.youdao.com/noteshare?id=62840e43da1f6b71cdbedb3b7723f7fa

打开之后是这样的:

我们需要研究如何知道一个有道云分享笔记里究竟包含了哪些图片。

我们可以使用有道云笔记提供的这个Restful API:http://note.youdao.com/yws/public/note/<note_guid>?keyfrom=public

我们把一个分享笔记的guid传入上述的url,执行一个http调用看看结果。例如我文章开头的例子,那个分享笔记的guid是62840e43da1f6b71cdbedb3b7723f7fa,那么完整的Restful API链接为:http://note.youdao.com/yws/public/note/62840e43da1f6b71cdbedb3b7723f7fa?keyfrom=public

输入Chrome浏览器敲回车,看看这个Restful API返回的内容:

从上图不难发现整个笔记包含的图片文件,其地址包含在HTML源代码的src开头的img标签页的src属性里。所以只需要用一个循环,遍历这些img标签,下载src里指向的图片即可。

最后就是写代码实现上述功能了。写好的ABAP程序如下。

输入有道云分享笔记的GUID和本地存储文件夹名称,执行。

稍等片刻,所有的图片就被ABAP程序自动下载到本地指定文件夹了。节省了程序猿大量宝贵的时间。

这个SAP ABAP程序的完整代码在我的github里:

https://github.com/i042416/KnowlegeRepository/tree/master/ABAP/youdao_note_download

下面是 Java 版本的实现

有朋友问我每天哪里找时间写这么多文章。

作为一个程序员,当然要善于利用各种工具提高自己做事情的效率了。如果没有现成的工具,就得自己造。

我写文章一般是在云笔记里编辑,完成之后直接复制粘贴到自媒体平台。我有一个需求,能够把云笔记里包含的所有图片批量下载到本地某个文件夹里,这样我就可以批量上传文件到自媒体平台,省去了手工一张张上传的麻烦。

我曾经写过一篇文章:使用ABAP批量下载有道云笔记中的图片,然而ABAP在程序员中间不是很普及,于是我又写了一个Java版本的。

使用方式很简单。

我们知道每篇有道云笔记都有一个独一无二的uuid作为标识。把这个uuid复制粘贴,

把拷贝的值放到第82行main行数的guid变量里,直接执行,可以看到输出,首先我的代码会判断这个笔记包含了多少张图片,然后会以多线程的方式去并行下载图片。

最后所有下载好的图片都存储在一个和笔记同名的文件夹下面:

多线程下载的核心代码如下,我使用了JDK里提供的ExecutorService:

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");
	}

完整代码在我的github上,请随意下载使用:

https://github.com/i042416/JavaTwoPlusTwoEquals5/tree/master/src/youdao

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。