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 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