my-lib 0.2.1 → 0.2.2
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/VERSION +1 -1
- data/lib/lib/job.rb +196 -43
- data/lib/lib/machine.rb +65 -1
- data/my-lib.gemspec +2 -2
- metadata +23 -23
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/lib/lib/job.rb
CHANGED
@@ -1,4 +1,157 @@
|
|
1
1
|
#-*- coding:utf-8 -*-
|
2
|
+
|
3
|
+
class MyJobAnime44
|
4
|
+
def initialize(args={})
|
5
|
+
require 'kconv'
|
6
|
+
require 'mechanize'
|
7
|
+
require 'net/http'
|
8
|
+
@a = args
|
9
|
+
@debug = args[:debug] ||= false
|
10
|
+
@a[:url] ||= 'http://www.anime44.com/'
|
11
|
+
@a[:status] ||= :top_page
|
12
|
+
return if @a[:url].nil?
|
13
|
+
@agent = Mechanize.new
|
14
|
+
@a[:recursive] ||= 4
|
15
|
+
end
|
16
|
+
#
|
17
|
+
def top_page
|
18
|
+
print :top_page if @debug
|
19
|
+
@agent.get @a[:url]
|
20
|
+
# p @agent.page
|
21
|
+
@agent.page.search('table')[1].css('td li')
|
22
|
+
targs = @agent.page.search('table')[1].css('td li').select {|ne| ne.text =~ /\(Raw\)/ }
|
23
|
+
a_s = []
|
24
|
+
targs.each {|ne| a_s << ne.css('a').map{|e|e[:href]}[0]}
|
25
|
+
a_s.each do |link|
|
26
|
+
job = MyJobAnime44.new(@a.merge({
|
27
|
+
:url => link,
|
28
|
+
:status => :anime44_first
|
29
|
+
}))
|
30
|
+
@a[:machine].retry job
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def anime44_first
|
35
|
+
print :anime44_first if @debug
|
36
|
+
begin
|
37
|
+
@agent.get @a[:url]
|
38
|
+
rescue => ex
|
39
|
+
p ex if @debug
|
40
|
+
p @a[:url] if @debug
|
41
|
+
return
|
42
|
+
end
|
43
|
+
@title = @agent.page.title
|
44
|
+
|
45
|
+
flg = false
|
46
|
+
|
47
|
+
daily_embeds_links = @agent.page.search('embed[@src^="http://www.daily"]').map {|ne| ne[:src] }
|
48
|
+
|
49
|
+
unless daily_embeds_links[0].nil?
|
50
|
+
uri = daily_src2hqurl(daily_embeds_links[0])
|
51
|
+
if uri[:status] == :ok
|
52
|
+
flg = true
|
53
|
+
job = MyJobAnime44.new(
|
54
|
+
@a.merge({
|
55
|
+
:url => uri[:url],
|
56
|
+
:title => @title,
|
57
|
+
:status => :anime44_fetch}))
|
58
|
+
@a[:machine].retry job
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
unless flg == true
|
63
|
+
begin
|
64
|
+
@agent.get @a[:url]
|
65
|
+
rescue => ex
|
66
|
+
p ex if @debug
|
67
|
+
p @a[:url] if @debug
|
68
|
+
return
|
69
|
+
end
|
70
|
+
|
71
|
+
videozer_embeds_links = @agent.page.search('embed[@src^="http://www.videozer"]').map {|ne| ne[:src] }
|
72
|
+
unless videozer_embeds_links[0].nil?
|
73
|
+
flg = true
|
74
|
+
url1 = videozer_embeds_links[0].gsub('http://www.videozer.com/embed/','http://video195.videozer.com/video?v=')
|
75
|
+
url = "#{url1}&r=1&t=#{Time.new.to_i.to_s}&u=&start=0"
|
76
|
+
job = MyJobAnime44.new(
|
77
|
+
@a.merge({
|
78
|
+
:url => url,
|
79
|
+
:title => @title,
|
80
|
+
:status => :anime44_fetch}))
|
81
|
+
@a[:machine].retry job
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
begin
|
87
|
+
if @a[:recursive] < 4
|
88
|
+
alignleft = @agent.page.search('div.alignleft a')[0]['href']
|
89
|
+
job = MyJobAnime44.new(
|
90
|
+
@a.merge({
|
91
|
+
:url => alignleft,
|
92
|
+
:recursive => @a[:recursive] + 1,
|
93
|
+
:status => :anime44_first}))
|
94
|
+
@a[:machine].retry job
|
95
|
+
end
|
96
|
+
rescue => ex
|
97
|
+
end
|
98
|
+
|
99
|
+
begin
|
100
|
+
if @a[:recursive] < 4
|
101
|
+
alignright = @agent.page.search('div.alignright a')[0]['href']
|
102
|
+
job = MyJobAnime44.new(
|
103
|
+
@a.merge({
|
104
|
+
:url => alignright,
|
105
|
+
:recursive => @a[:recursive] + 1,
|
106
|
+
|
107
|
+
:status => :anime44_first}))
|
108
|
+
@a[:machine].retry job
|
109
|
+
end
|
110
|
+
rescue => ex
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def anime44_fetch
|
115
|
+
print "video".yellow
|
116
|
+
|
117
|
+
savedir = @a[:machine].savedir
|
118
|
+
Dir.chdir savedir
|
119
|
+
|
120
|
+
filename = "#{@a[:title].gsub(' ','').gsub(' ','')}.mp4"
|
121
|
+
savepath = "#{savedir}/#{filename}"
|
122
|
+
|
123
|
+
if File.exist?(savepath) && File.size(savepath) > 1024 * 1024 * 3
|
124
|
+
puts "File Already Saved ".yellow.bold + savepath
|
125
|
+
return
|
126
|
+
else
|
127
|
+
puts "Fetching ".green.bold + savepath
|
128
|
+
MyLogger.ln "Fetch Attempt Start ".green.bold + savepath
|
129
|
+
end
|
130
|
+
# use curl command
|
131
|
+
# no need UA...
|
132
|
+
command = "curl -# -L -R -o '#{filename}' '#{@a[:url]}' >/dev/null 2>&1 &"
|
133
|
+
puts command
|
134
|
+
system command unless @debug
|
135
|
+
end
|
136
|
+
|
137
|
+
def daily_src2hqurl(url)
|
138
|
+
require 'json'
|
139
|
+
begin
|
140
|
+
js= JSON.parse(@agent.get(url.gsub('swf','sequence/full')).body)
|
141
|
+
uri = js[0]['layerList'][0]['sequenceList'][1]['layerList'][2]['param']['videoPluginParameters']['hqURL']
|
142
|
+
rescue =>ex
|
143
|
+
return {:status => :error}
|
144
|
+
end
|
145
|
+
{:status => :ok,:url => uri}
|
146
|
+
end
|
147
|
+
|
148
|
+
def run
|
149
|
+
send @a[:status]
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
|
2
155
|
# Job Class for Fetch Anisoku
|
3
156
|
# Function:
|
4
157
|
# access "youtubeanisoku1.blog106.fc2.com" and crawl web site.
|
@@ -335,50 +488,50 @@ class MyJobDojinEventMachine < MyJobDojin
|
|
335
488
|
private
|
336
489
|
|
337
490
|
def do_connect
|
338
|
-
|
339
|
-
|
340
|
-
# if @machine.connection_exceed? #コネクション限界を超えていないか?
|
341
|
-
# @machine.retry(self)
|
342
|
-
# print "E".red.bold
|
343
|
-
# return
|
344
|
-
# end
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
end
|
378
|
-
ensure
|
379
|
-
@machine.connection_end!
|
491
|
+
return if file_already_saved?
|
492
|
+
|
493
|
+
# if @machine.connection_exceed? #コネクション限界を超えていないか?
|
494
|
+
# @machine.retry(self)
|
495
|
+
# print "E".red.bold
|
496
|
+
# return
|
497
|
+
# end
|
498
|
+
|
499
|
+
@http = EventMachine::Protocols::HttpClient.
|
500
|
+
request(
|
501
|
+
:host => @args[:server],
|
502
|
+
:port => @args[:port],
|
503
|
+
:request => @args[:path],
|
504
|
+
:cookie => @args[:cookie]['Cookie']
|
505
|
+
)
|
506
|
+
@machine.connection_count!
|
507
|
+
@http.errback{
|
508
|
+
begin
|
509
|
+
ensure
|
510
|
+
@machine.connection_end!
|
511
|
+
end
|
512
|
+
}
|
513
|
+
|
514
|
+
@http.callback {|response|
|
515
|
+
begin
|
516
|
+
if response[:status] == 200
|
517
|
+
# 200 はレスポンスの中身を保存する
|
518
|
+
save_content(response[:content])
|
519
|
+
elsif response[:status] == 503 ||
|
520
|
+
response[:status] == 500 ||
|
521
|
+
response[:status] == 403
|
522
|
+
# 503/500/403はリトライする
|
523
|
+
@args[:try] += 1
|
524
|
+
@machine.retry(self) if @args[:try] < 6
|
525
|
+
elsif response[:status] == 404
|
526
|
+
# 404は終了する
|
527
|
+
else
|
528
|
+
puts response[:status].to_s.red.bold
|
529
|
+
puts response[:headers].to_s.red.bold
|
380
530
|
end
|
381
|
-
|
531
|
+
ensure
|
532
|
+
@machine.connection_end!
|
533
|
+
end
|
534
|
+
}
|
382
535
|
end
|
383
536
|
end
|
384
537
|
|
data/lib/lib/machine.rb
CHANGED
@@ -129,6 +129,61 @@ class MyEventMachineDojin
|
|
129
129
|
|
130
130
|
end
|
131
131
|
|
132
|
+
class MyMachineAnime44
|
133
|
+
include MyMachine
|
134
|
+
|
135
|
+
attr_reader :savedir
|
136
|
+
|
137
|
+
def initialize(args={ })
|
138
|
+
require 'eventmachine'
|
139
|
+
super(args)
|
140
|
+
args[:savedir] ||= "#{ENV['HOME']}/Desktop/video"
|
141
|
+
@savedir = args[:savedir]
|
142
|
+
begin
|
143
|
+
Dir::mkdir(@savedir, 0777)
|
144
|
+
rescue => ex
|
145
|
+
warn ex
|
146
|
+
end
|
147
|
+
@args = args
|
148
|
+
@args[:recursive] ||= 2
|
149
|
+
@gaman = 0;
|
150
|
+
end
|
151
|
+
|
152
|
+
# machine go to run eventmachine
|
153
|
+
def go
|
154
|
+
EM.run do
|
155
|
+
EM.add_periodic_timer(0.00001) do
|
156
|
+
# print "loop".green
|
157
|
+
if should_stop_machine?
|
158
|
+
EM.stop
|
159
|
+
end
|
160
|
+
@queue.pop.run unless @queue.empty?
|
161
|
+
end
|
162
|
+
end
|
163
|
+
puts "End of fetch".green.bold
|
164
|
+
end
|
165
|
+
|
166
|
+
# setup jobs
|
167
|
+
def setupjobs
|
168
|
+
ajob = MyJobAnime44
|
169
|
+
.new(
|
170
|
+
:machine => self,
|
171
|
+
:recursive => @args[:recursive],
|
172
|
+
:debug => @debug,
|
173
|
+
)
|
174
|
+
@queue.push ajob
|
175
|
+
end
|
176
|
+
|
177
|
+
# Machineは終了すべきか?
|
178
|
+
def should_stop_machine?
|
179
|
+
@gaman += 1 if @queue.size < 3
|
180
|
+
if @gaman > 1000
|
181
|
+
return true
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
|
132
187
|
#
|
133
188
|
# Class of Machine by EventMachine.
|
134
189
|
# this class controll jobs for Anisoku
|
@@ -167,7 +222,7 @@ class MyMachineAnisoku
|
|
167
222
|
@args = args
|
168
223
|
@args[:limit] ||= 7
|
169
224
|
@args[:recent] ||= 7
|
170
|
-
|
225
|
+
@args[:mode] ||= :anisoku
|
171
226
|
make_filelist
|
172
227
|
make_dellist
|
173
228
|
end
|
@@ -267,6 +322,15 @@ class MyMachineAnisoku
|
|
267
322
|
:recent => @args[:recent],
|
268
323
|
:debug => @debug,
|
269
324
|
)
|
325
|
+
if @args[:mode] == :anime44
|
326
|
+
ajob = MyJobAnime44
|
327
|
+
.new(
|
328
|
+
:machine => self,
|
329
|
+
:limit => @args[:limit],
|
330
|
+
:recent => @args[:recent],
|
331
|
+
:debug => @debug,
|
332
|
+
)
|
333
|
+
end
|
270
334
|
@queue.push ajob
|
271
335
|
end
|
272
336
|
|
data/my-lib.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "my-lib"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["modeverv"]
|
12
|
-
s.date = "2011-10-
|
12
|
+
s.date = "2011-10-17"
|
13
13
|
s.description = "longer description of your gem"
|
14
14
|
s.email = "modeverv@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
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-10-
|
12
|
+
date: 2011-10-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: term-ansicolor
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153870560 !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: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153870560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153868700 !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: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2153868700
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mechanize
|
38
|
-
requirement: &
|
38
|
+
requirement: &2153867940 !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: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153867940
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &2153867020 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>'
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.3.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153867020
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &2153866240 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>'
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.6.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153866240
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
requirement: &
|
71
|
+
requirement: &2153865400 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>'
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.0.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153865400
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
requirement: &
|
82
|
+
requirement: &2153848220 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2153848220
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rcov
|
93
|
-
requirement: &
|
93
|
+
requirement: &2153846360 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2153846360
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: guard
|
104
|
-
requirement: &
|
104
|
+
requirement: &2153845280 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2153845280
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: guard-spork
|
115
|
-
requirement: &
|
115
|
+
requirement: &2153844520 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *2153844520
|
124
124
|
description: longer description of your gem
|
125
125
|
email: modeverv@gmail.com
|
126
126
|
executables: []
|
@@ -168,7 +168,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
segments:
|
170
170
|
- 0
|
171
|
-
hash: -
|
171
|
+
hash: -347030689861470656
|
172
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
173
|
none: false
|
174
174
|
requirements:
|