zon_blog_comment 0.0.17 → 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 +930 -625
  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
@@ -1294,6 +1425,25 @@ end
1294
1425
  @data['table'] << []
1295
1426
  @data['table'].pop
1296
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
1297
1447
 
1298
1448
  #포스팅 get 데이터 가저오기#############################
1299
1449
 
@@ -1386,6 +1536,13 @@ end
1386
1536
  else
1387
1537
  option['블로그무작위'] = 'false'
1388
1538
  end
1539
+
1540
+ if @data['포스트설정']['타겟블로그'].checked?
1541
+ option['타겟블로그'] = 'true'
1542
+ else
1543
+ option['타겟블로그'] = 'false'
1544
+ end
1545
+
1389
1546
  @data['table'][index][-1] = 70
1390
1547
  @data['table'] << []
1391
1548
  @data['table'].pop
@@ -1473,7 +1630,7 @@ end
1473
1630
  # 댓글 설정 수 카운트
1474
1631
  counts_number = @data['table'][index][6].to_i
1475
1632
  api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
1476
- naver.update(content,image,option,counts_number,keyword,api_key)
1633
+ naver.update(content,image,option,counts_number,keyword,blog_url,api_key)
1477
1634
 
1478
1635
 
1479
1636
 
@@ -1517,8 +1674,8 @@ end
1517
1674
  @data['게시판설정']['게시판'] = [[false, '']]
1518
1675
  @data['키워드설정'] = Hash.new
1519
1676
  @data['키워드설정']['키워드'] = [[false, '']]
1520
- @data['닉네임설정'] = Hash.new
1521
- @data['닉네임설정']['닉네임'] = [[false, '']]
1677
+ @data['블로그설정'] = Hash.new
1678
+ @data['블로그설정']['블로그'] = [[false, '']]
1522
1679
  @data['내용설정'] = Hash.new
1523
1680
  @data['내용설정']['내용'] = [[false, '']]
1524
1681
  @data['이미지설정'] = Hash.new
@@ -1660,11 +1817,11 @@ end
1660
1817
  end
1661
1818
 
1662
1819
  while true
1663
- if @data['게시판설정']['게시판'].length == 0
1820
+ if @data['블로그설정']['블로그'].length == 0
1664
1821
  break
1665
1822
  end
1666
1823
 
1667
- @data['게시판설정']['게시판'].pop
1824
+ @data['블로그설정']['블로그'].pop
1668
1825
  end
1669
1826
 
1670
1827
  while true
@@ -2005,658 +2162,804 @@ end
2005
2162
 
2006
2163
 
2007
2164
 
