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.
Files changed (5) hide show
  1. data/VERSION +1 -1
  2. data/lib/lib/job.rb +196 -43
  3. data/lib/lib/machine.rb +65 -1
  4. data/my-lib.gemspec +2 -2
  5. metadata +23 -23
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
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
- return if file_already_saved?
339
-
340
- # if @machine.connection_exceed? #コネクション限界を超えていないか?
341
- # @machine.retry(self)
342
- # print "E".red.bold
343
- # return
344
- # end
345
-
346
- @http = EventMachine::Protocols::HttpClient.
347
- request(
348
- :host => @args[:server],
349
- :port => @args[:port],
350
- :request => @args[:path],
351
- :cookie => @args[:cookie]['Cookie']
352
- )
353
- @machine.connection_count!
354
- @http.errback{
355
- begin
356
- ensure
357
- @machine.connection_end!
358
- end
359
- }
360
-
361
- @http.callback {|response|
362
- begin
363
- if response[:status] == 200
364
- # 200 はレスポンスの中身を保存する
365
- save_content(response[:content])
366
- elsif response[:status] == 503 ||
367
- response[:status] == 500 ||
368
- response[:status] == 403
369
- # 503/500/403はリトライする
370
- @args[:try] += 1
371
- @machine.retry(self) if @args[:try] < 6
372
- elsif response[:status] == 404
373
- # 404は終了する
374
- else
375
- puts response[:status].to_s.red.bold
376
- puts response[:headers].to_s.red.bold
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.1"
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-15"
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.1
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-15 00:00:00.000000000Z
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: &2153883760 !ruby/object:Gem::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: *2153883760
24
+ version_requirements: *2153870560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &2153883200 !ruby/object:Gem::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: *2153883200
35
+ version_requirements: *2153868700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mechanize
38
- requirement: &2153882620 !ruby/object:Gem::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: *2153882620
46
+ version_requirements: *2153867940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2153882120 !ruby/object:Gem::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: *2153882120
57
+ version_requirements: *2153867020
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yard
60
- requirement: &2153881500 !ruby/object:Gem::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: *2153881500
68
+ version_requirements: *2153866240
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &2153880820 !ruby/object:Gem::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: *2153880820
79
+ version_requirements: *2153865400
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &2153880140 !ruby/object:Gem::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: *2153880140
90
+ version_requirements: *2153848220
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rcov
93
- requirement: &2153879460 !ruby/object:Gem::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: *2153879460
101
+ version_requirements: *2153846360
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: guard
104
- requirement: &2153878740 !ruby/object:Gem::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: *2153878740
112
+ version_requirements: *2153845280
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: guard-spork
115
- requirement: &2153860880 !ruby/object:Gem::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: *2153860880
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: -3518175125855602385
171
+ hash: -347030689861470656
172
172
  required_rubygems_version: !ruby/object:Gem::Requirement
173
173
  none: false
174
174
  requirements: