zon_blog_comment 0.0.15 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zon_blog_comment.rb +959 -643
  3. metadata +2 -2
@@ -232,12 +232,13 @@ class Naver
232
232
  return answer
233
233
  end
234
234
 
235
- def update(content,image,option,counts_number,keyword,api_key)
235
+ def update(content,image,option,counts_number,keyword,blog_url,api_key)
236
236
 
237
237
  @keyword = keyword
238
238
  @content = content
239
239
  @api_key = api_key
240
-
240
+ @blog_url = blog_url
241
+
241
242
 
242
243
 
243
244
 
@@ -415,12 +416,114 @@ class Naver
415
416
 
416
417
  page_no = rand(1..100)
417
418
  end
419
+
420
+
421
+ elsif option['타겟블로그'] == 'true'
422
+ @driver.get(blog_url)
423
+
424
+ wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 아이프레임 선택
425
+ wait.until { @driver.find_element(:xpath, '//*[@id="mainFrame"]') } # 아이프레임 선택
426
+ sleep(1)
427
+ @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]')) # 아이프레임 선택
428
+ sleep(1)
429
+
430
+ @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]').click
431
+ sleep(1)
432
+ element = @driver.find_element(:xpath, '//*[@class="aline"]')
433
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
434
+ sleep(2)
435
+ element = @driver.find_element(:xpath, '//*[@class="aline"]').click
436
+ sleep(1)
437
+ @driver.find_element(:xpath, '//div[@id="changeListCount"]//a[@data-value="30"]').click
438
+
439
+ @driver.switch_to.default_content
440
+
441
+
442
+ wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 아이프레임 선택
443
+ wait.until { @driver.find_element(:xpath, '//*[@id="mainFrame"]') } # 아이프레임 선택
444
+ sleep(1)
445
+ @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]')) # 아이프레임 선택
446
+ sleep(1)
447
+
448
+ # 수집된 URL을 저장할 배열
449
+ collected_urls = []
450
+
451
+ # 현재 페이지에서 수집할 링크 개수
452
+ remaining_count = counts_number
453
+
454
+ # 페이지 번호
455
+ page_number = 1
456
+
457
+ # 페이지가 끝날 때까지 반복
458
+ while remaining_count > 0
459
+ # 요소가 로드될 때까지 대기
460
+ wait = Selenium::WebDriver::Wait.new(:timeout => 10)
461
+ wait.until { @driver.find_element(:xpath, '//form[@name="listTopForm"]//tbody//tr//td[@class="title"]//div[@class="wrap_td"]//span[@class="ell2 pcol2"]//a[@href]') }
462
+
463
+ # 현재 페이지에서 링크 수집 (form 태그 내에서 a 태그를 찾음)
464
+ links = @driver.find_elements(:xpath, '//form[@name="listTopForm"]//tbody//tr//td[@class="title"]//div[@class="wrap_td"]//span[@class="ell2 pcol2"]//a[@href]') # 정확한 XPath 경로로 a 태그 찾기
465
+
466
+ links.each do |link|
467
+ post_url = link.attribute('href')
468
+ if post_url && collected_urls.length < counts_number
469
+ # 기존 URL에서 blogId와 logNo를 추출하여 변형
470
+ if post_url.include?("blog.naver.com/PostView.naver")
471
+ # URL에서 blogId와 logNo 추출
472
+ blog_id = post_url.split("blogId=")[1].split("&")[0]
473
+ log_no = post_url.split("logNo=")[1].split("&")[0]
474
+
475
+ # 변형된 URL 생성
476
+ new_url = "https://blog.naver.com/#{blog_id}/#{log_no}"
477
+
478
+ # 변형된 URL을 배열에 추가
479
+ collected_urls << new_url
480
+ remaining_count -= 1
481
+ end
482
+ end
483
+ end
484
+
485
+ # 수집된 개수가 요구한 수에 도달하면 종료
486
+ break if collected_urls.length >= counts_number
487
+
488
+ # 10페이지까지 수집되었고, 다음 페이지가 있으면 "다음" 버튼 클릭하여 계속 수집
489
+ if page_number % 10 == 0
490
+ begin
491
+ # "다음" 링크 찾기 (다음 페이지 링크)
492
+ next_page_link = @driver.find_element(:xpath, "//a[text()='다음']")
493
+ next_page_link.click
494
+ page_number += 1 # 페이지 번호 증가
495
+ sleep(2) # 페이지가 로드되기 전에 잠시 대기
496
+ # 페이지가 변경될 때까지 대기
497
+ wait.until { @driver.find_element(:xpath, '//form[@name="listTopForm"]//tbody//tr//td[@class="title"]//div[@class="wrap_td"]//span[@class="ell2 pcol2"]//a[@href]') }
498
+ rescue Selenium::WebDriver::Error::NoSuchElementError
499
+ # 만약 "다음" 버튼이 없으면 종료
500
+ break
501
+ end
502
+ else
503
+ # 페이지 번호가 더 있으면 다음 페이지로 이동
504
+ begin
505
+ next_page_link = @driver.find_element(:xpath, "//a[text()='#{page_number + 1}']")
506
+ next_page_link.click
507
+ page_number += 1
508
+ sleep(2)
509
+ # 페이지가 변경될 때까지 대기
510
+ wait.until { @driver.find_element(:xpath, '//form[@name="listTopForm"]//tbody//tr//td[@class="title"]//div[@class="wrap_td"]//span[@class="ell2 pcol2"]//a[@href]') }
511
+ rescue Selenium::WebDriver::Error::NoSuchElementError
512
+ # 만약 다음 페이지 링크가 없으면 종료
513
+ break
514
+ end
515
+ end
516
+ end
517
+
518
+ @driver.switch_to.default_content
418
519
  end
520
+
521
+
419
522
 
420
523
  collected_urls.each do |url|
421
524
  # 각 post-url로 이동
422
525
  @driver.get(url)
423
-
526
+
424
527
  wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 아이프레임 선택
425
528
  wait.until { @driver.find_element(:xpath, '//*[@id="mainFrame"]') } # 아이프레임 선택
426
529
  sleep(1)
@@ -780,7 +883,7 @@ class Naver
780
883
  # 댓글 입력
781
884
  element = @driver.find_element(:xpath, '//*[@class="u_ico _icon pcol3"]')
782
885
  @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
783
- sleep(1)
886
+ sleep(2)
784
887
 
785
888
  # 좋아요 버튼을 찾기
786
889
  like_button = @driver.find_element(:xpath, '//div[@class="u_likeit_list_module _reactionModule"]//a[@role="button"]')
@@ -893,7 +996,7 @@ class Naver
893
996
  @driver.find_element(:xpath, '//*[@class="u_cbox_guide"]').click
894
997
  sleep(1)
895
998
  Clipboard.copy(answer)
896
- sleep(0.5)
999
+ sleep(1)
897
1000
  @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
898
1001
  sleep(1)
899
1002
  else
@@ -901,7 +1004,7 @@ class Naver
901
1004
  @driver.find_element(:xpath, '//*[@class="u_cbox_guide"]').click
902
1005
  sleep(1)
903
1006
  Clipboard.copy(content)
904
- sleep(0.5)
1007
+ sleep(1)
905
1008
  @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
906
1009
  rescue
907
1010
  end
@@ -914,67 +1017,94 @@ class Naver
914
1017
  # '이모티콘' 버튼 클릭
915
1018
  @driver.find_element(:xpath, '//*[@data-action="write#beforeToggleSticker"]').click
916
1019
  sleep(1)