2008
- tab_item('Step.2 내용세팅'){
2009
- horizontal_box{
2010
- vertical_box{
2011
- horizontal_box{
2012
- stretchy false
2013
-
2014
- button('   이미지불러오기   '){
2015
-
2016
- on_clicked{
2017
- file = open_file
2018
- if file != nil
2019
- file_path = file.gsub('/', '\\')
2020
- @data['이미지설정']['이미지'] << [false, file, file]
2021
- @data['이미지설정']['이미지'] << [false, file, file]
2022
- @data['이미지설정']['이미지'].pop
2023
- end
2024
- }
2025
- }
2026
-
2027
-
2028
- }
2029
- horizontal_box{
2165
+ tab_item('Step.2 내용세팅'){
2166
+ horizontal_box{
2167
+ vertical_box{
2168
+ horizontal_box{
2030
2169
  stretchy false
2031
- grid{
2032
- button(' 전체선택 '){
2033
- top 1
2034
- left 0
2035
- on_clicked{
2036
- for n in 0..@data['이미지설정']['이미지'].length-1
2037
- @data['이미지설정']['이미지'][n][0] = true
2038
- @data['이미지설정']['이미지'] << []
2039
- @data['이미지설정']['이미지'].pop
2040
- end
2041
- }
2042
- }
2043
- button(' 선택해제 '){
2044
- top 1
2045
- left 1
2046
- on_clicked{
2047
- for n in 0..@data['이미지설정']['이미지'].length-1
2048
- @data['이미지설정']['이미지'][n][0] = false
2049
- @data['이미지설정']['이미지'] << []
2050
- @data['이미지설정']['이미지'].pop
2051
- end
2052
- }
2053
- }
2054
- button(' 삭제하기 '){
2055
- top 1
2056
- left 2
2057
- on_clicked{
2058
- m = Array.new
2059
- for n in 0..@data['이미지설정']['이미지'].length-1
2060
- if @data['이미지설정']['이미지'][n][0] == true
2061
- m << n
2062
- end
2063
- end
2064
-
2065
- m.reverse.each do |i|
2066
- @data['이미지설정']['이미지'].delete_at(i)
2067
- end
2068
-
2069
- @data['이미지설정']['이미지'].delete(nil)
2070
- }
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
2071
2181
  }
2072
2182
  }
2073
- horizontal_box{
2074
- stretchy false
2075
- @data['이미지설정']['순서사용'] = checkbox('순서사용'){
2076
- stretchy false
2077
- on_toggled{ |c|
2078
- if c.checked?
2079
- @data['이미지설정']['랜덤사용'].checked = false
2080
- end
2081
- }
2082
- }
2083
- @data['이미지설정']['랜덤사용'] = checkbox('랜덤사용'){
2084
- stretchy false
2085
- on_toggled{ |c|
2086
- if c.checked?
2087
- @data['이미지설정']['순서사용'].checked = false
2088
- end
2089
- }
2090
- }
2091
- }
2183
+
2184
+
2092
2185
  }
2093
-
2094
- table{
2095
- checkbox_column('선택'){
2096
- 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
2097
2198
  }
2098
- text_column('이미지파일'){
2099
- 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
2100
2209
  }
2101
-
2102
- cell_rows @data['이미지설정']['이미지']
2103
2210
  }
2104
- horizontal_box{
2105
- stretchy false
2106
- @data['이미지설정']['폴더경로'] = entry{
2107
-
2108
- text "사진폴더경로 ex)C:\\사진\\폴더2"
2109
- }
2110
-
2111
- button(' 폴더째로불러오기 '){
2112
-
2113
- on_clicked{
2114
- begin
2115
- path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2116
-
2117
- if Dir.exists?(path) # 경로가 존재하는지 확인
2118
- Dir.entries(path).each do |file|
2119
- if file != '.' and file != '..' # '.'과 '..'을 제외한 파일들만 처리
2120
- begin
2121
- full_file_path = File.join(path, file).force_encoding('utf-8')
2122
- full_file_path = full_file_path.gsub('/', '\\')
2123
- @data['이미지설정']['이미지'] << [false, full_file_path]
2124
- rescue => e
2125
- # 파일 처리 오류가 발생하면 오류 메시지 출력
2126
- puts "파일 '#{file}'을 처리할 수 없습니다: #{e.message}"
2127
- end
2128
- end
2129
- end
2130
- @data['이미지설정']['이미지'] << []
2131
- @data['이미지설정']['이미지'].pop
2132
- else
2133
- # 경로가 없으면 경고 메시지 출력
2134
- puts "경로 '#{path}'이 존재하지 않습니다."
2135
- end
2136
- rescue => e
2137
- # 경로 처리 중 발생한 오류 처리
2138
- 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
2139
2219
  end
2140
- }
2220
+ end
2221
+
2222
+ m.reverse.each do |i|
2223
+ @data['이미지설정']['이미지'].delete_at(i)
2224
+ end
2225
+
2226
+ @data['이미지설정']['이미지'].delete(nil)
2141
2227
  }
2142
- }
2143
-
2144
- }
2145
-
2146
- vertical_separator{
2147
- stretchy false
2148
- }
2149
- vertical_box{
2150
- horizontal_box{
2151
- stretchy false
2152
- button('   키워드불러오기  '){
2153
- on_clicked{
2154
- file = open_file
2155
- if file != nil
2156
- file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2157
- file_data.split("\n").each do |keyword|
2158
- if keyword.split(' ').join('').length < 2
2159
-
2160
- else
2161
- @data['키워드설정']['키워드'] << [false, keyword]
2162
- @data['키워드설정']['키워드'] << [false, keyword]
2163
- @data['키워드설정']['키워드'].pop
2164
- end
2165
- end
2166
- end
2167
- }
2168
- }
2169
2228
  }
2170
-
2229
+ }
2171
2230
  horizontal_box{
2172
2231
  stretchy false
2173
- grid{
2174
- button(' 전체선택 '){
2175
- top 1
2176
- left 0
2177
- on_clicked{
2178
- for n in 0..@data['키워드설정']['키워드'].length-1
2179
- @data['키워드설정']['키워드'][n][0] = true
2180
- @data['키워드설정']['키워드'] << []
2181
- @data['키워드설정']['키워드'].pop
2182
- end
2183
- }
2184
- }
2185
- button(' 선택해제 '){
2186
- top 1
2187
- left 1
2188
- on_clicked{
2189
- for n in 0..@data['키워드설정']['키워드'].length-1
2190
- @data['키워드설정']['키워드'][n][0] = false
2191
- @data['키워드설정']['키워드'] << []
2192
- @data['키워드설정']['키워드'].pop
2193
- end
2194
- }
2195
- }
2196
- button(' 삭제하기 '){
2197
- top 1
2198
- left 2
2199
- on_clicked{
2200
- m = Array.new
2201
- for n in 0..@data['키워드설정']['키워드'].length-1
2202
- if @data['키워드설정']['키워드'][n][0] == true
2203
- m << n
2204
- end
2205
- end
2206
-
2207
- m.reverse.each do |i|
2208
- @data['키워드설정']['키워드'].delete_at(i)
2209
- end
2210
- @data['키워드설정']['키워드'].delete(nil)
2211
- }
2212
- }
2213
- }
2214
-
2215
- horizontal_box{
2216
- stretchy false
2217
- @data['키워드설정']['순서사용'] = checkbox('순서사용'){
2232
+ @data['이미지설정']['순서사용'] = checkbox('순서사용'){
2218
2233
  stretchy false
2219
2234
  on_toggled{ |c|
2220
2235
  if c.checked?
2221
- @data['키워드설정']['랜덤사용'].checked = false
2236
+ @data['이미지설정']['랜덤사용'].checked = false
2222
2237
  end
2223
2238
  }
2224
2239
  }
2225
- @data['키워드설정']['랜덤사용'] = checkbox('랜덤사용'){
2240
+ @data['이미지설정']['랜덤사용'] = checkbox('랜덤사용'){
2226
2241
  stretchy false
2227
2242
  on_toggled{ |c|
2228
2243
  if c.checked?
2229
- @data['키워드설정']['순서사용'].checked = false
2244
+ @data['이미지설정']['순서사용'].checked = false
2230
2245
  end
2231
2246
  }
2232
2247
  }
2233
2248
  }
2234
- }
2235
-
2236
- table{
2237
- checkbox_column('선택'){
2238
- editable true
2239
- }
2240
-
2241
- text_column('키워드'){
2242
-
2243
- }
2244
-
2245
- cell_rows @data['키워드설정']['키워드']
2249
+ }
2250
+
2251
+ table{
2252
+ checkbox_column('선택'){
2253
+ editable true
2254
+ }
2255
+ text_column('이미지파일'){
2256
+ editable true
2246
2257
  }
2247
- horizontal_box{
2248
- stretchy false
2249
- @data['내용설정']['폴더경로'] = entry{
2250
- enabled false
2251
- text "내용폴더경로 ex)C:\\내용\\폴더1"
2252
- }
2253
- button(' 폴더째로 불러오기 '){
2254
- enabled false
2255
- on_clicked{
2256
- begin
2257
- path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2258
-
2259
- if Dir.exists?(path) # 경로가 존재하는지 확인
2260
- Dir.entries(path).each do |file|
2261
- # '.'과 '..'을 제외한 파일들만 처리
2262
- if file != '.' and file != '..'
2263
- begin
2264
- file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2265
- @data['내용설정']['내용'] << [false, file, file_data]
2266
- rescue => e
2267
- # 파일 열기 오류 처리
2268
- puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2269
- end
2270
- end
2271
- end
2272
- @data['내용설정']['내용'] << []
2273
- @data['내용설정']['내용'].pop
2274
- else
2275
- # 경로가 없으면 경고 메시지 출력
2276
- puts "경로 '#{path}'이 존재하지 않습니다."
2277
- end
2278
- rescue => e
2279
- # 경로 처리 중 발생한 오류 처리
2280
- puts "오류 발생: #{e.message}"
2281
- end
2282
- }
2283
- }
2284
- }
2285
-
2286
- }
2287
2258
 
2288
-
2289
- vertical_separator{
2290
- stretchy false
2291
- }
2292
- vertical_box{
2293
- horizontal_box{
2294
- stretchy false
2295
-
2296
- button('   내용불러오기  '){
2297
-
2298
- on_clicked{
2299
- file = open_file
2300
- if file != nil
2301
- file_name = file.split("\\")[-1]
2302
- file_data = File.open(file,'r', :encoding => 'utf-8').read()
2303
- if file_data.split("\n").length < 2
2304
- file_data = file_data + "\n"
2305
- end
2306
- @data['내용설정']['내용'] << [false, file_name, file_data]
2307
- @data['내용설정']['내용'] << [false, file_name, file_data]
2308
- @data['내용설정']['내용'].pop
2309
- end
2310
- }
2311
- }
2312
-
2259
+ cell_rows @data['이미지설정']['이미지']
2313
2260
  }
2314
2261
  horizontal_box{
2315
2262
  stretchy false
2316
- grid{
2317
- button(' 전체선택 '){
2318
- top 1
2319
- left 0
2320
- on_clicked{
2321
- for n in 0..@data['내용설정']['내용'].length-1
2322
- @data['내용설정']['내용'][n][0] = true
2323
- @data['내용설정']['내용'] << []
2324
- @data['내용설정']['내용'].pop
2325
- end
2326
- }
2263
+ @data['이미지설정']['폴더경로'] = entry{
2264
+
2265
+ text "사진폴더경로 ex)C:\\사진\\폴더2"
2327
2266
  }
2328
- button(' 선택해제 '){
2329
- top 1
2330
- left 1
2331
- on_clicked{
2332
- for n in 0..@data['내용설정']['내용'].length-1
2333
- @data['내용설정']['내용'][n][0] = false
2334
- @data['내용설정']['내용'] << []
2335
- @data['내용설정']['내용'].pop
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}'이 존재하지 않습니다."
2336
2292
  end
2337
- }
2293
+ rescue => e
2294
+ # 경로 처리 중 발생한 오류 처리
2295
+ puts "오류 발생: #{e.message}"
2296
+ end
2338
2297
  }
2339
- button(' 삭제하기 '){
2340
- top 1
2341
- left 2
2342
- on_clicked{
2343
- m = Array.new
2344
- for n in 0..@data['내용설정']['내용'].length-1
2345
- if @data['내용설정']['내용'][n][0] == true
2346
- m << n
2298
+ }
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
2347
2316
  end
2348
2317
  end
2349
-
2350
- m.reverse.each do |i|
2351
- @data['내용설정']['내용'].delete_at(i)
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
2352
2356
  end
2353
- @data['내용설정']['내용'].delete(nil)
2354
- }
2357
+ end
2358
+
2359
+ m.reverse.each do |i|
2360
+ @data['블로그설정']['블로그'].delete_at(i)
2361
+ end
2362
+ @data['블로그설정']['블로그'].delete(nil)
2355
2363
  }
2356
2364
  }
2357
-
2358
- horizontal_box{
2365
+ }
2366
+
2367
+ horizontal_box{
2368
+ stretchy false
2369
+ @data['블로그설정']['순서사용'] = checkbox('순서사용'){
2359
2370
  stretchy false
2360
- @data['내용설정']['순서사용'] = checkbox('순서사용'){
2361
- stretchy false
2362
- on_toggled{ |c|
2363
- if c.checked?
2364
- @data['내용설정']['랜덤사용'].checked = 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
2422
+ end
2423
+ end
2424
+ @data['내용설정']['내용'] << []
2425
+ @data['내용설정']['내용'].pop
2426
+ else
2427
+ # 경로가 없으면 경고 메시지 출력
2428
+ puts "경로 '#{path}'이 존재하지 않습니다."
2429
+ end
2430
+ rescue => e
2431
+ # 경로 처리 중 발생한 오류 처리
2432
+ puts "오류 발생: #{e.message}"
2433
+ end
2434
+ }
2435
+ }
2436
+ }
2437
+
2438
+ }
2439
+
2440
+ vertical_separator{
2441
+ stretchy false
2442
+ }
2443
+ vertical_box{
2444
+ horizontal_box{
2445
+ stretchy false
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
2458
+ end
2365
2459
  end
2366
- }
2460
+ end
2367
2461
  }
2368
- @data['내용설정']['랜덤사용'] = checkbox('랜덤사용'){
2369
- stretchy false
2370
- on_toggled{ |c|
2371
- if c.checked?
2372
- @data['내용설정']['순서사용'].checked = false
2462
+ }
2463
+ }
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
2477
+ }
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
2488
+ }
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
2373
2498
  end
2374
- }
2499
+ end
2500
+
2501
+ m.reverse.each do |i|
2502
+ @data['키워드설정']['키워드'].delete_at(i)
2503
+ end
2504
+ @data['키워드설정']['키워드'].delete(nil)
2375
2505
  }
2376
2506
  }
2377
2507
  }
2378
- table{
2379
- checkbox_column('선택'){
2380
- editable true
2508
+
2509
+ horizontal_box{
2510
+ stretchy false
2511
+ @data['키워드설정']['순서사용'] = checkbox('순서사용'){
2512
+ stretchy false
2513
+ on_toggled{ |c|
2514
+ if c.checked?
2515
+ @data['키워드설정']['랜덤사용'].checked = false
2516
+ end
2381
2517
  }
2382
-
2383
- text_column('내용파일'){
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('   내용불러오기  '){
2384
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"
2593
+ end
2594
+ @data['내용설정']['내용'] << [false, file_name, file_data]
2595
+ @data['내용설정']['내용'] << [false, file_name, file_data]
2596
+ @data['내용설정']['내용'].pop
2597
+ end
2598
+ }
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
2635
+ end
2636
+ end
2637
+
2638
+ m.reverse.each do |i|
2639
+ @data['내용설정']['내용'].delete_at(i)
2640
+ end
2641
+ @data['내용설정']['내용'].delete(nil)
2642
+ }
2643
+ }
2644
+ }
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
2385
2654
  }
2386
-
2387
- cell_rows @data['내용설정']['내용']
2388
2655
  }
2389
- horizontal_box{
2390
- stretchy false
2391
- @data['내용설정']['폴더경로'] = entry{
2392
-
2393
- text "내용폴더경로 ex)C:\\내용\\폴더1"
2656
+ @data['내용설정']['랜덤사용'] = checkbox('랜덤사용'){
2657
+ stretchy false
2658
+ on_toggled{ |c|
2659
+ if c.checked?
2660
+ @data['내용설정']['순서사용'].checked = false
2661
+ end
2394
2662
  }
2395
- button(' 폴더째로 불러오기 '){
2396
-
2397
- on_clicked{
2398
- begin
2399
- path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2400
-
2401
- if Dir.exists?(path) # 경로가 존재하는지 확인
2402
- Dir.entries(path).each do |file|
2403
- # '.'과 '..'을 제외한 파일들만 처리
2404
- if file != '.' and file != '..'
2405
- begin
2406
- file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2407
- @data['내용설정']['내용'] << [false, file, file_data]
2408
- rescue => e
2409
- # 파일 열기 오류 처리
2410
- puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2411
- 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}"
2412
2699
  end
2413
2700
  end
2414
- @data['내용설정']['내용'] << []
2415
- @data['내용설정']['내용'].pop
2416
- else
2417
- # 경로가 없으면 경고 메시지 출력
2418
- puts "경로 '#{path}'이 존재하지 않습니다."
2419
2701
  end
2420
- rescue => e
2421
- # 경로 처리 중 발생한 오류 처리
2422
- puts "오류 발생: #{e.message}"
2702
+ @data['내용설정']['내용'] << []
2703
+ @data['내용설정']['내용'].pop
2704
+ else
2705
+ # 경로가 없으면 경고 메시지 출력
2706
+ puts "경로 '#{path}'이 존재하지 않습니다."
2423
2707
  end
2424
- }
2708
+ rescue => e
2709
+ # 경로 처리 중 발생한 오류 처리
2710
+ puts "오류 발생: #{e.message}"
2711
+ end
2425
2712
  }
2426
- }
2427
-
2428
- }
2713
+ }
2714
+ }
2715
+
2429
2716
  }
