百度网盘开放接口

文章介绍了如何实现对百度网盘的文件查询和创建分享链接,指出这些功能均通过年度收费方式提供,标准方案价格为19999元/年,包括调用分享、解析和转存接口。
摘要由CSDN通过智能技术生成

百度网盘开放接口

实现百度网盘的文件查询,创建分享链接(要钱,贵的雅痞,个人价格劝退)
(分享能力均为年度收费:标准方案:19999元/年(包含:调用分享所有接口(分享、解析、转存)))
**
 * 百度网盘对接
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class BaiduNetDiskService {

    private final JedisClusterBSJ jedisCluster;
    private final RestTemplate restTemplate;
	private final static String AppID = "43371";
    private final static String AppKey = "alu2uAjyQCnyXBSkWqGcZGynZW";
    private final static String Secretkey = "Fv3NqNMO1FepwW5bBa6p07N3r";
    private final static String Signkey = "VTgK@sUiYmEXiiHHOuezl%*LG@c";
    private final static String AccessToken = "BaiduNetDisk:43371:AccessToken";
    private final static String RefreshToken = "BaiduNetDisk:43361:RefreshToken";
	private final static String codeUrl = "http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=alu2uAn7hAwynZW&redirect_uri=oob&scope=basic,netdisk";
    private final static String accessTokenUrl = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&client_id=alu2uQcZGso7hAwynZW&client_secret=Fv3NqNMOCpgHvBa6p07N3r&redirect_uri=oob&code=";

    @PostConstruct
    public void test() {
//        getFileId(null);
        createShareFile();
    }
    
    public void createShareFile() {
        String url = "https://pan.baidu.com/apaas/1.0/share/set?product=netdisk&appid=43370961&access_token=";
        url = url + getAccessToken();
        List<String> list = new ArrayList<>();
        list.add("426852352184438");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("fsid_list", JSONObject.toJSONString(list));
        jsonObject.put("period", 3);
        jsonObject.put("pwd", "12sf");
        String rsp = restTemplate.postForObject(url, jsonObject, String.class);
        log.info("获取到当前的创建文件信息:{}", rsp);
    }

	/**
     * 根据文件名获取文件ID列表
     *
     * @param fileName
     */
    public void getFileId(String fileName) {
        String url = "https://pan.baidu.com/rest/2.0/xpan/file?method=list&access_token=" + getAccessToken();
        if (StringUtil.isNotBlank(fileName)) {
            url = url + "&dir=/暮看云/" + fileName;
        }
        String rsp = restTemplate.getForObject(urlEncodeChinese(url), String.class);
        log.info("获取到当前的refresh_token:{}", rsp);
        JSONObject json = JSONObject.parseObject(rsp);
        JSONArray list = json.getJSONArray("list");
        log.info("获取到当前的list:{}", JSONObject.toJSONString(list));
    }
    
   /**
     * 获取AccessToken
     *
     * @return AccessToken
     */
    private String getAccessToken() {
        //缓存有取缓存
        String data = jedisCluster.get(AccessToken);
        if (data != null) {
            return data;
        }
        String accessToken = null;
        //缓存没有取刷新token取
        String refreshToken = jedisCluster.get(RefreshToken);
               if (refreshToken != null) {
            String refreshUrl = "https://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&client_id=alu2uAjyQkWqGcZGso7hAwynZW&client_secret=Fv3NqNMO1FepwWBa6p07N3r&refresh_token=";
            refreshUrl = refreshUrl + refreshToken;
            String rsp = restTemplate.getForObject(refreshUrl, String.class);
            log.info("获取到当前的refresh_token:{}", rsp);
            JSONObject json = JSONObject.parseObject(rsp);
            Integer expiresIn = json.getInteger("expires_in");
            String access_token = json.getString("access_token");
            //设置AccessToken的过期时间,提前5秒过期,有效期为 30 天
            jedisCluster.setex(AccessToken, (expiresIn - 5), access_token);
            //用于刷新 Access Token, 有效期为10年。
                        String refresh_token = json.getString("refresh_token");
            jedisCluster.setex(RefreshToken, expiresIn * 12 * 10, refresh_token);
            return access_token;
        } else {
            //从一次性那个获取到的,反正是10年的,先这么整先,直接塞进去,再次拿一遍
            jedisCluster.setex(RefreshToken, 2592000 * 12 * 10, "122.24ffe5250c66b3a5c496a3c40.YDyYOunB6Yw5O9Z5cMRqmJGLnbg0-.MMU-Og");
            accessToken = getAccessToken();
        }
        if (accessToken != null) {
            return accessToken;
        }
		//都没有那就是第一次,调接口取在存起来
        String sendUrl = accessTokenUrl + getCode();
        String rsp = restTemplate.getForObject(sendUrl, String.class);
        log.info("获取到当前的getAccessToken:{}", rsp);
        JSONObject json = JSONObject.parseObject(rsp);
        Integer expiresIn = json.getInteger("expires_in");
        String access_token = json.getString("access_token");
        //设置AccessToken的过期时间,提前5秒过期,有效期为 30 天
        jedisCluster.setex(AccessToken, (expiresIn - 5), access_token);
        //用于刷新 Access Token, 有效期为10年。
        String refresh_token = json.getString("refresh_token");
        jedisCluster.setex(RefreshToken, expiresIn * 12, refresh_token);
        return access_token;
    }
	/**
     * 获取AccessToken需要的code
     * 这个要填回调地址,先用一次性的code
     */
    private String getCode() {
//        String code = restTemplate.getForObject(codeUrl, String.class);
//        log.info("获取到当前的code:{}", code);
//        return code;
        return "084580d3509537d18abc0f29daac4f74";
    }
    /**
     * 使用正则表达式通过对url中存在的中文字符以及空格进行编码
     *
     * @param url
     * @return
     */
    private static String urlEncodeChinese(String url) {
        try {
            Matcher matcher = Pattern.compile("[\\u4e00-\\u9fa5]").matcher(url);
            String tmp = "";
            while (matcher.find()) {
                tmp = matcher.group();
                url = url.replaceAll(tmp, URLEncoder.encode(tmp, "UTF-8"));
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return url.replace(" ", "%20");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值