From 3c1940f11a81e98c99b9e83213e22fae11d5003e Mon Sep 17 00:00:00 2001 From: hzhilong <1107495265@qq.com> Date: Mon, 11 Nov 2024 12:22:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=83=E7=94=A8=E6=8E=A7=E5=88=B6=E5=8F=B0?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E4=BA=8C=E7=BB=B4=E7=A0=81=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E6=94=B9=E7=94=A8=E5=9B=BE=E7=89=87=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../top/ybgnb/bilibili/backup/CLIApp.java | 26 +++++++++++++---- .../ybgnb/bilibili/backup/utils/QRUtil.java | 29 +++++++++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 6d89c14..27e0dee 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ top.ybgnb bilibili-backup 哔哩哔哩账号备份 - 1.0.1 + 1.0.2 8 diff --git a/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java b/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java index 5e49f28..4c18b22 100644 --- a/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java +++ b/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java @@ -27,6 +27,7 @@ import top.ybgnb.bilibili.backup.utils.StringUtils; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -143,12 +144,25 @@ private static String loginNewUser() throws BusinessException { OkHttpClient client = new OkHttpClient.Builder().addInterceptor( new ThrottlingInterceptor(1000)).build(); LoginService loginService = new LoginService(client); - log.info("正在获取登录二维码(长时间不显示的话,可按一下方向键下刷新屏幕)..."); - log.info("可尝试按住【Ctrl+鼠标滚轮键】调整字体为较小状态(方便展示二维码)"); + log.info("正在获取登录二维码..."); +// log.info("正在获取登录二维码(长时间不显示的话,可按一下方向键下刷新屏幕)..."); +// log.info("可尝试按住【Ctrl+鼠标滚轮键】调整字体为较小状态(方便展示二维码)"); QRCode qrCode = loginService.generateQRCode(); log.info("请使用手机哔哩哔哩扫码登录:"); - QRUtil.printQR(qrCode.getUrl()); - log.info("请使用手机哔哩哔哩扫码登录:"); +// QRUtil.printQR(qrCode.getUrl()); +// log.info("请使用手机哔哩哔哩扫码登录:"); + File dir = new File("qr"); + if(!dir.exists()){ + dir.mkdir(); + } + String filePath = "qr/" + System.currentTimeMillis() + ".png"; + File file = QRUtil.writeQRFile(qrCode.getUrl(), filePath); + Runtime runtime = Runtime.getRuntime(); + try { + runtime.exec("cmd /c \"" + file.getAbsolutePath()+"\""); + } catch (IOException e) { + throw new BusinessException("打开二维码失败"); + } long startTime = System.currentTimeMillis(); String cookie = null; while (System.currentTimeMillis() - startTime < 180000 && StringUtils.isEmpty(cookie)) { @@ -183,12 +197,12 @@ public void fail(User user) { } }; if (BuType.BACKUP.equals(buType)) { - upper = new BilibiliBackup(builders,new User(cookie), userInfoCallback).start(); + upper = new BilibiliBackup(builders, new User(cookie), userInfoCallback).start(); } else if (BuType.RESTORE.equals(buType)) { if (StringUtils.isEmpty(readJsonDir)) { throw new BusinessException("备份文件为空"); } - upper = new BilibiliRestore(builders,readJsonDir, new User(cookie), userInfoCallback).start(); + upper = new BilibiliRestore(builders, readJsonDir, new User(cookie), userInfoCallback).start(); } else if (BuType.READ_ALL_MSG.equals(buType)) { upper = new BilibiliReadAllMsg(new User(cookie), userInfoCallback).start(); } diff --git a/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java b/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java index 81b2b81..701f2c0 100644 --- a/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java +++ b/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java @@ -7,6 +7,10 @@ import com.google.zxing.common.BitMatrix; import top.ybgnb.bilibili.backup.error.BusinessException; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -42,4 +46,29 @@ public static void printQR(String content) throws BusinessException { throw new BusinessException("生成二维码失败"); } } + + public static File writeQRFile(String content, String filePath) throws BusinessException { + // 设置字符集编码 + Map hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + //设置二维码白边的范围(此值可能不生效) + hints.put(EncodeHintType.MARGIN, 1); + // 生成二维码矩阵 + try { + BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 256, 256, hints); + BufferedImage bufferedImage = new BufferedImage(256, 256, BufferedImage.TYPE_INT_BGR); + for (int j = 0; j < bitMatrix.getHeight(); j++) { + for (int i = 0; i < bitMatrix.getWidth(); i++) { + bufferedImage.setRGB(i, j, bitMatrix.get(i, j) ? 0x000000 : 0xFFFFFF); + } + } + File codeImgFile = new File(filePath); + ImageIO.write(bufferedImage, "png", codeImgFile); + return codeImgFile; + } catch (WriterException e) { + throw new BusinessException("生成二维码失败"); + } catch (IOException e) { + throw new BusinessException("保存二维码失败"); + } + } }