nblog_duo 0.0.10 → 0.0.33

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/nblog_duo.rb +386 -179
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 748229a1343202a4ae9a6f638e06bf5640da5cb0ef32679cbc743b13cecbd2b0
4
- data.tar.gz: e106e8417ba896d4cfe216d69bd40db15d1d004601b82a3e8307df860634a341
3
+ metadata.gz: cb58379556d62df27bdbc3366df75c4758e55486a71cc92cbf64a0541acdbaba
4
+ data.tar.gz: 2780d5ca68b65c6340e1d841f604d75b603d1619815cba25e569b43db5eca6e1
5
5
  SHA512:
6
- metadata.gz: 9949609bfd2d54b3253fac6ac224efcf9a63b38bad53741d21ae73d3186ad6d1368bf3eea7f224a6f4b1b1cbef523fb8a27790942accce400cb9f22b22d2a252
7
- data.tar.gz: c26e0ea5dd9bcbafae3af1903b8cdedcd64b01b0d19bad31feb30852b888278ef3841ba1b7b95e021f0e07e4e08f7e16df20d0e0f22a9fe563d4740a6797425e
6
+ metadata.gz: 85e1ba1d4a9d96120b6afc0d62bf25add7e240e3f244db9fd3d1bd54ba41bee45b819390f2138e2f7110263df6083cedc2f8e00952d10148d3fbc41d1e1dfdb9
7
+ data.tar.gz: 02127f0437128ad68a0d63550a9bfe95078abcbe8b0ef91dc90c6f17859f95544d9dab7fb4236c1684784ccde88c2c49d3b9315e2364dabbf7eebfdcb161f2bd
data/lib/nblog_duo.rb CHANGED
@@ -607,43 +607,76 @@ class Naver
607
607
  @driver.find_element(:xpath, '//*[@data-log="ltpl.my"]').click
608
608
  sleep(1)
609
609
  begin
