baiduyun_api/lib.rs
1//! 这是一个rust写成的百度云api库, **不提供**作弊功能!
2//!
3//!
4//!# 一,简介
5//!这个库提供方便地使用百度云官方api的方法 最新的版本请看crates.io的版本号
6//!
7//! 对用户的云盘进行访问前首先要获取access_token,具体请看官网的[这里](https://pan.baidu.com/union/document/entrance#%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B)
8//!
9//! ⚠️access_token获取的方法的简要描述:
10//!
11//! 最开始你登录百度账号并且创建一个云盘app,获取它的APP_key
12//!
13//! 在浏览器地址栏输入如下内容 其中"你的APP KEY"替换成你的APP Key
14//!
15//! ``` https://openapi.baidu.com/oauth/2.0/authorize?response_type=token&client_id=你的APP KEY&redirect_uri=oob&scope=netdisk```
16//!
17//! 然后点击授权后,会跳转到另外的一个空白网页上,此时查看地址栏上的地址大概是这样的样子:
18//!
19//! ```http://openapi.baidu.com/oauth/2.0/login_success#expires_in=2592000&access_token={access_token}&session_secret={session_secret}&session_key={session_key}&scope=basic+netdisk```
20//!
21//! 其中access_token后面一段是我们需要的,保存下来即可
22//!
23//! 使用期限是30天,但如果这个access_token一直在使用的话 是不会过期的,过期需要重新查询.
24//!
25//!**注意:本库不提供作弊功能!!!**
26//!# 二,功能演示
27//!## 1.列出用户信息
28//!下面是示例如何列出用户信息:
29//!```
30//!use baiduyun_api::YunApi;
31//!//...
32//!//--snip--
33//!//...
34//!let api = YunApi::new();
35//!let access_token ="User's access_token";
36//!let user_info = api.get_user_info().unwrap();
37//! println!("baidu_name :{}", user_info.baidu_name);
38//! println!("vip :{}", user_info.vip_type);
39//!```
40//!
41//!## 2.列出云盘信息
42//!列出云盘的存储空间信息的实例如下:
43//!```
44//!use baiduyun_api::YunApi;
45//!//...
46//!//--snip--
47//!//...
48//!let api = YunApi::new();
49//!let access_token ="User's access_token";
50//!let quota_info = api.get_quota_info().unwrap();
51//!println!("总空间 :{}", quota_info.total);
52//!println!("剩余空间 :{}", quota_info.free);
53//!```
54//!
55//!
56//!
57//!
58//!## 3.使用util设施
59//!我编写了一些基础设施帮助你开发自己的程序,先看看[YunFs](util::YunFs)如何使用:
60//!```
61//!use baiduyun_api::YunApi;
62//!use baiduyun_api::util
63//!
64//!//...
65//!//--snip--
66//!//...
67//!let access_token ="User's access_token.";
68//!let api = YunApi::new(access_token);
69//!let mut my_fs = util::YunFs::new(&api);
70//!println!("current dir:====>{}",my_fs.pwd().unwrap());
71//!my_fs.chdir("../").unwrap();
72//!my_fs.chdir("/apps").unwrap();
73//!my_fs.chdir("../").unwrap();
74//!my_fs.chdir("/apps/").unwrap();
75//!my_fs.chdir("../").unwrap();
76//!my_fs.chdir("./apps/bypy/唱戏机").unwrap();
77//!let tmp_list = my_fs.ls().unwrap();
78//!for item in tmp_list{
79//! println!("filename:{};filesize={}KB",item.server_filename,util::human_quota(item.size).0)
80//!}
81//!```
82//!结果为:
83//!```
84//! current dir:====>/
85//! filename:45部高清黄梅戏mp4;filesize=0KB
86//! filename:黄梅戏视频;filesize=0KB
87//! filename:庐剧视频标清3;filesize=0KB
88//! filename:庐剧视频高清1;filesize=0KB
89//! filename:庐剧视频高清2;filesize=0KB
90//! filename:庐剧视频合集;filesize=0KB
91//! filename:相声小品大杂烩290部视频;filesize=0KB
92//!```
93//!再看看一个简陋的单线程下载设施[download](util::download):
94//!```
95//!fn download_test() {
96//! let key =
97//! "your_access_key_to_user.";
98//! let api = YunApi::new(key);
99//! let mut myfs = util::YunFs::new(&api);
100//! println!("current dir ===> {}", myfs.pwd().unwrap());
101//! myfs.chdir("学习资料/").unwrap();
102//! println!("current dir ===> {}", myfs.pwd().unwrap());
103//! let files = myfs.ls().unwrap();
104//! let mut file_to_download: FileInfo = FileInfo::default();
105//! for item in files {
106//! if item.server_filename.contains("中文第六版@www.java1234.com.pdf") {
107//! println!("pdf: -> {}; id ={} ", item.server_filename, item.fs_id);
108//! file_to_download = item;
109//! }
110//! }
111//! let link = api.get_file_dlink(file_to_download).unwrap();
112//! util::download(&link, "D:/test.pdf", 100, &key, true);//这里打开了debug输出
113//! }
114//!
115//!```
116//!结果如下:
117//!```
118//!current dir ===> /
119//!current dir ===> /学习资料
120//!pdf: -> 数据库系统概念_中文第六版@www.java1234.com.pdf; id =816997609436448
121//!recieve data total 20 MB
122//!recieve data total 40 MB
123//!recieve data total 60 MB
124//!recieve data total 80 MB
125//!recieve data total 100 MB
126//!recieve data total 120 MB
127//!recieve data total 140 MB
128//!recieve data total 160 MB
129//!recieve data total 161 MB
130//!finish download.
131//!```
132
133pub use error::ApiError;
134pub use util::YunFs;
135pub use yunapi::YunApi;
136
137mod error;
138mod models;
139pub mod util;
140mod yunapi;
141
142pub use models::{UserInfo, QuotaInfo, FileInfo, FileInfoEx, SearchResult, FileInfoIter, FileId};
143
144#[cfg(test)]
145mod tests;