duo_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/duo_blog_comment.rb +414 -98
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f28471ff3b849ae804b90ee328972f28dac0d64b58a0668a058d7501ecd95122
4
- data.tar.gz: ae964694d5571e8fc4ec4e63f787034185a882df7b3360ec578ac348812b1ddc
3
+ metadata.gz: de3d418762e74f3d05c7dd648634de8bf5fe5adc780a870c1307ff40d8d2444c
4
+ data.tar.gz: b2450f9605c94d0bbfbc785254d1901bdc6f09ed7e0eb5bfe7bcb662ff303c59
5
5
  SHA512:
6
- metadata.gz: 752de6da543ee8e27b922c4bbb278bc2aa194ea02c39d4fdff85dd5e77c092ab17b5ed883d4534d59060ed1aed36171c21b22711f9a73f5cc85c024bc022ae3a
7
- data.tar.gz: f0526cd803e638776631a8903b403028d1dcd3251cfa95eae1cd45675ed4ead559464b5480267752d78d0b83c2bac28e9ba24f5c6103fd012f1a676a12f8ccdd
6
+ metadata.gz: 831a9a36f60cc00be2122fe4ce0bae5349dfdbedb35b7535722d251d18f22ed0250ad452b2a6dcf62065db91ef3fc2497a3d2821fbaa4c8aaf8b80945c8e702f
7
+ data.tar.gz: 2d6e4dc8656057a13f81e9ace13b0fc9bb70993502697d057efe19429e0814a2d1d56aa9082bb8740a5d5806de50746f84ade809b665103acf6fc6a720961cee
@@ -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
973
1048
  end
974
- else
975
- #puts "해당 data-id에 대한 data-param이 없습니다."
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
1061
+ end
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
@@ -1180,7 +1311,7 @@ class Wordpress
1180
1311
  content_soon = 0
1181
1312
  @my_ip = 'init'
1182
1313
  image_soon = 0
1183
-
1314
+ blog_url_soon = 0
1184
1315
  keyword_soon = 0
1185
1316
  @inumber2 = 0
1186
1317
  @video = Array.new
@@ -1228,7 +1359,7 @@ class Wordpress
1228
1359
  puts 'Tethering IP change...'
1229
1360
 
1230
1361
  stdout, stderr, status = Open3.capture3('./adb devices')
1231
-
1362
+
1232
1363
  if status.success?
1233
1364
  device_id = stdout.split("\n")[1].split("\t")[0]
1234
1365
  puts device_id
@@ -1236,42 +1367,53 @@ class Wordpress
1236
1367
  # ADB 서버 초기화
1237
1368
  puts 'adb kill-server'
1238
1369
  Open3.capture3('./adb kill-server')
1239
- sleep(3)
1370
+ sleep(5) # ADB 서버가 안정될 시간을 충분히 주기
1240
1371
 
1241
1372
  # 다시 ADB 서버 실행
1242
1373
  puts 'adb start-server'
1243
1374
  Open3.capture3('./adb start-server')
1244
- sleep(3)
1375
+ sleep(5) # ADB 서버가 안정될 시간을 충분히 주기
1245
1376
 
1246
1377
  # 데이터를 끄고 켜기
1247
1378
  puts 'adb -s ' + device_id + ' shell svc data disable'
1248
- stdout2, stderr2, status2 = Open3.capture3('./adb -s '+device_id+' shell svc data disable')
1249
- sleep(3)
1379
+ stdout2, stderr2, status2 = Open3.capture3('./adb -s ' + device_id + ' shell svc data disable')
1380
+ puts "stderr: #{stderr2}" unless status2.success? # 오류 출력
1381
+ sleep(5) # 네트워크가 안정될 시간을 더 줍니다.
1250
1382
  puts 'adb -s ' + device_id + ' shell svc data enable'
1251
- Open3.capture3('./adb -s '+device_id+' shell svc data enable')
1252
- sleep(3)
1383
+ stdout3, stderr3, status3 = Open3.capture3('./adb -s ' + device_id + ' shell svc data enable')
1384
+ puts "stderr: #{stderr3}" unless status3.success? # 오류 출력
1385
+ sleep(5) # 네트워크가 안정될 시간을 더 줍니다.
1253
1386
  puts 'adb ok'
1254
1387
  sleep(8)
1255
-
1388
+
1389
+ # IP 변경 확인을 위한 람다 함수
1256
1390
  robot_ip = lambda do