610
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3.7)
611
+ wait.until { @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/div[1]/aside/div/div[3]/div[1]/div[2]/ul/li['+template.to_s+']/a') }
610
612
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/div[1]/aside/div/div[3]/div[1]/div[2]/ul/li['+template.to_s+']/a').click
611
613
  puts '탬플릿 ['+template.to_s+'] 번을 사용합니다'
614
+ sleep(1)
612
615
  rescue
616
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3.7)
617
+ wait.until { @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/div[1]/aside/div/div[3]/div[1]/div[2]/ul/li/a') }
613
618
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/div[1]/aside/div/div[3]/div[1]/div[2]/ul/li/a').click
614
619
  puts '탬플릿 ['+template.to_s+'] 번을 찾지못해 첫번째 탬플릿을 사용합니다.'
615
620
  sleep(1)
616
621
  end
622
+
623
+ begin
624
+ wait = Selenium::WebDriver::Wait.new(timeout: 10)
625
+ alert = wait.until { @driver.switch_to.alert }
626
+ sleep(1)
617
627
  @driver.switch_to.alert.accept
618
- sleep(5)
628
+ rescue
629
+ end
630
+
631
+ begin
632
+ wait = Selenium::WebDriver::Wait.new(timeout: 10) # 최대 10초까지 대기
633
+ element = wait.until {
634
+ elem = @driver.find_element(:css, "div[style*='position: fixed; top: 0px; left: -9999px; width: 17px; height: 100%; border: 0px;']")
635
+ elem.style("display") == "block" ? elem : nil
636
+ }
637
+ rescue
638
+ end
639
+
619
640
  @driver.find_element(:xpath, '//*[@data-name="template"]').click
620
641
  sleep(1)
621
-
622
-
623
-
624
642
  end
625
643
  rescue
626
-
627
644
  end
628
645
 
629
646
 
630
647
  #제목 입력
631
648
  ele = @driver.find_element(:xpath, '//*[@draggable="false"]')
632
649
  @driver.action.click(ele).perform
633
- sleep(1)
634
- @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
635
- sleep(1)
636
- @driver.action.key_down(:delete).key_up(:delete).perform
637
- sleep(1)
650
+ sleep(0.5)
651
+ if template.to_s == ''
652
+ # 템플릿이 사용되지 않았을 경우
653
+ else
654
+ # 템플릿이 사용된 경우
655
+ @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
656
+ sleep(0.5)
657
+ @driver.action.key_down(:delete).key_up(:delete).perform
658
+ sleep(0.5)
659
+ end
660
+
661
+
638
662
  title = title.strip
639
663
  @driver.action.send_keys(title).perform
640
664
  sleep(1)
641
- @driver.action.key_down(:enter).key_up(:enter).perform
642
- sleep(1)
643
- @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
644
- sleep(1)
645
665
  @driver.action.key_down(:down).key_up(:down).perform
646
- @driver.action.key_down(:enter).key_up(:enter).perform
666
+ sleep(1)
667
+
668
+
669
+ if template.to_s == ''
670
+ # 템플릿이 사용되지 않았을 경우
671
+ else
672
+ # 템플릿이 사용된 경우
673
+ @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
674
+ sleep(1)
675
+ @driver.action.key_down(:down).key_up(:down).perform
676
+ sleep(1)
677
+ @driver.action.key_down(:enter).key_up(:enter).perform
678
+ end
679
+
647
680
 
648
681
 
649
682
 
@@ -678,15 +711,20 @@ class Naver
678
711
  sleep(1)
679
712
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[12]/div/div/button[2]').click
680
713
  sleep(1)
714
+ #@driver.actions.key_down(:control).key_down(:alt).send_keys('l').key_up(:alt).key_up(:control).perform
715
+
681
716
  elsif i.to_s.include?('right')
682
717
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[12]/div/button').click
683
718
  sleep(1)
684
719
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[12]/div/div/button[3]').click
685
720
  sleep(1)
721
+ #@driver.actions.key_down(:control).key_down(:alt).send_keys('r').key_up(:alt).key_up(:control).perform
722
+
686
723
  else
687
-
724
+
688
725
  end
689
726
  end
727
+
690
728
 
691
729
  i.children.each do |i2|
692
730
  puts i.to_s
@@ -694,7 +732,7 @@ class Naver
694
732
  node_value = Hash.new
695
733
  node_value['id'] = create_id()
696
734
  node_value['@ctype'] = 'textNode'
697
- sleep(1)
735
+ #sleep(1)
698
736
  if i2.to_s.include?('<img')
699
737
  path = i2.to_s.split('src="')[1].split('"')[0]
700
738
  path = URI.decode_www_form(path)[0][0]
@@ -709,7 +747,7 @@ class Naver
709
747
  iframe = wait.until { @driver.find_element(id: 'mainFrame') }
710
748
  @driver.switch_to.frame(iframe)
711
749
  begin
712
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
750
+ wait = Selenium::WebDriver::Wait.new(:timeout => 7)
713
751
  wait.until { @driver.find_element(:xpath, '//*[@class="se-popup-button-text"]') }
714
752
  @driver.find_element(:xpath, '//*[@class="se-popup-button-text"]').click
715
753
  sleep(1)
@@ -783,9 +821,7 @@ class Naver
783
821
  sleep(1)
784
822
  end
785
823
 
786
-
787
-
788
-
824
+
789
825
  # end
790
826
  # components_value['src'] = 'https://blogfiles.pstatic.net'+image_data['item']['url']+'?type=w1'
791
827
  # components_value['internalResource'] = true
@@ -839,6 +875,167 @@ class Naver
839
875
  @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[3]/button/span').click
840
876
  sleep(3)
841
877
 
878
+
879
+ elsif i2.to_s.include?('<slide')
880
+ if option['라이브러리사용안함'] == 'true'
881
+
882
+ posting_url = @driver.current_url
883
+ @driver.execute_script("window.open('#{posting_url}');")
884
+ sleep(1)
885
+ @driver.switch_to.window(@driver.window_handles[1])
886
+ wait = Selenium::WebDriver::Wait.new(timeout: 10)
887
+ iframe = wait.until { @driver.find_element(id: 'mainFrame') }
888
+ @driver.switch_to.frame(iframe)
889
+ begin
890
+ wait = Selenium::WebDriver::Wait.new(:timeout => 7)
891
+ wait.until { @driver.find_element(:xpath, '//*[@class="se-popup-button-text"]') }
892
+ @driver.find_element(:xpath, '//*[@class="se-popup-button-text"]').click
893
+ sleep(1)
894
+ rescue
895
+ end
896
+
897
+ slide_content = i2.to_s.split('<slide>').last.split('</slide>').first.strip
898
+ paths = slide_content.scan(/"([^"]+)"/).flatten # 큰따옴표로 감싸진 경로만 추출
899
+
900
+ # 2. 전체 경로를 추출하여 윈도우 경로로 변환
901
+ full_paths = paths.map { |path| path.strip.gsub('/', '\\') } # 윈도우 경로 구분자로 변경
902
+
903
+ paths_with_quotes = full_paths.map { |path| "\"#{path}\"" }.join(' ')
904
+ image_names = paths.map { |path| File.basename(path) }.map { |name| "\"#{name}\"" }.join(' ') # 큰따옴표로 감싼 파일 이름만 추출
905
+ # 3. 전체 경로를 클립보드에 복사
906
+ Clipboard.copy(paths_with_quotes)
907
+
908
+ # 4. 전체 경로를 붙여넣기
909
+ @driver.find_element(:xpath, '//*[@class="se-toolbar-item se-toolbar-item-image"]').click
910
+ sleep(1)
911
+
912
+ key_down('ctrl')
913
+ key_stroke('v')
914
+ key_up('ctrl')
915
+ sleep(1)
916
+ key_stroke('enter')
917
+ sleep(2)
918
+ #@driver.action.key_down(:control).send_keys('z').key_up(:control).perform
919
+ @driver.find_element(:xpath, '//*[@class="se-popup-close-button"]').click
920
+
921
+ # 6. 이미지 이름만 클립보드에 복사 (큰따옴표 포함)
922
+ Clipboard.copy(image_names)
923
+
924
+ # 8. 이미지 이름만 클립보드에 복사 후 붙여넣기
925
+ @driver.find_element(:xpath, '//*[@class="se-toolbar-item se-toolbar-item-image"]').click
926
+ sleep(1)
927
+ sleep(1)
928
+ key_down('ctrl')
929
+ key_stroke('v')
930
+ key_up('ctrl')
931
+ sleep(1)
932
+ key_stroke('enter')
933
+ sleep(2)
934
+
935
+ wait = Selenium::WebDriver::Wait.new(:timeout => 10)
936
+ wait.until { @driver.find_element(:xpath, '//*[@for="image-type-slide"]') }
937
+ @driver.find_element(:xpath, '//*[@for="image-type-slide"]').click
938
+ sleep(1)
939
+ @driver.action.send_keys(:up).perform
940
+ sleep(1)
941
+ wait = Selenium::WebDriver::Wait.new(:timeout => 10)
942
+ wait.until { @driver.find_element(:xpath, '//*[@data-log="ct.arrfit"]') }
943
+ @driver.find_element(:xpath, '//*[@data-log="ct.arrfit"]').click
944
+ sleep(1)
945
+
946
+
947
+ @driver.action.key_down(:control).send_keys('c').key_up(:control).perform
948
+ @driver.switch_to.default_content()
949
+ @driver.close
950
+ sleep(1)
951
+ @driver.switch_to.window(@driver.window_handles[0])
952
+ wait = Selenium::WebDriver::Wait.new(timeout: 10)
953
+ iframe = wait.until { @driver.find_element(id: 'mainFrame') }
954
+ @driver.switch_to.frame(iframe)
955
+ #@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
956
+ key_down('ctrl')
957
+ key_stroke('v')
958
+ key_up('ctrl')
959
+ sleep(1)
960
+
961
+ else
962
+
963
+ slide_content = i2.to_s.split('<slide>').last.split('</slide>').first.strip
964
+ paths = slide_content.scan(/"([^"]+)"/).flatten # 큰따옴표로 감싸진 경로만 추출
965
+
966
+ # 2. 전체 경로를 추출하여 윈도우 경로로 변환
967
+ full_paths = paths.map { |path| path.strip.gsub('/', '\\') } # 윈도우 경로 구분자로 변경
968
+
969
+ paths_with_quotes = full_paths.map { |path| "\"#{path}\"" }.join(' ')
970
+ image_names = paths.map { |path| File.basename(path) }.map { |name| "\"#{name}\"" }.join(' ') # 큰따옴표로 감싼 파일 이름만 추출
971
+ # 3. 전체 경로를 클립보드에 복사
972
+ Clipboard.copy(paths_with_quotes)
973
+
974
+ # 4. 전체 경로를 붙여넣기
975
+ @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[1]/button').click
976
+ sleep(1)
977
+
978
+ key_down('ctrl')
979
+ key_stroke('v')
980
+ key_up('ctrl')
981
+ sleep(1)
982
+ key_stroke('enter')
983
+ sleep(2)
984
+
985
+ wait = Selenium::WebDriver::Wait.new(:timeout => 10)
986
+ wait.until { @driver.find_element(:xpath, '//*[@class="se-popup-close-button"]') }
987
+ @driver.find_element(:xpath, '//*[@class="se-popup-close-button"]').click
988
+
989
+
990
+ # 6. 이미지 이름만 클립보드에 복사 (큰따옴표 포함)
991
+ Clipboard.copy(image_names)
992
+
993
+ # 8. 이미지 이름만 클립보드에 복사 후 붙여넣기
994
+ @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[1]/button').click
995
+ sleep(1)
996
+ sleep(1)
997
+ key_down('ctrl')
998
+ key_stroke('v')
999
+ key_up('ctrl')
1000
+ sleep(1)
1001
+ key_stroke('enter')
1002
+ sleep(2)
1003
+
1004
+ wait = Selenium::WebDriver::Wait.new(:timeout => 10)
1005
+ wait.until { @driver.find_element(:xpath, '//*[@for="image-type-slide"]') }
1006
+ @driver.find_element(:xpath, '//*[@for="image-type-slide"]').click
1007
+ sleep(1)
1008
+ @driver.action.send_keys(:up).perform
1009
+ sleep(1)
1010
+
1011
+ wait = Selenium::WebDriver::Wait.new(:timeout => 10)
1012
+ wait.until { @driver.find_element(:xpath, '//*[@data-log="ct.arrfit"]') }
1013
+ @driver.find_element(:xpath, '//*[@data-log="ct.arrfit"]').click
1014
+ sleep(1)
1015
+ @driver.action.key_down(:enter).key_up(:enter).perform
1016
+
1017
+
1018
+ end
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
842
1039
  elsif i2.to_s.include?('<inyonggoo')
