mediafire 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/examples/download.rb +13 -0
- data/examples/downloads.rb +24 -0
- data/lib/mediafire/api.rb +74 -5
- data/lib/mediafire/connection.rb +1 -0
- data/lib/mediafire/version.rb +1 -1
- data/mediafire.gemspec +2 -2
- metadata +10 -8
data/.gitignore
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require './common'
|
2
|
+
|
3
|
+
m = login
|
4
|
+
|
5
|
+
uuid = create_uuid
|
6
|
+
File.open(uuid, "w") do |f|
|
7
|
+
f.write(uuid)
|
8
|
+
end
|
9
|
+
file1 = m.upload(uuid)
|
10
|
+
File.delete(uuid)
|
11
|
+
puts 'upload file1'
|
12
|
+
|
13
|
+
uuid = create_uuid
|
14
|
+
File.open(uuid, "w") do |f|
|
15
|
+
f.write(uuid)
|
16
|
+
end
|
17
|
+
file2 = m.upload(uuid)
|
18
|
+
File.delete(uuid)
|
19
|
+
puts 'upload file2'
|
20
|
+
|
21
|
+
files = [file1, file2]
|
22
|
+
|
23
|
+
|
24
|
+
m.downloads(files)
|
data/lib/mediafire/api.rb
CHANGED
@@ -179,7 +179,7 @@ module Mediafire
|
|
179
179
|
if folder.nil?
|
180
180
|
keys[:folderkey] = c.xpath('./folderkey').text
|
181
181
|
else
|
182
|
-
keys[:folderkey] = folder.
|
182
|
+
keys[:folderkey] = folder.folder_quickkey
|
183
183
|
end
|
184
184
|
end
|
185
185
|
keys[:mful_config] = doc.xpath('//mediafire/MFULConfig').text
|
@@ -230,11 +230,61 @@ module Mediafire
|
|
230
230
|
#def webupload(url, folder)
|
231
231
|
#end
|
232
232
|
|
233
|
-
|
234
|
-
|
233
|
+
def download(file)
|
234
|
+
if file.is_a?(Array)
|
235
|
+
return downloads(file)
|
236
|
+
end
|
235
237
|
|
236
|
-
|
237
|
-
|
238
|
+
response = get("?#{file.quickkey}")
|
239
|
+
if response.code.to_i == 302
|
240
|
+
return response['Location']
|
241
|
+
end
|
242
|
+
|
243
|
+
body = response.body
|
244
|
+
funcbody = body.scan(/ function .*?for.*?eval/)
|
245
|
+
functions = funcbody.map {|n| n.match(/function (.*?)\(/).to_a[1]}
|
246
|
+
decrypt_str = funcbody.map {|n| find_encrypt_string_and_decrypt(n)}
|
247
|
+
|
248
|
+
t = decrypt_str.last
|
249
|
+
funcname = t.match(/(.*?)\(/)[1]
|
250
|
+
params = t.scan(/'(.*?)'/)
|
251
|
+
qk = params[0][0]
|
252
|
+
pk1 = params[1][0]
|
253
|
+
pkr = body.match(/pKr ?= ?'(.*?)';/)[1]
|
254
|
+
|
255
|
+
t = decrypt_str[functions.index(funcname)]
|
256
|
+
key = t.match(/getElementById\("(.*?)"\)/).to_a[1]
|
257
|
+
|
258
|
+
response = get("dynamic/download.php?qk=#{qk}&pk1=#{pk1}&r=#{pkr}")
|
259
|
+
|
260
|
+
body = response.body
|
261
|
+
t = body.match(/var.*?function/).to_a[0]
|
262
|
+
download_keys = find_encrypt_string_and_decrypt(t)
|
263
|
+
t = body.match(/#{key}.*?("http.*?)>.*?if/)[1]
|
264
|
+
i,j,k = t.scan(/"(.*?)".*?\+(.*?)\+.*?"(.*?)\\?"/)[0]
|
265
|
+
d = download_keys.match(/#{j}='([\w\d]*)'/)[1]
|
266
|
+
|
267
|
+
return "#{i}#{d}#{k}"
|
268
|
+
end
|
269
|
+
|
270
|
+
def downloads(files)
|
271
|
+
raise NeedLogin unless is_loggedin?
|
272
|
+
|
273
|
+
option = {
|
274
|
+
:form_todolist1 => create_list(files),
|
275
|
+
:form_todolist2 => '',
|
276
|
+
:form_todotype => 3,
|
277
|
+
:form_todoparent => '',
|
278
|
+
:form_todoconfirm => 0,
|
279
|
+
}
|
280
|
+
response = post("dynamic/doselected.php", option)
|
281
|
+
|
282
|
+
filename = response['Content-Disposition'].sub(/^.*?filename="(.*)"$/, '\1')
|
283
|
+
puts "downloading: #{filename}"
|
284
|
+
File.open("./#{filename}", 'w+b') do |f|
|
285
|
+
f.write response.body
|
286
|
+
end
|
287
|
+
end
|
238
288
|
|
239
289
|
def download_image(file, size=6)
|
240
290
|
unless file.is_picture?
|
@@ -412,5 +462,24 @@ module Mediafire
|
|
412
462
|
s = ((s / 1024.0) * b).ceil / b
|
413
463
|
return [s.to_s, "GB"]
|
414
464
|
end
|
465
|
+
|
466
|
+
def find_encrypt_string_and_decrypt(body)
|
467
|
+
b = body
|
468
|
+
c = b.match(/for.*;/).to_a[0]
|
469
|
+
return unless c
|
470
|
+
|
471
|
+
d = c.match(/i<(.*?);/).to_a[1]
|
472
|
+
e = c.match(/parseInt\((.*?)\./).to_a[1]
|
473
|
+
return unless d or e
|
474
|
+
|
475
|
+
f = b.match(/#{d} ?= ?([\d]*);/).to_a[1].to_i
|
476
|
+
g = b.match(/#{e} ?= ?unescape\(\\?'(.*?)\\?'\);/).to_a[1]
|
477
|
+
h = c.match(/\)(\^.*?)\)/).to_a[1]
|
478
|
+
return unless f or g or h
|
479
|
+
|
480
|
+
i = ''
|
481
|
+
f.times {|n| i+=eval("(g.slice(n*2, 2).to_i(16)#{h}).chr")}
|
482
|
+
return i
|
483
|
+
end
|
415
484
|
end
|
416
485
|
end
|
data/lib/mediafire/connection.rb
CHANGED
data/lib/mediafire/version.rb
CHANGED
data/mediafire.gemspec
CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# s.add_development_dependency "rspec"
|
22
|
-
s.add_runtime_dependency "nokogiri"
|
23
|
-
s.add_runtime_dependency "multipart-post"
|
22
|
+
s.add_runtime_dependency "nokogiri", ">= 1.5.0"
|
23
|
+
s.add_runtime_dependency "multipart-post", ">= 1.1.3"
|
24
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mediafire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,30 +9,30 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-05 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &70122225470860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.5.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70122225470860
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multipart-post
|
27
|
-
requirement: &
|
27
|
+
requirement: &70122225470360 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 1.1.3
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70122225470360
|
36
36
|
description: A Ruby wrapper for the unofficial Mediafire API
|
37
37
|
email:
|
38
38
|
- m@skahack.com
|
@@ -48,7 +48,9 @@ files:
|
|
48
48
|
- examples/common.rb
|
49
49
|
- examples/create_folder.rb
|
50
50
|
- examples/delete_file.rb
|
51
|
+
- examples/download.rb
|
51
52
|
- examples/download_image.rb
|
53
|
+
- examples/downloads.rb
|
52
54
|
- examples/dropbox_setup.rb
|
53
55
|
- examples/dropbox_setup_option.rb
|
54
56
|
- examples/dropbox_upload.rb
|