从 API 获取图片并下载 - Bash 和 Java 实现

本示例展示了使用 Bash 和 Java 脚本从 API 获取图片 URL 并下载图片的步骤,涵盖了 API 请求、JSON 解析、正则表达式匹配和图片下载等操作。

Bash 脚本

response=$(curl -s 'https://app.huashijie.art/api/work/detailV2?visitorId=-1&workId=180830738&cur_user_id=-1&platform=android&os_version=28&version_code=217&device_brand=vivo&device_model=vivo%20X21&token=&channel=vivo')
json=$(echo $response | jq)
b=$(echo $json | jq '.data.multiImages[0].imgPath')
echo $b
if [[ $b =~ (http://bsyimg.pandapaint.net/v2/work_cover/user/[0-9]+/[0-9]+.jpg) ]]; then
    image_url=${BASH_REMATCH[1]}
    echo '下载图片:$image_url'
    # 使用wget下载图片
    wget $image_url
else
    echo '未能提取到图片地址'
fi

Java 代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        try {
            String apiUrl = 'https://app.huashijie.art/api/work/detailV2?visitorId=-1&workId=180830738&cur_user_id=-1&platform=android&os_version=28&version_code=217&device_brand=vivo&device_model=vivo%20X21&token=&channel=vivo';
            String response = sendGetRequest(apiUrl);
            String json = response.trim();
            String b = getJsonValue(json, 'data.multiImages[0].imgPath');
            System.out.println(b);
            Pattern pattern = Pattern.compile('http://bsyimg.pandapaint.net/v2/work_cover/user/[0-9]+/[0-9]+.jpg');
            Matcher matcher = pattern.matcher(b);
            if (matcher.find()) {
                String imageUrl = matcher.group();
                System.out.println('下载图片:' + imageUrl);
                // 使用Java下载图片
                downloadImage(imageUrl);
            } else {
                System.out.println('未能提取到图片地址');
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String sendGetRequest(String apiUrl) throws IOException {
        URL url = new URL(apiUrl);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuilder response = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
        reader.close();
        return response.toString();
    }

    private static String getJsonValue(String json, String key) {
        String[] keys = key.split('\\.');
        for (String k : keys) {
            if (json.startsWith('{'') && json.endsWith('}')) {
                json = json.substring(1, json.length() - 1);
            } else {
                return '';
            }
            String regex = '\'' + k + '\':\s*'(.*?)'';
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(json);
            if (matcher.find()) {
                json = matcher.group(1);
            } else {
                return '';
            }
        }
        return json;
    }

    private static void downloadImage(String imageUrl) throws IOException {
        URL url = new URL(imageUrl);
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) {
            String fileName = imageUrl.substring(imageUrl.lastIndexOf('/') + 1);
            String savePath = './' + fileName;
            // 创建输出流,将图片保存到本地
            Files.copy(reader, Paths.get(savePath));
            System.out.println('图片已保存:' + savePath);
        }
    }
}

代码解释

  • API 请求: 脚本首先使用 curlURL 类发送 GET 请求到 API 获取数据。
  • JSON 解析: 使用 jq 或 Java 中的 JSON 解析库解析返回的 JSON 数据。
  • 正则表达式匹配: 使用正则表达式匹配提取图片 URL。
  • 图片下载: 使用 wget 或 Java 中的 Files 类下载图片到本地。

总结

这段代码演示了如何从 API 获取图片并下载到本地。它展示了 Bash 和 Java 两种语言的实现方法,并解释了每个步骤的代码逻辑。你可以根据自己的需求修改代码,例如修改 API 地址、JSON 路径、正则表达式等。

从 API 获取图片并下载 - Bash 和 Java 实现

原文地址: https://www.cveoy.top/t/topic/iI4O 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录