xunlei 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -39,11 +39,23 @@ Download files according to pattern in file names
39
39
 
40
40
  xunlei download --only matrix
41
41
  xunlei download --except bourne
42
+
43
+ Add ed2k or magnet link as new task
44
+
45
+ xunlei add ed2k_or_magment_link
42
46
 
43
47
  Google for ed2k and magnet links
44
48
 
45
49
  xunlei google Repulsion --with 720p
46
50
 
51
+ Search simplecd.org for ed2k links
52
+
53
+ xunlei simplecd Vendetta 720p
54
+
55
+ I am feeling lucky :)
56
+
57
+ xunlei lucky KEYWORDS
58
+
47
59
  Pass --help to see more tasks and options
48
60
 
49
61
  xunlei --help
data/bin/xunlei CHANGED
@@ -3,6 +3,7 @@
3
3
  require "xunlei"
4
4
  # require File.expand_path("lib/xunlei/version.rb")
5
5
  # require File.expand_path("lib/xunlei/engine.rb")
6
+ # require File.expand_path("lib/xunlei/search.rb")
6
7
  require "yaml"
7
8
  require "commander/import"
8
9
 
@@ -24,25 +25,29 @@ def filter_files(options = nil)
24
25
  files
25
26
  end
26
27
 
27
- def do_dump_cookies(c)
28
- c.option "--driver DRIVER", String, "use a different webdriver (e.g. firefox). default is chrome"
29
- c.action do |args, options|
30
- options.default :driver => "chrome"
31
-
32
- check_for_config_files
33
- check_for_chromedriver
34
- credentials = YAML.load_file(xunlei_credential_file_path)
35
- engine = Xunlei::Engine.new(credentials[:username], credentials[:password], options.driver.downcase.to_sym)
36
-
37
- File.open(xunlei_cookies_path, "w") do |file|
38
- engine.dump_cookies.each do |line|
39
- file.write(line)
40
- end
28
+ def execute_dump_action(args, options)
29
+ options.default :driver => "chrome"
30
+
31
+ check_for_config_files
32
+ check_for_chromedriver
33
+ credentials = YAML.load_file(xunlei_credential_file_path)
34
+ engine = Xunlei::Engine.new(credentials[:username], credentials[:password], options.driver.downcase.to_sym)
35
+
36
+ File.open(xunlei_cookies_path, "w") do |file|
37
+ engine.dump_cookies.each do |line|
38
+ file.write(line)
41
39
  end
40
+ end
42
41
 
43
- yield(engine) if block_given?
42
+ yield(engine, args) if block_given?
43
+
44
+ engine.stop
45
+ end
44
46
 
45
- engine.stop
47
+ def do_dump_cookies(c)
48
+ c.option "--driver DRIVER", String, "use a different webdriver (e.g. firefox). default is chrome"
49
+ c.action do |args, options|
50
+ execute_dump_action(args, options)
46
51
  end
47
52
  end
48
53
 
@@ -180,7 +185,7 @@ command :dump_tasks do |c|
180
185
  c.syntax= "dump_tasks"
181
186
  c.description = "dump all files to #{xunlei_tasks_path}"
182
187
 
183
- do_dump_cookies(c) do |engine|
188
+ do_dump_cookies(c) do |engine, args|
184
189
  tasks = engine.dump_tasks
185
190
 
186
191
  current_downloaded_tasks = all_downloaded_tasks & tasks.map { |task| task[:name] }
@@ -206,6 +211,15 @@ command :dump_tasks do |c|
206
211
  end
207
212
  end
208
213
 
214
+ command :add do |c|
215
+ c.syntax= "add KEYWORD"
216
+ c.description = "add new task(s)."
217
+
218
+ do_dump_cookies(c) do |engine, args|
219
+ engine.add_task(args.first)
220
+ end
221
+ end
222
+
209
223
  command :dump_cookies do |c|
210
224
  c.syntax = "dump_cookies"
211
225
  c.description = "dump cookies to #{xunlei_cookies_path}"
@@ -278,7 +292,7 @@ command :google do |c|
278
292
  c.option "--without WORDS", String, "exclude additional info when Googling"
279
293
  c.action do |args, options|
280
294
  options.default :with => nil, :without => nil
281
- puts "Searching the web for #{args.join(" ")}..."
295
+ puts "Searching the web for '#{args.join(" ")}'..."
282
296
  puts
283
297
  search = Xunlei::Search.new
284
298
  links = search.google(args, options)
@@ -287,6 +301,42 @@ command :google do |c|
287
301
  end
288
302
  end
289
303
 
304
+ command :simplecd do |c|
305
+ c.syntax = "simplecd KEYWORD"
306
+ c.description = "search simplecd for ed2k links using given KEYWORD"
307
+ c.option "--with WORDS", String, "include additional info when searching"
308
+ c.option "--without WORDS", String, "exclude additional info when searching"
309
+ c.action do |args, options|
310
+ options.default :with => nil, :without => nil
311
+ puts "Searching simplecd.org for '#{args.join(" ")}'..."
312
+ puts
313
+ search = Xunlei::Search.new
314
+ links = search.google_simplecd(args, options)
315
+ puts
316
+ puts "#{links.count} links found."
317
+ end
318
+ end
319
+
320
+ command :lucky do |c|
321
+ c.syntax = "lucky KEYWORD"
322
+ c.description = "search simplecd for ed2k links using given KEYWORD and create new tasks :)"
323
+ c.action do |args, options|
324
+ puts "Searching simplecd.org for '#{args.join(" ")}'..."
325
+ puts
326
+ search = Xunlei::Search.new
327
+ links = search.google_simplecd(args, options)
328
+ puts
329
+ puts "#{links.count} links found."
330
+
331
+ execute_dump_action(args, options) do |engine, args|
332
+ links.each do |link|
333
+ engine.add_task(link)
334
+ end
335
+ end
336
+ end
337
+ end
338
+
290
339
  alias_command :down, :download