1257
- http = HTTP.get('https://www.findip.kr/')
1258
- noko = Nokogiri::HTML(http.to_s)
1259
- if noko.xpath('/html/body/header/h2').text != @my_ip
1260
- @my_ip = noko.xpath('/html/body/header/h2').text
1391
+ begin
1392
+ # IP 변경 확인
1393
+ http = HTTP.get('https://www.findip.kr/')
1394
+ noko = Nokogiri::HTML(http.to_s)
1395
+
1396
+ current_ip = noko.xpath('/html/body/header/h2').text.strip
1397
+ if current_ip != @my_ip
1398
+ @my_ip = current_ip
1261
1399
  puts "IP 변경됨[ #{@my_ip} ]"
1262
- else
1263
- puts @my_ip
1264
- puts '제시도...'
1265
- sleep(3)
1266
- robot_ip[]
1400
+ else
1401
+ puts "현재 IP: #{@my_ip}"
1402
+ puts 'IP 변경이 감지되지 않았습니다. 다시 시도합니다...'
1403
+ sleep(5) # 여유롭게 대기 시간 증가
1404
+ robot_ip[] # 재시도
1405
+ end
1406
+ rescue HTTP::ConnectionError => e
1407
+ puts "네트워크 오류 발생: #{e.message}. 재시도 중..."
1408
+ sleep(5) # 재시도 간 여유 시간 추가
1409
+ retry # 재시도
1267
1410
  end
1268
- end
1269
- robot_ip[]
1270
-
1411
+ end
1412
+ robot_ip[] # IP 확인 시작
1271
1413
  else
1272
- puts 'adb error pass'
1414
+ puts "adb devices 명령어 실행 실패. stderr: #{stderr}"
1273
1415
  end
1274
- end
1416
+ end
1275
1417
 
1276
1418
 
1277
1419
 
@@ -1353,6 +1495,25 @@ class Wordpress
1353
1495
  @data['table'] << []
1354
1496
  @data['table'].pop
1355
1497
 
1498
+
1499
+
1500
+ if @data['블로그설정']['블로그'].length == 0
1501
+ blog_url = ''
1502
+ else
1503
+ if @data['블로그설정']['랜덤사용'].checked?
1504
+ blog_url = @data['블로그설정']['블로그'].sample[1]
1505
+ else
1506
+ blog_url = @data['블로그설정']['블로그'][blog_url_soon][1]
1507
+ blog_url_soon += 1
1508
+ if blog_url_soon > @data['블로그설정']['블로그'].length-1
1509
+ blog_url_soon = 0
1510
+ end
1511
+ end
1512
+ end
1513
+
1514
+ @data['table'][index][-1] = 25
1515
+ @data['table'] << []
1516
+ @data['table'].pop
1356
1517
 
1357
1518
  #포스팅 get 데이터 가저오기#############################
1358
1519
 
@@ -1445,6 +1606,13 @@ class Wordpress
1445
1606
  else
1446
1607
  option['블로그무작위'] = 'false'
1447
1608
  end
1609
+
1610
+ if @data['포스트설정']['타겟블로그'].checked?
1611
+ option['타겟블로그'] = 'true'
1612
+ else
1613
+ option['타겟블로그'] = 'false'
1614
+ end
1615
+
1448
1616
  @data['table'][index][-1] = 70
1449
1617
  @data['table'] << []
1450
1618
  @data['table'].pop
@@ -1532,7 +1700,7 @@ class Wordpress
1532
1700
  # 댓글 설정 수 카운트
1533
1701
  counts_number = @data['table'][index][6].to_i
1534
1702
  api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
1535
- naver.update(content,image,option,counts_number,keyword,api_key)
1703
+ naver.update(content,image,option,counts_number,keyword,blog_url,api_key)
1536
1704
 
1537
1705
 
1538
1706
 
@@ -1576,8 +1744,8 @@ class Wordpress
1576
1744
  @data['게시판설정']['게시판'] = [[false, '']]
1577
1745
  @data['키워드설정'] = Hash.new
1578
1746
  @data['키워드설정']['키워드'] = [[false, '']]
1579
- @data['닉네임설정'] = Hash.new
1580
- @data['닉네임설정']['닉네임'] = [[false, '']]
1747
+ @data['블로그설정'] = Hash.new
1748
+ @data['블로그설정']['블로그'] = [[false, '']]
1581
1749
  @data['내용설정'] = Hash.new
1582
1750
  @data['내용설정']['내용'] = [[false, '']]
1583
1751
  @data['이미지설정'] = Hash.new
@@ -1724,11 +1892,11 @@ class Wordpress
1724
1892
  end
1725
1893
 
1726
1894
  while true
1727
- if @data['게시판설정']['게시판'].length == 0
1895
+ if @data['블로그설정']['블로그'].length == 0
1728
1896
  break
