mediafire 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|