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 CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  *.gem
2
3
  *.rbc
3
4
  .bundle
@@ -0,0 +1,13 @@
1
+ require './common'
2
+
3
+ m = Mediafire.new
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 pritty_format_datafile(file1)
12
+
13
+ puts m.download(file1)
@@ -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.status_id
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
- #def download(file)
234
- #end
233
+ def download(file)
234
+ if file.is_a?(Array)
235
+ return downloads(file)
236
+ end
235
237
 
236
- #def download_selected_files_in_folder(folder, files)
237
- #end
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
@@ -35,6 +35,7 @@ module Mediafire
35
35
  response = Net::HTTP.start(uri.host, uri.port) do |http|
36
36
  http.request(request)
37
37
  end
38
+ check_statuscode(response)
38
39
  build_cookie(response.get_fields('Set-Cookie'))
39
40
 
40
41
  return response
@@ -1,3 +1,3 @@
1
1
  module Mediafire
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
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.1
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-01 00:00:00.000000000Z
12
+ date: 2011-09-05 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &70259517770580 !ruby/object:Gem::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: '0'
21
+ version: 1.5.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70259517770580
24
+ version_requirements: *70122225470860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multipart-post
27
- requirement: &70259517770160 !ruby/object:Gem::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: '0'
32
+ version: 1.1.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70259517770160
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