Giter Club home page Giter Club logo

go-micloud's Introduction

简介

本项目是小米云服务网盘功能的命令行客户端,主要实现了登录、列表、文件下载和上传、相册下载、创建目录、删除、分享等常用功能。项目完全采用Go语言开发,但是目前主要在Linux环境下测试使用,Windows和Mac暂未测试,理论上应该是没问题的,感兴趣的同学可以试一下,如果有问题可以提issue。

Go@MiCloud:$ h
NAME:
   micloud - MiCloud Third Party Console Client Written In Golang

USAGE:
   micloud command [command options] [arguments...]

COMMANDS:
   login          登录小米云服务账号
   ls             列表当前目录所有文件和文件夹
   download       下载文件或者文件夹
   cd             改变当前目录,例如:cd movies
   upload         上传文件或者文件夹
   share          获取一个公共分享链接
   rm             删除文件或者文件夹,即放入回收站
   mkdir          创建目录
   tree           打印树型目录结构
   jobs           展示后台当前所有下载和上传任务
   quit, exit     退出应用
   lsAlbum        列出所有相册
   downloadAlbum  下载相册照片文件
   help, h        Shows a list of commands or help for one command

OPTIONS:
   --help, -h     show help (default: false)
   --version, -v  print the version (default: false)

安装

wget -c https://github.com/wangbjun/go-micloud/releases/download/1.3/micloud_x86_linux
#国内用户镜像加速替换下面链接中的一个  
#https://github.wuyanzheshui.workers.dev/wangbjun/go-micloud/releases/download/1.3/micloud_x86_linux
#https://download.fastgit.org/wangbjun/go-micloud/releases/download/1.3/micloud_x86_linux
#https://github.91chifun.workers.dev//https://github.com/wangbjun/go-micloud/releases/download/1.3/micloud_x86_linux
# 更改一个你喜欢的名字,我用的是mi,你也可以用其他名字,比如华为之类
sudo mv micloud_x86_linux /usr/local/bin/mi
# 更改权限
sudo chmod u+x /usr/local/bin/mi
# 输入命令确认
mi
# 如果成功会提示你输入账号和密码

主要功能

  • 登录采用模拟小米云服务Web端的登录逻辑,首次登录需输入账号、密码和手机验证码,一次登录,终身有效
  • 账号密码本地会暂存,密码已加密,默认位于用户目录下 .micloud.json,长时间不登录无需再输入账号密码,如需完全退出账号,可以删除该配置文件
  • 命令支持tab自动补全
  • 独家特色分享功能,可以生成一个对外公开分享的链接,让非登录用户快速下载
  • 上传和下载采用异步方式,默认上传并发5,下载并发20

命令介绍

一、login

登录小米云服务账号

所有操作都需要登录小米云服务账号之后才可以进行,所以第一步就是登录,运行本程序需要输入账号密码,以及首次登录需要的手机验证码。

第一次登录之后,程序会保存账号和密码,所以再次运行会尝试采用已经缓存的账号密码登录,如果失败则会要求重新输入账号密码。程序会保存账号密码,不过请放心,密码是以加密的形式保存 ~/.micloud.json 配置里面,并且该工具绝对不会上传用户账号和密码,如果不放心的话可以查看源码。

如果在登录之后运行 login 命令则会重新登录账号,本程序目前暂不支持多账号切换。

二、ls

列出当前目录下的文件

ls <dir>

这个命令有点类似Linux系统下ls,只不过功能简单,没有额外参数,会显示文件类型、文件大小、创建时间、以及文件名。