2430
2717
  }
2431
2718
  }
2432
-
2433
-
2434
-
2435
-
2436
-
2437
-
2438
-
2439
-
2719
+ }
2720
+
2721
+
2722
+
2723
+
2724
+
2440
2725
 
2441
-
2442
- horizontal_box{
2443
- stretchy false
2444
- grid{
2445
-
2446
- @data['포스트설정']['ChatGPT사용'] = checkbox('GPT 댓글 사용'){
2447
- top 0
2448
- left 0
2449
- }
2450
2726
 
2451
- @data['포스트설정']['api_key'] = entry(){
2452
- top 0
2453
- left 1
2454
- text 'GPT API KEY 입력'
2455
- }
2727
+
2728
+
2729
+
2730
+ horizontal_box{
2731
+ stretchy false
2732
+ grid{
2733
+
2734
+ @data['포스트설정']['ChatGPT사용'] = checkbox('GPT 댓글 사용'){
2735
+ top 0
2736
+ left 0
2737
+ }
2456
2738
 
2457
-
2458
- @data['포스트설정']['내용자동변경'] = checkbox('댓글 치환 설정'){
2459
- top 0
2460
- left 2
2461
- }
2462
- button('파일 불러오기'){
2463
- top 0
2464
- left 3
2465
- on_clicked{
2466
- file = open_file
2467
- if file != nil
2468
- file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2469
- file_data.split("\n").each do |i|
2470
- key = i.split('>')[0]
2471
- v = i.split('>')[1].to_s.split(',')
2472
- @data['포스트설정']['내용자동변경값'][key] = v
2473
- end
2474
- end
2475
- }
2476
- }
2739
+ @data['포스트설정']['api_key'] = entry(){
2740
+ top 0
2741
+ left 1
2742
+ text 'GPT API KEY 입력'
2477
2743
  }
2478
- vertical_separator{
2479
- stretchy false
2744
+
2745
+
2746
+ @data['포스트설정']['내용자동변경'] = checkbox('댓글 치환 설정'){
2747
+ top 0
2748
+ left 2
2480
2749
  }
2481
- grid{
2482
- @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용 '){
2483
- top 0
2484
- left 0
2485
- on_toggled{
2486
- if @data['포스트설정']['테더링'].checked?
2487
- @data['포스트설정']['프록시'].checked = false
2488
-
2489
- end
2490
- }
2491
- }
2492
- @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용 '){
2493
- top 0
2494
- left 1
2495
- on_toggled{
2496
- if @data['포스트설정']['프록시'].checked?
2497
- @data['포스트설정']['테더링'].checked = false
2498
-
2499
- end
2500
- }
2501
- }
2502
- button('프록시 파일 불러오기'){
2503
- top 0
2504
- left 2
2505
- on_clicked{
2506
- file = open_file
2507
- if file != nil
2508
- file_data = File.open(file,'r').read
2509
- @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
2510
2761
  end
2511
- }
2762
+ end
2512
2763
  }
2513
2764
  }
2514
2765
  }
2515
-
2516
-
2517
2766
  vertical_separator{
2518
2767
  stretchy false
2519
2768
  }
2520
-
2521
-
2522
-
2523
-
2524
- horizontal_box{
2525
- stretchy false
2526
- grid{
2527
-
2528
- @data['포스트설정']['블로그키워드검색최신순'] = checkbox('키워드 검색 최신순 작업'){
2529
- top 1
2530
- left 0
2531
-
2532
- on_toggled {
2533
- if @data['포스트설정']['블로그키워드검색최신순'].checked?
2534
- @data['포스트설정']['블로그키워드검색인기순'].checked = false
2535
- @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
+
2536
2777
  end
2537
2778
  }
2538
2779
  }
2539
- @data['포스트설정']['블로그키워드검색인기순'] = checkbox('키워드 검색 인기순 작업'){
2540
- top 1
2541
- left 1
2542
-
2543
- on_toggled {
2544
- if @data['포스트설정']['블로그키워드검색인기순'].checked?
2545
- @data['포스트설정']['블로그키워드검색최신순'].checked = false
2546
- @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
+
2547
2787
  end
2548
2788
  }
2549
2789
  }
2550
-
2551
-
2552
- @data['포스트설정']['블로그무작위'] = checkbox('블로그 랜덤 무작위 설정'){
2553
- top 1
2554
- left 2
2555
-
2556
- on_toggled {
2557
- if @data['포스트설정']['블로그무작위'].checked?
2558
- @data['포스트설정']['블로그키워드검색최신순'].checked = false
2559
- @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")
2560
2798
  end
2561
2799
  }
2562
2800
  }
2563
-
2564
-
2565
- @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('공유하기'){
2566
2889
  top 2
2567
- left 0
2568
-
2890
+ left 2
2891
+
2569
2892
  on_toggled {
2570
- if @data['포스트설정']['이웃추가'].checked?
2571
- @data['포스트설정']['서로이웃추가'].checked = false
2893
+ if @data['포스트설정']['공유하기'].checked?
2894
+ @data['포스트설정']['공유하기비공개'].checked = false
2572
2895
  end
2573
2896
  }
2574
- }
2575
- @data['포스트설정']['서로이웃추가'] = checkbox('서로이웃추가'){
2897
+ }
2898
+ @data['포스트설정']['공유하기비공개'] = checkbox('비공개 공유하기'){
2576
2899
  top 2
2577
- left 1
2578
-
2900
+ left 3
2901
+
2579
2902
  on_toggled {
2580
- if @data['포스트설정']['서로이웃추가'].checked?
2581
- @data['포스트설정']['이웃추가'].checked = false
2903
+ if @data['포스트설정']['공유하기비공개'].checked?
2904
+ @data['포스트설정']['공유하기'].checked = false
2582
2905
  end
2583
- }
2584
- }
2585
- @data['포스트설정']['공유하기'] = checkbox('공유하기'){
2586
- top 2
2587
- left 2
2588
-
2589
- on_toggled {
2590
- if @data['포스트설정']['공유하기'].checked?
2591
- @data['포스트설정']['공유하기비공개'].checked = false
2592
- end
2593
- }
2594
2906
  }
2595
- @data['포스트설정']['공유하기비공개'] = checkbox('비공개 공유하기'){
2596
- top 2
2597
- left 3
2598
-
2599
- on_toggled {
2600
- if @data['포스트설정']['공유하기비공개'].checked?
2601
- @data['포스트설정']['공유하기'].checked = false
2602
- end
2603
- }
2604
- }
2605
-
2606
- }}
2907
+ }
2908
+
2909
+ }}
2607
2910
 
