my-lib 0.0.1.1 → 0.0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -13,4 +13,6 @@ group :development do
13
13
  gem "bundler", "> 1.0.0"
14
14
  gem "jeweler"
15
15
  gem "rcov", ">= 0"
16
+ gem "guard"
17
+ gem "guard-spork"
16
18
  end
data/Gemfile.lock CHANGED
@@ -4,6 +4,11 @@ GEM
4
4
  diff-lcs (1.1.3)
5
5
  eventmachine (0.12.10)
6
6
  git (1.2.5)
7
+ guard (0.6.3)
8
+ thor (~> 0.14.6)
9
+ guard-spork (0.2.1)
10
+ guard (>= 0.2.2)
11
+ spork (>= 0.8.4)
7
12
  jeweler (1.6.4)
8
13
  bundler (~> 1.0)
9
14
  git (>= 1.2.5)
@@ -26,7 +31,9 @@ GEM
26
31
  rspec-expectations (2.6.0)
27
32
  diff-lcs (~> 1.1.2)
28
33
  rspec-mocks (2.6.0)
34
+ spork (0.8.5)
29
35
  term-ansicolor (1.0.6)
36
+ thor (0.14.6)
30
37
  webrobots (0.0.11)
31
38
  nokogiri (>= 1.4.4)
32
39
  yard (0.7.2)
@@ -37,6 +44,8 @@ PLATFORMS
37
44
  DEPENDENCIES
38
45
  bundler (> 1.0.0)
39
46
  eventmachine
47
+ guard
48
+ guard-spork
40
49
  jeweler
41
50
  mechanize
42
51
  rcov