total 13
d | ------ | 2018-10-26 12:51:07 | Doc
d | ------ | 2018-10-26 13:01:12 | Books
d | ------ | 2018-10-26 13:03:04 | Picture
d | ------ | 2018-10-26 13:03:10 | Package
- | 71 MB  | 2019-12-23 17:20:11 | Geekbench-4.2.3-Linux.tar.gz
- | 69 MB  | 2019-12-23 17:20:56 | Postman-linux-x64-7.1.1.tar.gz
- | 259 MB | 2019-12-23 17:28:36 | wps-office_11.1.0.8722_amd64.deb
- | 492 kB | 2019-12-24 13:49:09 | Baidu_Voice_RestApi_SampleCode.zip
- | 1.0 GB | 2019-12-24 13:53:30 | Deepin-Apps-Installation.zip

三、cd

切换到目录

cd <dir>

这个命令类似Linux下的cd,但是功能有限,只支持进入目录和退出目录。

四、download

下载当前目录下的一个文件或者文件夹,如果是文件夹则会递归下载文件夹里面的所有文件

download <file> [-d dir]

下载文件存在位置默认是当前工具的运行目录,支持指定下载位置,通过 -d 参数可以传递一个目录

Go@MiCloud:/Books$ download Go高级编程.pdf
2020-09-26 23:28:50 #添加下载任务: /Go高级编程.pdf

指定下载位置:

Go@MiCloud:/Books$ download Go高级编程.pdf -d /home/jwang/Downloads
2020-09-26 23:31:52 #添加下载任务: /home/jwang/Downloads/Go高级编程.pdf

五、upload

上传一个文件或者文件夹到当前所在目录,如果是文件夹则会递归上传目录里面的所有文件,需要注意的是路径必须是绝对路径,如 /home/jwang/abc.jpg。

由于小米云服务服务端的限制,目前支持单个文件最大4GB,超过这个大小无法上传。

upload <filepath>

上传单个文件:

Go@MiCloud:/Books$ upload /home/jwang/Downloads/Go高级编程.pdf
2020-09-26 23:33:02 #添加上传任务: /home/jwang/Downloads/Go高级编程.pdf

上传整个目录:

Go@MiCloud:/Books$ upload /home/jwang/Books
2020-09-26 23:33:45 #添加上传任务: /home/jwang/Books/Clean Code-代码整洁之道.pdf
2020-09-26 23:33:45 #添加上传任务: /home/jwang/Books/Go高级编程.pdf
2020-09-26 23:33:45 #添加上传任务: /home/jwang/Books/Laravel框架关键技术解析-陈昊.pdf
2020-09-26 23:33:45 #添加上传任务: /home/jwang/Books/Linux就该这么学.pdf
2020-09-26 23:33:45 #添加上传任务: /home/jwang/Books/Linux程序设计 中文第4版.pdf
2020-09-26 23:33:45 #添加上传任务: /home/jwang/Books/MySQL性能调优与架构设计--全册.pdf
...
...
...

六、share

生成一个对外公开分享的链接,可以提供给未登录用户下载

share <file>

理论上说小米网盘的文件只能登录自己的小米账号自己下载,但是通过接口可以获取一个非公开的链接,提供给其它用户下载,这里采用了一个短网址,链接有效期是24小时,不过下载速度非常快,也不用开会员。

Go@MiCloud:~$ share wps-office_11.1.0.8722_amd64.deb
获取分享链接成功(采用了短链接,有效期24小时): http://t.wibliss.com/BRfnl

七、rm

删除文件或者目录,实际上是放入回收站,如果想真正删除,可以登录小米云服务官方网页端,在回收站里面再删一次。

Go@MiCloud:/Books$ rm Books
2020-09-26 23:38:37 #[ Books ]删除成功

八、mkdir

在当前目录下创建目录,功能比较简单,无其它参数

