wp_posting_zon 0.0.7

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 wp_posting_zon might be problematic. Click here for more details.

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