data/TAGS ADDED
@@ -0,0 +1,66 @@
1
+
2
+ (null),18
3
+ def hogehoge2,6
4
+
5
+ lib/dev.rb,1335
6
+ class MyObjectMyObject24,488
7
+ def self.myrequiremyrequire25,503
8
+ class MyConfigMyConfig33,665
9
+ def self.getget35,718
10
+ def self.readread42,795
11
+ module RunPerSecModuleRunPerSecModule63,1245
12
+ def run(sec)run71,1556
13
+ def init_run_per_sec_moduleinit_run_per_sec_module86,1798
14
+ def stop_runstop_run91,1885
15
+ def before_run_loopbefore_run_loop96,2014
16
+ def loop_hook_preloop_hook_pre100,2103
17
+ def main_loopmain_loop104,2181
18
+ def loop_hook_postloop_hook_post108,2269
19
+ def after_run_loopafter_run_loop112,2373
20
+ module MyDBModuleMyDBModule139,2874
21
+ def set_my_dbset_my_db147,2981
22
+ def insert_DB(key='test_app',value='')insert_DB168,3575
23
+ module MyPusherModuleMyPusherModule195,4206
24
+ def set_my_pusherset_my_pusher201,4330
25
+ def push_pusher(app_name='test_app',data='test')push_pusher216,4701
26
+ module MyGCalModuleMyGCalModule246,5321
27
+ def gcal_readgcal_read249,5403
28
+ def gcal_write(eventdata)gcal_write256,5509
29
+ def gcal_parse_2_jobsgcal_parse_2_jobs269,5858
30
+ def gcal_checkout(event)gcal_checkout290,6403
31
+ def serviceservice297,6540
32
+ module MyAtModuleMyAtModule323,7102
33
+ def initializeinitialize324,7120
34
+ def gcaljobs_2_atgcaljobs_2_at328,7180
35
+ def jobs2at(job)jobs2at333,7266
36
+ def _at_scriptpath(job)_at_scriptpath346,7600
37
+ def _at_command(job)_at_command350,7716
38
+
39
+ lib/my-lib.rb,924
40
+ class StringString6,89
41
+ class MyLoggerMyLogger16,267
42
+ def self.ln(message)ln22,367
43
+ def self.lw(message)lw30,540
44
+ def self.beforebefore38,717
45
+ def self.afterafter44,843
46
+ class MyJobAnisokuMyJobAnisoku66,1426
47
+ def initialize(args = { })initialize70,1471
48
+ def tokkakaritokkakari84,1872
49
+ def secondsecond103,2321
50
+ def thirdthird124,2884
51
+ def kobetukobetu143,3352
52
+ def videovideo240,5755
53
+ def runrun302,7444
54
+ module MyMachineMyMachine325,7804
55
+ def initializeinitialize331,7871
56
+ def setupsetup336,7941
57
+ def gogo341,7991
58
+ def retry(job)retry345,8048
59
+ def setupjobssetupjobs351,8103
60
+ def setupmachinesetupmachine355,8177
61
+ class MyMachineAnisokuMyMachineAnisoku369,8438
62
+ def initialize(args={ })initialize381,8764
63
+ def gogo397,9115
64
+ def finalize_filesfinalize_files414,9443
65
+ def setupjobssetupjobs428,9813
66
+ def should_stop_machine?should_stop_machine?436,9948
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1.1
1
+ 0.0.1.3
data/lib/1.rb ADDED
@@ -0,0 +1,4 @@
1
+ #test
2
+ def hoge
3
+ p :hoge
4
+ end
@@ -0,0 +1,292 @@
1
+ #-*- coding:utf-8 -*-
2
+
3
+ #
4
+ # Job Class for Fetch Anisoku
5
+ # Function:
6
+ # access "youtubeanisoku1.blog106.fc2.com" and crawl web site.
7
+ # find a link to "say-move.org" and access "say-move.org".
8
+ # finary find video link of Animetion,then fetch video file to your local.
9
+ # save video directory is supplied by machine.
10
+ # Notice:
11
+ # job is automatically generated on after another.
12
+ # This Class Needs to be handle by Machine Class
13
+ # @example
14
+ # # inside machine class
15
+ # job = MyJobAnisoku.new(
16
+ # :machine => self
17
+ # )
18
+ # job.run
19
+ #
20
+
21
+ class MyJobAnisoku
22
+
23
+ Version = "0.0.2"
24
+
25
+ def initialize(args = { })
26
+ require 'rubygems'
27
+ require 'kconv'
28
+ require 'mechanize'
29
+ require 'net/http'
30
+ @a = args
31
+ @a[:url] ||= 'http://youtubeanisoku1.blog106.fc2.com/'
32
+ @a[:url] = URI.parse @a[:url] unless @a[:url].class == URI::HTTP
33
+ @agent = Mechanize.new
34
+ @a[:status] ||= :new
35
+ raise "job have no machine error" unless @a[:machine]
36
+ end
37
+
38
+ # check kousin page
39
+ def tokkakari
40
+ print "Tokkakari".yellow
41
+ @agent.get @a[:url]
42
+ links_kousins = @agent.page.links_with(:text => /#{"更新状況".toutf8}/)
43
+ targs = []
44
+ links_kousins.each do |link|
45
+ targs << link.uri
46
+ end
47
+ targs.each_with_index do |link,i|
48
+ break if i > 6
49
+ job = MyJobAnisoku.new(
50
+ :url => link,
51
+ :status => :second,
52
+ :machine => @a[:machine]
53
+ )
54
+ @a[:machine].retry job
55
+ end
56
+
57
+ end
58
+
59
+ # check shoukai page
60
+ def second
61
+ print "Second".yellow
62
+ @agent.get @a[:url]
63
+ links_kousin = @agent.page/"/html/body/table/tr[2]/td/table/tr/td[2]/div[4]/ul/li/a/@href"
64
+ # links_kobetu
65
+ links_kobetu = []
66
+ links_kousin.each do |link|
67
+ links_kobetu << $1 if link.value =~ /(http:\/\/youtubeanisoku.*)/
68
+ end
69
+
70
+ # make job for each links_kobetu
71
+ links_kobetu.each do |link|
72
+ job = MyJobAnisoku.new(
73
+ :url => link,
74
+ :status => :kobetu,
75
+ :machine => @a[:machine]
76
+ )
77
+ @a[:machine].retry job
78
+ end
79
+ end
80
+
81
+ #access say-move and make video job
82
+ def kobetu
83
+ print "Kobetu".yellow
84
+ @agent.get @a[:url]
85
+ _tt = @agent.page.title.gsub(' ★ You Tube アニ速 ★','')
86
+ limit = 5
87
+ urls = []
88
+ # acume url
89
+ nodeset_vs = @agent.page/"/html/body/table/tr[2]/td/table/tr/td[2]/div[4]/div[2]/a/@href"
90
+ _dd = []
91
+
92
+ nodeset_vs.each do |va|
93
+ _dd << $1 if va.value =~ /(http:\/\/say-move\.org\/comeplay\.php.*)/
94
+ end
95
+ _dd.reverse!
96
+
97
+ #hard coding for adjust fetch limit
98
+ _dd.each_with_index do |url,i|
99
+ break if i > limit
100
+ urls << url
101
+ end
102
+
103
+ urls.each_with_index do |url,i|
104
+ job = MyJobAnisoku.new(
105
+ :url => url,
106
+ :title => _tt,
107
+ :status => :third,
108
+ :machine => @a[:machine]
109
+ )
110
+ @a[:machine].retry job
111
+ end
112
+ end
113
+
114
+ #access say-move and make video job
115
+ def third
116
+ print "Third".yellow
117
+ #sm has title and url
118
+
119
+ sm = { :title => @a[:title],:url => @a[:url]}
120
+ # debug fc2 video sm[:url] = "http://say-move.org/comeplay.php?comeid=217953"
121
+ @agent.get(sm[:url])
122
+ sm[:title] += @agent.page.title.gsub!('FC2 SayMove!','')
123
+ set = @agent.page/"/html/body/div/div[2]/div[7]/div[2]/input/@value"
124
+ if !set.empty?
125
+ sm[:videourl] = set[0].value
126
+ else
127
+ set = @agent.page/"/html/body/div/div[2]/div[3]/object/param[5]/@value"
128
+ fc2 = set[0].value.split('&')[1].split('=')[1]
129
+ unless fc2.nil?
130
+ job = MyJobAnisoku.new(
131
+ :url => sm[:url],
132
+ :fc2 => fc2,
133
+ :title => sm[:title],
134
+ :status => :fc2,
135
+ :machine => @a[:machine]
136
+ )
137
+ @a[:machine].retry job
138
+ return
139
+ else
140
+ end
141
+ end
142
+
143
+ job = MyJobAnisoku.new(
144
+ :url => sm[:videourl],
145
+ :title => sm[:title],
146
+ :status => :video,
147
+ :machine => @a[:machine]
148
+ )
149
+ @a[:machine].retry job
150
+ end
151
+
152
+ def fc2
153
+ print "fc2".yellow
154
+ require 'digest'
155
+ # make md5 with magicword '_gGddgPfeaf_gzyr'
156
+ url = "http://video.fc2.com/ginfo.php?mimi=#{Digest::MD5.hexdigest(@a[:fc2] + '_gGddgPfeaf_gzyr')}&v=#{@a[:fc2]}&upid=#{@a[:fc2]}&otag=1"
157
+ url = `curl -# -L -R "#{url}"`
158
+ url = url.split('&')[0].split('=')[1] + '?' + url.split('&')[1]
159
+ puts url.red.bold
160
+ job = MyJobAnisoku.new(
161
+ :url => url,
162
+ :title => @a[:title],
163
+ :status => :video,
164
+ :machine => @a[:machine]
165
+ )
166
+ @a[:machine].retry job
167
+ end
168
+
169
+ #fetch video
170
+ def video
171
+ print "video".yellow
172
+ # save video directory is supplied by machine.
173
+ savedir = @a[:machine].savedir
174
+ Dir.chdir savedir
175
+ filename = "#{@a[:title]}.mp4"
176
+ savepath = "#{savedir}/#{filename}"
177
+ # check fetch candidate had been already saved?
178
+ if File.exist?(savepath) && File.size(savepath) > 1024 * 1024 * 3
179
+ puts "File Already Saved ".yellow.bold + savepath
180
+ return
181
+ else
182
+ puts "Fetching ".green.bold + savepath
183
+ MyLogger.ln "Fetch Attempt Start ".green.bold + savepath
184
+ end
185
+
186
+ # use curl command
187
+ # no need UA...
188
+ # command = "curl -# -L -R -o '#{filename}' 'http://#{@a[:url].host}#{@a[:url].path}?#{@a[:url].query}' --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0a1) Gecko/20110901 Firefox/9.0a1'"
189
+ command = "curl -# -L -R -o '#{filename}' 'http://#{@a[:url].host}#{@a[:url].path}?#{@a[:url].query}' "
190
+
191
+ p command
192
+ system command
193
+ end
194
+
195
+ # run in thread
196
+ def run
197
+ t = Thread.new do
198
+ case @a[:status]
199
+ when :new then
200
+ tokkakari
201
+ when :second then
202
+ second
203
+ when :kobetu then
204
+ kobetu
205
+ when :third then
206
+ third
207
+ when :fc2 then
208
+ fc2
209
+ when :video then
210
+ video
211
+ end
212
+ end
213
+ end
214
+
215
+ end
216
+
217
+
218
+
219
+ #
220
+ # Class of Machine by EventMachine.
221
+ # this class controll jobs for Anisoku
222
+ # @example
223
+ # machine = MyMachineAnisoku.new("YourVideoSaveDir")
224
+ # machine.setup
225
+ # machine.go
226
+ #
227
+ class MyMachineAnisoku
228
+ include MyMachine
229
+
230
+ Version = "0.0.1"
231
+
232
+ # directory of save video files default "#{ENV['HOME']}/Desktop/video"
233
+ attr_accessor :savedir
234
+
235
+ # set video save dir
236
+ # @param [Hash] args
237
+ # @option args [String] :savedir save dir
238
+ # default "#{ENV['HOME']}/Desktop/video"
239
+ def initialize(args={ })
240
+ super()
241
+ args[:savedir] ||= "#{ENV['HOME']}/Desktop/video2"
242
+ @savedir = args[:savedir]
243
+ begin
244
+ Dir::mkdir(@savedir, 0777)
245
+ rescue => ex
246
+ warn ex
247
+ end
248
+ require 'rubygems'
249
+ require 'eventmachine'
250
+ # @gaman controll eventmachine end
251
+ @gaman = 0
252
+ end
253
+
254
+ # machine go to run eventmachine
255
+ def go
256
+ EM.run do
257
+ EM.add_periodic_timer(0.00001) do
258
+ # print "loop".green
259
+ if should_stop_machine?
260
+ finalize_files
261
+ EM.stop
262
+ end
263
+ @queue.pop.run unless @queue.empty?
264
+ end
265
+ end
266
+ puts "End of fetch".green.bold
267
+ end
268
+
269
+
270
+ # delete tiny fail files
271
+ def finalize_files
272
+ command = "find #{@savedir} -size -1000k -type f -print0| xargs -0 rm -v "
273
+ exec(command)
274
+ end
275
+
276
+ private
277
+
278
+ # setup jobs
279
+ def setupjobs
280
+ ajob = MyJobAnisoku.new(
281
+ :machine => self
282
+ )
283
+ @queue.push ajob
284
+ end
285
+
286
+ # should stop machine or not
287
+ def should_stop_machine?
288
+ @gaman += 1 if @queue.empty?
289
+ print @gaman
290
+ return @queue.empty? && @gaman > 1500
291
+ end
292
+ end
data/lib/lib/job.rb ADDED
@@ -0,0 +1,212 @@
1
+ #-*- coding:utf-8 -*-
2
+ # Job Class for Fetch Anisoku
3
+ # Function:
4
+ # access "youtubeanisoku1.blog106.fc2.com" and crawl web site.
5
+ # find a link to "say-move.org" and access "say-move.org".
6
+ # finary find video link of Animetion,then fetch video file to your local.
7
+ # save video directory is supplied by machine.
8
+ # Notice:
9
+ # job is automatically generated on after another.
10
+ # This Class Needs to be handle by Machine Class
11
+ # @example
12
+ # # inside machine class
13
+ # job = MyJobAnisoku.new(
14
+ # :machine => self
15
+ # )
16
+ # job.run
17
+ #
18
+ class MyJobAnisoku
19
+
20
+ Version = "0.0.2"
21
+
22
+ def initialize(args = { })
23
+ require 'rubygems'
24
+ require 'kconv'
25
+ require 'mechanize'
26
+ require 'net/http'
27
+ @a = args
28
+ @a[:url] ||= 'http://youtubeanisoku1.blog106.fc2.com/'
29
+ @a[:url] = URI.parse @a[:url] unless @a[:url].class == URI::HTTP
30
+ @agent = Mechanize.new
31
+ @a[:status] ||= :new
32
+ raise "job have no machine error" unless @a[:machine]
33
+ end
34
+
35
+ # check kousin page
36
+ def tokkakari
37
+ print "Tokkakari".yellow
38
+ @agent.get @a[:url]
39
+ links_kousins = @agent.page.links_with(:text => /#{"更新状況".toutf8}/)
40
+ targs = []
41
+ links_kousins.each do |link|
42
+ targs << link.uri
43
+ end
44
+ targs.each_with_index do |link,i|
45
+ break if i > 6
46
+ job = MyJobAnisoku.new(
47
+ :url => link,
48
+ :status => :second,
49
+ :machine => @a[:machine]
50
+ )
51
+ @a[:machine].retry job
52
+ end
53
+
54
+ end
55
+
56
+ # check shoukai page
57
+ def second
58
+ print "Second".yellow
59
+ @agent.get @a[:url]
60
+ links_kousin = @agent.page/"/html/body/table/tr[2]/td/table/tr/td[2]/div[4]/ul/li/a/@href"
61
+ # links_kobetu
62
+ links_kobetu = []
63
+ links_kousin.each do |link|
64
+ links_kobetu << $1 if link.value =~ /(http:\/\/youtubeanisoku.*)/
65
+ end
66
+
67
+ # make job for each links_kobetu
68
+ links_kobetu.each do |link|
69
+ job = MyJobAnisoku.new(
70
+ :url => link,
71
+ :status => :kobetu,
72
+ :machine => @a[:machine]
73
+ )
74
+ @a[:machine].retry job
75
+ end
76
+ end
77
+
78
+ #access say-move and make video job
79
+ def kobetu
80
+ print "Kobetu".yellow
81
+ @agent.get @a[:url]
82
+ _tt = @agent.page.title.gsub(' ★ You Tube アニ速 ★','')
83
+ limit = 5
84
+ urls = []
85
+ # acume url
86
+ nodeset_vs = @agent.page/"/html/body/table/tr[2]/td/table/tr/td[2]/div[4]/div[2]/a/@href"
87
+ _dd = []
88
+
89
+ nodeset_vs.each do |va|
90
+ _dd << $1 if va.value =~ /(http:\/\/say-move\.org\/comeplay\.php.*)/
91
+ end
92
+ _dd.reverse!
93
+
94
+ #hard coding for adjust fetch limit
95
+ _dd.each_with_index do |url,i|
96
+ break if i > limit
97
+ urls << url
98
+ end
99
+
100
+ urls.each_with_index do |url,i|
101
+ job = MyJobAnisoku.new(
102
+ :url => url,
103
+ :title => _tt,
104
+ :status => :third,
105
+ :machine => @a[:machine]
106
+ )
107
+ @a[:machine].retry job
108
+ end
109
+ end
110
+
111
+ #access say-move and make video job
112
+ def third
113
+ print "Third".yellow
114
+ #sm has title and url
115
+
116
+ sm = { :title => @a[:title],:url => @a[:url]}
117
+ # debug fc2 video sm[:url] = "http://say-move.org/comeplay.php?comeid=217953"
118
+ @agent.get(sm[:url])
119
+ sm[:title] += @agent.page.title.gsub!('FC2 SayMove!','')
120
+ set = @agent.page/"/html/body/div/div[2]/div[7]/div[2]/input/@value"
121
+ if !set.empty?
122
+ sm[:videourl] = set[0].value
123
+ else
124
+ set = @agent.page/"/html/body/div/div[2]/div[3]/object/param[5]/@value"
125
+ fc2 = set[0].value.split('&')[1].split('=')[1]
126
+ unless fc2.nil?
127
+ job = MyJobAnisoku.new(
128
+ :url => sm[:url],
129
+ :fc2 => fc2,
130
+ :title => sm[:title],
131
+ :status => :fc2,
132
+ :machine => @a[:machine]
133
+ )
134
+ @a[:machine].retry job
135
+ return
136
+ else
137
+ end
138
+ end
139
+
140
+ job = MyJobAnisoku.new(
141
+ :url => sm[:videourl],
142
+ :title => sm[:title],
143
+ :status => :video,
144
+ :machine => @a[:machine]
145
+ )
146
+ @a[:machine].retry job
147
+ end
148
+
149
+ def fc2
150
+ print "fc2".yellow
151
+ require 'digest'
152
+ # make md5 with magicword '_gGddgPfeaf_gzyr'
153
+ url = "http://video.fc2.com/ginfo.php?mimi=#{Digest::MD5.hexdigest(@a[:fc2] + '_gGddgPfeaf_gzyr')}&v=#{@a[:fc2]}&upid=#{@a[:fc2]}&otag=1"
154
+ url = `curl -# -L -R "#{url}"`
155
+ url = url.split('&')[0].split('=')[1] + '?' + url.split('&')[1]
156
+ puts url.red.bold
157
+ job = MyJobAnisoku.new(
158
+ :url => url,
159
+ :title => @a[:title],
160
+ :status => :video,
161
+ :machine => @a[:machine]
162
+ )
163
+ @a[:machine].retry job
164
+ end
165
+
166
+ #fetch video
167
+ def video
168
+ print "video".yellow
169
+ # save video directory is supplied by machine.
170
+ savedir = @a[:machine].savedir
171
+ Dir.chdir savedir
172
+ filename = "#{@a[:title]}.mp4"
173
+ savepath = "#{savedir}/#{filename}"
174
+ # check fetch candidate had been already saved?
175
+ if File.exist?(savepath) && File.size(savepath) > 1024 * 1024 * 3
176
+ puts "File Already Saved ".yellow.bold + savepath
177
+ return
178
+ else
179
+ puts "Fetching ".green.bold + savepath
180
+ MyLogger.ln "Fetch Attempt Start ".green.bold + savepath
181
+ end
182
+
183
+ # use curl command
184
+ # no need UA...
185
+ # command = "curl -# -L -R -o '#{filename}' 'http://#{@a[:url].host}#{@a[:url].path}?#{@a[:url].query}' --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0a1) Gecko/20110901 Firefox/9.0a1'"
186
+ command = "curl -# -L -R -o '#{filename}' 'http://#{@a[:url].host}#{@a[:url].path}?#{@a[:url].query}' "
187
+
188
+ p command
189
+ system command
190
+ end
191
+
192
+ # run in thread
193
+ def run
194
+ t = Thread.new do
195
+ case @a[:status]
196
+ when :new then
197
+ tokkakari
198
+ when :second then
199
+ second
200
+ when :kobetu then
201
+ kobetu
202
+ when :third then
203
+ third
204
+ when :fc2 then
205
+ fc2
206
+ when :video then
207
+ video
208
+ end
209
+ end
210
+ end
211
+
212
+ end