843
1040
  if i2.text == ''
844
1041
 
@@ -874,6 +1071,11 @@ class Naver
874
1071
  # components_value['source'] = nil
875
1072
  # components_value['@ctype'] = 'quotation'
876
1073
  end
1074
+
1075
+
1076
+
1077
+
1078
+
877
1079
  elsif i2.to_s.include?('<sticker')
878
1080
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[4]/button').click
879
1081
  sleep(1)
@@ -1061,49 +1263,6 @@ class Naver
1061
1263
  @driver.action.key_down(:space).key_up(:space).perform
1062
1264
  @driver.action.key_down(:left).key_up(:left).perform
1063
1265
  end
1064
-
1065
- # begin
1066
- # if i.to_s.split('text-align: ')[1].split(';')[0] == 'center'
1067
- # if value_data['style'] == nil
1068
- # value_data['style'] = Hash.new
1069
- # end
1070
- # value_data['style']['align'] = 'center'
1071
- # value_data['style']['@ctype'] = 'paragraphStyle'
1072
- # elsif i.to_s.split('text-align: ')[1].split(';')[0] == 'right'
1073
- # if value_data['style'] == nil
1074
- # value_data['style'] = Hash.new
1075
- # end
1076
- # value_data['style']['align'] = 'right'
1077
- # value_data['style']['@ctype'] = 'paragraphStyle'
1078
- # else
1079
-
1080
- # end
1081
- # rescue => e
1082
- # puts e
1083
-
1084
- # end
1085
-
1086
- # if toomung == 1
1087
- # if node_value['style'] == nil
1088
- # node_value['style'] = Hash.new
1089
- # end
1090
- # node_value['style']['fontSizeCode'] = 'fs0'
1091
- # end
1092
-
1093
- # if i2.to_s.include?('<a href="')
1094
- # if i2.to_s.include?('<img src=')
1095
-
1096
- # else
1097
- # node_value['link'] = {
1098
- # 'url' => i2.to_s.split('href="')[1].split('"')[0],
1099
- # '@ctype' => 'urlLink'
1100
- # }
1101
- # end
1102
- # end
1103
-
1104
- # if node_value['style'] != nil
1105
- # node_value['style']['@ctype'] = 'nodeStyle'
1106
- # end
1107
1266
  end