1729
1897
  end
1730
1898
 
1731
- @data['게시판설정']['게시판'].pop
1899
+ @data['블로그설정']['블로그'].pop
1732
1900
  end
1733
1901
 
1734
1902
  while true
@@ -2205,8 +2373,145 @@ class Wordpress
2205
2373
  }
2206
2374
  }
2207
2375
 
2376
+
2377
+ horizontal_box{
2378
+ stretchy false
2379
+ button('   블로그불러오기  '){
2380
+ on_clicked{
2381
+ file = open_file
2382
+ if file != nil
2383
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
2384
+ file_data.split("\n").each do |blog_url|
2385
+ if blog_url.split(' ').join('').length < 2
2386
+
2387
+ else
2388
+ @data['블로그설정']['블로그'] << [false, blog_url]
2389
+ @data['블로그설정']['블로그'] << [false, blog_url]
2390
+ @data['블로그설정']['블로그'].pop
2391
+ end
2392
+ end
2393
+ end
2394
+ }
2395
+ }
2396
+ }
2397
+
2398
+ horizontal_box{
2399
+ stretchy false
2400
+ grid{
2401
+ button(' 전체선택 '){
2402
+ top 1
2403
+ left 0
2404
+ on_clicked{
2405
+ for n in 0..@data['블로그설정']['블로그'].length-1
2406
+ @data['블로그설정']['블로그'][n][0] = true
2407
+ @data['블로그설정']['블로그'] << []
2408
+ @data['블로그설정']['블로그'].pop
2409
+ end
2410
+ }
2411
+ }
2412
+ button(' 선택해제 '){
2413
+ top 1
2414
+ left 1
2415
+ on_clicked{
2416
+ for n in 0..@data['블로그설정']['블로그'].length-1
2417
+ @data['블로그설정']['블로그'][n][0] = false
2418
+ @data['블로그설정']['블로그'] << []
2419
+ @data['블로그설정']['블로그'].pop
2420
+ end
2421
+ }
2422
+ }
2423
+ button(' 삭제하기 '){
2424
+ top 1
2425
+ left 2
2426
+ on_clicked{
2427
+ m = Array.new
2428
+ for n in 0..@data['블로그설정']['블로그'].length-1
2429
+ if @data['블로그설정']['블로그'][n][0] == true
2430
+ m << n
2431
+ end
2432
+ end
2433
+
2434
+ m.reverse.each do |i|
2435
+ @data['블로그설정']['블로그'].delete_at(i)
2436
+ end
2437
+ @data['블로그설정']['블로그'].delete(nil)
2438
+ }
2439
+ }
2440
+ }
2441
+
2442
+ horizontal_box{
2443
+ stretchy false
2444
+ @data['블로그설정']['순서사용'] = checkbox('순서사용'){
2445
+ stretchy false
2446
+ on_toggled{ |c|
2447
+ if c.checked?
2448
+ @data['블로그설정']['랜덤사용'].checked = false
2449
+ end
2450
+ }
2451
+ }
2452
+ @data['블로그설정']['랜덤사용'] = checkbox('랜덤사용'){
2453
+ stretchy false
2454
+ on_toggled{ |c|
2455
+ if c.checked?
2456
+ @data['블로그설정']['순서사용'].checked = false
2457
+ end
2458
+ }
2459
+ }
2460
+ }
2208
2461
  }
2209
-
2462
+
2463
+ table{
2464
+ checkbox_column('선택'){
2465
+ editable true
2466
+ }
2467
+
2468
+ text_column('블로그url'){
2469
+
2470
+ }
2471
+
2472
+ cell_rows @data['블로그설정']['블로그']
2473
+ }
2474
+ horizontal_box{
2475
+ stretchy false
2476
+ @data['내용설정']['폴더경로'] = entry{
2477
+ enabled false
2478
+ text "폴더경로 ex)C:\\내용\\폴더1"
2479
+ }
2480
+ button(' 폴더째로 불러오기 '){
2481
+ enabled false
2482
+ on_clicked{
2483
+ begin
2484
+ path = @data['내용설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
2485
+
2486
+ if Dir.exists?(path) # 경로가 존재하는지 확인
2487
+ Dir.entries(path).each do |file|
2488
+ # '.'과 '..'을 제외한 파일들만 처리
2489
+ if file != '.' and file != '..'
2490
+ begin
2491
+ file_data = File.open(path+'/'+file, 'r', encoding: 'utf-8').read()
2492
+ @data['내용설정']['내용'] << [false, file, file_data]
2493
+ rescue => e
2494
+ # 파일 열기 오류 처리
2495
+ puts "파일 '#{file}'을 열 수 없습니다: #{e.message}"
2496
+ end
2497
+ end
2498
+ end
2499
+ @data['내용설정']['내용'] << []
2500
+ @data['내용설정']['내용'].pop
2501
+ else
2502
+ # 경로가 없으면 경고 메시지 출력
2503
+ puts "경로 '#{path}'이 존재하지 않습니다."
2504
+ end
2505
+ rescue => e
2506
+ # 경로 처리 중 발생한 오류 처리
2507
+ puts "오류 발생: #{e.message}"
2508
+ end
2509
+ }
2510
+ }
2511
+ }
2512
+
2513
+ }
2514
+
2210
2515
  vertical_separator{
2211
2516
  stretchy false
2212
2517
  }