2608
2911
 
2609
2912
 
2610
- vertical_separator{
2611
- stretchy false
2612
- }
2613
-
2614
- horizontal_box{
2615
- stretchy false
2616
-
2617
- grid{
2618
- @data['포스트설정']['좋아요'] = checkbox('❤️좋아요 클릭  '){
2619
- top 1
2620
- left 0
2621
-
2622
- }
2913
+ vertical_separator{
2914
+ stretchy false
2915
+ }
2623
2916
 
2624
- @data['포스트설정']['이모티콘자동삽입'] = checkbox('😍스티커 자동 삽입   '){
2625
- top 1
2626
- left 1
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 2
2638
- on_toggled{
2639
- if @data['포스트설정']['이미지자동삽입'].checked?
2640
- # @data['포스트설정']['저장내용발송1'].checked = false
2641
- # @data['포스트설정']['저장내용발송2'].checked = false
2642
- @data['포스트설정']['이모티콘자동삽입'].checked = false
2643
- end
2644
- }
2645
- }
2646
- @data['포스트설정']['댓글패스'] = checkbox('🔙이미 작성한 댓글이 있는 경우 패스'){
2647
- top 1
2648
- left 3
2649
- on_toggled{
2650
-
2651
- }
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
2652
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
2653
2947
  }
2654
- }
2655
-
2656
-
2657
- vertical_separator{
2658
- stretchy false
2948
+ }
2949
+ @data['포스트설정']['댓글패스'] = checkbox('🔙이미 작성한 댓글이 있는 경우 패스'){
2950
+ top 1
2951
+ left 3
2952
+ on_toggled{
2953
+
2659
2954
  }
2955
+ }
2956
+ }
2957
+ }
2958
+
2959
+
2960
+ vertical_separator{
2961
+ stretchy false
2962
+ }
2660
2963
 
2661
2964
 
2662
2965
 
@@ -2701,9 +3004,11 @@ end
2701
3004
  @data['키워드설정']['키워드'].shift
2702
3005
  @data['이미지설정']['이미지'].shift
2703
3006
  @data['내용설정']['내용'].shift
3007
+ @data['블로그설정']['블로그'].shift
2704
3008
  @data['키워드설정']['랜덤사용'].checked = true
2705
3009
  @data['이미지설정']['랜덤사용'].checked = true
2706
3010
  @data['내용설정']['랜덤사용'].checked = true
3011
+ @data['블로그설정']['랜덤사용'].checked = true
2707
3012
 
2708
3013
 
2709
3014
  }.show