1108
1267
 
1109
1268
  if check_image == 0
@@ -1191,50 +1350,14 @@ class Naver
1191
1350
  end
1192
1351
  end
1193
1352
  end
1194
- sleep(1)
1353
+ sleep(0.5)
1195
1354
  @driver.action.key_down(:end).key_up(:end).perform
1196
- sleep(1)
1355
+ sleep(0.5)
1197
1356
  @driver.action.key_down(:enter).key_up(:enter).perform
1198
- sleep(1)
1199
- # if check_image == 0
1200
- # if value_data['nodes'].length == 0
1201
- # value_data['nodes'][0] = {
1202
- # 'id' => create_id(),
1203
- # '@ctype' => 'textNode',
1204
- # 'value' => ''
1205
- # }
1206
- # end
1207
- # begin
1208
- # components_value['value'] << value_data
1209
- # rescue
1210
-
1211
- # end
1212
- # end
1213
-
1214
- # if components_value['value'] != nil
1215
- # if components_value['value'].length == 0
1216
- # components_value['value'][0] = {
1217
- # 'id' => create_id(),
1218
- # 'nodes' => [{
1219
- # 'id' => create_id(),
1220
- # '@ctype' => 'textNode',
1221
- # 'value' => ''
1222
- # }],
1223
- # '@ctype' => 'paragraph'
1224
- # }
1225
- # end
1226
- # end
1227
- # data['documentModel']['document']['components'] << components_value
1357
+ sleep(0.5)
1228
1358
  end