Go@MiCloud:$ ls
total 6
d | ------ | 2018-10-26 12:51:07 | Doc
d | ------ | 2018-10-26 13:01:12 | Books
d | ------ | 2018-10-26 13:03:04 | Picture
d | ------ | 2018-10-26 13:03:10 | Package
d | ------ | 2020-08-22 16:58:31 | Movies
- | 1.9 kB | 2020-09-21 20:54:50 | main.go
Go@MiCloud:$ rm main.go
2020-09-21 20:54:53 #[ main.go ]删除成功
Go@MiCloud:$ mkdir 2222
2020-09-21 20:55:07 #[ 2222 ]创建成功
Go@MiCloud:$ ls
total 6
d | ------ | 2018-10-26 12:51:07 | Doc
d | ------ | 2018-10-26 13:01:12 | Books
d | ------ | 2018-10-26 13:03:04 | Picture
d | ------ | 2018-10-26 13:03:10 | Package
d | ------ | 2020-08-22 16:58:31 | Movies
d | ------ | 2020-09-21 20:55:07 | 2222
Go@MiCloud:$ 

九、tree

显示当前目录树结构,但是此命令只会展示曾经进入过的目录,功能有限,仅供参考。

/
├── Doc
├── Books
├── Picture
│   ├── 10-11.jpg
│   ├── 10-10.jpg
│   ├── 10-13-beta.jpg
│   ├── 10-9.jpg
│   ├── 1493959153401.jpg
│   ├── 1493959163558.jpg
│   ├── 1493959172685.jpg
│   ├── 1493959186771.jpg
│   ├── 1493959197414.jpg
│   ├── wallPaper
│   │   ├── Solid Colors
│   │   ├── 1F51Q05K0-2.jpg
│   │   ├── 150505104113-9.jpg
│   │   ├── 150605101120-17.jpg
│   │   ├── 1F505102532-11.jpg
│   │   ├── 1493959163558.jpg
│   │   ├── 1493959186771.jpg
│   │   ├── 1493959197414.jpg
│   │   ├── El Capitan.jpg
│   │   ├── Elephant.jpg
│   │   ├── Flamingos.jpg
│   │   ├── Floating Ice.jpg
│   │   ├── Floating Leaves.jpg
├── Package
...
...
...

十、jobs

目前上传和下载都是异步的,jobs命令可以显示上传和下载的任务信息列表,便于查看上传和下载结果以及进度。

Go@MiCloud:$ download WeGameMiniLoader.3.25.1.8081.gw.exe
2020-09-22 00:26:37 #添加下载任务: /WeGameMiniLoader.3.25.1.8081.gw.exe
Go@MiCloud:$ download navicat15-premium-en.AppImage
2020-09-22 00:26:39 #添加下载任务: /navicat15-premium-en.AppImage
Go@MiCloud:$ download phpStudy.zip
2020-09-22 00:26:42 #添加下载任务: /phpStudy.zip
Go@MiCloud:$ download main.go
2020-09-22 00:26:44 #添加下载任务: /main.go
Go@MiCloud:$ jobs
--------------------------------------------------------------------------------
任务状态 |状态信息 |文件总大小 |已处理大小 |文件名
--------------------------------------------------------------------------------
已完成   |下载成功     |34 MB    |34 MB    |phpStudy.zip
已完成   |下载成功     |4.3 MB   |4.3 MB   |WeGameMiniLoader.3.25.1.8081.gw.exe
已完成   |下载成功     |1.9 kB   |1.9 kB   |main.go
--------------------------------------------------------------------------------
下载中   |正在下载     |140 MB   |80 MB    |navicat15-premium-en.AppImage
--------------------------------------------------------------------------------
总任务 4 个,已完成 3 个, 待处理 0 个,处理中 1 个

也可以下载文件夹,会批量创建任务:

