baidupan 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rvmrc +1 -0
- data/README.md +23 -2
- data/baidupan.gemspec +2 -1
- data/bin/baidupan +3 -2
- data/lib/baidupan.rb +50 -4
- data/lib/baidupan/cmd/base.rb +47 -0
- data/lib/baidupan/cmd/fs_cmd.rb +59 -0
- data/lib/baidupan/config.rb +38 -0
- data/lib/baidupan/fs_cmd.rb +31 -0
- data/lib/baidupan/version.rb +1 -1
- metadata +31 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 924ff0c1bb3c5b9d29c19dcba20f352c5f32f664
|
4
|
+
data.tar.gz: 1f3bd351261e17c4693d10e423c2196c873a6d20
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f89b3b7a82cfaf69d9d7e914f8b3015b5f4edeaef3be69f6d8c3365b592947899426f816fcaf30e7ae824dff5d642fa23d6218b54795e8ac035f9d517bfc5b9d
|
7
|
+
data.tar.gz: 9682e1e49d46f2b92b8a2332119e4697920cdaf286dfd2f9a1342fdeacba0f64a3246954ebc1c6ea19519980d536de5a6298d780fc2ba4f716d1526baadab180
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use ruby-2.0.0-p247@common
|
data/README.md
CHANGED
@@ -16,10 +16,31 @@ Or install it yourself as:
|
|
16
16
|
|
17
17
|
$ gem install baidupan
|
18
18
|
|
19
|
+
|
20
|
+
|
19
21
|
## Usage
|
22
|
+
如何使用该gem:
|
23
|
+
* 创建百度应用 http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5
|
24
|
+
* baidupan setup 应用名字 api_key, secret_key
|
25
|
+
* baidupan config 按照提示 进行授权
|
26
|
+
|
27
|
+
基本命令:
|
28
|
+
* baidupan setup 添加文件信息
|
29
|
+
* baidupan config 进行授权
|
30
|
+
* baidupan list or ls 显示app应用的文件列表
|
31
|
+
* baidupan upload 文件
|
32
|
+
* 更多命令 请运行baidupan 查看即可
|
33
|
+
|
34
|
+
Todo:
|
35
|
+
* 移动文件的位置
|
36
|
+
* 删除文件
|
37
|
+
* 对文件重命名
|
38
|
+
|
39
|
+
已经实现:
|
40
|
+
* 通过配置连接百度盘
|
41
|
+
* 能够上传、下载以及显示文件
|
42
|
+
|
20
43
|
|
21
|
-
TODO: Write usage instructions here
|
22
|
-
1: 能够连接百度盘
|
23
44
|
|
24
45
|
## Contributing
|
25
46
|
|
data/baidupan.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["meeasyhappy@gmail.com"]
|
11
11
|
spec.description = %q{利用百度云盘接口, 实现文件备份功能}
|
12
12
|
spec.summary = %q{文件上传和查看等功能}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "http://ml-china.org"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -20,5 +20,6 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "typhoeus", "~> 0.6.5"
|
23
24
|
spec.add_runtime_dependency "thor"
|
24
25
|
end
|
data/bin/baidupan
CHANGED
data/lib/baidupan.rb
CHANGED
@@ -1,9 +1,55 @@
|
|
1
|
+
require "typhoeus"
|
2
|
+
require 'multi_json'
|
3
|
+
|
1
4
|
require "baidupan/version"
|
5
|
+
require "baidupan/config"
|
6
|
+
|
7
|
+
require 'pry'
|
2
8
|
|
3
9
|
module Baidupan
|
10
|
+
PAN_BASE_URL = "https://pcs.baidu.com/rest/2.0/pcs"
|
11
|
+
|
12
|
+
class Base
|
13
|
+
attr_reader :body
|
14
|
+
|
15
|
+
def initialize(url, method=:get, params={}, body={}, opts={})
|
16
|
+
@options = {
|
17
|
+
method: method,
|
18
|
+
headers: {"User-Agent"=>"Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},
|
19
|
+
params: params
|
20
|
+
}
|
21
|
+
@options.merge!(body: body) if body
|
22
|
+
@options.merge!(opts)
|
23
|
+
@request = Typhoeus::Request.new(url, @options)
|
24
|
+
@request.on_complete do |response|
|
25
|
+
if response.success?
|
26
|
+
if response.headers["Content-Disposition"] =~ /attachment;file/ or response.headers["Content-Type"] =~ /image\//
|
27
|
+
@body = response.body
|
28
|
+
else
|
29
|
+
@body = MultiJson.load(response.body, symbolize_keys: true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def run!
|
36
|
+
@request.run
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
class << self
|
41
|
+
def get(url, params={}, opts={})
|
42
|
+
new(url, :get, params, nil, opts).run!
|
43
|
+
end
|
4
44
|
|
5
|
-
|
6
|
-
|
7
|
-
|
45
|
+
def post(url, params={}, body={}, opts={})
|
46
|
+
new(url, :post, params, body, opts).run!
|
47
|
+
end
|
8
48
|
|
9
|
-
|
49
|
+
def common_params(method, params={})
|
50
|
+
params = {access_token: Config.access_token}.merge(params)
|
51
|
+
params.merge!(method: method)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'baidupan'
|
4
|
+
require 'thor'
|
5
|
+
|
6
|
+
module Baidupan::Cmd
|
7
|
+
class Base < Thor
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
desc 'setup [app_name, api_key, secret_key]', "setup your setting when you first use this gem; if you don't have baidu app, please create one: at http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5"
|
11
|
+
def setup(app_name, api_key, secret_key)
|
12
|
+
require 'erb'
|
13
|
+
content = (ERB.new <<-EOF).result(binding)
|
14
|
+
:app_name: <%=app_name||'<_app_name>'%>
|
15
|
+
:app_root: /apps/<%=app_name||'<_app_name_or_you_set_in_baidu>'%>
|
16
|
+
:api_key: <%=api_key||'<_api_key>'%>
|
17
|
+
:secret_key: <%=secret_key||'<_secret_key>'%>
|
18
|
+
:base_url: https://pcs.baidu.com/rest/2.0/pcs
|
19
|
+
EOF
|
20
|
+
|
21
|
+
config_path = Baidupan::CONF_FILE
|
22
|
+
File.write(config_path, content)
|
23
|
+
say "Has wrote #{config_path} for app settings."
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'config', 'config your access token'
|
27
|
+
def config
|
28
|
+
url = "https://openapi.baidu.com/oauth/2.0/authorize?response_type=token&client_id=#{Baidupan::Config.api_key}&redirect_uri=oob&scope=netdisk"
|
29
|
+
say "请在浏览器中完成授权操作并获取最终成功url!\n将下面的链接粘入浏览器获取access_token"
|
30
|
+
say '*'*60
|
31
|
+
say url
|
32
|
+
say '*'*60
|
33
|
+
|
34
|
+
say "将浏览器的url输入到这里:"
|
35
|
+
atoken = STDIN.gets.chomp
|
36
|
+
|
37
|
+
atoken =~ /access_token=([^&]*)/
|
38
|
+
atoken = $1 if $1
|
39
|
+
|
40
|
+
raise "Invalid token: #{atoken}!" if atoken !~ /^[\da-f\.\-]*$/
|
41
|
+
File.open(Baidupan::CONF_FILE, "a"){|f| f.puts ":access_token: #{atoken}" }
|
42
|
+
|
43
|
+
say '-'*60
|
44
|
+
say "Have append access token into file: #{Baidupan::CONF_FILE}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'baidupan'
|
2
|
+
require 'baidupan/cmd/base'
|
3
|
+
require 'baidupan/fs_cmd'
|
4
|
+
|
5
|
+
module Baidupan::Cmd
|
6
|
+
|
7
|
+
class FsCmd < Base
|
8
|
+
|
9
|
+
no_tasks do
|
10
|
+
def print_item(item)
|
11
|
+
new_items = []
|
12
|
+
new_items << item[:fs_id]
|
13
|
+
new_items << "#{item[:path].sub(Baidupan::Config.app_root + '/', '')}"
|
14
|
+
new_items << "#{Time.at(item[:mtime])}"
|
15
|
+
print_in_columns new_items
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
desc 'list [Remote path]', 'list files under Remote path'
|
21
|
+
def list(rpath=nil)
|
22
|
+
res = Baidupan::FsCmd.list(rpath)
|
23
|
+
res.body[:list].each do |item|
|
24
|
+
print_item(item)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
map ls: :list
|
28
|
+
|
29
|
+
desc 'upload [Local path, Remote path]', 'upload a local file /path/to/file --> /apps/appname/[rpath|file]'
|
30
|
+
option :ondup, type: :string, desc: <<-Desc, default: :newcopy
|
31
|
+
overwrite:表示覆盖同名文件;newcopy:表示生成文件副本并进行重命名,命名规则为“文件名_日期.后缀”。
|
32
|
+
Desc
|
33
|
+
def upload(lpath, rpath=nil)
|
34
|
+
res = Baidupan::FsCmd.upload(lpath, rpath, options.dup)
|
35
|
+
print_item res.body
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
desc 'download file [Remote path, Local path', 'download remote file to local, not support for download dir'
|
40
|
+
def download(rpath, lpath=nil)
|
41
|
+
lpath = (lpath||rpath).dup
|
42
|
+
res = Baidupan::FsCmd.download(rpath, lpath, options.dup)
|
43
|
+
|
44
|
+
if File.exists?(lpath)
|
45
|
+
extname = File.extname(lpath)
|
46
|
+
timestamp_name = "_#{Time.now.strftime(Baidupan::Config.time_format)}_#{rand(10)}#{extname}"
|
47
|
+
|
48
|
+
if extname.empty?
|
49
|
+
lpath += timestamp_name
|
50
|
+
else
|
51
|
+
lpath.gsub!(extname, timestamp_name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
File.binwrite(lpath, res.body)
|
56
|
+
say "download and save at'#{lpath}'..."
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'pry'
|
5
|
+
|
6
|
+
module Baidupan
|
7
|
+
CONF_FILE = File.expand_path("~/.baidupan.yml")
|
8
|
+
|
9
|
+
class Config < Hash
|
10
|
+
attr_reader :config
|
11
|
+
|
12
|
+
class << self
|
13
|
+
|
14
|
+
def single_instance
|
15
|
+
@_instance ||= new
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(method, *args)
|
19
|
+
single_instance.config[method.to_sym]
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_path
|
23
|
+
File.join(self.base_url, 'file')
|
24
|
+
end
|
25
|
+
|
26
|
+
def time_format
|
27
|
+
"%Y%m%d%H%M%S"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def initialize
|
34
|
+
@config = YAML.load_file(CONF_FILE)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
Baidupan::Config.app_root
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'baidupan'
|
2
|
+
require 'baidupan/config'
|
3
|
+
|
4
|
+
module Baidupan
|
5
|
+
|
6
|
+
class FsCmd < Base
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def list(rpath, **opts)
|
10
|
+
opts.merge!(common_params(:list, path: "#{Config.app_root}/#{rpath}"))
|
11
|
+
get(Config.file_path, opts)
|
12
|
+
end
|
13
|
+
|
14
|
+
def upload(lpath, rpath, opts={})
|
15
|
+
params = common_params(:upload, path: "#{Config.app_root}/#{rpath}/#{lpath}").merge(ondup: :newcopy)
|
16
|
+
params[:ondup] = opts.delete(:ondup) if opts[:ondup]
|
17
|
+
|
18
|
+
body = {:file => File.open(lpath)}
|
19
|
+
opts[:noprogress] ||= true
|
20
|
+
|
21
|
+
post(Config.file_path, params, body, opts)
|
22
|
+
end
|
23
|
+
|
24
|
+
def download(rpath, lpath, opts={})
|
25
|
+
params = common_params(:download, path: "#{Config.app_root}/#{rpath}")
|
26
|
+
|
27
|
+
get(Config.file_path, params, opts.merge(followlocation: true))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/baidupan/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baidupan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- AndyHu
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-28 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,33 +27,43 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: typhoeus
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.6.5
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.6.5
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
56
|
name: thor
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
|
-
- -
|
59
|
+
- - '>='
|
52
60
|
- !ruby/object:Gem::Version
|
53
61
|
version: '0'
|
54
62
|
type: :runtime
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
|
-
- -
|
66
|
+
- - '>='
|
60
67
|
- !ruby/object:Gem::Version
|
61
68
|
version: '0'
|
62
69
|
description: 利用百度云盘接口, 实现文件备份功能
|
@@ -68,6 +75,7 @@ extensions: []
|
|
68
75
|
extra_rdoc_files: []
|
69
76
|
files:
|
70
77
|
- .gitignore
|
78
|
+
- .rvmrc
|
71
79
|
- Gemfile
|
72
80
|
- LICENSE.txt
|
73
81
|
- README.md
|
@@ -75,31 +83,34 @@ files:
|
|
75
83
|
- baidupan.gemspec
|
76
84
|
- bin/baidupan
|
77
85
|
- lib/baidupan.rb
|
86
|
+
- lib/baidupan/cmd/base.rb
|
87
|
+
- lib/baidupan/cmd/fs_cmd.rb
|
88
|
+
- lib/baidupan/config.rb
|
89
|
+
- lib/baidupan/fs_cmd.rb
|
78
90
|
- lib/baidupan/test.rb
|
79
91
|
- lib/baidupan/version.rb
|
80
|
-
homepage:
|
92
|
+
homepage: http://ml-china.org
|
81
93
|
licenses:
|
82
94
|
- MIT
|
95
|
+
metadata: {}
|
83
96
|
post_install_message:
|
84
97
|
rdoc_options: []
|
85
98
|
require_paths:
|
86
99
|
- lib
|
87
100
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
101
|
requirements:
|
90
|
-
- -
|
102
|
+
- - '>='
|
91
103
|
- !ruby/object:Gem::Version
|
92
104
|
version: '0'
|
93
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
106
|
requirements:
|
96
|
-
- -
|
107
|
+
- - '>='
|
97
108
|
- !ruby/object:Gem::Version
|
98
109
|
version: '0'
|
99
110
|
requirements: []
|
100
111
|
rubyforge_project:
|
101
|
-
rubygems_version: 1.
|
112
|
+
rubygems_version: 2.1.4
|
102
113
|
signing_key:
|
103
|
-
specification_version:
|
114
|
+
specification_version: 4
|
104
115
|
summary: 文件上传和查看等功能
|
105
116
|
test_files: []
|