917
-
918
-
919
-
920
-
921
- # 1. 'data-id' 속성에 따라 랜덤으로 요소 클릭
922
- data_ids = ["motion2d_01", "motion3d_02", "cafe_004", "cafe_005", "cafe_001", "cafe_002"]
923
-
924
- # 랜덤으로 data-id 선택
925
- selected_data_id = data_ids.sample
926
-
927
- # 선택된 data-id에 해당하는 요소를 찾기
928
- selected_element = @driver.find_element(:xpath, "//li[@data-id='#{selected_data_id}']")
929
-
930
- # 해당 요소 클릭
931
- selected_element.click
932
- #puts "클릭된 이data-id: #{selected_data_id}"
933
-
934
- sleep(1.5)
935
-
936
- # 2. data-id에 해당하는 data-param을 찾고 랜덤으로 클릭
937
- case selected_data_id
938
- when "cafe_005"
939
- data_params = ["cafe_005-1", "cafe_005-2", "cafe_005-3", "cafe_005-4", "cafe_005-5", "cafe_005-6", "cafe_005-7", "cafe_005-8", "cafe_005-9"]
940
- when "cafe_001"
941
- data_params = ["cafe_001-1", "cafe_001-2", "cafe_001-3", "cafe_001-5", "cafe_001-6", "cafe_001-7", "cafe_001-8", "cafe_001-9"]
942
- when "motion2d_01"
943
- data_params = ["motion2d_01-1", "motion2d_01-2", "motion2d_01-3", "motion2d_01-4", "motion2d_01-5", "motion2d_01-6", "motion2d_01-7", "motion2d_01-8", "motion2d_01-9"]
944
- when "motion3d_02"
945
- data_params = ["motion3d_02-1", "motion3d_02-2", "motion3d_02-3", "motion3d_02-4", "motion3d_02-5", "motion3d_02-6", "motion3d_02-7", "motion3d_02-8", "motion3d_02-9"]
946
- when "cafe_004"
947
- data_params = ["cafe_004-1", "cafe_004-2", "cafe_004-3", "cafe_004-4", "cafe_004-5", "cafe_004-6", "cafe_004-7", "cafe_004-8", "cafe_004-9"]
948
- when "cafe_002"
949
- data_params = ["cafe_002-1", "cafe_002-2", "cafe_002-3", "cafe_002-4", "cafe_002-5", "cafe_002-6", "cafe_002-7", "cafe_002-8", "cafe_002-9"]
950
- else
951
- data_params = []
1020
+
1021
+ actions = [
1022
+ lambda {
1023
+ begin
1024
+ @driver.find_element(:xpath, '//*[@data-param="motion2d_01"]').click
1025
+ sleep(2)
1026
+
1027
+ random_number = (1..24).to_a.sample
1028
+ @driver.find_element(:xpath, '//div[@class="u_cbox_sticker_area"]//ul[@data-id="motion2d_01"]//li[@class="u_cbox_sticker_item"]//button[@data-param="motion2d_01-'+random_number.to_s+'"]').click
1029
+ sleep(2)
1030
+
1031
+ rescue
952
1032
  end
1033
+ },
1034
+ lambda {
953
1035
 
954
- # 3. 이제 선택된 data-id에 해당하는 'data-param'을 가진 버튼을 찾아 랜덤으로 클릭하기
955
- if data_params.any?
956
- # 모든 'u_cbox_sticker_area' 요소를 찾기
957
- areas = @driver.find_elements(:xpath, '//*[@class="u_cbox_sticker_area"]')
958
-
959
- # 각 'u_cbox_sticker_area' 내에서 랜덤으로 data-param을 찾기
960
- areas.each do |area|
961
- # 각 area 내에서 해당 data-id를 가진 button 찾기
962
- buttons = area.find_elements(:xpath, ".//button[contains(@data-param, '#{selected_data_id}')]")
963
-
964
- # 해당 버튼이 있다면
965
- if buttons.any?
966
- # data-param에 해당하는 버튼을 랜덤으로 클릭
967
- button_to_click = buttons.sample
968
- button_to_click.click
1036
+ begin
1037
+ @driver.find_element(:xpath, '//*[@data-param="motion3d_02"]').click
969
1038
  sleep(2)
970
- #puts "클릭된 data-param: #{button_to_click.attribute('data-param')}"
971
- break # 클릭 후 루프 종료
972
- end
1039
+
1040
+ random_number = (1..24).to_a.sample
1041
+ @driver.find_element(:xpath, '//div[@class="u_cbox_sticker_area"]//ul[@data-id="motion3d_02"]//li[@class="u_cbox_sticker_item"]//button[@data-param="motion3d_02-'+random_number.to_s+'"]').click
1042
+ sleep(1)
1043
+ @driver.action.key_down(:enter).key_up(:enter).perform
1044
+ sleep(2)
1045
+
1046
+
1047
+ rescue
1048
+ end
1049
+ },
1050
+ lambda {
1051
+
1052
+ begin
1053
+ @driver.find_element(:xpath, '//*[@data-param="cafe_004"]').click
1054
+ sleep(2)
1055
+
1056
+ random_number = (1..28).to_a.sample
1057
+ @driver.find_element(:xpath, '//div[@class="u_cbox_sticker_area"]//ul[@data-id="cafe_004"]//li[@class="u_cbox_sticker_item"]//button[@data-param="cafe_004-'+random_number.to_s+'"]').click
1058
+ sleep(2)
1059
+
1060
+ rescue
973
1061
  end
974
- else
975
- #puts "해당 data-id에 대한 data-param이 없습니다."
1062
+ },
1063
+ lambda {
1064
+
1065
+ begin
1066
+ @driver.find_element(:xpath, '//*[@data-param="cafe_005"]').click
1067
+ sleep(2)
1068
+
1069
+ random_number = (1..26).to_a.sample
1070
+ @driver.find_element(:xpath, '//div[@class="u_cbox_sticker_area"]//ul[@data-id="cafe_005"]//li[@class="u_cbox_sticker_item"]//button[@data-param="cafe_005-'+random_number.to_s+'"]').click
1071
+ sleep(2)
1072
+
1073
+ rescue
976
1074
  end
1075
+ },
1076
+ lambda {
977
1077
 
1078
+ begin
1079
+ @driver.find_element(:xpath, '//*[@data-param="cafe_001"]').click
1080
+ sleep(2)
1081
+
1082
+ random_number = (1..24).to_a.sample
1083
+ @driver.find_element(:xpath, '//div[@class="u_cbox_sticker_area"]//ul[@data-id="cafe_001"]//li[@class="u_cbox_sticker_item"]//button[@data-param="cafe_001-'+random_number.to_s+'"]').click
1084
+ sleep(1)
1085
+ @driver.action.key_down(:enter).key_up(:enter).perform
1086
+ sleep(2)
1087
+
1088
+ rescue
1089
+ end
1090
+ },
1091
+ lambda {
1092
+
1093
+ begin
1094
+ @driver.find_element(:xpath, '//*[@data-param="cafe_002"]').click
1095
+ sleep(2)
1096
+
1097
+ random_number = (1..24).to_a.sample
1098
+ @driver.find_element(:xpath, '//div[@class="u_cbox_sticker_area"]//ul[@data-id="cafe_002"]//li[@class="u_cbox_sticker_item"]//button[@data-param="cafe_002-'+random_number.to_s+'"]').click
1099
+ sleep(1)
1100
+ @driver.action.key_down(:enter).key_up(:enter).perform
1101
+ sleep(2)
1102
+ rescue
1103
+ end
1104
+ }
1105
+ ]
1106
+ actions.sample.call
1107
+
978
1108
 
979
1109
  elsif option['이미지자동삽입'] == 'true'
980
1110
  begin
@@ -992,6 +1122,7 @@ class Naver
992
1122
  sleep(1)
993
1123
  element = @driver.find_element(:xpath, '//*[@data-uiselector="writeButton"]')
994
1124
  @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element) # 크롤 이동
1125
+ sleep(2)
995
1126
  @driver.find_element(:xpath, '//*[@data-uiselector="writeButton"]').click #등록버튼
996
1127
  posting_url = @driver.current_url
997
1128
  puts "#{posting_url} [댓글 작성 완료 !!]".cyan
@@ -1110,7 +1241,7 @@ end
1110
1241
  content_soon = 0
1111
1242
  @my_ip = 'init'
1112
1243
  image_soon = 0
1113
-
1244
+ blog_url_soon = 0
1114
1245
  keyword_soon = 0
1115
1246
  @inumber2 = 0
1116
1247
  @video = Array.new
@@ -1158,7 +1289,7 @@ end
1158
1289
  puts 'Tethering IP change...'
1159
1290
 
1160
1291
  stdout, stderr, status = Open3.capture3('./adb devices')
1161
-
1292
+
1162
1293
  if status.success?
1163
1294
  device_id = stdout.split("\n")[1].split("\t")[0]
1164
1295
  puts device_id
@@ -1166,42 +1297,53 @@ end
1166
1297
  # ADB 서버 초기화
1167
1298
  puts 'adb kill-server'
1168
1299
  Open3.capture3('./adb kill-server')
1169
- sleep(3)
1300
+ sleep(5) # ADB 서버가 안정될 시간을 충분히 주기
1170
1301
 
1171
1302
  # 다시 ADB 서버 실행
1172
1303
  puts 'adb start-server'
1173
1304
  Open3.capture3('./adb start-server')
1174
- sleep(3)
1305
+ sleep(5) # ADB 서버가 안정될 시간을 충분히 주기
1175
1306
 
1176
1307
  # 데이터를 끄고 켜기
1177
1308
  puts 'adb -s ' + device_id + ' shell svc data disable'
1178
- stdout2, stderr2, status2 = Open3.capture3('./adb -s '+device_id+' shell svc data disable')
1179
- sleep(3)
1309
+ stdout2, stderr2, status2 = Open3.capture3('./adb -s ' + device_id + ' shell svc data disable')
1310
+ puts "stderr: #{stderr2}" unless status2.success? # 오류 출력
1311
+ sleep(5) # 네트워크가 안정될 시간을 더 줍니다.
1180
1312
  puts 'adb -s ' + device_id + ' shell svc data enable'