@@ -2312,7 +2617,7 @@ class Wordpress
2312
2617
  stretchy false
2313
2618
  @data['내용설정']['폴더경로'] = entry{
2314
2619
  enabled false
2315
- text "내용폴더경로 ex)C:\\내용\\폴더1"
2620
+ text "폴더경로 ex)C:\\내용\\폴더1"
2316
2621
  }
2317
2622
  button(' 폴더째로 불러오기 '){
2318
2623
  enabled false
@@ -2347,13 +2652,7 @@ class Wordpress
2347
2652
  }
2348
2653
  }
2349
2654
 
2350
- }
2351
-
2352
-
2353
- vertical_separator{
2354
- stretchy false
2355
- }
2356
- vertical_box{
2655
+
2357
2656
  horizontal_box{
2358
2657
  stretchy false
2359
2658
 
@@ -2597,6 +2896,7 @@ class Wordpress
2597
2896
  if @data['포스트설정']['블로그키워드검색최신순'].checked?
2598
2897
  @data['포스트설정']['블로그키워드검색인기순'].checked = false
2599
2898
  @data['포스트설정']['블로그무작위'].checked = false
2899
+ @data['포스트설정']['타겟블로그'].checked = false
2600
2900
  end
2601
2901
  }
2602
2902
  }
@@ -2608,6 +2908,7 @@ class Wordpress
2608
2908
  if @data['포스트설정']['블로그키워드검색인기순'].checked?
2609
2909
  @data['포스트설정']['블로그키워드검색최신순'].checked = false
2610
2910
  @data['포스트설정']['블로그무작위'].checked = false
2911
+ @data['포스트설정']['타겟블로그'].checked = false
2611
2912
  end
2612
2913
  }
2613
2914
  }
@@ -2621,10 +2922,23 @@ class Wordpress
2621
2922
  if @data['포스트설정']['블로그무작위'].checked?
2622
2923
  @data['포스트설정']['블로그키워드검색최신순'].checked = false
2623
2924
  @data['포스트설정']['블로그키워드검색인기순'].checked = false
2925
+ @data['포스트설정']['타겟블로그'].checked = false
2624
2926
  end
2625
2927
  }
2626
2928
  }
2627
2929
 
2930
+ @data['포스트설정']['타겟블로그'] = checkbox('타겟 블로그 작업 (블로그 게시글 URL이 아닌 블로그URL를 세팅해주세요.)'){
2931
+ top 1
2932
+ left 3
2933
+
2934
+ on_toggled {
2935
+ if @data['포스트설정']['타겟블로그'].checked?
2936
+ @data['포스트설정']['블로그키워드검색최신순'].checked = false
2937
+ @data['포스트설정']['블로그키워드검색인기순'].checked = false
2938
+ @data['포스트설정']['블로그무작위'].checked = false
2939
+ end
2940
+ }
2941
+ }
2628
2942
 
2629
2943
  @data['포스트설정']['이웃추가'] = checkbox('이웃추가'){
2630
2944
  top 2
@@ -2765,9 +3079,11 @@ class Wordpress
2765
3079
  @data['키워드설정']['키워드'].shift
2766
3080
  @data['이미지설정']['이미지'].shift
2767
3081
  @data['내용설정']['내용'].shift
3082
+ @data['블로그설정']['블로그'].shift
2768
3083
  @data['키워드설정']['랜덤사용'].checked = true
2769
3084
  @data['이미지설정']['랜덤사용'].checked = true
2770
3085
  @data['내용설정']['랜덤사용'].checked = true
3086
+ @data['블로그설정']['랜덤사용'].checked = true
2771
3087
 
2772
3088
 
2773
3089
  }.show
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duo_blog_comment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-18 00:00:00.000000000 Z
11
+ date: 2025-02-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: File to Clipboard gem
14
14
  email: mymin26@naver.com