1229
1359
 
1230
1360
  if soosick_1 != ''
1231
- # data['documentModel']['document']['components'] << {
1232
- # 'id' => create_id(),
1233
- # 'layout' => 'default',
1234
- # 'fontSizeCode' => 'fs13',
1235
- # 'codeContents' => soosick_1,
1236
- # '@ctype' => 'code'
1237
- # }
1238
1361
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[13]/button').click
1239
1362
  sleep(3)
1240
1363
  # @driver.action.send_keys(soosick_1.text).perform
@@ -1246,13 +1369,6 @@ class Naver
1246
1369
  end
1247
1370
 
1248
1371
  if soosick_2 != ''
1249
- # data['documentModel']['document']['components'] << {
1250
- # 'id' => create_id(),
1251
- # 'layout' => 'default',
1252
- # 'fontSizeCode' => 'fs13',
1253
- # 'codeContents' => soosick_2,
1254
- # '@ctype' => 'code'
1255
- # }
1256
1372
  @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[13]/button').click
1257
1373
  sleep(3)
1258
1374
  # @driver.action.send_keys(soosick_2).perform
@@ -1263,6 +1379,32 @@ class Naver
1263
1379
  sleep(3)
1264
1380
  end
1265
1381
 
1382
+ if option['중앙정렬'] == 'true'
1383
+ @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
1384
+ sleep(1)
1385
+ @driver.action.key_down(:control).key_down(:alt).send_keys('c').key_up(:alt).key_up(:control).perform
1386
+ sleep(1)
1387
+ else
1388
+
1389
+ end
1390
+ if option['좌측정렬'] == 'true'
1391
+ @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
1392
+ sleep(1)
1393
+ @driver.action.key_down(:control).key_down(:alt).send_keys('l').key_up(:alt).key_up(:control).perform
1394
+ sleep(1)
1395
+ else
1396
+
1397
+ end
1398
+ if option['우측정렬'] == 'true'
1399
+ @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
1400
+ sleep(1)
1401
+ @driver.action.key_down(:control).key_down(:alt).send_keys('r').key_up(:alt).key_up(:control).perform
1402
+ sleep(1)
1403
+ else
1404
+
1405
+ end
1406
+
1407
+
1266
1408
  @driver.find_element(:xpath, '//*[@data-focus-lock="publishLayer"]').click #1차 등록버튼