1181
- Open3.capture3('./adb -s '+device_id+' shell svc data enable')
1182
- sleep(3)
1313
+ stdout3, stderr3, status3 = Open3.capture3('./adb -s ' + device_id + ' shell svc data enable')
1314
+ puts "stderr: #{stderr3}" unless status3.success? # 오류 출력
1315
+ sleep(5) # 네트워크가 안정될 시간을 더 줍니다.
1183
1316
  puts 'adb ok'
1184
1317
  sleep(8)
1185
-
1318
+
1319
+ # IP 변경 확인을 위한 람다 함수
1186
1320
  robot_ip = lambda do
1187
- http = HTTP.get('https://www.findip.kr/')
1188
- noko = Nokogiri::HTML(http.to_s)
1189
- if noko.xpath('/html/body/header/h2').text != @my_ip
1190
- @my_ip = noko.xpath('/html/body/header/h2').text
1321
+ begin
1322
+ # IP 변경 확인
1323
+ http = HTTP.get('https://www.findip.kr/')
1324
+ noko = Nokogiri::HTML(http.to_s)
1325
+
1326
+ current_ip = noko.xpath('/html/body/header/h2').text.strip
1327
+ if current_ip != @my_ip
1328
+ @my_ip = current_ip
1191
1329
  puts "IP 변경됨[ #{@my_ip} ]"
1192
- else
1193
- puts @my_ip
1194
- puts '제시도...'
1195
- sleep(3)
1196
- robot_ip[]
1330
+ else
1331
+ puts "현재 IP: #{@my_ip}"
1332
+ puts 'IP 변경이 감지되지 않았습니다. 다시 시도합니다...'
1333
+ sleep(5) # 여유롭게 대기 시간 증가
1334
+ robot_ip[] # 재시도
1335
+ end
1336
+ rescue HTTP::ConnectionError => e
1337
+ puts "네트워크 오류 발생: #{e.message}. 재시도 중..."
1338
+ sleep(5) # 재시도 간 여유 시간 추가
1339
+ retry # 재시도
1197
1340
  end
1198
- end
1199
- robot_ip[]
1200
-
1341
+ end
1342
+ robot_ip[] # IP 확인 시작
1201
1343
  else
1202
- puts 'adb error pass'
1344
+ puts "adb devices 명령어 실행 실패. stderr: #{stderr}"
1203
1345
  end
1204
- end
1346
+ end
1205
1347
 
1206
1348
 
1207
1349
 
@@ -1283,6 +1425,25 @@ end
1283
1425
  @data['table'] << []
1284
1426
  @data['table'].pop
1285
1427
 
1428
+
1429
+
1430
+ if @data['블로그설정']['블로그'].length == 0
1431
+ blog_url = ''
1432
+ else
1433
+ if @data['블로그설정']['랜덤사용'].checked?
1434
+ blog_url = @data['블로그설정']['블로그'].sample[1]
1435
+ else
1436
+ blog_url = @data['블로그설정']['블로그'][blog_url_soon][1]
1437
+ blog_url_soon += 1
1438
+ if blog_url_soon > @data['블로그설정']['블로그'].length-1
1439
+ blog_url_soon = 0
1440
+ end
1441
+ end
1442
+ end
1443
+
1444
+ @data['table'][index][-1] = 25
1445
+ @data['table'] << []
1446
+ @data['table'].pop
1286
1447
 
1287
1448
  #포스팅 get 데이터 가저오기#############################
1288
1449
 
@@ -1375,6 +1536,13 @@ end
1375
1536
  else
1376
1537
  option['블로그무작위'] = 'false'
1377
1538
  end
1539
+
1540
+ if @data['포스트설정']['타겟블로그'].checked?
1541
+ option['타겟블로그'] = 'true'
1542
+ else
1543
+ option['타겟블로그'] = 'false'
1544
+ end
1545
+
1378
1546
  @data['table'][index][-1] = 70
1379
1547
  @data['table'] << []
1380
1548
  @data['table'].pop
@@ -1462,7 +1630,7 @@ end
1462
1630
  # 댓글 설정 수 카운트
1463
1631
  counts_number = @data['table'][index][6].to_i
1464
1632
  api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
1465
- naver.update(content,image,option,counts_number,keyword,api_key)
1633
+ naver.update(content,image,option,counts_number,keyword,blog_url,api_key)
1466
1634
 
1467
1635
 
1468
1636
 
@@ -1506,8 +1674,8 @@ end
1506
1674
  @data['게시판설정']['게시판'] = [[false, '']]
1507
1675
  @data['키워드설정'] = Hash.new
1508
1676
  @data['키워드설정']['키워드'] = [[false, '']]
1509
- @data['닉네임설정'] = Hash.new
1510
- @data['닉네임설정']['닉네임'] = [[false, '']]
1677
+ @data['블로그설정'] = Hash.new
1678
+ @data['블로그설정']['블로그'] = [[false, '']]
1511
1679
  @data['내용설정'] = Hash.new
1512
1680
  @data['내용설정']['내용'] = [[false, '']]
1513
1681
  @data['이미지설정'] = Hash.new
@@ -1649,11 +1817,11 @@ end
1649
1817
  end
1650
1818
 
1651
1819
  while true
1652
- if @data['게시판설정']['게시판'].length == 0
1820
+ if @data['블로그설정']['블로그'].length == 0
1653
1821
  break
1654
1822
  end
1655
1823
 
1656
- @data['게시판설정']['게시판'].pop
1824
+ @data['블로그설정']['블로그'].pop
1657
1825
  end
1658
1826
 
1659
1827
  while true
@@ -1994,658 +2162,804 @@ end
1994
2162
 
1995
2163
 
1996
2164
 