Go@MiCloud:$ jobs
--------------------------------------------------------------------------------
任务状态 |状态信息   |文件总大小 |已处理大小 |文件名
--------------------------------------------------------------------------
已完成   |下载成功   |7.7 MB     |7.7 MB  |Vim实用技巧.pdf
已完成   |下载成功   |6.6 MB     |6.6 MB  |Go高级编程.pdf
已完成   |下载成功   |3.2 MB     |3.2 MB  |MySQL性能调优与架构设计--全册.pdf
已完成   |下载成功   |660 kB     |660 kB  |easy-swoole.pdf
已完成   |上传成功   |1.9 kB     |1.9 kB  |main.go
-----------------------------------------------------------------------
下载中   |正在下载   |105 MB     |22 MB   |Linux程序设计 中文第4版.pdf
下载中   |正在下载   |82 MB      |42 MB   |Laravel框架关键技术解析-陈昊.pdf
下载中   |正在下载   |80 MB      |4.7 MB  |啊哈!算法.pdf
下载中   |正在下载   |16 MB      |704 kB  |Clean Code-代码整洁之道.pdf
下载中   |正在下载   |1.2 MB     |262 kB  |学习+Go+语言(Golang).pdf
-----------------------------------------------------------------------
待处理   |等待下载   |525 MB     |0 B     |深入理解计算机系统(原书第三版).pdf
待处理   |等待下载   |79 MB      |0 B     |汇编语言(第3版)王爽著.pdf
待处理   |等待下载   |2.0 MB     |0 B     |深入理解PHP内核.pdf
待处理   |等待下载   |1.2 MB     |0 B     |阿里巴巴Java开发手册(详尽版).pdf
待处理   |等待下载   |108 kB     |0 B     |前端开发工程师-4年-夏恒.pdf
--------------------------------------------------------------------------------
总任务 25 个,已完成 15 个, 待处理 0 个,处理中 10 个

十一、quit(exit)

退出程序,也可以通过快捷键 Ctrl+C、Ctrl+D进行操作。

十二、lsAlbum

列出所有相册,显示相册里面文件数和更新时间

Go@MiCloud:$ lsAlbum 
total 6
文件数 |    最后更新时间     | 相册名
---------------------------
5530   | 2020-09-26 13:09:05 | 相机
22     | 2020-08-01 18:22:55 | 私密
6      | 2020-03-09 12:21:19 | 我的创作
8      | 2020-08-18 19:42:18 | 屏幕录制
2929   | 2020-09-25 20:55:49 | 截屏
2975   | 2020-04-04 18:19:54 | 历史照片

十三、downloadAlbum

下载相册里面照片,参数是相册名,如果无参数则会下载所有相册及其里面所有照片。

downloadAlbum 相机

其下载逻辑和文件下载类似,但是只支持下载整个相册,不支持单个照片。

go-micloud's People

Contributors

dependabot[bot] avatar solider245 avatar wangbjun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

go-micloud's Issues

登录账号的时候报错

输入账号密码后报错为:2023-02-23 13:19:27 #登录失败: [login] passServiceLogin failed: Get "": unsupported protocol scheme ""
请问这是什么错误,是否有解决方案。

不知道作者考虑增加一套登录成功以后,查看本地文件的命令吗?

登录成功以后执行ls查看的是云盘上的文件列表。我想的是,有没有考虑过增加一套命令,比如lls查看的就是主机当前目录的文件列表,lcd切换本机目录,等等。
这样的好处是我在一个窗口就可以操作我想上传或下载的文件。现在是得打开2个窗口,而且下载的文件是我当前登录的位置。

你好,香港服务器登录报错,是海外网络的关系吗?

20201108205612_55cb4c9530609bb88a9338560e8752dd.png

