初始化
This commit is contained in:
commit
670f5baf03
33
.gitignore
vendored
Normal file
33
.gitignore
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
HELP.md
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### STS ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
81
pom.xml
Normal file
81
pom.xml
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>cn.jecyp</groupId>
|
||||||
|
<artifactId>baidu-pan-openapi</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>baidu-pan-openapi</name>
|
||||||
|
<description>baidu-pan-openapi</description>
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-jdbc</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-j</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
|
<version>3.5.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
<version>5.8.16</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,13 @@
|
|||||||
|
package cn.jecyp.baidupanopenapi;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class BaiduPanOpenapiApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(BaiduPanOpenapiApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,115 @@
|
|||||||
|
package cn.jecyp.baidupanopenapi.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import cn.hutool.json.JSON;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.jecyp.baidupanopenapi.pojo.dto.BaiduPanAccessTokenDTO;
|
||||||
|
import cn.jecyp.baidupanopenapi.pojo.dto.BaiduPanImageListDTO;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author cyp
|
||||||
|
* @date 2023-07-31
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/baidu/pan")
|
||||||
|
public class BaiduPanController {
|
||||||
|
|
||||||
|
private String callback = "http://jecyp.nat300.top/openapi/baidu/pan/callback";
|
||||||
|
|
||||||
|
private BaiduPanAccessTokenDTO accessToken = new BaiduPanAccessTokenDTO();
|
||||||
|
{
|
||||||
|
accessToken.setAccess_token("121.62804fe376fc92c5ac1ddd017c056edc.YmfpvVDzVgESpQp2wgw1yVfUd23vHbAIzhONRXp.795eYw");
|
||||||
|
accessToken.setExpires_in("2592000");
|
||||||
|
accessToken.setRefresh_token("122.ef800517f78d73f18acf5126b5659631.YaxBybnvqW6pUiTafTJCN5atxmnTaOu8U8QV6e-.f6WXCw");
|
||||||
|
accessToken.setScope("basic netdisk");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping("/callback")
|
||||||
|
public String callback(@RequestParam(name = "code", required = false, defaultValue = "code") String code,
|
||||||
|
@RequestParam(name = "state", required = false, defaultValue = "state") String state,
|
||||||
|
HttpServletRequest request){
|
||||||
|
String contextPath = request.getContextPath();
|
||||||
|
System.out.println("contextPath:"+contextPath);
|
||||||
|
System.out.println("code="+code+",state="+state);
|
||||||
|
String accessTokenBaseUrl = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code={3}&client_id={0}&client_secret={1}&redirect_uri={2}";
|
||||||
|
String accessTokenUrl = MessageFormat.format(accessTokenBaseUrl, "4DyoVFaBH2zoSAnpAowWS5w3P6FsgGM1", "ePuUZ64mq5qhNcRL7UpcRUhUoZVeHUZl",callback,code);
|
||||||
|
String accessTokenRes = HttpUtil.get(accessTokenUrl);
|
||||||
|
|
||||||
|
System.out.println("refreshTokenRes="+accessTokenRes);
|
||||||
|
BaiduPanAccessTokenDTO baiduPanAccessTokenDTO = JSONUtil.toBean(accessTokenRes, BaiduPanAccessTokenDTO.class);
|
||||||
|
System.out.println("refreshTokenRes bean="+baiduPanAccessTokenDTO);
|
||||||
|
|
||||||
|
// String refreshTokenBaseUrl = "https://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token={2}&client_id={0}&client_secret={1}";
|
||||||
|
// String refreshTokenUrl = MessageFormat.format(refreshTokenBaseUrl, "4DyoVFaBH2zoSAnpAowWS5w3P6FsgGM1", "ePuUZ64mq5qhNcRL7UpcRUhUoZVeHUZl",baiduPanAccessTokenDTO.getRefresh_token());
|
||||||
|
// String refreshTokenRes = HttpUtil.get(refreshTokenUrl);
|
||||||
|
// System.out.println("refreshTokenRes="+refreshTokenRes);
|
||||||
|
// baiduPanAccessTokenDTO = JSONUtil.toBean(refreshTokenRes, BaiduPanAccessTokenDTO.class);
|
||||||
|
// System.out.println("refreshTokenRes bean="+baiduPanAccessTokenDTO);
|
||||||
|
|
||||||
|
return "index";
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/login")
|
||||||
|
@ResponseBody
|
||||||
|
public void login(HttpServletResponse response) throws IOException {
|
||||||
|
String baseUrl = "http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id={0}&redirect_uri={1}&scope=basic,netdisk&qrcode=1";
|
||||||
|
String url = MessageFormat.format(baseUrl, "4DyoVFaBH2zoSAnpAowWS5w3P6FsgGM1", callback);
|
||||||
|
System.out.println("url="+url);
|
||||||
|
response.sendRedirect(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/imagesList")
|
||||||
|
@ResponseBody
|
||||||
|
public String imagesList(HttpServletResponse response) throws IOException, InterruptedException {
|
||||||
|
|
||||||
|
String url = "http://pan.baidu.com/rest/2.0/xpan/file";
|
||||||
|
BaiduPanImageListDTO baiduPanImageListDTO = new BaiduPanImageListDTO();
|
||||||
|
baiduPanImageListDTO.setAccess_token(accessToken.getAccess_token());
|
||||||
|
baiduPanImageListDTO.setParent_path(URLEncoder.encode("/电脑文件/手机图片/照片-杂", StandardCharsets.UTF_8));
|
||||||
|
baiduPanImageListDTO.setPage(1);
|
||||||
|
baiduPanImageListDTO.setNum(1);
|
||||||
|
baiduPanImageListDTO.setWeb(1);
|
||||||
|
Map<String, Object> stringObjectMap = BeanUtil.beanToMap(baiduPanImageListDTO);
|
||||||
|
String res = HttpUtil.get(url, stringObjectMap);
|
||||||
|
JSONObject json = JSONUtil.parseObj(res);
|
||||||
|
JSONArray info = json.getJSONArray("info");
|
||||||
|
JSONObject entries = info.get(0, JSONObject.class);
|
||||||
|
JSONObject thumbs = entries.get("thumbs", JSONObject.class);
|
||||||
|
String url3 = thumbs.getStr("url3");
|
||||||
|
|
||||||
|
Thread.sleep(1000 * 10);
|
||||||
|
res = HttpUtil.get(url, stringObjectMap);
|
||||||
|
json = JSONUtil.parseObj(res);
|
||||||
|
info = json.getJSONArray("info");
|
||||||
|
entries = info.get(0, JSONObject.class);
|
||||||
|
thumbs = entries.get("thumbs", JSONObject.class);
|
||||||
|
String url32 = thumbs.getStr("url3");
|
||||||
|
System.out.println(Objects.equals(url32, url3));
|
||||||
|
System.out.println("imagesList="+res);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/index")
|
||||||
|
public String index(HttpServletResponse response) throws IOException {
|
||||||
|
return "index";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package cn.jecyp.baidupanopenapi.pojo.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 百度判断返回的accessToken对象
|
||||||
|
* @author cyp
|
||||||
|
* @date 2023-07-31
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class BaiduPanAccessTokenDTO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取到的Access Token是调用网盘开放API访问用户授权资源的凭证。
|
||||||
|
*/
|
||||||
|
private String access_token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token的有效期,单位为秒。
|
||||||
|
*/
|
||||||
|
private String expires_in;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于刷新 Access Token, 有效期为10年。
|
||||||
|
*/
|
||||||
|
private String refresh_token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access Token 最终的访问权限,即用户的实际授权列表。
|
||||||
|
*/
|
||||||
|
private String scope;
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package cn.jecyp.baidupanopenapi.pojo.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author cyp
|
||||||
|
* @date 2023-07-31
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class BaiduPanImageListDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是 URL参数 本接口固定为imagelist
|
||||||
|
*/
|
||||||
|
private String method = "imagelist";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是 URL参数 接口鉴权参数
|
||||||
|
*/
|
||||||
|
private String access_token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 目录名称,以/开头的绝对路径, 默认为/ 路径包含中文时需要UrlEncode编码
|
||||||
|
*/
|
||||||
|
private String parent_path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 页码,从1开始, 如果不指定页码,则为不分页模式,返回所有的结果 如果指定page参数,则按修改时间倒序排列
|
||||||
|
*/
|
||||||
|
private Integer page;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 一页返回的图片数,默认值为1000,建议最大值不超过1000
|
||||||
|
*/
|
||||||
|
private Integer num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 排序字段:time按修改时间排序,name按文件名称排序(注意,此处排序是按字符串排序的,如果用户有剧集排序需求,需要自行开发),size按文件大小排序,默认为time
|
||||||
|
*/
|
||||||
|
private String order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 0为升序,1为降序,默认为1
|
||||||
|
*/
|
||||||
|
private Integer desc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 是否需要递归,0为不需要,1为需要,默认为0.递归是指:当目录下有文件夹,使用此参数,可以获取到文件夹下面的图片
|
||||||
|
*/
|
||||||
|
private Integer recursion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 否 URL参数 为1时返回图片缩略图
|
||||||
|
*/
|
||||||
|
private Integer web;
|
||||||
|
}
|
18
src/main/resources/application.yaml
Normal file
18
src/main/resources/application.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
url: jdbc:mysql://rm-bp1r0y7o8554i172duo.mysql.rds.aliyuncs.com:3306/baidu_openapi?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||||
|
username: aliyun_mysql
|
||||||
|
password: peng0012
|
||||||
|
|
||||||
|
server:
|
||||||
|
tomcat:
|
||||||
|
uri-encoding: UTF-8
|
||||||
|
port: 9000
|
||||||
|
servlet:
|
||||||
|
context-path: /openapi
|
||||||
|
session:
|
||||||
|
cookie:
|
||||||
|
http-only: true
|
||||||
|
|
13
src/main/resources/templates/index.html
Normal file
13
src/main/resources/templates/index.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
hello
|
||||||
|
<a href="#" th:href="@{/baidu/pan/login}" class="ui mini teal basic button">登录</a>
|
||||||
|
<a href="#" th:href="@{/baidu/pan/imagesList}" class="ui mini teal basic button">获取图片</a>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,13 @@
|
|||||||
|
package cn.jecyp.baidupanopenapi;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
class BaiduPanOpenapiApplicationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void contextLoads() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user