1267
1409
  sleep(3)
1268
1410
  category = option['category']
@@ -1403,45 +1545,13 @@ class Naver
1403
1545
 
1404
1546
  end
1405
1547
 
1406
-
1407
-
1408
-
1409
-
1410
-
1411
- #sleep(dd_time.to_i)
1412
- #@driver.find_element(:xpath, '//*[@id="root"]/div/div[1]/div/div[3]/div[3]/div/div/div/div[8]/div/button').click
1413
-
1414
- #sleep(10)
1415
1548
  begin
1416
1549
  @driver.close
1417
1550
  rescue
1418
1551
 
1419
1552
  end
1420
1553
 
1421
- # if option['proxy'] == ''
1422
- # http = HTTP.headers(h).post('https://api-blog.blog.naver.com/rabbit/auto/save', :form => data)
1423
- # else
1424
- # ip = option['proxy'].to_s.split(':')[0]
1425
- # port = option['proxy'].to_s.split(':')[1]
1426
- # http = HTTP.via(ip, port.to_i).headers(h).post('https://api-blog.blog.naver.com/rabbit/auto/save', :form => data)
1427
- # end
1428
- # puts http.to_s
1429
- # http.cookies.each do |i|
1430
- # puts i
1431
- # end
1432
- # sleep(3)
1433
- # data['productApiVersion'] = 'v1'
1434
- # if option['proxy'] == ''
1435
- # http = HTTP.headers(h).post('https://blog.naver.com/RabbitWrite.naver', :form => data)
1436
- # else
1437
- # ip = option['proxy'].to_s.split(':')[0]
1438
- # port = option['proxy'].to_s.split(':')[1]
1439
- # http = HTTP.via(ip, port.to_i).headers(h).post('https://blog.naver.com/RabbitWrite.naver', :form => data)
1440
- # end
1441
- # puts http.to_s
1442
- # http.cookies.each do |i|
1443
- # puts i
1444
- # end
1554
+
1445
1555
  end
1446
1556
  end
1447
1557
 
@@ -2673,6 +2783,7 @@ class Wordpress
2673
2783
  if i.force_encoding('utf-8').to_s.include?('@')
2674
2784
  image_memory << ""+'<img src="'+image_url+'" alt="'+keyword+'">'+""
2675
2785
  content[index3] = content[index3] + '**image()**'
2786
+
2676
2787
  else
2677
2788
  image_memory << ""+ '<img src="'+image_url+'" alt="'+keyword+'">'+""
2678
2789
  content[index3] = content[index3] + '**image**'
@@ -2682,10 +2793,61 @@ class Wordpress
2682
2793
  content = content.join('')
2683
2794
  end
2684
2795
  end
