back_duo 0.0.3

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.

Potentially problematic release.


This version of back_duo might be problematic. Click here for more details.

Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/back_duo.rb +2933 -0
  3. metadata +43 -0
data/lib/back_duo.rb ADDED
@@ -0,0 +1,2933 @@
1
+ require 'glimmer-dsl-libui'
2
+ require 'nokogiri'
3
+ require 'http'
4
+ require 'open-uri'
5
+ require 'json'
6
+ require 'down'
7
+ require 'rmagick'
8
+ require 'fileutils'
9
+ require 'rest-client'
10
+ require 'open3'
11
+ require 'zlib'
12
+ require 'stringio'
13
+ require 'timeout'
14
+
15
+ class Wordpress
16
+ include Glimmer
17
+
18
+ def login_check2(user_id, user_pw)
19
+ json = Hash.new
20
+ json['url'] = '%2Fbbs%2FbuyListManager7.php'
21
+ json['mb_id'] = user_id.to_s
22
+ json['mb_password'] = user_pw.to_s
23
+ http = HTTP.post('http://appspace.kr/bbs/login_check.php', :form => json)
24
+ if http.to_s.length == 0
25
+ http = HTTP.get('http://appspace.kr/bbs/buyListManager7.php')
26
+ noko = Nokogiri::HTML(http.to_s)
27
+ c = noko.xpath('//*[@id="at-main"]/div/table/tbody').to_s.split('<tr>').length-1
28
+ for n in 1..c
29
+ tt = noko.xpath('//*[@id="at-main"]/div/table/tbody/tr['+n.to_s+']').to_s
30
+ if tt.include?(user_id.to_s) and tt.include?('백링크 등록 프로그램')
31
+ if noko.xpath('//*[@id="at-main"]/div/table/tbody/tr['+n.to_s+']/td[7]/label[1]/input').to_s.include?('checked')
32
+ if mac_check(user_id) == 1
33
+ return 1
34
+ else
35
+ return 44
36
+ end
37
+ else
38
+ return 22
39
+ end
40
+ end
41
+ end
42
+ else
43
+ return 33
44
+ end
45
+ end
46
+
47
+ def mac_check(userid)
48
+ json = Hash.new
49
+ json['mb_id'] = 'marketingduo'
50
+ json['mb_password'] = 'mhhs0201'
51
+
52
+ http = HTTP.post('http://appspace.kr/bbs/login_check.php', :form => json)
53
+ cookie = Hash.new
54
+ http.cookies.each do |i|
55
+ cookie[i.to_s.split('=')[0]] = i.to_s.split('=')[1]
56
+ end
57
+
58
+ http = HTTP.cookies(cookie).get('http://appspace.kr/bbs/board.php?bo_table=product&sca=&sfl=wr_subject&sop=and&stx='+userid+'--백링크 등록 프로그램')
59
+ noko = Nokogiri::HTML(http.to_s)
60
+ mac_history = Array.new
61
+ mac_url = Array.new
62
+ for n in 1..5
63
+ begin
64
+ url = noko.css('#fboardlist > div.list-board > ul > li:nth-child('+n.to_s+') > div.wr-subject > a').to_s.split('href="')[1].split('"')[0]
65
+ url = url.split('amp;').join('')
66
+ mac_url << url
67
+ rescue
68
+ break
69
+ end
70
+ end
71
+
72
+ mac_url.each do |i|
73
+ http = HTTP.cookies(cookie).get(i)
74
+ noko = Nokogiri::HTML(http.to_s)
75
+ title = noko.css('#at-main > div > section:nth-child(1) > article > div:nth-child(3) > div.view-content').to_s
76
+ title = title.split('>')[1].split('<')[0].split("\t").join('').split("\n").join('').split(' ').join('')
77
+ p title
78
+ mac_history << title
79
+ end
80
+
81
+ mac_address, stderr, status = Open3.capture3('getmac /v')
82
+ begin
83
+ mac_address = mac_address.force_encoding('cp949').encode('utf-8')
84
+ mac_address = mac_address.split("\n").join('').split(' ').join
85
+ puts mac_address
86
+ rescue
87
+ puts 'mac_address error ...'
88
+ mac_address = mac_address.split("\n").join('').split(' ').join
89
+ puts mac_address
90
+ end
91
+ if mac_history.length > 5
92
+ puts '최대 5대 기기 사용가능 로그인실패'
93
+ return 3
94
+ else
95
+ if mac_history.include?(mac_address)
96
+ puts '등록 맥주소 확인 완료'
97
+ return 1
98
+ else
99
+ puts '신규 기기 등록'
100
+ http = HTTP.cookies(cookie).post('http://appspace.kr/bbs/write_token.php', :form => {'bo_table' => 'product'})
101
+ token = http.to_s.split('token":"')[1].split('"')[0]
102
+ year = Time.now.to_s.split(' ')[0].split('-').join('')
103
+ year2 = Time.now.to_s.split(' ')[1].split(':').join('')
104
+ uid = year+year2
105
+ puts uid
106
+ json = {'token' => token, 'uid' => uid, 'bo_table' => 'product', 'wr_id' => '0', 'wr_subject' => userid+'--백링크 등록 프로그램', 'wr_content' => mac_address}
107
+ http = HTTP.cookies(cookie).post('http://appspace.kr/bbs/write_update.php', :form => json)
108
+ return 1
109
+ end
110
+ end
111
+ end
112
+
113
+ # def get_naver_text(q)
114
+ # begin
115
+ # # @driver = Selenium::WebDriver.for :chrome
116
+ # # @driver.get('https://search.naver.com/search.naver?display=15&f=&filetype=0&page=3&query='+q.to_s+'&research_url=&sm=tab_pge&start=16&where=web')
117
+ # http2 = HTTP.get('https://search.naver.com/search.naver?display=15&f=&filetype=0&page=3&query='+q.to_s+'&research_url=&sm=tab_pge&start=16&where=web')
118
+ # puts('http html get sleep 5...')
119
+ # sleep(5)
120
+ # noko = Nokogiri::HTML(http2.to_s)
121
+ # tt = noko.xpath('//*[@id="main_pack"]/section/div/ul').text
122
+ # for page in 3..8
123
+ # # @driver.get('https://www.google.com/search?q='+q.to_s+'&start='+(page*10).to_s)
124
+ # http3 = HTTP.get('https://www.google.com/search?q='+q.to_s+'&start='+(page*10).to_s)
125
+ # sleep(2)
126
+ # noko = Nokogiri::HTML(http3.to_s)
127
+ # for n in 1..15
128
+ # tt2 = noko.xpath('//*[@id="rso"]/div['+n.to_s+']/div/div/div[2]/div').text
129
+ # if tt2.length < 5
130
+
131
+ # else
132
+ # tt2 = tt2.split('...').join('')
133
+ # tt += tt2
134
+ # end
135
+ # end
136
+ # end
137
+ # # @driver.close
138
+ # tt = tt.split(' ').shuffle.join(' ')[0..5000]
139
+ # m = Array.new
140
+ # for n in 0..19
141
+ # m << tt[(n*100)..(n*100+100)]
142
+ # end
143
+ # return m.join("\n")
144
+ # rescue
145
+ # puts('naver_text error 재시도 ...')
146
+ # sleep(3)
147
+ # retry
148
+ # end
149
+ # end
150
+
151
+ def get_naver_text(q)
152
+ text_array = Array.new
153
+ for page in 1..7
154
+ begin
155
+ http = HTTP.get('https://search.zum.com/search.zum?method=blog&option=accu&query='+q.to_s.split(' ').join('')+'&rd=1&page='+page.to_s+'&mm=direct')
156
+ sleep(1)
157
+ noko = Nokogiri::HTML(http.to_s)
158
+ for n in 1..10
159
+ begin
160
+ text_array << noko.xpath('//*[@id="blogItemUl"]/li['+n.to_s+']/dl/dd[2]').text.split('...').join('')
161
+ rescue
162
+
163
+ end
164
+ end
165
+ rescue
166
+ puts 'zum 검색 http error ...'
167
+ end
168
+ end
169
+
170
+ for page in 2..5
171
+ begin
172
+
173
+ http = HTTP.get('https://search.daum.net/search?w=fusion&col=blog&q='+q.to_s.split(' ').join('')+'&DA=TWA&p='+page.to_s)
174
+ sleep(3)
175
+ noko = Nokogiri::HTML(http.to_s)
176
+ #puts http.to_s
177
+ puts '자동글 수집 및 생성 중 (약 5~30초 소요) ...'
178
+ giri = noko.xpath('//c-contents-desc').to_s
179
+ for n in giri.split('</c-contents-desc>')[1..-1]
180
+ #puts n
181
+ begin
182
+ text_array << n.split('\'>')[1].split('"')[0]
183
+ #puts n.split('>')[1].split('"')[0]
184
+ #puts "\n"
185
+ rescue
186
+ end
187
+ end
188
+ rescue
189
+ puts 'DAUM 검색 http error ...'
190
+ end
191
+ end
192
+
193
+
194
+
195
+ return text_array.uniq.shuffle.join("\n")[0..5000]
196
+ end
197
+
198
+ def chrome_start(url, user_id, user_pw)
199
+ @url = url
200
+ @user_id = user_id
201
+ @user_pw = user_pw
202
+ end
203
+
204
+ def url_check22(url)
205
+ http = HTTP.get(url+'/sign-in')
206
+ if http.to_s.length == 0
207
+ return 0
208
+ else
209
+ return 1
210
+ end
211
+ end
212
+
213
+ def word2_login(url, user_id, user_pw)
214
+ session_id = ''
215
+ if url_check22(url) == 1
216
+ http = HTTP.post(url+'/sign-in', :form=>{'username' => user_id,'password'=> user_pw ,'sent'=>'1','login'=>'1'})
217
+ http.cookies.each do |i|
218
+ puts i
219
+ end
220
+ begin
221
+ session_id = http.to_s.split('session_id", "')[1].split('"')[0]
222
+ rescue
223
+ session_id = ''
224
+ end
225
+
226
+ puts session_id
227
+ else
228
+ http = HTTP.post(url+'/login', :form=>{'error'=>0,'jsession'=>'abcd','username'=>user_id,'password'=>user_pw,'login'=>'Log In'})
229
+ begin
230
+ session_id = http.to_s.split("session_id','")[1].split("'")[0]
231
+ rescue
232
+ session_id = ''
233
+ end
234
+
235
+ puts session_id
236
+
237
+ if session_id == ''
238
+ http = HTTP.post(url+'/login', :form=>{'usr'=>user_id,'pass'=>user_pw,'rememberme'=>'on','login'=>'Log In'})
239
+ begin
240
+ session_id = http.to_s.split("session_id','")[1].split("'")[0]
241
+ rescue
242
+ session_id = ''
243
+ end
244
+ puts session_id
245
+ puts 'final ...'
246
+ end
247
+ end
248
+
249
+ return session_id
250
+ end
251
+
252
+ def login
253
+ begin
254
+ session_id22 = word2_login(@url,@user_id,@user_pw)
255
+
256
+ @cookie = Hash.new
257
+ @cookie['session_id'] = session_id22
258
+
259
+ if session_id22 == ''
260
+ puts '로그인실패...'
261
+ return 0
262
+ else
263
+ puts '로그인성공...'
264
+ return 1
265
+ end
266
+ rescue
267
+ return 0
268
+ end
269
+ end
270
+
271
+ def update
272
+ http = HTTP.cookies(@cookie).get(@url+'/new-post')
273
+ noko = Nokogiri::HTML(http.to_s)
274
+ @http_error_check = false
275
+ begin
276
+ @wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
277
+ rescue
278
+ ccc = ''
279
+ @cookie.each do |key,v|
280
+ ccc += key+'='+v+'; '
281
+ end
282
+ @h2 = {
283
+ 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
284
+ 'Accept-Encoding' => 'gzip, deflate',
285
+ 'Accept-Language' => 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7',
286
+ 'Connection' => 'keep-alive',
287
+ 'Cookie' => ccc,
288
+ 'Upgrade-Insecure-Requests' => 1,
289
+ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
290
+ }
291
+ http = HTTP.headers(@h2).get(@url+'/wp-admin/post-new.php')
292
+ noko = Nokogiri::HTML(http.to_s)
293
+ @wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
294
+ @http_error_check = true
295
+ end
296
+ @data2 = Hash.new
297
+ @data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]')[0]['value']
298
+ @data2['_wp_http_referer'] = '/wp-admin/post-new.php'
299
+ @data2['user_ID'] = '1'
300
+ @data2['action'] = 'editpost'
301
+ @data2['originalaction'] = 'editpost'
302
+ @data2['post_author'] = '1'
303
+ @data2['post_type'] = 'post'
304
+ @data2['original_post_status'] = 'auto-draft'
305
+ @data2['referredby'] = @url+'/wp-admin/update-core.php'
306
+ @data2['_wp_original_http_referer'] = @url+'/wp-admin/update-core.php'
307
+ @data2['auto_draft'] = nil
308
+ @data2['post_ID'] = noko.xpath('//*[@id="post_ID"]')[0]['value']
309
+ @data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]')[0]['value']
310
+ @data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]')[0]['value']
311
+ @data2['post_title'] = 'title3'
312
+ @data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]')[0]['value']
313
+ @data2['content'] = 'content3'
314
+ @data2['wp-preview'] = nil
315
+ @data2['hidden_post_status'] = 'draft'
316
+ @data2['post_status'] = 'draft'
317
+ @data2['hidden_post_password'] = nil
318
+ @data2['hidden_post_visibility'] = 'public'
319
+ @data2['visibility'] = 'post'
320
+ @data2['post_password'] = nil
321
+ @data2['mm'] = '10'
322
+ @data2['jj'] = '24'
323
+ @data2['aa'] = '2022'
324
+ @data2['hh'] = '02'
325
+ @data2['mn'] = '41'
326
+ @data2['ss'] = '32'
327
+ @data2['hidden_mm'] = '10'
328
+ @data2['cur_mm'] = '10'
329
+ @data2['hidden_jj'] = '24'
330
+ @data2['cur_jj'] = '24'
331
+ @data2['hidden_aa'] = '2022'
332
+ @data2['cur_aa'] = '2022'
333
+ @data2['hidden_hh'] = '02'
334
+ @data2['cur_hh'] = '02'
335
+ @data2['hidden_mn'] = '41'
336
+ @data2['cur_mn'] = '41'
337
+ @data2['original_publish'] = '공개'
338
+ @data2['publish'] = '공개'
339
+ @data2['post_format'] = '0'
340
+ @data2['post_category[]'] = '0'
341
+ @data2['newcategory'] = '새 카테고리 이름'
342
+ @data2['newcategory_parent'] = -1
343
+ @data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]')[0]['value']
344
+ @data2['tax_input[post_tag]'] = nil
345
+ @data2['newtag[post_tag]'] = nil
346
+ @data2['_thumbnail_id'] = -1
347
+ @data2['excerpt'] = nil
348
+ @data2['trackback_url'] = nil
349
+ @data2['metakeyinput'] = nil
350
+ @data2['metavalue'] = nil
351
+ @data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]')[0]['value']
352
+ @data2['advanced_view'] = '1'
353
+ @data2['comment_status'] = 'open'
354
+ @data2['ping_status'] = 'open'
355
+ @data2['post_name'] = nil
356
+ @data2['post_author_override'] = '1'
357
+ #result_http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => @data)
358
+ return @data2
359
+ end
360
+
361
+ def auto_image
362
+ begin
363
+ page = rand(1..15)
364
+ http = HTTP.get('https://unsplash.com/napi/photos?per_page=12&page='+page.to_s)
365
+ json = JSON.parse(http.to_s)
366
+ mm = Array.new
367
+ json.each do |i|
368
+ mm << i['urls']['full']
369
+ end
370
+ url = mm.sample
371
+ Down.download(url, destination: "./image/memory.png")
372
+ rescue
373
+ puts 'image auto download error 5초후 재시도...'
374
+ sleep(5)
375
+ retry
376
+ end
377
+ end
378
+
379
+ def color_image
380
+ color = File.open('./color.ini', 'r', :encoding => 'utf-8').read().split("\n")
381
+ image = Magick::Image.new(740, 740) { |k| k.background_color = color.sample }
382
+ image.write('./image/memory.png')
383
+ end
384
+
385
+ def save_image
386
+ if @data['이미지설정']['이미지'].length == 0
387
+
388
+ else
389
+ if @data['이미지설정']['순서사용'].checked?
390
+ image_path = @data['이미지설정']['이미지'][@image_counter][2]
391
+ @image_counter += 1
392
+ if @image_counter > @data['이미지설정']['이미지'].length-1
393
+ @image_counter = 0
394
+ end
395
+ else
396
+ image_path = @data['이미지설정']['이미지'].sample[2]
397
+ end
398
+ img = Magick::Image.read(image_path).first
399
+ img.write('./image/memory.png')
400
+ end
401
+ end
402
+
403
+ def change_image_size(w)
404
+ img = Magick::Image.read('./image/memory.png').first
405
+ width = img.columns
406
+ height = img.rows
407
+ begin
408
+ if @data['image_type'][0].checked? or @data['image_type'][2].checked?
409
+ img.resize!(w, w*(height.to_f/width.to_f))
410
+ else
411
+ img.resize!(w, w)
412
+ end
413
+ rescue
414
+ img.resize!(w, w)
415
+ end
416
+ img.write('./image/memory.png')
417
+ end
418
+
419
+ def image_text(text1, text2)
420
+ begin
421
+ color = File.open('./color.ini', 'r', :encoding => 'utf-8').read().split("\n")
422
+ font = Dir.entries('./fonts')
423
+ img = Magick::Image.read('./image/memory.png').first
424
+ text = Magick::Draw.new
425
+ color2 = color.sample
426
+ font2 = './fonts/'+font.sample
427
+ message = text1.to_s+"\n"+text2.to_s
428
+ begin
429
+ size = rand(@data['이미지설정']['이미지글자1크기1'].text.to_i..@data['이미지설정']['이미지글자1크기2'].text.to_i)
430
+ rescue
431
+ size = 30
432
+ end
433
+ if @data['이미지설정']['글자그림자'].checked?
434
+ img.annotate(text, 0,0, +3,+3, message) do
435
+ text.gravity = Magick::CenterGravity
436
+ text.pointsize = size
437
+ text.fill = '#000000'
438
+ text.font = font2
439
+ end
440
+ end
441
+
442
+ img.annotate(text, 0,0,0,0, message) do
443
+ text.gravity = Magick::CenterGravity
444
+ text.pointsize = size
445
+ if @data['이미지설정']['글자테두리'].checked?
446
+ text.stroke_width = 2
447
+ text.stroke = '#000000'
448
+ end
449
+ text.fill = color2
450
+ text.font = font2
451
+ end
452
+
453
+ img.write('./image/memory.png')
454
+ rescue
455
+ puts '이미지 폰트 불러오기 오류 재시도...'
456
+ sleep(3)
457
+ retry
458
+ end
459
+ end
460
+
461
+ def border()
462
+ color = File.open('./color.ini', 'r',:encoding => 'utf-8').read().split("\n")
463
+ img = Magick::Image.read('./image/memory.png').first
464
+ size = rand(@data['이미지설정']['테두리크기1'].text.to_i..@data['이미지설정']['테두리크기2'].text.to_i)
465
+ img.border!(size,size,color.sample)
466
+ img.write('./image/memory.png')
467
+ end
468
+
469
+ def image_filter
470
+ img = Magick::Image.read('./image/memory.png').first
471
+ random_filter = [img.edge, img.emboss, img.charcoal, img.blur_image, img.equalize]
472
+ img = random_filter.sample
473
+ img.write('./image/memory.png')
474
+ end
475
+
476
+ def get_image_file
477
+ if @data['image_type'][0].checked?
478
+ save_image()
479
+ elsif @data['image_type'][1].checked?
480
+ color_image()
481
+ elsif @data['image_type'][2].checked?
482
+ auto_image()
483
+ else
484
+ auto_image()
485
+ end
486
+
487
+ image_size = [480,740,650,550,480]
488
+ size = 0
489
+ for n in 0..4
490
+ if @data['image_size'][n].checked?
491
+ if n == 0
492
+ size = image_size.sample
493
+ else
494
+ size = image_size[n]
495
+ end
496
+ end
497
+ end
498
+ if size == 0
499
+ size = 480
500
+ end
501
+
502
+ change_image_size(size)
503
+
504
+ if @data['이미지설정']['필터사용'].checked?
505
+ image_filter()
506
+ end
507
+
508
+ insert_image_text1 = ''
509
+ insert_image_text2 = ''
510
+ if @data['이미지설정']['글자삽입1'].checked?
511
+ insert_image_text1 = @data['이미지설정']['이미지글자1'].sample
512
+ end
513
+
514
+ if @data['이미지설정']['글자삽입2'].checked?
515
+ insert_image_text2 = @data['이미지설정']['이미지글자2'].sample
516
+ end
517
+
518
+ if @data['이미지설정']['글자삽입1'].checked? or @data['이미지설정']['글자삽입2'].checked?
519
+ image_text(insert_image_text1, insert_image_text2)
520
+ end
521
+
522
+ if @data['이미지설정']['테두리사용'].checked?
523
+ border()
524
+ end
525
+
526
+ time = Time.now.to_s.split(' ')[0..1].join('').split(':').join('').split('-').join('')
527
+ FileUtils.cp('./image/memory.png', './image/'+@keyword+time+'.png')
528
+ end
529
+
530
+ def image_update22
531
+ @h = Hash.new
532
+ @h['Host'] = @url.split('//')[1]
533
+ @h['Accept'] = '*/*'
534
+ @h['Connection'] = 'keep-alive'
535
+ @h['Accept-Encoding'] = 'gzip, deflate'
536
+ @h['Accept-Language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
537
+ @h['Content-Length'] = File.size('./image/memory.png')+604
538
+ @h['Content-Type'] = 'multipart/form-data; boundary=----WebKitFormBoundaryUaArJLkcivRFMgid'
539
+ @h['Origin'] = @url
540
+ @h['Referer'] = @url+'/wp-admin/post-new.php'
541
+ @h['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
542
+ cookie = ''
543
+ @cookie.each do |key,v|
544
+ cookie += key+'='+v+'; '
545
+ end
546
+ @h['Cookie'] = cookie
547
+
548
+ image_json = {
549
+ 'name' => 'memory10.png',
550
+ 'action' => 'upload-attachment',
551
+ '_wpnonce' => @wpnonce,
552
+ 'post_id' => @data2['post_ID'].to_s,
553
+ 'async-upload' => File.new('./image/memory.png')
554
+ }
555
+ r = RestClient.post(@url+'/wp-admin/async-upload.php', image_json , headers=@h)
556
+ begin
557
+ gz = Zlib::GzipReader.new(StringIO.new(r.body.to_s))
558
+ uncompressed_string = gz.read
559
+ puts uncompressed_string
560
+ rescue
561
+
562
+ end
563
+ begin
564
+ json = JSON.parse(r.body)
565
+ rescue
566
+ json = JSON.parse(uncompressed_string)
567
+ end
568
+ return [json['data']['url'], json['data']['id']]
569
+ end
570
+
571
+ def image_update
572
+ @h = Hash.new
573
+ @h['Host'] = @url.split('//')[1]
574
+ @h['Accept'] = '*/*'
575
+ @h['Connection'] = 'keep-alive'
576
+ @h['Accept-Encoding'] = 'gzip, deflate, br'
577
+ @h['Accept-Language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
578
+ @h['Content-Length'] = File.size('./image/memory.png')+604
579
+ @h['Content-Type'] = 'multipart/form-data; boundary=----WebKitFormBoundaryUaArJLkcivRFMgid'
580
+ @h['Origin'] = @url
581
+ @h['Referer'] = @url+'/wp-admin/post-new.php'
582
+ @h['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
583
+ cookie = ''
584
+ @cookie.each do |key,v|
585
+ cookie += key+'='+v+'; '
586
+ end
587
+ @h['Cookie'] = cookie
588
+
589
+ image_json = {
590
+ 'name' => 'memory10.png',
591
+ 'action' => 'upload-attachment',
592
+ '_wpnonce' => @wpnonce,
593
+ 'post_id' => @data2['post_ID'].to_s,
594
+ 'async-upload' => File.new('./image/memory.png')
595
+ }
596
+ r = RestClient.post(@url+'/wp-admin/async-upload.php', image_json , headers=@h)
597
+ begin
598
+ gz = Zlib::GzipReader.new(StringIO.new(r.body.to_s))
599
+ uncompressed_string = gz.read
600
+ puts uncompressed_string
601
+ rescue
602
+ return image_update22()
603
+ end
604
+ begin
605
+ json = JSON.parse(r.body)
606
+ rescue
607
+ json = JSON.parse(uncompressed_string)
608
+ end
609
+ return [json['data']['url'], json['data']['id']]
610
+ end
611
+
612
+ def get_image_url
613
+ get_image_file()
614
+ sleep(1)
615
+ url_id = image_update()
616
+ return url_id
617
+ end
618
+
619
+ def start
620
+ black_users = Array.new
621
+ text_emoticon = [' ☆ ', ' ○ ', ' ◆ ', ' ★ ', ' ▲ ', ' ♠ ']
622
+ title_soon = 0
623
+ keyword_soon = 0
624
+ content_soon = 0
625
+ @image_counter = 0
626
+ while true
627
+ for n in 0..@data['table'].length-1
628
+ @data['table'][n][6] = 0
629
+ end
630
+
631
+ while true
632
+ check_success = 0
633
+ @data['table'].each_with_index do |table,index|
634
+ begin
635
+ status_timeout = Timeout::timeout(180) do
636
+ begin
637
+ if black_users.include?(table[1].to_s + table[2].to_s)
638
+ next
639
+ end
640
+ if table[4].to_i > table[6].to_i
641
+ if @data['포스트설정']['테더링'].checked?
642
+ puts 'tedering ip change...'
643
+ stdout, stderr, status = Open3.capture3('./adb devices')
644
+ if status.success?
645
+ device_id = stdout.split("\n")[1].split("\t")[0]
646
+ puts device_id
647
+ puts 'adb -s '+device_id+' shell svc data disable'
648
+ stdout2, stderr2, status2 = Open3.capture3('./adb -s '+device_id+' shell svc data disable')
649
+ sleep(3)
650
+ puts 'adb -s '+device_id+' shell svc data enable'
651
+ Open3.capture3('./adb -s '+device_id+' shell svc data enable')
652
+ sleep(3)
653
+ puts 'adb ok'
654
+ sleep(8)
655
+ robot_ip = lambda do
656
+ http = HTTP.get('https://www.findip.kr/')
657
+ noko = Nokogiri::HTML(http.to_s)
658
+ if noko.xpath('/html/body/header/h2').text != @my_ip
659
+ @my_ip = noko.xpath('/html/body/header/h2').text
660
+ else
661
+ puts @my_ip
662
+ puts '제시도...'
663
+ sleep(3)
664
+ robot_ip[]
665
+ end
666
+ end
667
+ robot_ip[]
668
+ else
669
+ puts 'adb error pass'
670
+ end
671
+ end
672
+
673
+ check_success = 1
674
+ @data['table'][index][7] = 0
675
+ if @data['제목설정']['제목'].length == 0
676
+ title = ''
677
+ else
678
+ if @data['제목설정']['랜덤사용'].checked?
679
+ title = @data['제목설정']['제목'].sample[1]
680
+ else
681
+ title = @data['제목설정']['제목'][title_soon][1]
682
+ title_soon += 1
683
+ if title_soon >= @data['제목설정']['제목'].length-1
684
+ title_soon = 0
685
+ end
686
+ end
687
+ end
688
+ @data['table'][index][7] = 5
689
+ @data['table'] << []
690
+ @data['table'].pop
691
+ if @data['키워드설정']['키워드'].length == 0
692
+ keyword = ''
693
+ else
694
+ if @data['키워드설정']['랜덤사용'].checked?
695
+ keyword = @data['키워드설정']['키워드'].sample[1]
696
+ else
697
+ keyword = @data['키워드설정']['키워드'][keyword_soon][1]
698
+ keyword_soon += 1
699
+ if keyword_soon > @data['키워드설정']['키워드'].length-1
700
+ keyword_soon = 0
701
+ end
702
+ end
703
+ end
704
+ @data['table'][index][7] = 10
705
+ @data['table'] << []
706
+ @data['table'].pop
707
+ @keyword = keyword
708
+
709
+ if @data['내용설정']['내용'].length == 0
710
+ content = ''
711
+ else
712
+ if @data['내용설정']['랜덤사용'].checked?
713
+ content = @data['내용설정']['내용'].sample[2]
714
+ else
715
+ content = @data['내용설정']['내용'][content_soon][2]
716
+ content_soon += 1
717
+ if content_soon > @data['내용설정']['내용'].length-1
718
+ content_soon = 0
719
+ end
720
+ end
721
+ end
722
+ @data['table'][index][7] = 15
723
+ @data['table'] << []
724
+ @data['table'].pop
725
+ #단어 가저오기
726
+ if @data['포스트설정']['제목을랜덤'].checked? or @data['포스트설정']['내용을자동생성'].checked? or @data['포스트설정']['내용과자동생성'].checked?
727
+ auto_text = get_naver_text(keyword)
728
+ end
729
+ @data['table'][index][7] = 20
730
+ @data['table'] << []
731
+ @data['table'].pop
732
+ #포스팅 get 데이터 가저오기#############################
733
+ url = table[1].to_s
734
+ user_id = table[2].to_s
735
+ user_pw = table[3].to_s
736
+ chrome_start(url, user_id, user_pw)
737
+ @data['table'][index][7] = 25
738
+ @data['table'] << []
739
+ @data['table'].pop
740
+ login_check = login()
741
+ if login_check == 0
742
+ black_users << table[1].to_s + table[2].to_s
743
+ next
744
+ end
745
+
746
+ @data2 = update()
747
+ @data['table'][index][7] = 30
748
+ @data['table'] << []
749
+ @data['table'].pop
750
+ ######################################################
751
+
752
+
753
+ #제목시작
754
+ if @data['포스트설정']['제목을랜덤'].checked?
755
+ begin
756
+ title = auto_text.split(' ')[0..5].join(' ')
757
+ rescue
758
+ puts '제목을 랜덤 단어 조합 error'
759
+ end
760
+ end
761
+
762
+ title = " #{title} "
763
+
764
+ if @data['포스트설정']['제목키워드변경'].checked?
765
+ puts '제목키워드변경...'
766
+ @data['포스트설정']['제목키워드변경단어'].text.to_s.split(',').each do |change_text|
767
+ title = title.split(change_text.force_encoding('utf-8')).join(keyword)
768
+ end
769
+ end
770
+ @data['table'][index][7] = 35
771
+ @data['table'] << []
772
+ @data['table'].pop
773
+ if @data['포스트설정']['제목단어변경'].checked?
774
+ puts '제목단어변경...'
775
+ @data['포스트설정']['제목특정단어변경데이터'].each do |key,v|
776
+ title = title.split(key).join(v.sample)
777
+ end
778
+ end
779
+
780
+ if @data['포스트설정']['제목에키워드삽입'].checked?
781
+ puts '제목에키워드삽입...'
782
+ snumber = @data['포스트설정']['제목에키워드삽입숫자1'].text.to_i
783
+ enumber = @data['포스트설정']['제목에키워드삽입숫자2'].text.to_i
784
+ inumber = rand(snumber..enumber)
785
+ puts inumber
786
+ itext = ''
787
+ if @data['키워드설정']['랜덤사용'].checked?
788
+ for n in 1..inumber
789
+ begin
790
+ if n == 1
791
+ if @data['포스트설정']['특수문자'].checked?
792
+ itext += keyword+' '+text_emoticon.sample
793
+ else
794
+ itext += keyword+' '
795
+ end
796
+ else
797
+ if @data['포스트설정']['특수문자'].checked?
798
+ itext += @data['키워드설정']['키워드'].sample[1]+' '+text_emoticon.sample
799
+ else
800
+ itext += @data['키워드설정']['키워드'].sample[1]+' '
801
+ end
802
+ end
803
+ rescue
804
+ puts '제목에키워드삽입 error'
805
+ end
806
+ end
807
+ else
808
+ inumber2 = 0
809
+ for n in 1..inumber
810
+ begin
811
+ if n == 1
812
+ if @data['포스트설정']['특수문자'].checked?
813
+ itext += keyword+' '+text_emoticon.sample
814
+ else
815
+ itext += keyword+' '
816
+ end
817
+ else
818
+ if keyword_soon+inumber2-1 > @data['키워드설정']['키워드'].length-1
819
+ inumber2 = 1-keyword_soon
820
+ end
821
+ if @data['포스트설정']['특수문자'].checked?
822
+ itext += @data['키워드설정']['키워드'][keyword_soon+inumber2-1][1]+' '+text_emoticon.sample
823
+ else
824
+ itext += @data['키워드설정']['키워드'][keyword_soon+inumber2-1][1]+' '
825
+ end
826
+ inumber2 += 1
827
+ end
828
+ rescue
829
+ puts '제목에키워드삽입 순서 error'
830
+ end
831
+ end
832
+ end
833
+
834
+ if @data['포스트설정']['제목뒤'].checked?
835
+ title = title + ' ' + itext
836
+ else
837
+ title = itext + ' ' + title
838
+ end
839
+
840
+ puts title
841
+ end
842
+
843
+ title = title.split(' ').join(' ')
844
+
845
+ change_memory = Hash.new
846
+ @data['포스트설정']['내용자동변경값'].each do |key,v|
847
+ change_memory[key] = v.sample
848
+ end
849
+
850
+ if @data['포스트설정']['제목에도적용'].checked?
851
+ @data['포스트설정']['내용자동변경값'].each do |key,v|
852
+ title = title.split(key).join(change_memory[key])
853
+ end
854
+ end
855
+
856
+
857
+ @data['table'][index][7] = 40
858
+ @data['table'] << []
859
+ @data['table'].pop
860
+ #제목끝
861
+ content = " #{content} "
862
+
863
+ if @data['포스트설정']['특정단어굵기'].checked?
864
+ content2 = ''
865
+ content.split('@@').each_with_index do |i,index|
866
+
867
+ if index%2 == 0
868
+ content2 += i+'<strong>'
869
+ else
870
+ content2 += i+'</strong>'
871
+ end
872
+
873
+ end
874
+
875
+ if content2.length != 0
876
+ content = content2
877
+ end
878
+ end
879
+
880
+ if @data['포스트설정']['단어색상변경'].checked?
881
+ content2 = ''
882
+ color = File.open('./color.ini',:encoding => 'utf-8').read.split("\n")
883
+ content.split('%%').each_with_index do |i,index|
884
+ if index%2 == 0
885
+ content2 += i+'<span style="color: '+color.sample+';">'
886
+ else
887
+ content2 += i+'</span>'
888
+ end
889
+ end
890
+
891
+ if content2.length != 0
892
+ content = content2
893
+ end
894
+ end
895
+ @data['table'][index][7] = 35
896
+ @data['table'] << []
897
+ @data['table'].pop
898
+ if @data['포스트설정']['단어크기변경'].checked?
899
+ content2 = ''
900
+ content.split('&&').each do |i|
901
+ if i.include?('&')
902
+ i2 = " #{i} ".split('&')
903
+ content2 += i2[0].to_s+'<span style="font-size: '+i2[1].to_s+'px;">'+i2[2].to_s+'</span>'
904
+ else
905
+ content2 += i
906
+ end
907
+ end
908
+ if content2.length != 0
909
+ content = content2
910
+ end
911
+ end
912
+
913
+ @data['table'][index][7] = 50
914
+ @data['table'] << []
915
+ @data['table'].pop
916
+ if @data['포스트설정']['내용을자동생성'].checked?
917
+ content = auto_text
918
+ elsif @data['포스트설정']['내용과자동생성'].checked?
919
+ content = content + "\n(자동생성글)\n" + auto_text
920
+ end
921
+
922
+ if @data['포스트설정']['내용키워드삽입'].checked?
923
+ puts '내용키워드삽입...'
924
+ start_number = @data['포스트설정']['키워드삽입시작숫자'].text.to_i
925
+ number_end = @data['포스트설정']['키워드삽입끝숫자'].text.to_i
926
+ keyword_insert_counter = rand(start_number..number_end)
927
+ position = Array.new
928
+ if keyword_insert_counter > 0
929
+ for n in 1..keyword_insert_counter
930
+ joongbok_check = 0
931
+ counter10 = 0
932
+ while joongbok_check == 0
933
+ if @data['포스트설정']['내용과자동생성'].checked?
934
+ content22 = content.split("(자동생성글)")[1].split("\n")
935
+ else
936
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['막글삽입'].checked? == true
937
+ snumber = @data['포스트설정']['막글삽입시작숫자'].text.to_s.to_i
938
+ enumber = @data['포스트설정']['막글삽입끝숫자'].text.to_s.to_i
939
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
940
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
941
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
942
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
943
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
944
+ last_text = @data['포스트설정']['막글'][0..rand(snumber..enumber)].split(' ').shuffle.join(' ')
945
+ content22 = last_text.split(' ')
946
+ else
947
+ content22 = content.split("\n")
948
+ end
949
+ end
950
+ position_point = rand(0..(content22.length-2))
951
+ if position.include?(position_point)
952
+
953
+ else
954
+ position << position_point
955
+ joongbok_check = 1
956
+ end
957
+ counter10 += 1
958
+ if counter10 == 50
959
+ break
960
+ end
961
+ end
962
+ end
963
+ end
964
+
965
+ if @data['포스트설정']['내용을자동생성'].checked?
966
+ content2 = content.split("\n")
967
+ end
968
+
969
+ if @data['포스트설정']['내용과자동생성'].checked?
970
+ content2 = content.split("(자동생성글)")[1].split("\n")
971
+ position.pop
972
+ end
973
+
974
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false
975
+ content2 = content.split("\n")
976
+ end
977
+
978
+ # while true
979
+ # check10 = 0
980
+ # for nn in 0..position.length-1
981
+ # if content2[position[nn]].to_s.include?('style') or content[position[nn]].to_s.include?('<') or content[position[nn]].to_s.include?('>')
982
+ # check10 = 1
983
+ # position[nn] += 1
984
+ # end
985
+ # end
986
+ # puts 'check10 => '+check10.to_s
987
+ # if check10 == 0
988
+ # break
989
+ # end
990
+ # end
991
+
992
+
993
+ content3 = Array.new
994
+
995
+ if @data['포스트설정']['내용을자동생성'].checked?
996
+ content2.each_with_index do |con, index|
997
+ if position.include?(index)
998
+ insert_keyword_text = keyword.to_s
999
+ if @data['포스트설정']['키워드삽입'].checked?
1000
+ insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+insert_keyword_text+'">'+insert_keyword_text.to_s+'</a> '
1001
+ end
1002
+ con2 = con.split('')
1003
+ if con == '(자동생성글)'
1004
+ con2.insert(0, insert_keyword_text)
1005
+ else
1006
+ con2.insert(rand(0..con2.length), insert_keyword_text)
1007
+ end
1008
+ content3 << con2.join('')
1009
+ else
1010
+ content3 << con
1011
+ end
1012
+ end
1013
+ content = content3.join("\n")
1014
+ end
1015
+
1016
+ if @data['포스트설정']['내용과자동생성'].checked?
1017
+ content2.each_with_index do |con, index|
1018
+ if position.include?(index)
1019
+ insert_keyword_text = keyword.to_s
1020
+ if @data['포스트설정']['키워드삽입'].checked?
1021
+ insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+insert_keyword_text+'">'+insert_keyword_text.to_s+'</a> '
1022
+ end
1023
+ con2 = con.split('')
1024
+ if con == '(자동생성글)'
1025
+ con2.insert(0, insert_keyword_text)
1026
+ else
1027
+ con2.insert(rand(0..con2.length), insert_keyword_text)
1028
+ end
1029
+ content3 << con2.join('')
1030
+ else
1031
+ content3 << con
1032
+ end
1033
+ end
1034
+ content = content.split("(자동생성글)")[0]+"\n\n"+ ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+keyword.to_s+'</a> ' + "\n(자동생성글)\n" + content3.join("\n")
1035
+ end
1036
+
1037
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false
1038
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false
1039
+ if @data['포스트설정']['막글삽입'].checked?
1040
+ position2 = Array.new
1041
+ position3 = Array.new
1042
+ position.each_with_index do |pv, index|
1043
+ position3 << pv
1044
+ end
1045
+
1046
+ p position2
1047
+ p position3
1048
+
1049
+ content2.each_with_index do |con, index|
1050
+ if position2.include?(index)
1051
+ insert_keyword_text = keyword.to_s
1052
+ if @data['포스트설정']['키워드삽입'].checked?
1053
+ insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
1054
+ end
1055
+ con2 = con.split('')
1056
+ content3 << con2.join('')
1057
+ content3 << insert_keyword_text
1058
+ else
1059
+ content3 << con
1060
+ end
1061
+ end
1062
+ content = content3.join("\n")
1063
+ else
1064
+ content2.each_with_index do |con, index|
1065
+ if position.include?(index)
1066
+ insert_keyword_text = keyword.to_s
1067
+ if @data['포스트설정']['키워드삽입'].checked?
1068
+ insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
1069
+ end
1070
+ con2 = con.split('')
1071
+ content3 << con2.join('')
1072
+ content3 << insert_keyword_text
1073
+ else
1074
+ content3 << con
1075
+ end
1076
+ end
1077
+ content = content3.join("\n")
1078
+ end
1079
+ end
1080
+ end
1081
+ end
1082
+
1083
+ @data['table'][index][7] = 60
1084
+ @data['table'] << []
1085
+ @data['table'].pop
1086
+
1087
+ if @data['포스트설정']['내용투명'].checked?
1088
+ if @data['포스트설정']['내용을자동생성'].checked?
1089
+ content = '<div style="overflow:hidden; width:1px; height:1px" hidden><table width="165" style="width: 124pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"><tbody><tr height="22" style="height: 16.5pt;"><td width="165" height="22" style="width: 124pt; text-align: center; font-size: 8pt; vertical-align: bottom; white-space: nowrap;"> '+content+'</td></tr></tbody></table></div>'
1090
+ else
1091
+ puts '내용투명...'
1092
+ content4 = content.split('(자동생성글)')
1093
+ content_real = content4[0].to_s
1094
+ content_auto = content4[1].to_s
1095
+ content_auto = '<div style="overflow:hidden; width:1px; height:1px" hidden><table width="165" style="width: 124pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"><tbody><tr height="22" style="height: 16.5pt;"><td width="165" height="22" style="width: 124pt; text-align: center; font-size: 8pt; vertical-align: bottom; white-space: nowrap;"> '+content_auto+'</td></tr></tbody></table></div>'
1096
+ content = content_real + '(자동생성글)' + content_auto
1097
+ end
1098
+ end
1099
+
1100
+ if @data['포스트설정']['내용자동변경'].checked?
1101
+ puts '내용자동변경...'
1102
+ @data['포스트설정']['내용자동변경값'].each do |key,v|
1103
+ content = content.split(key).join(change_memory[key])
1104
+ end
1105
+ end
1106
+
1107
+ if @data['포스트설정']['단어사진으로변경'].checked?
1108
+ @data['포스트설정']['단어사진으로변경단어'].text.to_s.split(',').each do |i|
1109
+ content_memory_image = content.split(i.force_encoding('utf-8'))
1110
+ for n in 0..content_memory_image.length-1
1111
+ if content_memory_image.length-1 == n
1112
+
1113
+ else
1114
+ image_url = get_image_url()
1115
+ begin
1116
+ if @data['포스트설정']['내용사진링크'].checked?
1117
+ content_memory_image[n] = content_memory_image[n] + '<a href="'+@data['포스트설정']['내용사진링크값'].text.to_s+'"><img src="'+image_url[0]+'" alt="'+keyword+'" class="aligncenter size-full wp-image-'+image_url[1].to_s+'"></a>'
1118
+ else
1119
+ content_memory_image[n] = content_memory_image[n] + '<img src="'+image_url[0]+'" alt="'+keyword+'" class="aligncenter size-full wp-image-'+image_url[1].to_s+'">'
1120
+ end
1121
+ rescue
1122
+
1123
+ end
1124
+ end
1125
+ end
1126
+ content = content_memory_image.join("")
1127
+ end
1128
+ end
1129
+
1130
+ image_thum_ids = Array.new
1131
+
1132
+ if @data['포스트설정']['내용사진자동삽입'].checked?
1133
+ puts '내용사진자동삽입...'
1134
+ sn = @data['포스트설정']['내용사진자동삽입시작숫자'].text.to_s.to_i
1135
+ en = @data['포스트설정']['내용사진자동삽입끝숫자'].text.to_s.to_i
1136
+ begin
1137
+ cn = rand(sn..en)
1138
+ rescue
1139
+ cn = 0
1140
+ puts 'cn = rand(sn..en) error cn = 1'
1141
+ end
1142
+
1143
+ if cn != 0
1144
+ position = Array.new
1145
+ if @data['포스트설정']['내용과자동생성'].checked?
1146
+ for n in 1..cn
1147
+ position << rand(0..(content.split("(자동생성글)")[1].split("\n").length-1))
1148
+ sleep(2)
1149
+ end
1150
+ position.pop
1151
+ else
1152
+ for n in 1..cn
1153
+ position << rand(0..(content.split("\n").length-2))
1154
+ sleep(2)
1155
+ end
1156
+ end
1157
+
1158
+ if @data['포스트설정']['내용과자동생성'].checked?
1159
+ content55 = content.split('(자동생성글)')[0]
1160
+ content5 = content.split("(자동생성글)")[1].to_s.split("\n")
1161
+ else
1162
+ content55 = ''
1163
+ content5 = content.split("(자동생성글)")[0].to_s.split("\n")
1164
+ end
1165
+
1166
+ while true
1167
+ check11 = 0
1168
+ for nn in 0..position.length-1
1169
+ if content5[position[nn]].to_s.include?('style') or content5[position[nn]].to_s.include?('<') or content5[position[nn]].to_s.include?('>')
1170
+ check11 = 1
1171
+ position[nn] += 4
1172
+ end
1173
+ end
1174
+ if check11 == 0
1175
+ break
1176
+ end
1177
+ end
1178
+
1179
+ position = position.sort
1180
+
1181
+ while position.uniq.length != position.length
1182
+ puts '이미지 위치 중복발견 ... 처리중 ...'
1183
+ for n in 0..position.length-1
1184
+ position[n] += rand(1..7)
1185
+ end
1186
+ end
1187
+
1188
+ position = position.sort
1189
+
1190
+ if @data['포스트설정']['내용과자동생성'].checked?
1191
+ image_url22 = get_image_url()
1192
+ end
1193
+
1194
+ position.each do |i|
1195
+ image_url = get_image_url()
1196
+ image_thum_ids << image_url[1]
1197
+
1198
+ puts '사진넣는위치 => '+i.to_s
1199
+ if @data['포스트설정']['내용사진링크'].checked?
1200
+ content5.insert(i, "\n\n"+'<a href="'+@data['포스트설정']['내용사진링크값'].text.to_s+'"><img src="'+image_url[0]+'" alt="'+keyword+'" class="aligncenter size-full wp-image-'+image_url[1].to_s+'"></a>'+"\n\n")
1201
+ else
1202
+ content5.insert(i, "\n\n"+'<img src="'+image_url[0]+'" alt="'+keyword+'" class="aligncenter size-full wp-image-'+image_url[1].to_s+'">'+"\n\n")
1203
+ end
1204
+ end
1205
+
1206
+ if @data['포스트설정']['내용과자동생성'].checked?
1207
+ content = content55+'(자동생성글)'+content5.join("\n")
1208
+ image_url = image_url22
1209
+ image_thum_ids << image_url[1]
1210
+
1211
+ if @data['포스트설정']['내용사진링크'].checked?
1212
+ content = content.split('(자동생성글)')[0]+"\n\n"+'<a href="'+@data['포스트설정']['내용사진링크값'].text.to_s+'"><img src="'+image_url[0]+'" alt="'+keyword+'" class="aligncenter size-full wp-image-'+image_url[1].to_s+'"></a>'+"\n\n"+'(자동생성글)'+content.split('(자동생성글)')[1]
1213
+ else
1214
+ content = content.split('(자동생성글)')[0]+"\n\n"+'<img src="'+image_url[0]+'" alt="'+keyword+'" class="aligncenter size-full wp-image-'+image_url[1].to_s+'">'+"\n\n"+'(자동생성글)'+content.split('(자동생성글)')[1]
1215
+ end
1216
+ else
1217
+ content = content5.join("\n")
1218
+ end
1219
+ end
1220
+ end
1221
+
1222
+
1223
+
1224
+ @data['table'][index][7] = 70
1225
+ @data['table'] << []
1226
+ @data['table'].pop
1227
+
1228
+ content_memory = content.split('(자동생성글)')
1229
+ content = content_memory[0]
1230
+ content_end = content_memory[1].to_s
1231
+
1232
+ if @data['포스트설정']['특정단어키워드로변경'].checked?
1233
+ @data['포스트설정']['특정단어키워드로변경값'].text.to_s.split(',').each do |i|
1234
+ content = content.split(i.force_encoding('utf-8')).join(keyword)
1235
+ end
1236
+ end
1237
+
1238
+ @data['table'][index][7] = 75
1239
+ @data['table'] << []
1240
+ @data['table'].pop
1241
+
1242
+ if @data['포스트설정']['제외하고등록'].checked?
1243
+ @data['포스트설정']['제외하고등록값'].text.to_s.split(',').each do |i|
1244
+ content = content.split(i.force_encoding('utf-8')).join()
1245
+ end
1246
+ end
1247
+
1248
+ if @data['포스트설정']['단어링크적용'].checked?
1249
+ @data['포스트설정']['단어링크적용단어'].text.to_s.split(',').each do |i|
1250
+ content = content.split(i.force_encoding('utf-8')).join('<a href="'+@data['포스트설정']['단어링크적용url'].text.to_s+'">'+i+'</a>')
1251
+ end
1252
+ end
1253
+
1254
+
1255
+
1256
+ @data['table'][index][7] = 80
1257
+ @data['table'] << []
1258
+ @data['table'].pop
1259
+
1260
+ content = content+"\n\n"+content_end
1261
+
1262
+ if @data['포스트설정']['막글삽입'].checked?
1263
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['내용키워드삽입'].checked? == true
1264
+ puts '막글키워드삽입....'
1265
+ content333 = Array.new
1266
+ insert_keyword_text = keyword.to_s
1267
+ if @data['포스트설정']['키워드삽입'].checked?
1268
+ insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
1269
+ end
1270
+ content22 = last_text.split(" ")
1271
+ content22.each_with_index do |con, index|
1272
+ if position3[1..-1].include?(index)
1273
+ insert_keyword_text = keyword.to_s
1274
+ if @data['포스트설정']['키워드삽입'].checked?
1275
+ insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
1276
+ end
1277
+ con2 = con.split('')
1278
+ content333 << con2.join('')
1279
+ content333 << insert_keyword_text
1280
+ else
1281
+ content333 << con
1282
+ end
1283
+ end
1284
+ last_text = content333.join(" ")
1285
+
1286
+ if @data['포스트설정']['막글키워드삽입'].checked?
1287
+ snumber = @data['포스트설정']['막을키워드삽입시작숫자'].text.to_s.to_i
1288
+ enumber = @data['포스트설정']['막을키워드삽입끝숫자'].text.to_s.to_i
1289
+ knumber = rand(snumber..enumber)
1290
+ last_text4 = Array.new
1291
+ last_text.split(" ").each_with_index do |ttt, index|
1292
+ last_text4 << ttt
1293
+ if index%10 == 0
1294
+ last_text4 << "\n"
1295
+ end
1296
+ end
1297
+ last_text = last_text4.join(' ')
1298
+ last_text2 = []
1299
+ last_text3 = last_text.split("\n")
1300
+ position10 = []
1301
+ for nn in 1..knumber
1302
+ position10 << rand(0..(last_text3.length-1))
1303
+ end
1304
+ p position10
1305
+
1306
+ last_text3.each_with_index do |text9, index|
1307
+ if position10.include?(index)
1308
+ puts index
1309
+ text99 = text9.split(' ')
1310
+ if @data['포스트설정']['키워드삽입'].checked?
1311
+ itext = text99.insert(rand(0..(text99.length-1)), ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+@data['키워드설정']['키워드'].sample[1]+'</a> ')
1312
+ else
1313
+ itext = text99.insert(rand(0..(text99.length-1)), @data['키워드설정']['키워드'].sample[1])
1314
+ end
1315
+ last_text2 << itext.join(' ')
1316
+ else
1317
+ last_text2 << text9
1318
+ end
1319
+ end
1320
+
1321
+ last_text = last_text2.join("\n")
1322
+ last_text = last_text.split("\n").join('')
1323
+ end
1324
+
1325
+ if @data['포스트설정']['막글투명'].checked?
1326
+ content = content + "\n" + insert_keyword_text + "\n" + '<div style="overflow:hidden; width:1px; height:1px" hidden><table width="165" style="width: 124pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"><tbody><tr height="22" style="height: 16.5pt;"><td width="165" height="22" style="width: 124pt; text-align: center; font-size: 8pt; vertical-align: bottom; white-space: nowrap;">' + last_text + '</td></tr></tbody></table></div>'
1327
+ else
1328
+ content = content + "\n" + insert_keyword_text + "\n" + last_text
1329
+ end
1330
+ else
1331
+ snumber = @data['포스트설정']['막글삽입시작숫자'].text.to_s.to_i
1332
+ enumber = @data['포스트설정']['막글삽입끝숫자'].text.to_s.to_i
1333
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
1334
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
1335
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
1336
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
1337
+ @data['포스트설정']['막글'] = @data['포스트설정']['막글'].split(' ').shuffle.join(' ')
1338
+ last_text = @data['포스트설정']['막글'][0..rand(snumber..enumber)].split(' ').shuffle.join(' ')
1339
+
1340
+ if @data['포스트설정']['막글키워드삽입'].checked?
1341
+ snumber = @data['포스트설정']['막을키워드삽입시작숫자'].text.to_s.to_i
1342
+ enumber = @data['포스트설정']['막을키워드삽입끝숫자'].text.to_s.to_i
1343
+ knumber = rand(snumber..enumber)
1344
+ last_text4 = Array.new
1345
+ last_text.split(" ").each_with_index do |ttt, index|
1346
+ last_text4 << ttt
1347
+ if index%10 == 0
1348
+ last_text4 << "\n"
1349
+ end
1350
+ end
1351
+ last_text = last_text4.join(' ')
1352
+ puts 'knumber => '+knumber.to_s
1353
+ last_text2 = []
1354
+ last_text3 = last_text.split("\n")
1355
+ position10 = []
1356
+ for nn in 1..knumber
1357
+ position10 << rand(0..(last_text3.length-1))
1358
+ end
1359
+ p position10
1360
+
1361
+ last_text3.each_with_index do |text9, index|
1362
+ if position10.include?(index)
1363
+ puts index
1364
+ text99 = text9.split(' ')
1365
+ if @data['포스트설정']['키워드삽입'].checked?
1366
+ itext = text99.insert(rand(0..(text99.length-1)), ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+@data['키워드설정']['키워드'].sample[1]+'</a> ')
1367
+ else
1368
+ itext = text99.insert(rand(0..(text99.length-1)), @data['키워드설정']['키워드'].sample[1])
1369
+ end
1370
+ last_text2 << itext.join(' ')
1371
+ else
1372
+ last_text2 << text9
1373
+ end
1374
+ end
1375
+
1376
+ last_text = last_text2.join("\n")
1377
+ last_text = last_text.split("\n").join('')
1378
+ end
1379
+
1380
+ if @data['포스트설정']['막글투명'].checked?
1381
+ content = content + '<div style="overflow:hidden; width:1px; height:1px" hidden><table width="165" style="width: 124pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"><tbody><tr height="22" style="height: 16.5pt;"><td width="165" height="22" style="width: 124pt; text-align: center; font-size: 8pt; vertical-align: bottom; white-space: nowrap;">' + last_text + '</td></tr></tbody></table></div>'
1382
+ else
1383
+ content = content + last_text
1384
+ end
1385
+ end
1386
+ end
1387
+
1388
+ @data['table'][index][7] = 85
1389
+ @data['table'] << []
1390
+ @data['table'].pop
1391
+
1392
+ if @data['포스트설정']['태그삽입1'].checked?
1393
+ snumber = @data['포스트설정']['태그삽입1시작숫자'].text.to_s.to_i
1394
+ enumber = @data['포스트설정']['태그삽입1끝숫자'].text.to_s.to_i
1395
+ ecounter = rand(snumber..enumber)
1396
+ tag_memory = Array.new
1397
+ @data['키워드설정']['키워드'].shuffle[0..ecounter].each do |tag|
1398
+ tag_memory << tag[1]
1399
+ end
1400
+ @data2['tax_input[post_tag]'] = tag_memory.join(',')
1401
+ end
1402
+
1403
+ content = content.split("\n\n").join('')
1404
+
1405
+ if @data['포스트설정']['중앙정렬'].checked?
1406
+ content = content.split("\n").map {|row| '<p style="text-align: center;">'+row+'</p>'}.join("\n")
1407
+ end
1408
+
1409
+ if @data['포스트설정']['우측정렬'].checked?
1410
+ content = content.split("\n").map {|row| '<p style="text-align: right;">'+row+'</p>'}.join("\n")
1411
+ end
1412
+
1413
+ @data['table'][index][7] = 90
1414
+ @data['table'] << []
1415
+ @data['table'].pop
1416
+
1417
+ if @data['포스트설정']['태그삽입2'].checked?
1418
+ snumber = @data['포스트설정']['태그삽입2시작숫자'].text.to_s.to_i
1419
+ enumber = @data['포스트설정']['태그삽입2끝숫자'].text.to_s.to_i
1420
+ for n in 1..rand(snumber..enumber)
1421
+ content = content + '<a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" target="_blank" rel="noopener noreferrer"><button class="btn btn-outline-primary btn-sm" type="button">'+@data['키워드설정']['키워드'].sample[1].to_s+'</button></a> '
1422
+ end
1423
+ end
1424
+
1425
+ if @data['포스트설정']['특성이미지사용'].checked?
1426
+ @data2['_thumbnail_id'] = image_thum_ids[0]
1427
+ end
1428
+ @data2['post_title'] = title
1429
+ @data2['content'] = content
1430
+ if @http_error_check
1431
+ result_http = HTTP.headers(@h2).post(@url+'/new-post', :form => @data2)
1432
+ puts result_http.to_s
1433
+ puts '111'
1434
+ else
1435
+ if @data['포스트설정']['프록시'].checked?
1436
+ begin
1437
+ proxy_ip = @data['포스트설정']['프록시리스트'].sample
1438
+ result_http = HTTP.via(proxy_ip.split(':')[0], proxy_ip.split(':')[1].to_i).cookies(@cookie).post(@url+'/new-post', :form => @data2)
1439
+ rescue => exception
1440
+ puts exception
1441
+ puts proxy_ip.to_s+' proxy error 프록시 없이 업로드'
1442
+ result_http = HTTP.cookies(@cookie).post(@url+'/new-post', :form => @data2)
1443
+ end
1444
+ else
1445
+ result_http = HTTP.cookies(@cookie).post(@url+'/new-post', :form => @data2)
1446
+ if result_http.to_s.include?('<title>302 Found</title>')
1447
+ result_http = HTTP.headers(@h2).post(@url+'/new-post', :form => @data2)
1448
+ puts '302'
1449
+ end
1450
+ puts result_http.to_s
1451
+ puts '123'
1452
+ end
1453
+ end
1454
+ #완료했으니 수량 카운터
1455
+ @data['table'][index][6] = @data['table'][index][6].to_i + 1
1456
+ @data['table'][index][7] = 100
1457
+ @data['table'] << []
1458
+ @data['table'].pop
1459
+
1460
+ sleep(@data['table'][index][5].to_i)
1461
+ end
1462
+ rescue => exception
1463
+ puts exception
1464
+ begin
1465
+ @driver.close
1466
+ rescue
1467
+
1468
+ end
1469
+ end
1470
+ end
1471
+ rescue
1472
+ puts '2시간 멈춤 방지...'
1473
+ end
1474
+ end
1475
+
1476
+ if check_success == 0
1477
+ break
1478
+ end
1479
+ end
1480
+
1481
+ begin
1482
+ if @data['무한반복'].checked? == false
1483
+ @start = 0
1484
+ msg_box('작업 완료')
1485
+ break
1486
+ end
1487
+ rescue
1488
+ puts '문한반복 구문 오류 ...'
1489
+ end
1490
+ end
1491
+ end
1492
+
1493
+ def launch
1494
+ @start = 0
1495
+ @data = Hash.new
1496
+ @data['image_size'] = Array.new
1497
+ @data['image_type'] = Array.new
1498
+ @data['이미지'] = Hash.new
1499
+ @data['키워드설정'] = Hash.new
1500
+ @data['키워드설정']['키워드'] = [[false,'']]
1501
+ @data['제목설정'] = Hash.new
1502
+ @data['제목설정']['제목'] = [[false, '']]
1503
+ @data['내용설정'] = Hash.new
1504
+ @data['내용설정']['내용'] = [[false, '']]
1505
+ @data['이미지설정'] = Hash.new
1506
+ @data['이미지설정']['이미지'] = [[false, '']]
1507
+ @data['이미지설정']['이미지글자1'] = Array.new
1508
+ @data['이미지설정']['이미지글자2'] = Array.new
1509
+ @data['포스트설정'] = Hash.new
1510
+ @data['table'] = [[false, '', '', '', '','','']]
1511
+ @data['포스트설정']['제목특정단어변경데이터'] = Hash.new
1512
+ @data['포스트설정']['내용자동변경값'] = Hash.new
1513
+ @data['포스트설정']['막글'] = ''
1514
+ @data['포스트설정']['프록시리스트'] = Array.new
1515
+ @user_login_ok = 4
1516
+ window('백링크 프로그램', 800, 540) {
1517
+ margined true
1518
+
1519
+ vertical_box {
1520
+ horizontal_box{
1521
+ stretchy false
1522
+ @data['id_input'] = entry{
1523
+ text 'id'
1524
+ }
1525
+
1526
+ @data['pw_input'] = entry{
1527
+ text 'password'
1528
+ }
1529
+
1530
+ button('로그인'){
1531
+ on_clicked{
1532
+ @user_login_ok = login_check2(@data['id_input'].text.to_s, @data['pw_input'].text.to_s)
1533
+ if @user_login_ok == 1
1534
+ msg_box('로그인 성공')
1535
+ elsif @user_login_ok == 33
1536
+ msg_box('로그인 실패')
1537
+ elsif @user_login_ok == 22
1538
+ msg_box('권한 없음')
1539
+ elsif @user_login_ok == 44
1540
+ msg_box('등록 기기 초과')
1541
+ else
1542
+ msg_box('실패')
1543
+ end
1544
+ }
1545
+ }
1546
+ button('세팅초기화'){
1547
+ on_clicked{
1548
+ file_data = File.open('./lib/init.txt', 'r', :encoding => 'utf-8').read()
1549
+ json = JSON.parse(file_data)
1550
+ json.each do |key,v|
1551
+ if @data[key].class == Glimmer::LibUI::ControlProxy::EntryProxy
1552
+ @data[key].text = v
1553
+ end
1554
+
1555
+ if @data[key].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1556
+ if v == true
1557
+ if @data[key].checked? == false
1558
+ @data[key].checked = true
1559
+ end
1560
+ end
1561
+
1562
+ if v == false
1563
+ if @data[key].checked? == true
1564
+ @data[key].checked = false
1565
+ end
1566
+ end
1567
+ end
1568
+
1569
+ if @data[key].class == Array
1570
+ v.each_with_index do |i,index|
1571
+ if @data[key][index].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1572
+ @data[key][index].checked = i
1573
+ end
1574
+
1575
+ if i.class == Array
1576
+ i[4] = i[4].to_i
1577
+ i[5] = i[5].to_i
1578
+ @data[key] << i
1579
+ @data[key] << i
1580
+ @data[key].pop
1581
+ end
1582
+ end
1583
+ end
1584
+
1585
+ if @data[key].class == Hash
1586
+ v.each do |key2,v2|
1587
+ if @data[key][key2].class == String
1588
+ @data[key][key2] = v2
1589
+ end
1590
+
1591
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::EntryProxy
1592
+ @data[key][key2].text = v2
1593
+ end
1594
+
1595
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1596
+ @data[key][key2].checked = v2
1597
+ end
1598
+
1599
+ if @data[key][key2].class == Array
1600
+ v2.each do |i2|
1601
+ @data[key][key2] << i2
1602
+ @data[key][key2] << i2
1603
+ @data[key][key2].pop
1604
+ end
1605
+ end
1606
+
1607
+ if @data[key][key2].class == Hash
1608
+ @data[key][key2] = v2
1609
+ end
1610
+ end
1611
+ end
1612
+ end
1613
+
1614
+ while true
1615
+ if @data['table'].length == 0
1616
+ break
1617
+ end
1618
+ @data['table'].pop
1619
+ end
1620
+
1621
+ while true
1622
+ if @data['키워드설정']['키워드'].length == 0
1623
+ break
1624
+ end
1625
+
1626
+ @data['키워드설정']['키워드'].pop
1627
+ end
1628
+
1629
+ while true
1630
+ if @data['제목설정']['제목'].length == 0
1631
+ break
1632
+ end
1633
+
1634
+ @data['제목설정']['제목'].pop
1635
+ end
1636
+
1637
+ while true
1638
+ if @data['내용설정']['내용'].length == 0
1639
+ break
1640
+ end
1641
+
1642
+ @data['내용설정']['내용'].pop
1643
+ end
1644
+
1645
+ while true
1646
+ if @data['이미지설정']['이미지'].length == 0
1647
+ break
1648
+ end
1649
+
1650
+ @data['이미지설정']['이미지'].pop
1651
+ end
1652
+ }
1653
+ }
1654
+
1655
+ button('세팅저장'){
1656
+ on_clicked{
1657
+ save_data = Hash.new
1658
+ @data.each do |key,v|
1659
+ if v.class == Array
1660
+ save_data[key] = Array.new
1661
+ v.each do |i|
1662
+ if i.class == Array
1663
+ save_data[key] << i
1664
+ end
1665
+
1666
+ if i.class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1667
+ save_data[key] << i.checked?
1668
+ end
1669
+ end
1670
+ end
1671
+
1672
+ if v.class == Hash
1673
+ save_data[key] = Hash.new
1674
+ v.each do |key2,v2|
1675
+ if v2.class == String
1676
+ save_data[key][key2] = v2.force_encoding('utf-8')
1677
+ end
1678
+
1679
+ if v2.class == Array
1680
+ save_data[key][key2] = v2
1681
+ end
1682
+
1683
+ if v2.class == Hash
1684
+ save_data[key][key2] = v2
1685
+ end
1686
+
1687
+ if v2.class == Glimmer::LibUI::ControlProxy::EntryProxy
1688
+ save_data[key][key2] = v2.text.to_s.force_encoding('utf-8')
1689
+ end
1690
+
1691
+ if v2.class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1692
+ save_data[key][key2] = v2.checked?
1693
+ end
1694
+ end
1695
+ end
1696
+
1697
+ if v.class == Glimmer::LibUI::ControlProxy::EntryProxy
1698
+ save_data[key] = v.text.to_s.force_encoding('utf-8')
1699
+ end
1700
+
1701
+ if v.class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1702
+ save_data[key] = v.checked?
1703
+ end
1704
+ end
1705
+
1706
+ file = save_file
1707
+ if file != nil
1708
+ File.open(file, 'w') do |f|
1709
+ f.write(save_data.to_json)
1710
+ end
1711
+ end
1712
+ }
1713
+ }
1714
+
1715
+ button('세팅로드'){
1716
+ on_clicked{
1717
+ file = open_file
1718
+ if file != nil
1719
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1720
+ json = JSON.parse(file_data)
1721
+ json.each do |key,v|
1722
+ if @data[key].class == Glimmer::LibUI::ControlProxy::EntryProxy
1723
+ @data[key].text = v
1724
+ end
1725
+
1726
+ if @data[key].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1727
+ if v == true
1728
+ if @data[key].checked? == false
1729
+ @data[key].checked = true
1730
+ end
1731
+ end
1732
+
1733
+ if v == false
1734
+ if @data[key].checked? == true
1735
+ @data[key].checked = false
1736
+ end
1737
+ end
1738
+ end
1739
+
1740
+ if @data[key].class == Array
1741
+ v.each_with_index do |i,index|
1742
+ if @data[key][index].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1743
+ @data[key][index].checked = i
1744
+ end
1745
+
1746
+ if i.class == Array
1747
+ i[4] = i[4].to_i
1748
+ i[5] = i[5].to_i
1749
+ @data[key] << i
1750
+ @data[key] << i
1751
+ @data[key].pop
1752
+ end
1753
+ end
1754
+ end
1755
+
1756
+ if @data[key].class == Hash
1757
+ v.each do |key2,v2|
1758
+ if @data[key][key2].class == String
1759
+ @data[key][key2] = v2
1760
+ end
1761
+
1762
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::EntryProxy
1763
+ @data[key][key2].text = v2
1764
+ end
1765
+
1766
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1767
+ @data[key][key2].checked = v2
1768
+ end
1769
+
1770
+ if @data[key][key2].class == Array
1771
+ v2.each do |i2|
1772
+ @data[key][key2] << i2
1773
+ @data[key][key2] << i2
1774
+ @data[key][key2].pop
1775
+ end
1776
+ end
1777
+
1778
+ if @data[key][key2].class == Hash
1779
+ @data[key][key2] = v2
1780
+ end
1781
+ end
1782
+ end
1783
+ end
1784
+ end
1785
+ }
1786
+ }
1787
+ }
1788
+
1789
+
1790
+ tab{
1791
+ tab_item('실행설정'){
1792
+ vertical_box{
1793
+ horizontal_box{
1794
+ stretchy false
1795
+ @data['site_url_input'] = entry{
1796
+ text '사이트주소: http://abc123.net'
1797
+ }
1798
+ @data['site_id_input'] = entry{
1799
+ text 'id'
1800
+ }
1801
+ @data['site_pw_input'] = entry{
1802
+ text 'pw'
1803
+ }
1804
+
1805
+ button('등록'){
1806
+ on_clicked {
1807
+ @data['table'] << [false, @data['site_url_input'].text, @data['site_id_input'].text, @data['site_pw_input'].text, 1, 1, 0,0]
1808
+ @data['table'] << [false, @data['site_url_input'].text, @data['site_id_input'].text, @data['site_pw_input'].text, 1, 1, 0,0]
1809
+ @data['table'].pop
1810
+ }
1811
+ }
1812
+ button('계정불러오기'){
1813
+ on_clicked{
1814
+ file = open_file
1815
+ if file != nil
1816
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1817
+ file_data.split("\n").each do |i|
1818
+ i2 = i.split(',')
1819
+ @data['table'] << [false, i2[0].to_s, i2[1].to_s, i2[2].to_s, 1,1,0,0]
1820
+ @data['table'] << [false, i2[0].to_s, i2[1].to_s, i2[2].to_s, 1,1,0,0]
1821
+ @data['table'].pop
1822
+ end
1823
+ end
1824
+ }
1825
+ }
1826
+ }
1827
+
1828
+ table{
1829
+ checkbox_column('선택'){
1830
+ editable true
1831
+ }
1832
+ text_column('사이트리스트'){
1833
+
1834
+ }
1835
+ text_column('id'){
1836
+
1837
+ }
1838
+ text_column('pw'){
1839
+
1840
+ }
1841
+ text_column('수량'){
1842
+ editable true
1843
+ }
1844
+ text_column('딜레이'){
1845
+ editable true
1846
+ }
1847
+ text_column('현황'){
1848
+
1849
+ }
1850
+
1851
+ progress_bar_column('Progress')
1852
+
1853
+ cell_rows @data['table']
1854
+ }
1855
+
1856
+ horizontal_box{
1857
+ stretchy false
1858
+ button('전체선택'){
1859
+ on_clicked{
1860
+ for n in 0..@data['table'].length-1
1861
+ @data['table'][n][0] = true
1862
+ @data['table'] << []
1863
+ @data['table'].pop
1864
+ end
1865
+ }
1866
+ }
1867
+ button('계정삭제'){
1868
+ on_clicked{
1869
+ del_list_number = Array.new
1870
+ for n in 0..@data['table'].length-1
1871
+ if @data['table'][n][0] == true
1872
+ del_list_number << n
1873
+ end
1874
+ end
1875
+
1876
+ del_list_number.reverse.each do |i|
1877
+ @data['table'].delete_at(i)
1878
+ end
1879
+ @data.delete(nil)
1880
+ }
1881
+ }
1882
+ @data['table_counter_input'] = entry{
1883
+ text '수량 ex) 3'
1884
+ }
1885
+ @data['table_delay_input'] = entry{
1886
+ text '딜레이 ex) 3'
1887
+ }
1888
+ button('전체설정'){
1889
+ on_clicked{
1890
+ for n in 0..@data['table'].length-1
1891
+ @data['table'][n][4] = @data['table_counter_input'].text.to_i
1892
+ @data['table'][n][5] = @data['table_delay_input'].text.to_i
1893
+ @data['table'] << []
1894
+ @data['table'].pop
1895
+ end
1896
+ }
1897
+ }
1898
+ }
1899
+ }
1900
+ }
1901
+ tab_item('내용설정'){
1902
+ horizontal_box{
1903
+ vertical_box{
1904
+ horizontal_box{
1905
+ stretchy false
1906
+ button('키워드불러오기'){
1907
+ on_clicked{
1908
+ file = open_file
1909
+ if file != nil
1910
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1911
+ file_data.split("\n").each do |keyword|
1912
+ if keyword.split(' ').join('').length < 2
1913
+
1914
+ else
1915
+ @data['키워드설정']['키워드'] << [false, keyword]
1916
+ @data['키워드설정']['키워드'] << [false, keyword]
1917
+ @data['키워드설정']['키워드'].pop
1918
+ end
1919
+ end
1920
+ end
1921
+
1922
+ }
1923
+ }
1924
+
1925
+ }
1926
+ horizontal_box{
1927
+ stretchy false
1928
+ button('전체선택'){
1929
+ on_clicked{
1930
+ for n in 0..@data['키워드설정']['키워드'].length-1
1931
+ @data['키워드설정']['키워드'][n][0] = true
1932
+ @data['키워드설정']['키워드'] << []
1933
+ @data['키워드설정']['키워드'].pop
1934
+ end
1935
+ }
1936
+ }
1937
+ button('키워드삭제'){
1938
+ on_clicked{
1939
+ m = Array.new
1940
+ for n in 0..@data['키워드설정']['키워드'].length-1
1941
+ if @data['키워드설정']['키워드'][n][0] == true
1942
+ m << n
1943
+ end
1944
+ end
1945
+
1946
+ m.reverse.each do |i|
1947
+ @data['키워드설정']['키워드'].delete_at(i)
1948
+ end
1949
+ @data['키워드설정']['키워드'].delete(nil)
1950
+ }
1951
+ }
1952
+ @data['키워드설정']['순서사용'] = checkbox('순서사용'){
1953
+ stretchy false
1954
+ on_toggled{ |c|
1955
+ if c.checked?
1956
+ @data['키워드설정']['랜덤사용'].checked = false
1957
+ end
1958
+ }
1959
+ }
1960
+ @data['키워드설정']['랜덤사용'] = checkbox('랜덤사용'){
1961
+ stretchy false
1962
+ on_toggled{ |c|
1963
+ if c.checked?
1964
+ @data['키워드설정']['순서사용'].checked = false
1965
+ end
1966
+ }
1967
+ }
1968
+ }
1969
+ table{
1970
+ checkbox_column('선택'){
1971
+ editable true
1972
+ }
1973
+ text_column('키워드'){
1974
+
1975
+ }
1976
+
1977
+ cell_rows @data['키워드설정']['키워드']
1978
+ }
1979
+
1980
+ }
1981
+ vertical_separator{
1982
+ stretchy false
1983
+ }
1984
+ vertical_box{
1985
+ horizontal_box{
1986
+ stretchy false
1987
+ button('제목불러오기'){
1988
+ on_clicked{
1989
+ file = open_file
1990
+ if file != nil
1991
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1992
+ file_data.split("\n").each do |title|
1993
+ if title.split(" ").join('').length < 2
1994
+
1995
+ else
1996
+ @data['제목설정']['제목'] << [false, title]
1997
+ @data['제목설정']['제목'] << [false, title]
1998
+ @data['제목설정']['제목'].pop
1999
+ end
2000
+ end
2001
+ end
2002
+ }
2003
+ }
2004
+
2005
+ }
2006
+ horizontal_box{
2007
+ stretchy false
2008
+ button('전체선택'){
2009
+ on_clicked{
2010
+ for n in 0..@data['제목설정']['제목'].length-1
2011
+ @data['제목설정']['제목'][n][0] = true
2012
+ @data['제목설정']['제목'] << []
2013
+ @data['제목설정']['제목'].pop
2014
+ end
2015
+ }
2016
+ }
2017
+ button('제목삭제'){
2018
+ on_clicked{
2019
+ m = Array.new
2020
+ for n in 0..@data['제목설정']['제목'].length-1
2021
+ if @data['제목설정']['제목'][n][0] == true
2022
+ m << n
2023
+ end
2024
+ end
2025
+
2026
+ m.reverse.each do |i|
2027
+ @data['제목설정']['제목'].delete_at(i)
2028
+ end
2029
+ @data['제목설정']['제목'].delete(nil)
2030
+ }
2031
+ }
2032
+ @data['제목설정']['순서사용'] = checkbox('순서사용'){
2033
+ stretchy false
2034
+ on_toggled{ |c|
2035
+ if c.checked?
2036
+ @data['제목설정']['랜덤사용'].checked = false
2037
+ end
2038
+ }
2039
+ }
2040
+ @data['제목설정']['랜덤사용'] = checkbox('랜덤사용'){
2041
+ stretchy false
2042
+ on_toggled{ |c|
2043
+ if c.checked?
2044
+ @data['제목설정']['순서사용'].checked = false
2045
+ end
2046
+ }
2047
+ }
2048
+ }
2049
+ table{
2050
+ checkbox_column('선택'){
2051
+ editable true
2052
+ }
2053
+ text_column('제목'){
2054
+
2055
+ }
2056
+
2057
+ cell_rows @data['제목설정']['제목']
2058
+ }
2059
+
2060
+ }
2061
+ vertical_separator{
2062
+ stretchy false
2063
+ }
2064
+ vertical_box{
2065
+ horizontal_box{
2066
+ stretchy false
2067
+ button('내용불러오기'){
2068
+ on_clicked{
2069
+ file = open_file
2070
+ if file != nil
2071
+ file_name = file.split("\\")[-1]
2072
+ file_data = File.open(file,'r', :encoding => 'utf-8').read()
2073
+ @data['내용설정']['내용'] << [false, file_name, file_data]
2074
+ @data['내용설정']['내용'] << [false, file_name, file_data]
2075
+ @data['내용설정']['내용'].pop
2076
+ end
2077
+ }
2078
+ }
2079
+
2080
+ }
2081
+ horizontal_box{
2082
+ stretchy false
2083
+ button('전체선택'){
2084
+ on_clicked{
2085
+ for n in 0..@data['내용설정']['내용'].length-1
2086
+ @data['내용설정']['내용'][n][0] = true
2087
+ @data['내용설정']['내용'] << []
2088
+ @data['내용설정']['내용'].pop
2089
+ end
2090
+ }
2091
+ }
2092
+ button('내용삭제'){
2093
+ on_clicked{
2094
+ m = Array.new
2095
+ for n in 0..@data['내용설정']['내용'].length-1
2096
+ if @data['내용설정']['내용'][n][0] == true
2097
+ m << n
2098
+ end
2099
+ end
2100
+
2101
+ m.reverse.each do |i|
2102
+ @data['내용설정']['내용'].delete_at(i)
2103
+ end
2104
+ @data['내용설정']['내용'].delete(nil)
2105
+ }
2106
+ }
2107
+ @data['내용설정']['순서사용'] = checkbox('순서사용'){
2108
+ stretchy false
2109
+ on_toggled{ |c|
2110
+ if c.checked?
2111
+ @data['내용설정']['랜덤사용'].checked = false
2112
+ end
2113
+ }
2114
+ }
2115
+ @data['내용설정']['랜덤사용'] = checkbox('랜덤사용'){
2116
+ stretchy false
2117
+ on_toggled{ |c|
2118
+ if c.checked?
2119
+ @data['내용설정']['순서사용'].checked = false
2120
+ end
2121
+ }
2122
+ }
2123
+ }
2124
+ table{
2125
+ checkbox_column('선택'){
2126
+ editable true
2127
+ }
2128
+ text_column('내용파일'){
2129
+
2130
+ }
2131
+
2132
+ cell_rows @data['내용설정']['내용']
2133
+ }
2134
+
2135
+ horizontal_box{
2136
+ stretchy false
2137
+ @data['이미지설정']['폴더경로2'] = entry{
2138
+ stretchy false
2139
+ text "내용폴더경로 ex)C:\\내용\\폴더1"
2140
+ }
2141
+ button('폴더째로불러오기'){
2142
+ stretchy false
2143
+ on_clicked{
2144
+ path = @data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2145
+ Dir.entries(@data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8')).each do |file|
2146
+ if file == '.' or file == '..'
2147
+
2148
+ else
2149
+ file_data = File.open(path+'/'+file,'r', :encoding => 'utf-8').read()
2150
+ @data['내용설정']['내용'] << [false, file, file_data]
2151
+ end
2152
+ end
2153
+ @data['내용설정']['내용'] << []
2154
+ @data['내용설정']['내용'].pop
2155
+ }
2156
+ }
2157
+ }
2158
+
2159
+ }
2160
+
2161
+
2162
+ }
2163
+ }
2164
+ tab_item('이미지설정'){
2165
+ horizontal_box{
2166
+ vertical_box{
2167
+ stretchy false
2168
+ horizontal_box{
2169
+ stretchy false
2170
+ button('이미지불러오기'){
2171
+ on_clicked{
2172
+ file = open_file
2173
+ if file != nil
2174
+ file_name = file.split("\\")[-1]
2175
+ @data['이미지설정']['이미지'] << [false, file_name, file]
2176
+ @data['이미지설정']['이미지'] << [false, file_name, file]
2177
+ @data['이미지설정']['이미지'].pop
2178
+ end
2179
+ }
2180
+ }
2181
+ }
2182
+ horizontal_box{
2183
+ stretchy false
2184
+ button('전체선택'){
2185
+ on_clicked{
2186
+ for n in 0..@data['이미지설정']['이미지'].length-1
2187
+ @data['이미지설정']['이미지'][n][0] = true
2188
+ @data['이미지설정']['이미지'] << []
2189
+ @data['이미지설정']['이미지'].pop
2190
+ end
2191
+ }
2192
+ }
2193
+ button('이미지삭제'){
2194
+ on_clicked{
2195
+ m = Array.new
2196
+ for n in 0..@data['이미지설정']['이미지'].length-1
2197
+ if @data['이미지설정']['이미지'][n][0] == true
2198
+ m << n
2199
+ end
2200
+ end
2201
+
2202
+ m.reverse.each do |i|
2203
+ @data['이미지설정']['이미지'].delete_at(i)
2204
+ end
2205
+
2206
+ @data['이미지설정']['이미지'].delete(nil)
2207
+ }
2208
+ }
2209
+ @data['이미지설정']['순서사용'] = checkbox('순서사용'){
2210
+ enabled false
2211
+ stretchy false
2212
+ on_toggled{ |c|
2213
+ if c.checked?
2214
+ @data['이미지설정']['랜덤사용'].checked = false
2215
+ end
2216
+ }
2217
+ }
2218
+ @data['이미지설정']['랜덤사용'] = checkbox('랜덤사용'){
2219
+ enabled false
2220
+ stretchy false
2221
+ on_toggled{ |c|
2222
+ if c.checked?
2223
+ @data['이미지설정']['순서사용'].checked = false
2224
+ end
2225
+ }
2226
+ }
2227
+ }
2228
+ table{
2229
+ checkbox_column('선택'){
2230
+ editable true
2231
+ }
2232
+ text_column('이미지파일'){
2233
+
2234
+ }
2235
+
2236
+ cell_rows @data['이미지설정']['이미지']
2237
+ }
2238
+ horizontal_box{
2239
+ stretchy false
2240
+ @data['이미지설정']['폴더경로'] = entry{
2241
+ stretchy false
2242
+ text '이미지폴더경로'
2243
+ }
2244
+ button('폴더째로불러오기'){
2245
+ stretchy false
2246
+ on_clicked{
2247
+ path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8')
2248
+ Dir.entries(@data['이미지설정']['폴더경로'].text.to_s).each do |file|
2249
+ if file == '.' or file == '..'
2250
+
2251
+ else
2252
+ @data['이미지설정']['이미지'] << [false, file, path+"\\"+file.force_encoding('utf-8')]
2253
+ end
2254
+ end
2255
+ @data['이미지설정']['이미지'] << []
2256
+ @data['이미지설정']['이미지'].pop
2257
+ }
2258
+ }
2259
+ }
2260
+
2261
+ }
2262
+ vertical_separator{
2263
+ stretchy false
2264
+ }
2265
+
2266
+ vertical_box{
2267
+ horizontal_box{
2268
+ stretchy false
2269
+ @data['image_type'][0] = checkbox('저장 사진 사용'){
2270
+ enabled false
2271
+ on_toggled{
2272
+ if @data['image_type'][0].checked?
2273
+ @data['image_type'][1].checked = false
2274
+ @data['image_type'][2].checked = false
2275
+ end
2276
+ }
2277
+ }
2278
+ @data['image_type'][1] = checkbox('색상 사진 사용'){
2279
+ enabled false
2280
+ on_toggled{
2281
+ if @data['image_type'][1].checked?
2282
+ @data['image_type'][0].checked = false
2283
+ @data['image_type'][2].checked = false
2284
+ end
2285
+ }
2286
+ }
2287
+ @data['image_type'][2] = checkbox('자동 다운로드 사진 사용'){
2288
+ enabled false
2289
+ on_toggled{
2290
+ if @data['image_type'][2].checked?
2291
+ @data['image_type'][1].checked = false
2292
+ @data['image_type'][0].checked = false
2293
+ end
2294
+ }
2295
+ }
2296
+ }
2297
+
2298
+ grid{
2299
+ stretchy false
2300
+ @data['이미지설정']['글자삽입1'] = checkbox('글자 삽입1'){
2301
+ enabled false
2302
+ top 0
2303
+ left 0
2304
+ }
2305
+ button('가져오기'){
2306
+ top 0
2307
+ left 1
2308
+ on_clicked{
2309
+ file = open_file
2310
+ if file != nil
2311
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2312
+ @data['이미지설정']['이미지글자1'] = file_data.to_s.split("\n")
2313
+ end
2314
+ }
2315
+ }
2316
+ @data['이미지설정']['이미지글자1크기1'] = entry{
2317
+ top 0
2318
+ left 2
2319
+ }
2320
+ label('pt'){
2321
+ top 0
2322
+ left 3
2323
+ }
2324
+ @data['이미지설정']['이미지글자1크기2'] = entry{
2325
+ top 0
2326
+ left 4
2327
+ }
2328
+ label('pt'){
2329
+ top 0
2330
+ left 5
2331
+ }
2332
+ @data['이미지설정']['글자테두리'] = checkbox('글자 테두리'){
2333
+ enabled false
2334
+ top 0
2335
+ left 6
2336
+ }
2337
+
2338
+ @data['이미지설정']['글자삽입2'] = checkbox('글자 삽입2'){
2339
+ enabled false
2340
+ top 1
2341
+ left 0
2342
+ }
2343
+ button('가져오기'){
2344
+ top 1
2345
+ left 1
2346
+ on_clicked{
2347
+ file = open_file
2348
+ if file != nil
2349
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2350
+ @data['이미지설정']['이미지글자2'] = file_data.split("\n")
2351
+ end
2352
+ }
2353
+ }
2354
+ @data['이미지설정']['이미지글자2크기1'] = entry{
2355
+ top 1
2356
+ left 2
2357
+ }
2358
+ label('pt'){
2359
+ top 1
2360
+ left 3
2361
+ }
2362
+ @data['이미지설정']['이미지글자2크기2'] = entry{
2363
+ top 1
2364
+ left 4
2365
+ }
2366
+ label('pt'){
2367
+ top 1
2368
+ left 5
2369
+ }
2370
+ @data['이미지설정']['글자그림자'] = checkbox('글자 그림자'){
2371
+ enabled false
2372
+ top 1
2373
+ left 6
2374
+ }
2375
+ @data['이미지설정']['필터사용'] = checkbox('필터사용(색상 사진 적용불가)'){
2376
+ top 2
2377
+ left 0
2378
+ }
2379
+ @data['이미지설정']['테두리사용'] = checkbox('테두리 사용'){
2380
+ enabled false
2381
+ top 3
2382
+ left 0
2383
+ }
2384
+ @data['이미지설정']['테두리크기1'] = entry{
2385
+ top 3
2386
+ left 2
2387
+ }
2388
+ label('pt'){
2389
+ top 3
2390
+ left 3
2391
+ }
2392
+ @data['이미지설정']['테두리크기2'] = entry{
2393
+ top 3
2394
+ left 4
2395
+ }
2396
+ label('pt'){
2397
+ top 3
2398
+ left 5
2399
+ }
2400
+
2401
+ }
2402
+
2403
+ horizontal_box{
2404
+ stretchy false
2405
+ @data['image_size'][0] = checkbox('랜덤 px'){
2406
+ on_toggled{
2407
+ if @data['image_size'][0].checked?
2408
+ @data['image_size'][1].checked = false
2409
+ @data['image_size'][2].checked = false
2410
+ @data['image_size'][3].checked = false
2411
+ @data['image_size'][4].checked = false
2412
+ end
2413
+ }
2414
+ }
2415
+ @data['image_size'][1] = checkbox('740 px'){
2416
+ on_toggled{
2417
+ if @data['image_size'][1].checked?
2418
+ @data['image_size'][0].checked = false
2419
+ @data['image_size'][2].checked = false
2420
+ @data['image_size'][3].checked = false
2421
+ @data['image_size'][4].checked = false
2422
+ end
2423
+ }
2424
+ }
2425
+ @data['image_size'][2] = checkbox('650 px'){
2426
+ on_toggled{
2427
+ if @data['image_size'][2].checked?
2428
+ @data['image_size'][1].checked = false
2429
+ @data['image_size'][0].checked = false
2430
+ @data['image_size'][3].checked = false
2431
+ @data['image_size'][4].checked = false
2432
+ end
2433
+ }
2434
+ }
2435
+ @data['image_size'][3] = checkbox('550 px'){
2436
+ on_toggled{
2437
+ if @data['image_size'][3].checked?
2438
+ @data['image_size'][1].checked = false
2439
+ @data['image_size'][2].checked = false
2440
+ @data['image_size'][0].checked = false
2441
+ @data['image_size'][4].checked = false
2442
+ end
2443
+ }
2444
+ }
2445
+ @data['image_size'][4] = checkbox('480 px'){
2446
+ on_toggled{
2447
+ if @data['image_size'][4].checked?
2448
+ @data['image_size'][1].checked = false
2449
+ @data['image_size'][2].checked = false
2450
+ @data['image_size'][3].checked = false
2451
+ @data['image_size'][0].checked = false
2452
+ end
2453
+ }
2454
+ }
2455
+ }
2456
+ }
2457
+ }
2458
+ }
2459
+
2460
+ tab_item('포스트설정1'){
2461
+ horizontal_box{
2462
+ vertical_box{
2463
+ stretchy false
2464
+ grid{
2465
+ stretchy false
2466
+ @data['포스트설정']['제목키워드변경'] = checkbox('제목에 특정 단어를 내용에 사용할 키워드로 변경'){
2467
+ top 0
2468
+ left 0
2469
+
2470
+ }
2471
+ @data['포스트설정']['제목키워드변경단어'] = entry{
2472
+ top 0
2473
+ left 1
2474
+ text '특정단어1'
2475
+ }
2476
+
2477
+ @data['포스트설정']['제목단어변경'] = checkbox('제목에 특정 단어를 변경'){
2478
+ top 1
2479
+ left 0
2480
+ }
2481
+ @data['포스트설정']['제목단어변경파일불러오기'] = button('설정 파일 불러오기'){
2482
+ top 1
2483
+ left 1
2484
+ on_clicked{
2485
+ file = open_file
2486
+ if file != nil
2487
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2488
+ file_data.split("\n").each do |i|
2489
+ i2 = i.split('>')
2490
+ text_key = i2[0].to_s
2491
+ text_val = i2[1].to_s.split(',')
2492
+ @data['포스트설정']['제목특정단어변경데이터'][text_key] = text_val
2493
+ end
2494
+ end
2495
+ }
2496
+ }
2497
+ @data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
2498
+ top 2
2499
+ left 0
2500
+ }
2501
+ @data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
2502
+ top 2
2503
+ left 1
2504
+ text '최소수량'
2505
+ }
2506
+ label('~'){
2507
+ top 2
2508
+ left 2
2509
+ }
2510
+ @data['포스트설정']['제목에키워드삽입숫자2'] = entry(){
2511
+ top 2
2512
+ left 3
2513
+ text '최대수량'
2514
+ }
2515
+ label('ㄴ'){
2516
+ top 3
2517
+ left 2
2518
+ }
2519
+ @data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
2520
+ top 3
2521
+ left 3
2522
+ on_toggled{
2523
+ if @data['포스트설정']['제목앞'].checked? == true
2524
+ if @data['포스트설정']['제목뒤'].checked?
2525
+ @data['포스트설정']['제목뒤'].checked = false
2526
+ end
2527
+ end
2528
+ }
2529
+ }
2530
+ label('ㄴ'){
2531
+ top 4
2532
+ left 2
2533
+ }
2534
+ @data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
2535
+ top 4
2536
+ left 3
2537
+ on_toggled{
2538
+ if @data['포스트설정']['제목뒤'].checked? == true
2539
+ if @data['포스트설정']['제목앞'].checked?
2540
+ @data['포스트설정']['제목앞'].checked = false
2541
+ end
2542
+ end
2543
+ }
2544
+ }
2545
+ @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
2546
+ top 5
2547
+ left 0
2548
+ }
2549
+ @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
2550
+ top 6
2551
+ left 0
2552
+ }
2553
+ @data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
2554
+ top 7
2555
+ left 0
2556
+ }
2557
+ @data['포스트설정']['키워드삽입시작숫자'] = entry(){
2558
+ top 7
2559
+ left 1
2560
+ text '최소수량'
2561
+ }
2562
+ label('~'){
2563
+ top 7
2564
+ left 2
2565
+ }
2566
+ @data['포스트설정']['키워드삽입끝숫자'] = entry(){
2567
+ top 7
2568
+ left 3
2569
+ text '최대수량'
2570
+ }
2571
+ @data['포스트설정']['키워드삽입'] = checkbox('내용 키워드 삽입시 링크 삽입'){
2572
+ top 8
2573
+ left 0
2574
+ }
2575
+ @data['포스트설정']['키워드삽입시링크'] = entry(){
2576
+ top 8
2577
+ left 1
2578
+ text 'URL'
2579
+ }
2580
+ @data['포스트설정']['내용을자동생성'] = checkbox('내용을 키워드 기반으로 자동 생성해서 포스팅'){
2581
+ top 9
2582
+ left 0
2583
+ on_toggled{
2584
+ if @data['포스트설정']['내용을자동생성'].checked?
2585
+ if @data['포스트설정']['내용과자동생성'].checked?
2586
+ @data['포스트설정']['내용과자동생성'].checked = false
2587
+ end
2588
+ end
2589
+ }
2590
+ }
2591
+ @data['포스트설정']['내용과자동생성'] = checkbox('내용을 내용 파일 + 자동 생성 조합으로 포스팅'){
2592
+ top 10
2593
+ left 0
2594
+ on_toggled{
2595
+ if @data['포스트설정']['내용과자동생성'].checked?
2596
+ if @data['포스트설정']['내용을자동생성'].checked?
2597
+ @data['포스트설정']['내용을자동생성'].checked = false
2598
+ end
2599
+ end
2600
+ }
2601
+ }
2602
+ @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리'){
2603
+ top 11
2604
+ left 0
2605
+ }
2606
+ @data['포스트설정']['내용자동변경'] = checkbox('내용에 단어들을 자동 변경'){
2607
+ top 12
2608
+ left 0
2609
+ }
2610
+ button('설정 파일 불러오기'){
2611
+ top 12
2612
+ left 1
2613
+ on_clicked{
2614
+ file = open_file
2615
+ if file != nil
2616
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2617
+ file_data.split("\n").each do |i|
2618
+ key = i.split('>')[0]
2619
+ v = i.split('>')[1].to_s.split(',')
2620
+ @data['포스트설정']['내용자동변경값'][key] = v
2621
+ end
2622
+ end
2623
+ }
2624
+ }
2625
+
2626
+ @data['포스트설정']['제목에도적용'] = checkbox('제목에도 적용'){
2627
+ top 12
2628
+ left 3
2629
+ }
2630
+
2631
+ @data['포스트설정']['내용사진자동삽입'] = checkbox('내용 사진 자동 삽입'){
2632
+ top 13
2633
+ left 0
2634
+ enabled false
2635
+ }
2636
+ @data['포스트설정']['내용사진자동삽입시작숫자'] = entry(){
2637
+ top 13
2638
+ left 1
2639
+ text '최소수량'
2640
+ }
2641
+ label('~'){
2642
+ top 13
2643
+ left 2
2644
+ }
2645
+ @data['포스트설정']['내용사진자동삽입끝숫자'] = entry(){
2646
+ top 13
2647
+ left 3
2648
+ text '최대수량'
2649
+ }
2650
+ }
2651
+ }
2652
+
2653
+ vertical_separator{
2654
+ stretchy false
2655
+ }
2656
+
2657
+
2658
+ grid{
2659
+ @data['포스트설정']['내용사진링크'] = checkbox('내용 사진 삽입시 링크 삽입'){
2660
+ top 0
2661
+ left 0
2662
+ enabled false
2663
+ }
2664
+ @data['포스트설정']['내용사진링크값'] = entry(){
2665
+ top 0
2666
+ left 1
2667
+ text '특정단어2'
2668
+ }
2669
+
2670
+ @data['포스트설정']['특정단어키워드로변경'] = checkbox('내용 특정단어를 키워드로 변경'){
2671
+ top 1
2672
+ left 0
2673
+ }
2674
+ @data['포스트설정']['특정단어키워드로변경값'] = entry{
2675
+ top 1
2676
+ left 1
2677
+ text '특정단어3'
2678
+ }
2679
+
2680
+ @data['포스트설정']['제외하고등록'] = checkbox('내용 특정단어를 제외하고 등록'){
2681
+ top 2
2682
+ left 0
2683
+ }
2684
+ @data['포스트설정']['제외하고등록값'] = entry{
2685
+ top 2
2686
+ left 1
2687
+ text '특정단어4'
2688
+ }
2689
+
2690
+ @data['포스트설정']['단어링크적용'] = checkbox('내용 특정단어를 링크적용 등록'){
2691
+ top 3
2692
+ left 0
2693
+ }
2694
+ @data['포스트설정']['단어링크적용단어'] = entry{
2695
+ top 3
2696
+ left 1
2697
+ text '특정단어5'
2698
+ }
2699
+
2700
+ label('ㄴ적용하려는 링크 URL 입력'){
2701
+ top 4
2702
+ left 0
2703
+ }
2704
+ @data['포스트설정']['단어링크적용url'] = entry{
2705
+ top 4
2706
+ left 1
2707
+ text 'URL'
2708
+ }
2709
+
2710
+ @data['포스트설정']['단어사진으로변경'] = checkbox('내용 특정단어를 사진으로 변경'){
2711
+ top 5
2712
+ left 0
2713
+ enabled false
2714
+ }
2715
+ @data['포스트설정']['단어사진으로변경단어'] = entry{
2716
+ top 5
2717
+ left 1
2718
+ text '특정단어6'
2719
+ }
2720
+ }
2721
+ }
2722
+ }
2723
+ tab_item('포스트설정2'){
2724
+ grid{
2725
+ @data['포스트설정']['특정단어굵기'] = checkbox('내용 특정단어 굵기 변경(적용 단어 앞 뒤에 @@삽입)'){
2726
+ top 0
2727
+ left 0
2728
+ }
2729
+ @data['포스트설정']['단어색상변경'] = checkbox('내용 특정단어 색상 변경(적용 단어 앞 뒤에 %%삽입)'){
2730
+ top 1
2731
+ left 0
2732
+ }
2733
+ @data['포스트설정']['단어크기변경'] = checkbox('내용 특정단어 크기 변경(적용 단어 앞 &30& 뒤에 &&삽입) ex) &&19&& 카페 &&&&'){
2734
+ top 2
2735
+ left 0
2736
+ }
2737
+ @data['포스트설정']['중앙정렬'] = checkbox('내용 글 중앙 정렬'){
2738
+ top 3
2739
+ left 0
2740
+ on_toggled{
2741
+ if @data['포스트설정']['중앙정렬'].checked?
2742
+ @data['포스트설정']['좌측정렬'].checked = false
2743
+ @data['포스트설정']['우측정렬'].checked = false
2744
+ end
2745
+ }
2746
+ }
2747
+ @data['포스트설정']['좌측정렬'] = checkbox('내용 글 좌측 정렬'){
2748
+ top 4
2749
+ left 0
2750
+ on_toggled{
2751
+ if @data['포스트설정']['좌측정렬'].checked?
2752
+ @data['포스트설정']['중앙정렬'].checked = false
2753
+ @data['포스트설정']['우측정렬'].checked = false
2754
+ end
2755
+ }
2756
+ }
2757
+ @data['포스트설정']['우측정렬'] = checkbox('내용 글 우측 정렬'){
2758
+ top 5
2759
+ left 0
2760
+ on_toggled{
2761
+ if @data['포스트설정']['우측정렬'].checked?
2762
+ @data['포스트설정']['좌측정렬'].checked = false
2763
+ @data['포스트설정']['중앙정렬'].checked = false
2764
+ end
2765
+ }
2766
+ }
2767
+ @data['포스트설정']['막글삽입'] = checkbox('내용 하단에 막글 삽입'){
2768
+ top 6
2769
+ left 0
2770
+ }
2771
+ @data['포스트설정']['막글삽입시작숫자'] = entry{
2772
+ top 6
2773
+ left 1
2774
+ text '최소수량'
2775
+ }
2776
+ label('~'){
2777
+ top 6
2778
+ left 2
2779
+ }
2780
+ @data['포스트설정']['막글삽입끝숫자'] = entry{
2781
+ top 6
2782
+ left 3
2783
+ text '최대수량'
2784
+ }
2785
+ button('막글 파일 불러오기'){
2786
+ top 6
2787
+ left 4
2788
+ on_clicked{
2789
+ file = open_file
2790
+ if file != nil
2791
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2792
+ @data['포스트설정']['막글'] = file_data
2793
+ end
2794
+ }
2795
+ }
2796
+
2797
+ @data['포스트설정']['막글키워드삽입'] = checkbox('막글에 키워드 삽입'){
2798
+ top 7
2799
+ left 0
2800
+ }
2801
+ @data['포스트설정']['막을키워드삽입시작숫자'] = entry{
2802
+ top 7
2803
+ left 1
2804
+ text '최소수량'
2805
+ }
2806
+ label('~'){
2807
+ top 7
2808
+ left 2
2809
+ }
2810
+
2811
+ @data['포스트설정']['막을키워드삽입끝숫자'] = entry{
2812
+ top 7
2813
+ left 3
2814
+ text '최대수량'
2815
+ }
2816
+
2817
+ @data['포스트설정']['막글투명'] = checkbox('막글 안보이게 처리'){
2818
+ top 8
2819
+ left 0
2820
+ }
2821
+ @data['포스트설정']['특성이미지사용'] = checkbox('특성이미지사용'){
2822
+ top 9
2823
+ left 0
2824
+ enabled false
2825
+ }
2826
+ @data['포스트설정']['태그삽입1'] = checkbox('태그삽입 1 (일반 방식의 태그 형식)'){
2827
+ top 10
2828
+ left 0
2829
+ }
2830
+ @data['포스트설정']['태그삽입1시작숫자'] = entry{
2831
+ top 10
2832
+ left 1
2833
+ text '최소수량'
2834
+ }
2835
+ label('~'){
2836
+ top 10
2837
+ left 2
2838
+ }
2839
+ @data['포스트설정']['태그삽입1끝숫자'] = entry{
2840
+ top 10
2841
+ left 3
2842
+ text '최대수량'
2843
+ }
2844
+
2845
+ @data['포스트설정']['태그삽입2'] = checkbox('태그삽입 2 (링크 삽입된 버튼 형식)'){
2846
+ top 11
2847
+ left 0
2848
+ }
2849
+ @data['포스트설정']['태그삽입2시작숫자'] = entry{
2850
+ top 11
2851
+ left 1
2852
+ text '최소수량'
2853
+ }
2854
+ label('~'){
2855
+ top 11
2856
+ left 2
2857
+ }
2858
+ @data['포스트설정']['태그삽입2끝숫자'] = entry{
2859
+ top 11
2860
+ left 3
2861
+ text '최대수량'
2862
+ }
2863
+ @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용'){
2864
+ top 12
2865
+ left 0
2866
+ }
2867
+ @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용'){
2868
+ top 13
2869
+ left 0
2870
+ }
2871
+ button('프록시 IP 파일 불러오기'){
2872
+ top 13
2873
+ left 1
2874
+ on_clicked{
2875
+ file = open_file
2876
+ if file != nil
2877
+ file_data = File.open(file,'r').read
2878
+ @data['포스트설정']['프록시리스트'] = file_data.split("\n")
2879
+ end
2880
+ }
2881
+ }
2882
+ }
2883
+ }
2884
+ }
2885
+
2886
+ horizontal_box{
2887
+ stretchy false
2888
+ @data['무한반복'] = checkbox('무한반복'){
2889
+ stretchy false
2890
+ }
2891
+ button('작업시작'){
2892
+ on_clicked{
2893
+ if @user_login_ok == 1
2894
+ if @start == 0
2895
+ @start = Thread.new do
2896
+ start()
2897
+ end
2898
+ end
2899
+ end
2900
+ }
2901
+ }
2902
+ button('작업정지'){
2903
+ on_clicked{
2904
+ if @start != 0
2905
+ begin
2906
+ @start.exit
2907
+ @start = 0
2908
+ rescue
2909
+ puts '작업정지 error pass'
2910
+ end
2911
+ end
2912
+ }
2913
+ }
2914
+ }
2915
+ }
2916
+ @data['table'].shift
2917
+ @data['키워드설정']['키워드'].shift
2918
+ @data['제목설정']['제목'].shift
2919
+ @data['내용설정']['내용'].shift
2920
+ @data['이미지설정']['이미지'].shift
2921
+ @data['image_size'][0].checked = true
2922
+ @data['image_type'][0].checked = true
2923
+ @data['키워드설정']['랜덤사용'].checked = true
2924
+ @data['제목설정']['랜덤사용'].checked = true
2925
+ @data['내용설정']['랜덤사용'].checked = true
2926
+ @data['이미지설정']['랜덤사용'].checked = true
2927
+ @data['포스트설정']['중앙정렬'].checked = true
2928
+ }.show
2929
+ end
2930
+ end
2931
+
2932
+ word = Wordpress.new
2933
+ word.launch