2020-11-08 20:51:17 #登录失败: [login] serviceLoginAuth failed: 账户或密码错误: {"notificationUrl":"https://account.xiaomi.com/identity/authStart?sid=passport&context=jx7I017ULUXSU7rOVMbckNIhDMzngW0y0uLE2PFVOsVtMeeaqzuXMFopGhwu51r5N5KptudDp7dxyKcH2B%2FQf0qgkkhouiyaLIFTww5Oc0dsWg3B60ZrMKnrzJwF77TinHDo0kZmVGO9FjlekEMhz7pJkgRTUTcPPXF4EjUl3WE%2Bks%2B21WzIqjNu6ijxeArKBavWmJCIVpBvinV%2BmdMswFXqIuwyr7CcWiG1VuFhoJ9QQJNMCErjeb6z1SNrGGrsB%2FvF%2BZNYGC%2BaXWfXQ2tJyny%2BC%2FK2SofGaxfeZGT3WS5XOceLAB2VvaXfPKObPG81xwHJjZ8aoAcxyNgOFIXvp88Cq0cw2NIjSg2TO%2BRYO8RLG0I1AVZHWSMFCexhKJM9UEW4U10XJJgwbmQS%2BOr62TiuESwi4ttM0G0QtXo4ip82FN76oOZya4d35cntxj0JnXKzoi6AZBOfklDcCPFPBDfSnit1LKYgnFXKtz4ljweYmUCNCwshfubKRN%2BQBxmXmnzpCekGJ6D%2FKn9pIhsNmWmD05GOvLpk44isUprxyrE7cyrwfiwIoczUZ%2Fnre2DWilcDJkK%2FV%2BEYfVV0XTgYWUXMb2CHgFvjnv%2Fb2Bgun9nionMaZGcVgxX8KHqdl7AcTFCzyEWimh0o59B%2BlmBPu7QXbezUVE7YD2MFQ4jWBm2somMn3aypzkxQQSrEjBFtVpgQp%2BlIQeBt8%2BUBzXfMnnweYTYsoRDioGntPISrqyo%3D&_locale=en_SG","code":0,"captchaUrl":null,"location":"","securityStatus":1,"pwd":0,"desc":"成功"}

如上图,本地服务器登录没问题,可以接受手机验证码,使用海外服务器登录则报错

登录失败

2022-01-09 10:58:52 #登录失败: [login] passServiceLogin failed: Get "": unsupported protocol scheme ""

/tmp/micloud.log:

{"level":"info","caller":"cmd/main.go:29","msg":"--------------------------------------------------------------------------------","time":"2022-01-09 10:58:42"}
{"level":"info","caller":"user/user.go:164","msg":"[login] begin autoLogin","time":"2022-01-09 10:58:42"}
{"level":"info","caller":"user/user.go:200","msg":"[login] checkPhoneCode: https://account.xiaomi.com/pass/serviceLogin?callback=https%3A%2F%2Fi.mi.com%2Fsts%3Fsign%3DIb3horUmfhQFoQV2LgZ1BLPKbRg%253D%26followup%3D%252F&sid=i.mi.com&checkSafePhone=true&_bal=true","time":"2022-01-09 10:58:42"}
{"level":"info","caller":"user/user.go:85","msg":"[login] autoLogin failed: 自动登录失败","time":"2022-01-09 10:58:42"}
{"level":"info","caller":"user/user.go:101","msg":"[login] passServiceLogin: https://account.xiaomi.com/?d=wb_f5fe6584-ed5e-4055-a8fe-ba744832f451&ticket=0&pwd=1&p_ts=1641697131000&fid=0&p_lm=1&auth=2%26V1_passport%26FIYB0JUxBmytMnl9ELQcf7qu9ASH4oQN07wxJY0rarxpA6C3vdolrAXSjD2%2FYrPrZk%2BXtpLNUQibpCZPZq%2BSHUKvzEYvdxufawHieX4lEMd3KuucpiuRMDPDDlRBBj5ankr1DcvPnv4macX4HZYj3ZoSrN%2BFg9A4PKvSumyipbk%3D&m=1&tsl=0&nonce=OL9FlDo6ZnQBoYFS&_ssign=2%26V1_passport%26oh9hknv9yLdBVqBO34SmRknycI0%3D","time":"2022-01-09 10:58:52"}
{"level":"error","caller":"cmd/main.go:33","msg":"登录失败: [login] passServiceLogin failed: Get \"\": unsupported protocol scheme \"\"","time":"2022-01-09 10:58:52"}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.