2685
-
2686
-
2687
-
2688
-
2796
+
2797
+ if @data['포스트설정']['슬라이드로변경'].checked?
2798
+ @data['포스트설정']['단어슬라이드변경'].text.to_s.force_encoding('utf-8').split(',').each do |i|
2799
+ content = content.split(i.force_encoding('utf-8'))
2800
+ content.each_with_index do |ccm, index3|
2801
+ if index3 == content.length - 1
2802
+ # 마지막 인덱스인 경우, 아무 작업하지 않음
2803
+ else
2804
+ image_url = get_image_file().force_encoding('utf-8') # 실제 이미지 경로
2805
+ image_number = @data['포스트설정']['슬라이드사진수량'].text.to_s.force_encoding('utf-8').to_i
2806
+ image = Magick::Image.read(image_url).first
2807
+ image_width = image.columns # 이미지의 가로 크기
2808
+ image_height = image.rows # 이미지의 세로 크기
2809
+ split_width = image_width / image_number # 가로로 나누는 너비
2810
+
2811
+ # 이미지 분할 작업
2812
+ slide_images = (0...image_number).map do |n|
2813
+ split_image = image.crop(n * split_width, 0, split_width, image_height)
2814
+
2815
+ # 현재 초를 사용하여 고유한 파일 이름 생성
2816
+ timestamp = Time.now.to_i
2817
+ split_image_path = "./image/#{@keyword}_slide_#{n + 1}_#{timestamp}.png"
2818
+ absolute_path = File.expand_path(split_image_path) # 절대 경로 계산
2819
+
2820
+ # 이미지 저장
2821
+ split_image.write(absolute_path)
2822
+
2823
+ # 이미지 파일 이름만 추출
2824
+ image_name = File.basename(absolute_path)
2825
+
2826
+ # 1. 전체 경로를 포함한 <slide> 태그
2827
+ full_path_slide = "\"#{absolute_path}\""
2828
+
2829
+ # 2. 이미지 이름만 포함한 <slide1> 태그
2830
+ name_only_slide = "\"#{image_name}\""
2831
+
2832
+ # 전체 경로와 이미지 이름을 각각 모아서 반환
2833
+ [full_path_slide, name_only_slide]
2834
+ end
2835
+
2836
+ # <slide> 태그는 전체 경로만, <slide1> 태그는 이미지 이름만 포함
2837
+ slide_full_paths = slide_images.map { |pair| pair[0] }.join(' ')
2838
+ slide_names_only = slide_images.map { |pair| pair[1] }.join(' ')
2839
+
2840
+ # 각각 <slide>와 <slide1> 태그로 감싸기
2841
+ slide_html_full = "<slide>" + slide_full_paths + "</slide>"
2842
+ slide_html_names = "<slide1>" + slide_names_only + "</slide1>"
2843
+
2844
+ # 두 태그를 content에 추가
2845
+ content[index3] = content[index3] + slide_html_full
2846
+ end
2847
+ end
2848
+ content = content.join('')
2849
+ end
2850
+ end
2689
2851
 
2690
2852
  con_memory = Array.new
2691
2853
  index5 = 0
@@ -2905,14 +3067,23 @@ class Wordpress
2905
3067
 
2906
3068
  if @data['포스트설정']['중앙정렬'].checked?
2907
3069
  content = content.split("\n").map {|row| '<p style="text-align: center;">'+row+'</p>'}.join("\n")
3070
+ option['중앙정렬'] = 'true'
3071
+ else
3072
+ option['중앙정렬'] = 'false'
2908
3073
  end
2909
3074
 
2910
3075
  if @data['포스트설정']['우측정렬'].checked?
2911
3076
  content = content.split("\n").map {|row| '<p style="text-align: right;">'+row+'</p>'}.join("\n")
3077
+ option['우측정렬'] = 'true'
3078
+ else
3079
+ option['우측정렬'] = 'false'
2912
3080
  end
2913
3081
 
2914
3082
  if @data['포스트설정']['좌측정렬'].checked?
2915
3083
  content = content.split("\n").map {|row| '<p style="text-align: left;">'+row+'</p>'}.join("\n")
3084
+ option['좌측정렬'] = 'true'
3085
+ else
3086
+ option['좌측정렬'] = 'false'
2916
3087
  end
2917
3088
 
2918
3089
  @data['table'][index][-1] = 90
@@ -4191,15 +4362,80 @@ class Wordpress
4191
4362
  }
4192
4363
  }
4193
4364
  }