1997
- tab_item('Step.2 내용세팅'){
1998
- horizontal_box{
1999
- vertical_box{
2000
- horizontal_box{
2001
- stretchy false
2002
-
2003
- button('   이미지불러오기   '){
2004
-
2005
- on_clicked{
2006
- file = open_file
2007
- if file != nil
2008
- file_path = file.gsub('/', '\\')
2009
- @data['이미지설정']['이미지'] << [false, file, file]
2010
- @data['이미지설정']['이미지'] << [false, file, file]
2011
- @data['이미지설정']['이미지'].pop
2012
- end
2013
- }
2014
- }
2015
-
2016
-
2017
- }
2018
- horizontal_box{
2165
+ tab_item('Step.2 내용세팅'){
2166
+ horizontal_box{
2167
+ vertical_box{
2168
+ horizontal_box{
2019
2169
  stretchy false
2020
- grid{
2021
- button(' 전체선택 '){
2022
- top 1
2023
- left 0
2024
- on_clicked{
2025
- for n in 0..@data['이미지설정']['이미지'].length-1
2026
- @data['이미지설정']['이미지'][n][0] = true
2027
- @data['이미지설정']['이미지'] << []
2028
- @data['이미지설정']['이미지'].pop
2029
- end
2030
- }
2031
- }
2032
- button(' 선택해제 '){
2033
- top 1
2034
- left 1
2035
- on_clicked{
2036
- for n in 0..@data['이미지설정']['이미지'].length-1
2037
- @data['이미지설정']['이미지'][n][0] = false
2038
- @data['이미지설정']['이미지'] << []
2039
- @data['이미지설정']['이미지'].pop
2040
- end
2041
- }
2042
- }
2043
- button(' 삭제하기 '){
2044
- top 1
2045
- left 2
2046
- on_clicked{
2047
- m = Array.new
2048
- for n in 0..@data['이미지설정']['이미지'].length-1
2049
- if @data['이미지설정']['이미지'][n][0] == true
2050
- m << n
2051
- end
2052
- end
2053
-
2054
- m.reverse.each do |i|
2055
- @data['이미지설정']['이미지'].delete_at(i)
2056
- end
2057
-
2058
- @data['이미지설정']['이미지'].delete(nil)
2059
- }
2170
+
2171
+ button('   이미지불러오기   '){
2172
+
2173
+ on_clicked{
2174
+ file = open_file
2175
+ if file != nil
2176
+ file_path = file.gsub('/', '\\')
2177
+ @data['이미지설정']['이미지'] << [false, file, file]
2178
+ @data['이미지설정']['이미지'] << [false, file, file]
2179
+ @data['이미지설정']['이미지'].pop
2180
+ end
2060
2181
  }
2061
2182
  }
2062
- horizontal_box{
2063
- stretchy false
2064
- @data['이미지설정']['순서사용'] = checkbox('순서사용'){
2065
- stretchy false
2066
- on_toggled{ |c|
2067
- if c.checked?
2068
- @data['이미지설정']['랜덤사용'].checked = false
2069
- end
2070
- }
2071
- }
2072
- @data['이미지설정']['랜덤사용'] = checkbox('랜덤사용'){
2073
- stretchy false
2074
- on_toggled{ |c|
2075
- if c.checked?
2076
- @data['이미지설정']['순서사용'].checked = false
2077
- end
2078
- }
2079
- }
2080
- }
2183
+
2184
+
2081
2185
  }
2082
-
2083
- table{
2084
- checkbox_column('선택'){
2085
- editable true
2186
+ horizontal_box{
2187
+ stretchy false
2188
+ grid{
2189
+ button(' 전체선택 '){
2190
+ top 1
2191
+ left 0
2192
+ on_clicked{
2193
+ for n in 0..@data['이미지설정']['이미지'].length-1
2194
+ @data['이미지설정']['이미지'][n][0] = true
2195
+ @data['이미지설정']['이미지'] << []
2196
+ @data['이미지설정']['이미지'].pop
2197
+ end
2086
2198
  }
2087
- text_column('이미지파일'){
2088
- editable true
2199
+ }
2200
+ button(' 선택해제 '){
2201
+ top 1
2202
+ left 1
2203
+ on_clicked{
2204
+ for n in 0..@data['이미지설정']['이미지'].length-1
2205
+ @data['이미지설정']['이미지'][n][0] = false
2206
+ @data['이미지설정']['이미지'] << []
2207
+ @data['이미지설정']['이미지'].pop
2208
+ end
2089
2209
  }
2090
-
2091
- cell_rows @data['이미지설정']['이미지']
2092
2210
  }
2093
- horizontal_box{
2094
- stretchy false
2095
- @data['이미지설정']['폴더경로'] = entry{
2096
-
2097
- text "사진폴더경로 ex)C:\\사진\\폴더2"
2098
- }
2099
-
2100
- button(' 폴더째로불러오기 '){
2101
-
2102
- on_clicked{
2103
- begin
2104
- path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2105
-
2106
- if Dir.exists?(path) # 경로가 존재하는지 확인
2107
- Dir.entries(path).each do |file|
2108
- if file != '.' and file != '..' # '.'과 '..'을 제외한 파일들만 처리
2109
- begin
2110
- full_file_path = File.join(path, file).force_encoding('utf-8')
2111
- full_file_path = full_file_path.gsub('/', '\\')
2112
- @data['이미지설정']['이미지'] << [false, full_file_path]
2113
- rescue => e
2114
- # 파일 처리 오류가 발생하면 오류 메시지 출력
2115
- puts "파일 '#{file}'을 처리할 수 없습니다: #{e.message}"
2116
- end
2117
- end
2118
- end
2119
- @data['이미지설정']['이미지'] << []
2120
- @data['이미지설정']['이미지'].pop
2121
- else
2122
- # 경로가 없으면 경고 메시지 출력
2123
- puts "경로 '#{path}'이 존재하지 않습니다."
2124
- end
2125
- rescue => e
2126
- # 경로 처리 중 발생한 오류 처리
2127
- puts "오류 발생: #{e.message}"
2211
+ button(' 삭제하기 '){
2212
+ top 1
2213
+ left 2
2214
+ on_clicked{
2215
+ m = Array.new
2216
+ for n in 0..@data['이미지설정']['이미지'].length-1
2217
+ if @data['이미지설정']['이미지'][n][0] == true
2218
+ m << n
2128
2219
  end
2129
- }
2220
+ end
2221
+
2222
+ m.reverse.each do |i|
2223
+ @data['이미지설정']['이미지'].delete_at(i)
2224
+ end
2225
+
2226
+ @data['이미지설정']['이미지'].delete(nil)
2130
2227
  }
2131
- }
2132
-
2133
- }
2134
-
2135
- vertical_separator{
2136
- stretchy false
2137
- }
2138
- vertical_box{
2139
- horizontal_box{
2140
- stretchy false
2141
- button('   키워드불러오기  '){
2142
- on_clicked{
2143
- file = open_file
2144
- if file != nil
2145
- file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2146
- file_data.split("\n").each do |keyword|
2147
- if keyword.split(' ').join('').length < 2
2148
-
2149
- else
2150
- @data['키워드설정']['키워드'] << [false, keyword]
2151
- @data['키워드설정']['키워드'] << [false, keyword]
2152
- @data['키워드설정']['키워드'].pop
2153
- end
2154
- end
2155
- end
2156
- }
2157
- }
2158
2228
  }
2159
-
2229
+ }
2160
2230
  horizontal_box{
2161
2231
  stretchy false
2162
- grid{
2163
- button(' 전체선택 '){
2164
- top 1
2165
- left 0
2166
- on_clicked{
2167
- for n in 0..@data['키워드설정']['키워드'].length-1
2168
- @data['키워드설정']['키워드'][n][0] = true
2169
- @data['키워드설정']['키워드'] << []
2170
- @data['키워드설정']['키워드'].pop
2171
- end
2172
- }
2173
- }
2174
- button(' 선택해제 '){
2175
- top 1
2176
- left 1
2177
- on_clicked{
2178
- for n in 0..@data['키워드설정']['키워드'].length-1
2179
- @data['키워드설정']['키워드'][n][0] = false
2180
- @data['키워드설정']['키워드'] << []
2181
- @data['키워드설정']['키워드'].pop
2182
- end
2183
- }
2184
- }
2185
- button(' 삭제하기 '){
2186
- top 1
2187
- left 2
2188
- on_clicked{
2189
- m = Array.new
2190
- for n in 0..@data['키워드설정']['키워드'].length-1
2191
- if @data['키워드설정']['키워드'][n][0] == true
2192
- m << n
2193
- end
2194
- end
2195
-
2196
- m.reverse.each do |i|
2197
- @data['키워드설정']['키워드'].delete_at(i)
2198
- end
2199
- @data['키워드설정']['키워드'].delete(nil)
2200
- }
2201
- }
2202
- }
2203
-
2204
- horizontal_box{
2205
- stretchy false
2206
- @data['키워드설정']['순서사용'] = checkbox('순서사용'){
2232
+ @data['이미지설정']['순서사용'] = checkbox('순서사용'){
2207
2233
  stretchy false
2208
2234
  on_toggled{ |c|
2209
2235
  if c.checked?
2210
- @data['키워드설정']['랜덤사용'].checked = false
2236
+ @data['이미지설정']['랜덤사용'].checked = false
2211
2237
  end
2212
2238
  }
2213
2239
  }
2214
- @data['키워드설정']['랜덤사용'] = checkbox('랜덤사용'){
2240
+ @data['이미지설정']['랜덤사용'] = checkbox('랜덤사용'){
2215
2241
  stretchy false
2216
2242
  on_toggled{ |c|
2217
2243
  if c.checked?
2218
- @data['키워드설정']['순서사용'].checked = false
2244
+ @data['이미지설정']['순서사용'].checked = false
2219
2245
  end
2220
2246
  }
2221
2247
  }
2222
2248
  }
2249
+ }
2250
+
2251
+ table{
2252
+ checkbox_column('선택'){
2253
+ editable true
2254
+ }
2255
+ text_column('이미지파일'){
2256
+ editable true
2257
+ }
2258
+
2259
+ cell_rows @data['이미지설정']['이미지']
2223
2260
  }
2224
-
2225
- table{
2226
- checkbox_column('선택'){
2227
- editable true
2261
+ horizontal_box{
2262
+ stretchy false
2263
+ @data['이미지설정']['폴더경로'] = entry{
2264
+
2265
+ text "사진폴더경로 ex)C:\\사진\\폴더2"
2228
2266
  }
2229
-
2230
- text_column('키워드'){
2231
-
2267
+
2268
+ button(' 폴더째로불러오기 '){
2269
+
2270
+ on_clicked{
2271
+ begin
2272
+ path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2273
+
2274
+ if Dir.exists?(path) # 경로가 존재하는지 확인
2275
+ Dir.entries(path).each do |file|
2276
+ if file != '.' and file != '..' # '.'과 '..'을 제외한 파일들만 처리
2277
+ begin
2278
+ full_file_path = File.join(path, file).force_encoding('utf-8')
2279
+ full_file_path = full_file_path.gsub('/', '\\')
2280
+ @data['이미지설정']['이미지'] << [false, full_file_path]
2281
+ rescue => e
2282
+ # 파일 처리 오류가 발생하면 오류 메시지 출력
2283
+ puts "파일 '#{file}'을 처리할 수 없습니다: #{e.message}"
2284
+ end
2285
+ end
2286
+ end
2287
+ @data['이미지설정']['이미지'] << []
2288
+ @data['이미지설정']['이미지'].pop
2289
+ else
2290
+ # 경로가 없으면 경고 메시지 출력
2291
+ puts "경로 '#{path}'이 존재하지 않습니다."
2292
+ end
2293
+ rescue => e
2294
+ # 경로 처리 중 발생한 오류 처리
2295
+ puts "오류 발생: #{e.message}"
2296
+ end
2232
2297
  }
2233
-
2234
- cell_rows @data['키워드설정']['키워드']
2235
2298
  }
2236
- horizontal_box{
2237
- stretchy false
2238
- @data['내용설정']['폴더경로'] = entry{
2239
- enabled false
2240
- text "내용폴더경로 ex)C:\\내용\\폴더1"
2241
- }
2242
- button(' 폴더째로 불러오기 '){
2243
- enabled false
2244
- on_clicked{
2245
- begin
2246
- path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2247
-
2248
- if Dir.exists?(path) # 경로가 존재하는지 확인
2249
- Dir.entries(path).each do |file|
2250
- # '.''..' 제외한 파일들만 처리
2251
- if file != '.' and file != '..'
2252
- begin
2253
- file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2254
- @data['내용설정']['내용'] << [false, file, file_data]
2255
- rescue => e
2256
- # 파일 열기 오류 처리
2257
- puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2258
- end
2259
- end
2299
+ }
2300
+
2301
+
2302
+ horizontal_box{
2303
+ stretchy false
2304
+ button('   블로그불러오기  '){
2305
+ on_clicked{
2306
+ file = open_file
2307
+ if file != nil
2308
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2309
+ file_data.split("\n").each do |blog_url|
2310
+ if blog_url.split(' ').join('').length < 2
2311
+
2312
+ else
2313
+ @data['블로그설정']['블로그'] << [false, blog_url]
2314
+ @data['블로그설정']['블로그'] << [false, blog_url]
2315
+ @data['블로그설정']['블로그'].pop
2316
+ end
2317
+ end
2318
+ end
2319
+ }
2320
+ }
2321
+ }
2322
+
2323
+ horizontal_box{
2324
+ stretchy false
2325
+ grid{
2326
+ button(' 전체선택 '){
2327
+ top 1
2328
+ left 0
2329
+ on_clicked{
2330
+ for n in 0..@data['블로그설정']['블로그'].length-1
2331
+ @data['블로그설정']['블로그'][n][0] = true
2332
+ @data['블로그설정']['블로그'] << []
2333
+ @data['블로그설정']['블로그'].pop
2334
+ end
2335
+ }
2336
+ }
2337
+ button(' 선택해제 '){
2338
+ top 1
2339
+ left 1
2340
+ on_clicked{
2341
+ for n in 0..@data['블로그설정']['블로그'].length-1
2342
+ @data['블로그설정']['블로그'][n][0] = false
2343
+ @data['블로그설정']['블로그'] << []
2344
+ @data['블로그설정']['블로그'].pop
2345
+ end
2346
+ }
2347
+ }
2348
+ button(' 삭제하기 '){
2349
+ top 1
2350
+ left 2
2351
+ on_clicked{
2352
+ m = Array.new
2353
+ for n in 0..@data['블로그설정']['블로그'].length-1
2354
+ if @data['블로그설정']['블로그'][n][0] == true
2355
+ m << n
2356
+ end
2357
+ end
2358
+
2359
+ m.reverse.each do |i|
2360
+ @data['블로그설정']['블로그'].delete_at(i)
2361
+ end
2362
+ @data['블로그설정']['블로그'].delete(nil)
2363
+ }
2364
+ }
2365
+ }
2366
+
2367
+ horizontal_box{
2368
+ stretchy false
2369
+ @data['블로그설정']['순서사용'] = checkbox('순서사용'){
2370
+ stretchy false
2371
+ on_toggled{ |c|
2372
+ if c.checked?
2373
+ @data['블로그설정']['랜덤사용'].checked = false
2374
+ end
2375
+ }
2376
+ }
2377
+ @data['블로그설정']['랜덤사용'] = checkbox('랜덤사용'){
2378
+ stretchy false
2379
+ on_toggled{ |c|
2380
+ if c.checked?
2381
+ @data['블로그설정']['순서사용'].checked = false
2382
+ end
2383
+ }
2384
+ }
2385
+ }
2386
+ }
2387
+
2388
+ table{
2389
+ checkbox_column('선택'){
2390
+ editable true
2391
+ }
2392
+
2393
+ text_column('블로그url'){
2394
+
2395
+ }
2396
+
2397
+ cell_rows @data['블로그설정']['블로그']
2398
+ }
2399
+ horizontal_box{
2400
+ stretchy false
2401
+ @data['내용설정']['폴더경로'] = entry{
2402
+ enabled false
2403
+ text "폴더경로 ex)C:\\내용\\폴더1"
2404
+ }
2405
+ button(' 폴더째로 불러오기 '){
2406
+ enabled false
2407
+ on_clicked{
2408
+ begin
2409
+ path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2410
+
2411
+ if Dir.exists?(path) # 경로가 존재하는지 확인
2412
+ Dir.entries(path).each do |file|
2413
+ # '.'과 '..'을 제외한 파일들만 처리
2414
+ if file != '.' and file != '..'
2415
+ begin
2416
+ file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2417
+ @data['내용설정']['내용'] << [false, file, file_data]
2418
+ rescue => e
2419
+ # 파일 열기 오류 처리
2420
+ puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2421
+ end
2260
2422
  end
2261
- @data['내용설정']['내용'] << []
2262
- @data['내용설정']['내용'].pop
2263
- else
2264
- # 경로가 없으면 경고 메시지 출력
2265
- puts "경로 '#{path}'이 존재하지 않습니다."
2266
2423
  end
2267
- rescue => e
2268
- # 경로 처리 중 발생한 오류 처리
2269
- puts "오류 발생: #{e.message}"
2424
+ @data['내용설정']['내용'] << []
2425
+ @data['내용설정']['내용'].pop
2426
+ else
2427
+ # 경로가 없으면 경고 메시지 출력
2428
+ puts "경로 '#{path}'이 존재하지 않습니다."
2270
2429
  end
2271
- }
2430
+ rescue => e
2431
+ # 경로 처리 중 발생한 오류 처리
2432
+ puts "오류 발생: #{e.message}"
2433
+ end
2272
2434
  }
2273
- }
2274
-
2275
- }
2435
+ }
2436
+ }
2437
+
2438
+ }
2276
2439
 
2277
-
2278
- vertical_separator{
2440
+ vertical_separator{
2441
+ stretchy false
2442
+ }
2443
+ vertical_box{
2444
+ horizontal_box{
2279
2445
  stretchy false
2280
- }
2281
- vertical_box{
2282
- horizontal_box{
2283
- stretchy false
2284
-
2285
- button('   내용불러오기  '){
2286
-
2287
- on_clicked{
2288
- file = open_file
2289
- if file != nil
2290
- file_name = file.split("\\")[-1]
2291
- file_data = File.open(file,'r', :encoding => 'utf-8').read()
2292
- if file_data.split("\n").length < 2
2293
- file_data = file_data + "\n"
2446
+ button('   키워드불러오기  '){
2447
+ on_clicked{
2448
+ file = open_file
2449
+ if file != nil
2450
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2451
+ file_data.split("\n").each do |keyword|
2452
+ if keyword.split(' ').join('').length < 2
2453
+
2454
+ else
2455
+ @data['키워드설정']['키워드'] << [false, keyword]
2456
+ @data['키워드설정']['키워드'] << [false, keyword]
2457
+ @data['키워드설정']['키워드'].pop
2294
2458
  end
2295
- @data['내용설정']['내용'] << [false, file_name, file_data]
2296
- @data['내용설정']['내용'] << [false, file_name, file_data]
2297
- @data['내용설정']['내용'].pop
2298
2459
  end
2299
- }
2460
+ end
2300
2461
  }
2301
-
2462
+ }
2302
2463
  }
2303
- horizontal_box{
2304
- stretchy false
2305
- grid{
2306
- button(' 전체선택 '){
2307
- top 1
2308
- left 0
2309
- on_clicked{
2310
- for n in 0..@data['내용설정']['내용'].length-1
2311
- @data['내용설정']['내용'][n][0] = true
2312
- @data['내용설정']['내용'] << []
2313
- @data['내용설정']['내용'].pop
2314
- end
2315
- }
2464
+
2465
+ horizontal_box{
2466
+ stretchy false
2467
+ grid{
2468
+ button(' 전체선택 '){
2469
+ top 1
2470
+ left 0
2471
+ on_clicked{
2472
+ for n in 0..@data['키워드설정']['키워드'].length-1
2473
+ @data['키워드설정']['키워드'][n][0] = true
2474
+ @data['키워드설정']['키워드'] << []
2475
+ @data['키워드설정']['키워드'].pop
2476
+ end
2316
2477
  }
2317
- button(' 선택해제 '){
2318
- top 1
2319
- left 1
2320
- on_clicked{
2321
- for n in 0..@data['내용설정']['내용'].length-1
2322
- @data['내용설정']['내용'][n][0] = false
2323
- @data['내용설정']['내용'] << []
2324
- @data['내용설정']['내용'].pop
2325
- end
2326
- }
2478
+ }
2479
+ button(' 선택해제 '){
2480
+ top 1
2481
+ left 1
2482
+ on_clicked{
2483
+ for n in 0..@data['키워드설정']['키워드'].length-1
2484
+ @data['키워드설정']['키워드'][n][0] = false
2485
+ @data['키워드설정']['키워드'] << []
2486
+ @data['키워드설정']['키워드'].pop
2487
+ end
2327
2488
  }
2328
- button(' 삭제하기 '){
2329
- top 1
2330
- left 2
2331
- on_clicked{
2332
- m = Array.new
2333
- for n in 0..@data['내용설정']['내용'].length-1
2334
- if @data['내용설정']['내용'][n][0] == true
2335
- m << n
2336
- end
2337
- end
2338
-
2339
- m.reverse.each do |i|
2340
- @data['내용설정']['내용'].delete_at(i)
2489
+ }
2490
+ button(' 삭제하기 '){
2491
+ top 1
2492
+ left 2
2493
+ on_clicked{
2494
+ m = Array.new
2495
+ for n in 0..@data['키워드설정']['키워드'].length-1
2496
+ if @data['키워드설정']['키워드'][n][0] == true
2497
+ m << n
2341
2498
  end
2342
- @data['내용설정']['내용'].delete(nil)
2343
- }
2499
+ end
2500
+
2501
+ m.reverse.each do |i|
2502
+ @data['키워드설정']['키워드'].delete_at(i)
2503
+ end
2504
+ @data['키워드설정']['키워드'].delete(nil)
2344
2505
  }
2345
2506
  }
2346
-
2347
- horizontal_box{
2507
+ }
2508
+
2509
+ horizontal_box{
2510
+ stretchy false
2511
+ @data['키워드설정']['순서사용'] = checkbox('순서사용'){
2348
2512
  stretchy false
2349
- @data['내용설정']['순서사용'] = checkbox('순서사용'){
2350
- stretchy false
2351
- on_toggled{ |c|
2352
- if c.checked?
2353
- @data['내용설정']['랜덤사용'].checked = false
2513
+ on_toggled{ |c|
2514
+ if c.checked?
2515
+ @data['키워드설정']['랜덤사용'].checked = false
2516
+ end
2517
+ }
2518
+ }
2519
+ @data['키워드설정']['랜덤사용'] = checkbox('랜덤사용'){
2520
+ stretchy false
2521
+ on_toggled{ |c|
2522
+ if c.checked?
2523
+ @data['키워드설정']['순서사용'].checked = false
2524
+ end
2525
+ }
2526
+ }
2527
+ }
2528
+ }
2529
+
2530
+ table{
2531
+ checkbox_column('선택'){
2532
+ editable true
2533
+ }
2534
+
2535
+ text_column('키워드'){
2536
+
2537
+ }
2538
+
2539
+ cell_rows @data['키워드설정']['키워드']
2540
+ }
2541
+ horizontal_box{
2542
+ stretchy false
2543
+ @data['내용설정']['폴더경로'] = entry{
2544
+ enabled false
2545
+ text "폴더경로 ex)C:\\내용\\폴더1"
2546
+ }
2547
+ button(' 폴더째로 불러오기 '){
2548
+ enabled false
2549
+ on_clicked{
2550
+ begin
2551
+ path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2552
+
2553
+ if Dir.exists?(path) # 경로가 존재하는지 확인
2554
+ Dir.entries(path).each do |file|
2555
+ # '.'과 '..'을 제외한 파일들만 처리
2556
+ if file != '.' and file != '..'
2557
+ begin
2558
+ file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2559
+ @data['내용설정']['내용'] << [false, file, file_data]
2560
+ rescue => e
2561
+ # 파일 열기 오류 처리
2562
+ puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2563
+ end
2564
+ end
2565
+ end
2566
+ @data['내용설정']['내용'] << []
2567
+ @data['내용설정']['내용'].pop
2568
+ else
2569
+ # 경로가 없으면 경고 메시지 출력
2570
+ puts "경로 '#{path}'이 존재하지 않습니다."
2571
+ end
2572
+ rescue => e
2573
+ # 경로 처리 중 발생한 오류 처리
2574
+ puts "오류 발생: #{e.message}"
2575
+ end
2576
+ }
2577
+ }
2578
+ }
2579
+
2580
+
2581
+ horizontal_box{
2582
+ stretchy false
2583
+
2584
+ button('   내용불러오기  '){
2585
+
2586
+ on_clicked{
2587
+ file = open_file
2588
+ if file != nil
2589
+ file_name = file.split("\\")[-1]
2590
+ file_data = File.open(file,'r', :encoding => 'utf-8').read()
2591
+ if file_data.split("\n").length < 2
2592
+ file_data = file_data + "\n"
2354
2593
  end
2355
- }
2594
+ @data['내용설정']['내용'] << [false, file_name, file_data]
2595
+ @data['내용설정']['내용'] << [false, file_name, file_data]
2596
+ @data['내용설정']['내용'].pop
2597
+ end
2356
2598
  }
2357
- @data['내용설정']['랜덤사용'] = checkbox('랜덤사용'){
2358
- stretchy false
2359
- on_toggled{ |c|
2360
- if c.checked?
2361
- @data['내용설정']['순서사용'].checked = false
2599
+ }
2600
+
2601
+ }
2602
+ horizontal_box{
2603
+ stretchy false
2604
+ grid{
2605
+ button(' 전체선택 '){
2606
+ top 1
2607
+ left 0
2608
+ on_clicked{
2609
+ for n in 0..@data['내용설정']['내용'].length-1
2610
+ @data['내용설정']['내용'][n][0] = true
2611
+ @data['내용설정']['내용'] << []
2612
+ @data['내용설정']['내용'].pop
2613
+ end
2614
+ }
2615
+ }
2616
+ button(' 선택해제 '){
2617
+ top 1
2618
+ left 1
2619
+ on_clicked{
2620
+ for n in 0..@data['내용설정']['내용'].length-1
2621
+ @data['내용설정']['내용'][n][0] = false
2622
+ @data['내용설정']['내용'] << []
2623
+ @data['내용설정']['내용'].pop
2624
+ end
2625
+ }
2626
+ }
2627
+ button(' 삭제하기 '){
2628
+ top 1
2629
+ left 2
2630
+ on_clicked{
2631
+ m = Array.new
2632
+ for n in 0..@data['내용설정']['내용'].length-1
2633
+ if @data['내용설정']['내용'][n][0] == true
2634
+ m << n
2362
2635
  end
2363
- }
2636
+ end
2637
+
2638
+ m.reverse.each do |i|
2639
+ @data['내용설정']['내용'].delete_at(i)
2640
+ end
2641
+ @data['내용설정']['내용'].delete(nil)
2364
2642
  }
2365
2643
  }
2366
2644
  }
2367
- table{
2368
- checkbox_column('선택'){
2369
- editable true
2370
- }
2371
-
2372
- text_column('내용파일'){
2373
-
2645
+
2646
+ horizontal_box{
2647
+ stretchy false
2648
+ @data['내용설정']['순서사용'] = checkbox('순서사용'){
2649
+ stretchy false
2650
+ on_toggled{ |c|
2651
+ if c.checked?
2652
+ @data['내용설정']['랜덤사용'].checked = false
2653
+ end
2374
2654
  }
2375
-
2376
- cell_rows @data['내용설정']['내용']
2377
2655
  }
2378
- horizontal_box{
2379
- stretchy false
2380
- @data['내용설정']['폴더경로'] = entry{
2381
-
2382
- text "내용폴더경로 ex)C:\\내용\\폴더1"
2656
+ @data['내용설정']['랜덤사용'] = checkbox('랜덤사용'){
2657
+ stretchy false
2658
+ on_toggled{ |c|
2659
+ if c.checked?
2660
+ @data['내용설정']['순서사용'].checked = false
2661
+ end
2383
2662
  }
2384
- button(' 폴더째로 불러오기 '){
2385
-
2386
- on_clicked{
2387
- begin
2388
- path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2389
-
2390
- if Dir.exists?(path) # 경로가 존재하는지 확인
2391
- Dir.entries(path).each do |file|
2392
- # '.'과 '..'을 제외한 파일들만 처리
2393
- if file != '.' and file != '..'
2394
- begin
2395
- file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2396
- @data['내용설정']['내용'] << [false, file, file_data]
2397
- rescue => e
2398
- # 파일 열기 오류 처리
2399
- puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2400
- end
2663
+ }
2664
+ }
2665
+ }
2666
+ table{
2667
+ checkbox_column('선택'){
2668
+ editable true
2669
+ }
2670
+
2671
+ text_column('내용파일'){
2672
+
2673
+ }
2674
+
2675
+ cell_rows @data['내용설정']['내용']
2676
+ }
2677
+ horizontal_box{
2678
+ stretchy false
2679
+ @data['내용설정']['폴더경로'] = entry{
2680
+
2681
+ text "내용폴더경로 ex)C:\\내용\\폴더1"
2682
+ }
2683
+ button(' 폴더째로 불러오기 '){
2684
+
2685
+ on_clicked{
2686
+ begin
2687
+ path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2688
+
2689
+ if Dir.exists?(path) # 경로가 존재하는지 확인
2690
+ Dir.entries(path).each do |file|
2691
+ # '.'과 '..'을 제외한 파일들만 처리
2692
+ if file != '.' and file != '..'
2693
+ begin
2694
+ file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2695
+ @data['내용설정']['내용'] << [false, file, file_data]
2696
+ rescue => e
2697
+ # 파일 열기 오류 처리
2698
+ puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2401
2699
  end
2402
2700
  end
2403
- @data['내용설정']['내용'] << []
2404
- @data['내용설정']['내용'].pop
2405
- else
2406
- # 경로가 없으면 경고 메시지 출력
2407
- puts "경로 '#{path}'이 존재하지 않습니다."
2408
2701
  end
2409
- rescue => e
2410
- # 경로 처리 중 발생한 오류 처리
2411
- puts "오류 발생: #{e.message}"
2702
+ @data['내용설정']['내용'] << []
2703
+ @data['내용설정']['내용'].pop
2704
+ else
2705
+ # 경로가 없으면 경고 메시지 출력
2706
+ puts "경로 '#{path}'이 존재하지 않습니다."
2412
2707
  end
2413
- }
2708
+ rescue => e
2709
+ # 경로 처리 중 발생한 오류 처리
2710
+ puts "오류 발생: #{e.message}"
2711
+ end
2414
2712
  }
2415
- }
2416
-
2417
- }
2713
+ }
2714
+ }
2715
+
2418
2716
  }
2419
2717
  }
2420
2718
  }
2421
-
2422
-
2423
-
2424
-
2425
-
2426
-
2427
-
2428
-
2719
+ }
2720
+
2721
+
2722
+
2723
+
2724
+
2429
2725
 
2430
-
2431
- horizontal_box{
2432
- stretchy false
2433
- grid{
2434
-
2435
- @data['포스트설정']['ChatGPT사용'] = checkbox('GPT 댓글 사용'){
2436
- top 0
2437
- left 0
2438
- }
2439
2726
 
2440
- @data['포스트설정']['api_key'] = entry(){
2441
- top 0
2442
- left 1
2443
- text 'GPT API KEY 입력'
2444
- }
2727
+
2728
+
2729
+
2730
+ horizontal_box{
2731
+ stretchy false
2732
+ grid{
2733
+
2734
+ @data['포스트설정']['ChatGPT사용'] = checkbox('GPT 댓글 사용'){
2735
+ top 0
2736
+ left 0
2737
+ }
2445
2738
 
2446
-
2447
- @data['포스트설정']['내용자동변경'] = checkbox('댓글 치환 설정'){
2448
- top 0
2449
- left 2
2450
- }
2451
- button('파일 불러오기'){
2452
- top 0
2453
- left 3
2454
- on_clicked{
2455
- file = open_file
2456
- if file != nil
2457
- file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2458
- file_data.split("\n").each do |i|
2459
- key = i.split('>')[0]
2460
- v = i.split('>')[1].to_s.split(',')
2461
- @data['포스트설정']['내용자동변경값'][key] = v
2462
- end
2463
- end
2464
- }
2465
- }
2739
+ @data['포스트설정']['api_key'] = entry(){
2740
+ top 0
2741
+ left 1
2742
+ text 'GPT API KEY 입력'
2466
2743
  }
2467
- vertical_separator{
2468
- stretchy false
2744
+
2745
+
2746
+ @data['포스트설정']['내용자동변경'] = checkbox('댓글 치환 설정'){
2747
+ top 0
2748
+ left 2
2469
2749
  }
2470
- grid{
2471
- @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용 '){
2472
- top 0
2473
- left 0
2474
- on_toggled{
2475
- if @data['포스트설정']['테더링'].checked?
2476
- @data['포스트설정']['프록시'].checked = false
2477
-
2478
- end
2479
- }
2480
- }
2481
- @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용 '){
2482
- top 0
2483
- left 1
2484
- on_toggled{
2485
- if @data['포스트설정']['프록시'].checked?
2486
- @data['포스트설정']['테더링'].checked = false
2487
-
2488
- end
2489
- }
2490
- }
2491
- button('프록시 파일 불러오기'){
2492
- top 0
2493
- left 2
2494
- on_clicked{
2495
- file = open_file
2496
- if file != nil
2497
- file_data = File.open(file,'r').read
2498
- @data['포스트설정']['프록시리스트'] = file_data.split("\n")
2750
+ button('파일 불러오기'){
2751
+ top 0
2752
+ left 3
2753
+ on_clicked{
2754
+ file = open_file
2755
+ if file != nil
2756
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2757
+ file_data.split("\n").each do |i|
2758
+ key = i.split('>')[0]
2759
+ v = i.split('>')[1].to_s.split(',')
2760
+ @data['포스트설정']['내용자동변경값'][key] = v
2499
2761
  end
2500
- }
2762
+ end
2501
2763
  }
2502
2764
  }
2503
2765
  }
2504
-
2505
-
2506
2766
  vertical_separator{
2507
2767
  stretchy false
2508
2768
  }
2509
-
2510
-
2511
-
2512
-
2513
- horizontal_box{
2514
- stretchy false
2515
- grid{
2516
-
2517
- @data['포스트설정']['블로그키워드검색최신순'] = checkbox('키워드 검색 최신순 작업'){
2518
- top 1
2519
- left 0
2520
-
2521
- on_toggled {
2522
- if @data['포스트설정']['블로그키워드검색최신순'].checked?
2523
- @data['포스트설정']['블로그키워드검색인기순'].checked = false
2524
- @data['포스트설정']['블로그무작위'].checked = false
2769
+ grid{
2770
+ @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용 '){
2771
+ top 0
2772
+ left 0
2773
+ on_toggled{
2774
+ if @data['포스트설정']['테더링'].checked?
2775
+ @data['포스트설정']['프록시'].checked = false
2776
+
2525
2777
  end
2526
2778
  }
2527
2779
  }
2528
- @data['포스트설정']['블로그키워드검색인기순'] = checkbox('키워드 검색 인기순 작업'){
2529
- top 1
2530
- left 1
2531
-
2532
- on_toggled {
2533
- if @data['포스트설정']['블로그키워드검색인기순'].checked?
2534
- @data['포스트설정']['블로그키워드검색최신순'].checked = false
2535
- @data['포스트설정']['블로그무작위'].checked = false
2780
+ @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용 '){
2781
+ top 0
2782
+ left 1
2783
+ on_toggled{
2784
+ if @data['포스트설정']['프록시'].checked?
2785
+ @data['포스트설정']['테더링'].checked = false
2786
+
2536
2787
  end
2537
2788
  }
2538
2789
  }
2539
-
2540
-
2541
- @data['포스트설정']['블로그무작위'] = checkbox('블로그 랜덤 무작위 설정'){
2542
- top 1
2543
- left 2
2544
-
2545
- on_toggled {
2546
- if @data['포스트설정']['블로그무작위'].checked?
2547
- @data['포스트설정']['블로그키워드검색최신순'].checked = false
2548
- @data['포스트설정']['블로그키워드검색인기순'].checked = false
2790
+ button('프록시 파일 불러오기'){
2791
+ top 0
2792
+ left 2
2793
+ on_clicked{
2794
+ file = open_file
2795
+ if file != nil
2796
+ file_data = File.open(file,'r').read
2797
+ @data['포스트설정']['프록시리스트'] = file_data.split("\n")
2549
2798
  end
2550
2799
  }
2551
2800
  }
2552
-
2553
-
2554
- @data['포스트설정']['이웃추가'] = checkbox('이웃추가'){
2801
+ }
2802
+ }
2803
+
2804
+
2805
+ vertical_separator{
2806
+ stretchy false
2807
+ }
2808
+
2809
+
2810
+
2811
+
2812
+ horizontal_box{
2813
+ stretchy false
2814
+ grid{
2815
+
2816
+ @data['포스트설정']['블로그키워드검색최신순'] = checkbox('키워드 검색 최신순 작업'){
2817
+ top 1
2818
+ left 0
2819
+
2820
+ on_toggled {
2821
+ if @data['포스트설정']['블로그키워드검색최신순'].checked?
2822
+ @data['포스트설정']['블로그키워드검색인기순'].checked = false
2823
+ @data['포스트설정']['블로그무작위'].checked = false
2824
+ @data['포스트설정']['타겟블로그'].checked = false
2825
+ end
2826
+ }
2827
+ }
2828
+ @data['포스트설정']['블로그키워드검색인기순'] = checkbox('키워드 검색 인기순 작업'){
2829
+ top 1
2830
+ left 1
2831
+
2832
+ on_toggled {
2833
+ if @data['포스트설정']['블로그키워드검색인기순'].checked?
2834
+ @data['포스트설정']['블로그키워드검색최신순'].checked = false
2835
+ @data['포스트설정']['블로그무작위'].checked = false
2836
+ @data['포스트설정']['타겟블로그'].checked = false
2837
+ end
2838
+ }
2839
+ }
2840
+
2841
+
2842
+ @data['포스트설정']['블로그무작위'] = checkbox('블로그 랜덤 무작위 설정'){
2843
+ top 1
2844
+ left 2
2845
+
2846
+ on_toggled {
2847
+ if @data['포스트설정']['블로그무작위'].checked?
2848
+ @data['포스트설정']['블로그키워드검색최신순'].checked = false
2849
+ @data['포스트설정']['블로그키워드검색인기순'].checked = false
2850
+ @data['포스트설정']['타겟블로그'].checked = false
2851
+ end
2852
+ }
2853
+ }
2854
+
2855
+ @data['포스트설정']['타겟블로그'] = checkbox('타겟 블로그 작업 (블로그 게시글 URL이 아닌 블로그URL를 세팅해주세요.)'){
2856
+ top 1
2857
+ left 3
2858
+
2859
+ on_toggled {
2860
+ if @data['포스트설정']['타겟블로그'].checked?
2861
+ @data['포스트설정']['블로그키워드검색최신순'].checked = false
2862
+ @data['포스트설정']['블로그키워드검색인기순'].checked = false
2863
+ @data['포스트설정']['블로그무작위'].checked = false
2864
+ end
2865
+ }
2866
+ }
2867
+
2868
+ @data['포스트설정']['이웃추가'] = checkbox('이웃추가'){
2869
+ top 2
2870
+ left 0
2871
+
2872
+ on_toggled {
2873
+ if @data['포스트설정']['이웃추가'].checked?
2874
+ @data['포스트설정']['서로이웃추가'].checked = false
2875
+ end
2876
+ }
2877
+ }
2878
+ @data['포스트설정']['서로이웃추가'] = checkbox('서로이웃추가'){
2879
+ top 2
2880
+ left 1
2881
+
2882
+ on_toggled {
2883
+ if @data['포스트설정']['서로이웃추가'].checked?
2884
+ @data['포스트설정']['이웃추가'].checked = false
2885
+ end
2886
+ }
2887
+ }
2888
+ @data['포스트설정']['공유하기'] = checkbox('공유하기'){
2555
2889
  top 2
2556
- left 0
2557
-
2890
+ left 2
2891
+
2558
2892
  on_toggled {
2559
- if @data['포스트설정']['이웃추가'].checked?
2560
- @data['포스트설정']['서로이웃추가'].checked = false
2893
+ if @data['포스트설정']['공유하기'].checked?
2894
+ @data['포스트설정']['공유하기비공개'].checked = false
2561
2895
  end
2562
2896
  }
2563
- }
2564
- @data['포스트설정']['서로이웃추가'] = checkbox('서로이웃추가'){
2897
+ }
2898
+ @data['포스트설정']['공유하기비공개'] = checkbox('비공개 공유하기'){
2565
2899
  top 2
2566
- left 1
2567
-
2900
+ left 3
2901
+
2568
2902
  on_toggled {
2569
- if @data['포스트설정']['서로이웃추가'].checked?
2570
- @data['포스트설정']['이웃추가'].checked = false
2903
+ if @data['포스트설정']['공유하기비공개'].checked?
2904
+ @data['포스트설정']['공유하기'].checked = false
2571
2905
  end
2572
- }
2573
- }
2574
- @data['포스트설정']['공유하기'] = checkbox('공유하기'){
2575
- top 2
2576
- left 2
2577
-
2578
- on_toggled {
2579
- if @data['포스트설정']['공유하기'].checked?
2580
- @data['포스트설정']['공유하기비공개'].checked = false
2581
- end
2582
- }
2583
2906
  }
2584
- @data['포스트설정']['공유하기비공개'] = checkbox('비공개 공유하기'){
2585
- top 2
2586
- left 3
2587
-
2588
- on_toggled {
2589
- if @data['포스트설정']['공유하기비공개'].checked?
2590
- @data['포스트설정']['공유하기'].checked = false
2591
- end
2592
- }
2593
- }
2594
-
2595
- }}
2907
+ }
2908
+
2909
+ }}
2596
2910
 
2597
2911
 
2598
2912
 
2599
- vertical_separator{
2600
- stretchy false
2601
- }
2602
-
2603
- horizontal_box{
2604
- stretchy false
2605
-
2606
- grid{
2607
- @data['포스트설정']['좋아요'] = checkbox('❤️좋아요 클릭  '){
2608
- top 1
2609
- left 0
2610
-
2611
- }
2913
+ vertical_separator{
2914
+ stretchy false
2915
+ }
2612
2916
 
2613
- @data['포스트설정']['이모티콘자동삽입'] = checkbox('😍스티커 자동 삽입   '){
2614
- top 1
2615
- left 1
2616
- on_toggled{
2617
- if @data['포스트설정']['이모티콘자동삽입'].checked?
2618
- #@data['포스트설정']['저장내용발송1'].checked = false
2619
- #@data['포스트설정']['저장내용발송2'].checked = false
2620
- @data['포스트설정']['이미지자동삽입'].checked = false
2621
- end
2622
- }
2623
- }
2624
- @data['포스트설정']['이미지자동삽입'] = checkbox('📂이미지 자동 삽입   '){
2625
- top 1
2626
- left 2
2627
- on_toggled{
2628
- if @data['포스트설정']['이미지자동삽입'].checked?
2629
- # @data['포스트설정']['저장내용발송1'].checked = false
2630
- # @data['포스트설정']['저장내용발송2'].checked = false
2631
- @data['포스트설정']['이모티콘자동삽입'].checked = false
2632
- end
2633
- }
2634
- }
2635
- @data['포스트설정']['댓글패스'] = checkbox('🔙이미 작성한 댓글이 있는 경우 패스'){
2636
- top 1
2637
- left 3
2638
- on_toggled{
2639
-
2640
- }
2917
+ horizontal_box{
2918
+ stretchy false
2919
+
2920
+ grid{
2921
+ @data['포스트설정']['좋아요'] = checkbox('❤️좋아요 클릭  '){
2922
+ top 1
2923
+ left 0
2924
+
2925
+ }
2926
+
2927
+ @data['포스트설정']['이모티콘자동삽입'] = checkbox('😍스티커 자동 삽입   '){
2928
+ top 1
2929
+ left 1
2930
+ on_toggled{
2931
+ if @data['포스트설정']['이모티콘자동삽입'].checked?
2932
+ #@data['포스트설정']['저장내용발송1'].checked = false
2933
+ #@data['포스트설정']['저장내용발송2'].checked = false
2934
+ @data['포스트설정']['이미지자동삽입'].checked = false
2935
+ end
2641
2936
  }
2937
+ }
2938
+ @data['포스트설정']['이미지자동삽입'] = checkbox('📂이미지 자동 삽입   '){
2939
+ top 1
2940
+ left 2
2941
+ on_toggled{
2942
+ if @data['포스트설정']['이미지자동삽입'].checked?
2943
+ # @data['포스트설정']['저장내용발송1'].checked = false
2944
+ # @data['포스트설정']['저장내용발송2'].checked = false
2945
+ @data['포스트설정']['이모티콘자동삽입'].checked = false
2946
+ end
2642
2947
  }
2643
- }
2644
-
2645
-
2646
- vertical_separator{
2647
- stretchy false
2948
+ }
2949
+ @data['포스트설정']['댓글패스'] = checkbox('🔙이미 작성한 댓글이 있는 경우 패스'){
2950
+ top 1
2951
+ left 3
2952
+ on_toggled{
2953
+
2648
2954
  }
2955
+ }
2956
+ }
2957
+ }
2958
+
2959
+
2960
+ vertical_separator{
2961
+ stretchy false
2962
+ }
2649
2963
 
2650
2964
 
2651
2965
 
@@ -2690,9 +3004,11 @@ end
2690
3004
  @data['키워드설정']['키워드'].shift
2691
3005
  @data['이미지설정']['이미지'].shift
2692
3006
  @data['내용설정']['내용'].shift
3007
+ @data['블로그설정']['블로그'].shift
2693
3008
  @data['키워드설정']['랜덤사용'].checked = true
2694
3009
  @data['이미지설정']['랜덤사용'].checked = true
2695
3010
  @data['내용설정']['랜덤사용'].checked = true
3011
+ @data['블로그설정']['랜덤사용'].checked = true
2696
3012
 
2697
3013
 
2698
3014
  }.show