mr2cbz 0.0.1

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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in mr2cbz.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/mr2cbz ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems" # ruby1.9 doesn't "require" it though
4
+ require "mr2cbz/task"
5
+
6
+
7
+ Mr2cbz::Task.start
8
+
data/lib/mr2cbz.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "mr2cbz/version"
2
+ require "mr2cbz/manga"
3
+ #require "mr2cbz/task"
4
+ module Mr2cbz
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,92 @@
1
+ require 'mechanize'
2
+ require 'fileutils'
3
+
4
+ module Mr2cbz
5
+ TITLE_MATCHER = /(.+)\s(\d+)\s-\sPage\s(\d+)/
6
+
7
+ class Manga
8
+ MANGA_LIST_URI = 'http://www.mangareader.net/alphabetical'.freeze
9
+ def initialize(name)
10
+ @browser = Manga.get_a_browser
11
+ @name = name
12
+ end
13
+
14
+ def self.get_a_browser
15
+ Mechanize.new do |agent|
16
+ agent.user_agent_alias = 'Mac Safari'
17
+ end
18
+ end
19
+
20
+ def self.list
21
+ to_ret = {}
22
+ get_a_browser.get(MANGA_LIST_URI) do |page|
23
+ page.search('div.series_col li').each do |li|
24
+ link = (li / 'a')[0]
25
+ completed = !(li / 'span.mangacompleted').empty?
26
+ yield [link.text, completed] if block_given?
27
+ to_ret[link.text] = completed
28
+ end
29
+ end
30
+ to_ret
31
+ end
32
+
33
+ def download(from, to, keep_temp=false)
34
+ @browser.get(MANGA_LIST_URI) do |page|
35
+ page = page.link_with(:text => @name).click
36
+ title = page.at("h2.aname").text
37
+ puts "Manga title: #{title}"
38
+ chapter = from
39
+ downloaded = []
40
+ page.links_with(:text => %r{^#{title}\s+\d+$}i).each do |chapter_link|
41
+ chapter_link.text =~ %r{^#{title}\s+(\d+)$}i
42
+ chap_n = $1.to_i
43
+ if (chap_n < from || chap_n > to || downloaded.include?(chap_n))
44
+ puts "Skipping chapter #{chap_n}"
45
+ next
46
+ end
47
+
48
+ downloaded << chap_n
49
+
50
+ #removes all the non word char from titile and
51
+ # prepend '0's to chapter number up to 3 char
52
+ sane_folder = chapter_link.text.gsub(/\W/, '_')
53
+ sane_folder_match = sane_folder.match /^(.+)_(\d+)$/
54
+ sane_folder = "%s_%03d" % sane_folder_match.captures
55
+ puts "Downloading #{chapter_link.text} in #{sane_folder}"
56
+
57
+ img_page = @browser.click chapter_link
58
+ this_chapter = chapter
59
+ page = 1
60
+ while chapter == this_chapter
61
+
62
+ dest = File.join(sane_folder, ("%03d.jpg" % page))
63
+ puts "Downloading #{img_page.image.alt}"
64
+ img_page.image.fetch.save(dest)
65
+
66
+ img_page = img_page.link_with(:text => 'Next').click
67
+ mm = TITLE_MATCHER.match(img_page.image.text)
68
+ break if mm.nil?
69
+ this_chapter = mm.captures[1].to_i
70
+ page = mm.captures[2]
71
+ end
72
+ chapter = this_chapter
73
+
74
+ # Give the path of the temp file to the zip outputstream,
75
+ # it won't try to open it as an archive.
76
+ # Zip::ZipOutputStream.open("#{sane_folder}.cbz") do |zos|
77
+ # Dir.glob(File.join(sane_folder, '*.jpg')) do |file|
78
+ # # Create a new entry with some arbitrary name
79
+ # zos.put_next_entry(File.basename file)
80
+ # # Add the contents of the file, don't read the stuff linewise if its binary, instead use direct IO
81
+ # zos.print IO.read(file)
82
+ # end
83
+ # end
84
+ `zip -0 #{sane_folder}.cbz #{sane_folder}/*`
85
+ puts "#{sane_folder}.cbz created!"
86
+ FileUtils.rm_rf sane_folder unless keep_temp
87
+ end
88
+ end
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,21 @@
1
+ require 'thor'
2
+ require 'mr2cbz'
3
+
4
+ module Mr2cbz
5
+ class Task < Thor
6
+ desc "list","List all the available manga"
7
+ def list
8
+ Manga.list { |title, completed| puts "#{title} #{'[completed]' if completed}" }
9
+ end
10
+
11
+ desc "get MANGA FROM [TO]",
12
+ "downloads the required MANGA from number FROM to number TO. If TO is missing only one manga will be downloaded"
13
+ method_option :keep_temp, :aliases => "--no-delete",
14
+ :type => :boolean, :default => false,
15
+ :desc => "Keep the jpeg folder after creating the CBZ"
16
+ def get(manga, from, to=from)
17
+ m = Manga.new(manga)
18
+ m.download(from.to_i, to.to_i, options[:keep_temp])
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Mr2cbz
2
+ VERSION = "0.0.1"
3
+ end
data/mr2cbz.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mr2cbz/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mr2cbz"
7
+ s.version = Mr2cbz::VERSION
8
+ s.authors = ["Alessio Caiazza"]
9
+ s.email = ["nolith@abisso.org"]
10
+ s.homepage = "https://github.com/nolith/mr2cbz"
11
+ s.summary = %q{From mangareader.net to CBZ}
12
+ s.description = %q{Downloads manga from mangareder.net in CBZ format}
13
+
14
+ s.rubyforge_project = "mr2cbz"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_development_dependency 'rake'
24
+ s.add_runtime_dependency 'mechanize'
25
+ s.add_runtime_dependency 'thor'
26
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mr2cbz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alessio Caiazza
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70266273264240 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70266273264240
25
+ - !ruby/object:Gem::Dependency
26
+ name: mechanize
27
+ requirement: &70266273263680 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70266273263680
36
+ - !ruby/object:Gem::Dependency
37
+ name: thor
38
+ requirement: &70266273263060 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70266273263060
47
+ description: Downloads manga from mangareder.net in CBZ format
48
+ email:
49
+ - nolith@abisso.org
50
+ executables:
51
+ - mr2cbz
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - Gemfile
57
+ - Rakefile
58
+ - bin/mr2cbz
59
+ - lib/mr2cbz.rb
60
+ - lib/mr2cbz/manga.rb
61
+ - lib/mr2cbz/task.rb
62
+ - lib/mr2cbz/version.rb
63
+ - mr2cbz.gemspec
64
+ homepage: https://github.com/nolith/mr2cbz
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project: mr2cbz
84
+ rubygems_version: 1.8.15
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: From mangareader.net to CBZ
88
+ test_files: []