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 +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/bin/mr2cbz +8 -0
- data/lib/mr2cbz.rb +6 -0
- data/lib/mr2cbz/manga.rb +92 -0
- data/lib/mr2cbz/task.rb +21 -0
- data/lib/mr2cbz/version.rb +3 -0
- data/mr2cbz.gemspec +26 -0
- metadata +88 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/mr2cbz
ADDED
data/lib/mr2cbz.rb
ADDED
data/lib/mr2cbz/manga.rb
ADDED
@@ -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
|
data/lib/mr2cbz/task.rb
ADDED
@@ -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
|
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: []
|