4365
+
4366
+ horizontal_box{
4367
+ stretchy false
4368
+ label('※이미지 리스트와 위 세팅을 하였다면 포스트설정1 탭에서 어떤위치(방식)으로 삽입시킬지 세팅이 필요합니다.'){
4369
+ }
4370
+ }
4371
+ horizontal_box{
4372
+ stretchy false
4373
+ label('※이미지를 아래 특정단어 슬라이드 변경 기능만 사용한다면 포스트설정1 탭에서 설정을 할 필요는 없습니다.'){
4374
+ }
4375
+ }
4194
4376
  vertical_separator{
4195
4377
  stretchy false
4196
- }
4378
+ }
4197
4379
  horizontal_box{
4198
4380
  stretchy false
4199
4381
  @data['포스트설정']['라이브러리사용안함'] = checkbox('사진 라이브러리에서 제외시키기 적용'){
4200
4382
 
4201
4383
  }
4202
- }
4384
+ }
4385
+ horizontal_box{
4386
+ stretchy false
4387
+ label('※해당 기능에 체크시 로직 활용으로 브라우저 창을 하나 더 사용하게 되므로 PC 사양(인터넷속도) 낮은 환경에서는 비 추천입니다.'){
4388
+ }
4389
+ }
4390
+
4391
+ vertical_separator{
4392
+ stretchy false
4393
+ }
4394
+ horizontal_box{
4395
+ stretchy false
4396
+ @data['포스트설정']['슬라이드로변경'] = checkbox('특정단어를 슬라이드사진 변경'){
4397
+ }
4398
+ @data['포스트설정']['단어슬라이드변경'] = entry{
4399
+ text 'ex)특정단어a'
4400
+ }
4401
+ grid{
4402
+ @data['포스트설정']['슬라이드사진수량'] = entry{
4403
+ text '수량 ex)3'
4404
+ }
4405
+ }
4406
+ }
4407
+ horizontal_box{
4408
+ stretchy false
4409
+ grid{
4410
+ label('※이미지 순서 사용시 참고 사항!!'){
4411
+ top 0
4412
+ left 0
4413
+
4414
+ }
4415
+ label('내용 중 원하는 위치에 특정단어 예로 "특정단어a" 분할사진" 이라 넣어 두고 해당 항목에도 "특정단어a" 단어를 넣어주세요. '){
4416
+ top 1
4417
+ left 0
4418
+
4419
+ }
4420
+ label('삽입되는 사진부터 계산 후 슬라이드 사용 이미지를 계산하며, 예로 이미지5개 중 사진 삽입이 3장, 슬라이드 사용 사진 2장이라면'){
4421
+ top 2
4422
+ left 0
4423
+
4424
+ }
4425
+
4426
+ label('사진 삽입에 1번부터~3번까지 차례로 순서를 정하고 슬라이드에 사용되는 사진이 다음으로 4번부터~5번까지가 설정됩니다'){
4427
+ top 3
4428
+ left 0
4429
+
4430
+ }
4431
+
4432
+ }
4433
+ }
4434
+ horizontal_box{
4435
+ stretchy false
4436
+ label('※수량은 이미지 하나를 분할하려는 수이며, 블로그 규정에 맞게 최대10 이하로 설정해주세요'){
4437
+ }
4438
+ }
4203
4439
  }
4204
4440
  }
4205
4441
  }
@@ -4221,26 +4457,7 @@ class Wordpress
4221
4457
  text '특정단어'
4222
4458
  }
4223
4459
 
4224
- # @data['포스트설정']['제목단어변경'] = checkbox('제목에 특정 단어를 변경'){
4225
- # top 1
4226
- # left 0
4227
- # }
4228
- # @data['포스트설정']['제목단어변경파일불러오기'] = button('설정 파일 불러오기'){
4229
- # top 1
4230
- # left 1
4231
- # on_clicked{
4232
- # file = open_file
4233
- # if file != nil
4234
- # file_data = File.open(file, 'r', :encoding => 'utf-8').read()
4235
- # file_data.split("\n").each do |i|
4236
- # i2 = i.split('>')
4237
- # text_key = i2[0].to_s
4238
- # text_val = i2[1].to_s.split(',')
4239
- # @data['포스트설정']['제목특정단어변경데이터'][text_key] = text_val
4240
- # end
4241
- # end
4242
- # }
4243
- # }
4460
+
4244
4461
  @data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
4245
4462
  top 2
4246
4463
  left 0
@@ -4565,16 +4782,6 @@ class Wordpress
4565
4782
  }
4566
4783
 
4567
4784
 
4568
- # @data['포스트설정']['슬라이드로변경'] = checkbox('특정단어를 슬라이드사진 변경'){
4569
- # top 6
4570
- # left 0
4571
- # }
4572
- # @data['포스트설정']['단어슬라이드변경'] = entry{
4573
- # top 6
4574
- # left 1
4575
- # text '특정단어'
4576
- # }
4577
-
4578
4785
  @data['포스트설정']['스티커로변경'] = checkbox('특정단어를 스티커로 변경'){
4579
4786
  top 6
4580
4787
  left 0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nblog_duo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-30 00:00:00.000000000 Z
11
+ date: 2025-01-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: File to Clipboard gem
14
14
  email: mymin26@naver.com