291
340
  alias_command :dump, :dump_tasks
292
341
  alias_command :search, :google
342
+ alias_command :scd, :simplecd
data/lib/xunlei/engine.rb CHANGED
@@ -41,6 +41,32 @@ module Xunlei
41
41
  all_files
42
42
  end
43
43
 
44
+ def add_task(target_address)
45
+ puts "Adding new task..."
46
+ # open('|pbcopy', 'w') { |io| io << target_address }
47
+
48
+ @browser.execute_script("add_task_new(0)")
49
+
50
+ @browser.text_field(:id => 'task_url').wait_until_present
51
+
52
+ # @browser.send_keys [:command, 'v']
53
+ @browser.execute_script("document.getElementById('task_url').value = '#{target_address}'")
54
+
55
+ puts "Task URL = \"#{target_address}\""
56
+ expire_count = 0
57
+ sleep(2.0)
58
+ while !(@browser.button(:id => 'down_but').enabled? && expire_count <= 5000)
59
+ expire_count += 1
60
+ end
61
+ if expire_count <= 5000
62
+ print "Submitting... "
63
+ @browser.button(:id => 'down_but').when_present.click
64
+ puts "Done."
65
+ else
66
+ puts "Timed out, the button is unavailable."
67
+ end
68
+ end
69
+
44
70
  def stop
45
71
  @browser.close
46
72
  end
data/lib/xunlei/search.rb CHANGED
@@ -9,10 +9,20 @@ module Xunlei
9
9
  end
10
10
 
11
11
  def google(keywords, options)
12
+ do_google(keywords, options, "http://www.google.com/search?q=", 10)
13
+ end
14
+
15
+ def google_simplecd(keywords, options)
16
+ do_google(keywords, options, "http://www.google.com/search?q=site:simplecd.org+", 1)
17
+ end
18
+
19
+ private
20
+
21
+ def do_google(keywords, options, prefix, limit)
12
22
  q = [keywords, options.with, "ed2k"].flatten.join("+")
13
23
  q += "+-" + options.without unless options.without.nil?
14
24
 
15
- @browser.goto "http://www.google.com/search?q=#{q}"
25
+ @browser.goto "#{prefix}#{q}"
16
26
 
17
27
  @browser.div(:id => "ires").wait_until_present
18
28
 
@@ -20,17 +30,22 @@ module Xunlei
20
30
  @browser.lis(:class => "g").each { |li| page_links << li.as.first.href }
21
31
 
22
32
  ed2k_links = []
33
+
23
34
  page_links.each do |page_link|
24
35
  @browser.goto page_link
25
36
  doc = Nokogiri::HTML(@browser.html)
26
37
  doc.css("a").each do |link|
27
38
  next if link['href'].nil?
28
- href = URI.escape(link['href'])
39
+ # href = URI.escape(link['href'])
40
+ href = link['href']
29
41
  if href =~ /ed2k:|magnet:/ && !ed2k_links.include?(href)
30
42
  puts href
31
43
  ed2k_links << href
32
44
  end
33
45
  end
46
+
47
+ limit -= 1
48
+ break unless limit > 1
34
49
  end
35
50
 
36
51
  @browser.close
@@ -1,3 +1,3 @@
1
1
  module Xunlei
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xunlei
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-17 00:00:00.000000000Z
12
+ date: 2011-12-18 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70148914821960 !ruby/object:Gem::Requirement
16
+ requirement: &70299977384620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70148914821960
24
+ version_requirements: *70299977384620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70148914821440 !ruby/object:Gem::Requirement
27
+ requirement: &70299977384200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70148914821440
35
+ version_requirements: *70299977384200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: simplecov
38
- requirement: &70148914820920 !ruby/object:Gem::Requirement
38
+ requirement: &70299977383780 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70148914820920
46
+ version_requirements: *70299977383780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: watir-webdriver
49
- requirement: &70148914820380 !ruby/object:Gem::Requirement
49
+ requirement: &70299977383280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70148914820380
57
+ version_requirements: *70299977383280
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: commander
60
- requirement: &70148914819960 !ruby/object:Gem::Requirement
60
+ requirement: &70299977382860 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70148914819960
68
+ version_requirements: *70299977382860
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
- requirement: &70148914819420 !ruby/object:Gem::Requirement
71
+ requirement: &70299977382440 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70148914819420
79
+ version_requirements: *70299977382440
80
80
  description: A browser script to access lixian.vip.xunlei.com tasks automatically
81
81
  email:
82
82
  - afu@forresty.com
@@ -115,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
115
  version: '0'
116
116
  segments:
117
117
  - 0
118
- hash: -3735410626781629397
118
+ hash: 1170829789028878004
119
119
  required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  none: false
121
121
  requirements:
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  version: '0'
125
125
  segments:
126
126
  - 0
127
- hash: -3735410626781629397
127
+ hash: 1170829789028878004
128
128
  requirements: []
129
129
  rubyforge_project: xunlei
130
130
  rubygems_version: 1.8.11