posting_duo 3.111.015 → 3.111.019

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/posting_duo.rb +249 -66
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81295a0e87e8a76001be3090d2ec74aa83f0f21e64d5d70f85a29c1dd79d4d14
4
- data.tar.gz: 36ef08afc8fbf565ca977e0504e5cea873dd773ef3878a29422dfbad29fd97c4
3
+ metadata.gz: 0af24a0477564008729b41a9b8f9304d87e7230092978f7dfc7cff72ed4c8d0e
4
+ data.tar.gz: 46d8956da32e88aa0d6b1982f257cff62dded37e895a3fa72136aa13d902bebc
5
5
  SHA512:
6
- metadata.gz: a4f9e858c3a4a20408d9920dac005ae45d05a74af0cf1f779a8ef11c3426cc7825e73b64ef0aea38d39838d23a27af4b22496aa09149ec9ee9fd9fe94de05df5
7
- data.tar.gz: fff1cf0c5dadcc8effd6ca1a987f9a5b235dc7d8a643dfcab3a038ad2ca6e0ecd553d97c2014c8fb944d5c24f3e779adfb181abccd9b6d92c2dd3e9ae5c01074
6
+ metadata.gz: f46bfeb2c3e53bb47488e9bfc14a45df2c594e85618fcc181f5bb795943eeee12c10b52030dbc80e060639a4a2be106b36f91579ccd78c9bcf1ee13d0d0a9959
7
+ data.tar.gz: 4875757cca6f8d4925d0035165e1838d684e207b1a48a0a36da75b158e05f34f315ab2b71ed2dd915fcc513d4a9df262ed8472ad0c2e7e78c558121cf0bbc09b
data/lib/posting_duo.rb CHANGED
@@ -10066,11 +10066,13 @@ if check_captcha == 0
10066
10066
  puts '-[√] 캡챠 해제 중~ 해제 완료까지 마우스 움직이지 마세요.......'.red
10067
10067
  puts '-[√] 캡챠 코드 code 3.......'.red
10068
10068
  sleep(1)
10069
+ begin
10069
10070
  #요소 자체 제거 하기 기능
10070
10071
  chat_box = @driver.find_element(:xpath, '//*[@for="captcha_key"]')
10071
10072
  @driver.execute_script("arguments[0].remove();", chat_box)
10072
10073
  sleep(1)
10073
-
10074
+ rescue
10075
+ end
10074
10076
  sleep(1)
10075
10077
  @driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});", el) # 화면 가운데
10076
10078
  sleep(1)
@@ -13241,51 +13243,126 @@ class Wordpress
13241
13243
  # return m.join("\n")
13242
13244
  # end
13243
13245
 
13246
+ # ✔ 문장 정리 함수
13247
+ def clean_sentence(s, aa33)
13248
+ return '' if s.nil? || s.strip.empty?
13249
+ s.strip!
13250
+
13251
+ return '' if s.length < 10
13252
+
13253
+ # 종결어가 포함된 경우 → 종결어 기준으로 문장 잘라냄
13254
+ end_patterns = /(다|요|입니다|했습니다|하였습니다|했어요|해요|였습니다|었어요|네요|였어요|죠|시죠|되었어요|하더라고요|이랍니다|같습니다|같아요|드릴게요|드렸어요|보였습니다|느껴졌어요)/
13255
+
13256
+ if match = s.match(/(.+?#{end_patterns})(\s|$)/)
13257
+ clean = match[1]
13258
+ return clean.end_with?('.') ? clean : clean + '.'
13259
+ end
13260
+
13261
+ # 종결어 없으면 aa33 붙이기
13262
+ s + aa33.sample
13263
+ end
13264
+
13265
+ # ✔ 마지막 문장이 자연스럽게 끝나는지 보정
13266
+ def ensure_ending(text)
13267
+ text.strip!
13268
+ return text if text.match?(/(다|요)\.\s*$/)
13269
+ return text + %w[다. 요.].sample
13270
+ end
13271
+
13272
+ # ✔ 마지막 '완성된 문장'까지만 추출
13273
+ def trim_to_last_complete_sentence(text)
13274
+ sentences = text.strip.split(/(?<=\.)/)
13275
+ last_good_index = nil
13276
+
13277
+ sentences.each_with_index.reverse_each do |sentence, idx|
13278
+ if sentence.strip.match?(/(다|요)\.\s*$/)
13279
+ last_good_index = idx
13280
+ break
13281
+ end
13282
+ end
13283
+
13284
+ return sentences[0..last_good_index].join(' ').strip if last_good_index
13285
+ return sentences.first.strip
13286
+ end
13287
+
13288
+ # ✔ 본문 수집 및 생성
13244
13289
  def get_naver_text(q)
13245
- puts '자동 글 생성을 시작합니다.......'.green
13246
- text_array = Array.new
13247
- aa33 = '하였습니다,하였어요,하게됬어요,했답니다,했었는데요,하게되었어요,했어요,그랬답니다,그랬어요,합니다,그랬어요,그랬답니다,그랬답니다,그러합니다,좋아요,좋습니다,됬어요,되었어요,되었답니다,되었구요,되었어요,되네요,하네요,해요,할거예요,할수었이요,입니다,인데요,이예요,이랍니다,이였어요,그랬어요,그랬거든요,그랬습니다,었어요,었습니다,있었어요,하였고,하였으며,했는데,했지만,했고,그랬으며,하고,하며,좋았고,좋고,되었으며'.split(',')
13248
- for page in 1..3
13249
- begin
13250
- http = HTTP.get('https://search.zum.com/search.zum?method=blog&option=accu&query='+q.to_s.split(' ').join('')+'&rd=1&page='+page.to_s+'&mm=direct')
13251
- sleep(3)
13252
- noko = Nokogiri::HTML(http.to_s)
13253
- for n in 1..2
13254
- begin
13255
- text_array << noko.xpath('//*[@id="blogItemUl"]/li['+n.to_s+']/dl/dd[2]').text.split('...').join('') + aa33.sample
13256
- rescue
13290
+ puts '자동 글 생성을 시작합니다.......'.green
13291
+ text_array = []
13257
13292
 
13258
- end
13259
- end
13260
- rescue
13261
- puts 'zum 검색 http error ...'
13293
+ aa33 = '하였습니다,하였어요,하게 되었어요,했어요,그랬답니다,합니다,좋아요,좋습니다,되었어요,되었네요,하네요,해요,할 거예요,입니다,이예요,이랍니다,그랬습니다,었습니다,있었어요,했지만,했고,하고,하며,좋고,되었으며'.split(',')
13294
+
13295
+ # --- ZUM 블로그 크롤링 ---
13296
+ (1..3).each do |page|
13297
+ begin
13298
+ url = "https://search.zum.com/search.zum?method=blog&option=accu&query=#{q.gsub(' ', '')}&rd=1&page=#{page}&mm=direct"
13299
+ http = HTTP.get(url)
13300
+ sleep(2)
13301
+ noko = Nokogiri::HTML(http.to_s)
13302
+ (1..2).each do |n|
13303
+ raw = noko.xpath("//*[@id='blogItemUl']/li[#{n}]/dl/dd[2]").text
13304
+ raw.split(/[.!?]/).map(&:strip).each do |s|
13305
+ cleaned = clean_sentence(s, aa33)
13306
+ text_array << cleaned unless cleaned.empty?
13262
13307
  end
13263
13308
  end
13309
+ rescue
13310
+ puts 'ZUM 검색 오류 발생'
13311
+ end
13312
+ end
13264
13313
 
13265
- for page in 2..5
13314
+ # --- DAUM 블로그 크롤링 ---
13315
+ (2..4).each do |page|
13316
+ begin
13317
+ http = HTTP.get("https://search.daum.net/search?w=fusion&col=blog&q=#{q.gsub(' ', '')}&DA=TWA&p=#{page}")
13318
+ sleep(2)
13319
+ noko = Nokogiri::HTML(http.to_s)
13320
+ puts '자동글 수집 및 생성 중 (약 5~30초 소요) ...'
13321
+ giri = noko.xpath('//c-contents-desc').to_s
13322
+ giri.split('</c-contents-desc>')[1..-1].each do |n|
13266
13323
  begin
13267
-
13268
- http = HTTP.get('https://search.daum.net/search?w=fusion&col=blog&q='+q.to_s.split(' ').join('')+'&DA=TWA&p='+page.to_s)
13269
- sleep(3)
13270
- noko = Nokogiri::HTML(http.to_s)
13271
- #puts http.to_s
13272
- puts '자동글 수집 및 생성 중 (약 5~30초 소요) ...'
13273
- giri = noko.xpath('//c-contents-desc').to_s #글만 또는 옆에 이미지있음 같이 블럭씌워지는곳(div class=.... 아래 xpath 의 < 빼고 첫 코드 아래와 동일 xpath)
13274
- for n in giri.split('</c-contents-desc>')[1..-1] #div class=.... 아래 xpath 의 < 넣고 / 넣고 첫 코드
13275
- #puts n
13276
- begin
13277
- text_array << n.split('\'>')[1].split('"')[0] #
13278
- #puts n.split('>')[1].split('"')[0]
13279
- #puts "\n"
13280
- rescue
13281
- end
13282
- end
13324
+ text = n.split('>')[1].split('<')[0].strip
13325
+ next if text.length < 10
13326
+ text.split(/[.!?]/).map(&:strip).each do |s|
13327
+ cleaned = clean_sentence(s, aa33)
13328
+ text_array << cleaned unless cleaned.empty?
13329
+ end
13283
13330
  rescue
13284
- puts 'DAUM 검색 http error ...'
13285
13331
  end
13286
13332
  end
13287
-
13288
- return text_array.join("\n")[0..5000]
13333
+ rescue
13334
+ puts 'DAUM 검색 오류 발생'
13335
+ end
13336
+ end
13337
+
13338
+ # 중복 제거 및 필터링
13339
+ text_array.uniq!
13340
+ text_array.reject! { |s| s.length < 15 || s.count(' ') < 2 }
13341
+
13342
+ # 자연스럽게 이어붙이기
13343
+ connectors = [
13344
+ '그리고', '또한', '더불어', '한편', '그러므로', '이러한 점에서',
13345
+ '이와 함께', '이처럼', '게다가', '뿐만 아니라', '즉', '결국', '그래서',
13346
+ '하지만', '반면에', '따라서', '그에 따라', '다시 말해', '예를 들어',
13347
+ '요약하자면', '중요한 것은', '먼저', '마지막으로', '특히', '실제로',
13348
+ '사실상', '종합해 보면', '한 가지 더', '이로 인해', '말하자면'
13349
+ ]
13350
+
13351
+ final_text = ''
13352
+ text_array.each_with_index do |sentence, idx|
13353
+ if idx > 0 && idx % 3 == 0
13354
+ final_text << "\n\n"
13355
+ elsif idx > 0
13356
+ final_text << "#{connectors.sample} "
13357
+ end
13358
+ final_text << sentence + ' '
13359
+ end
13360
+
13361
+ # 마지막 문장이 자연스럽게 끝나도록 정리
13362
+ trimmed = trim_to_last_complete_sentence(final_text)
13363
+ trimmed = ensure_ending(trimmed)
13364
+
13365
+ return trimmed[0..5000] # 최대 5000자 반환
13289
13366
  end
13290
13367
 
13291
13368
 
@@ -13624,6 +13701,8 @@ class Wordpress
13624
13701
  title_soon = 0
13625
13702
  keyword_soon = 0
13626
13703
  content_soon = 0
13704
+ keyword_link_soon1 = 0
13705
+ keyword_link_soon2 = 0
13627
13706
  @my_ip = 'init'
13628
13707
  @image_counter = 0
13629
13708
  @inumber2 = 0
@@ -13768,6 +13847,43 @@ class Wordpress
13768
13847
  @data['table'] << []
13769
13848
  @data['table'].pop
13770
13849
 
13850
+
13851
+ if @data['포스트설정']['링크파일'].length == 0
13852
+ keyword_link_path1 = ''
13853
+ else
13854
+ if @data['포스트설정']['링크삽입랜덤'].checked?
13855
+ keyword_link_path1 = @data['포스트설정']['링크파일'].sample[1]
13856
+ else
13857
+ keyword_link_path1 = @data['포스트설정']['링크파일'][keyword_link_soon1][1]
13858
+ keyword_link_soon1 += 1
13859
+ if keyword_link_soon1 > @data['포스트설정']['링크파일'].length-1
13860
+ keyword_link_soon1 = 0
13861
+ end
13862
+ end
13863
+ end
13864
+ @data['table'][index][-1] = 6
13865
+ @data['table'] << []
13866
+ @data['table'].pop
13867
+
13868
+
13869
+ if @data['포스트설정']['링크파일1'].length == 0
13870
+ keyword_link_path2 = ''
13871
+ else
13872
+ if @data['포스트설정']['링크삽입랜덤1'].checked?
13873
+ keyword_link_path2 = @data['포스트설정']['링크파일1'].sample[1]
13874
+ else
13875
+ keyword_link_path2 = @data['포스트설정']['링크파일1'][keyword_link_soon2][1]
13876
+ keyword_link_soon2 += 1
13877
+ if keyword_link_soon2 > @data['포스트설정']['링크파일1'].length-1
13878
+ keyword_link_soon2 = 0
13879
+ end
13880
+ end
13881
+ end
13882
+ @data['table'][index][-1] = 7
13883
+ @data['table'] << []
13884
+ @data['table'].pop
13885
+
13886
+
13771
13887
  if @data['키워드설정']['키워드'].length == 0
13772
13888
  keyword = ''
13773
13889
  else
@@ -13995,17 +14111,20 @@ class Wordpress
13995
14111
  # if check10 == 0
13996
14112
  # break
13997
14113
  # end
13998
- # end
13999
-
14114
+ # end
14000
14115
 
14001
14116
  content3 = Array.new
14002
14117
 
14118
+
14119
+
14120
+
14121
+
14003
14122
  if @data['포스트설정']['내용을자동생성'].checked?
14004
14123
  content2.each_with_index do |con, index|
14005
14124
  if position.include?(index)
14006
14125
  insert_keyword_text = keyword.to_s
14007
- if @data['포스트설정']['키워드삽입'].checked?
14008
- insert_keyword_text = '<a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+insert_keyword_text+'">'+insert_keyword_text.to_s+'</a> '
14126
+ if @data['포스트설정']['키워드링크삽입'].checked?
14127
+ insert_keyword_text = '<a href="'+keyword_link_path1.to_s+'" title="'+insert_keyword_text+'">'+insert_keyword_text.to_s+'</a> '
14009
14128
  end
14010
14129
  con2 = con.split('')
14011
14130
  if con == '(자동생성글)'
@@ -14025,8 +14144,8 @@ class Wordpress
14025
14144
  content2.each_with_index do |con, index|
14026
14145
  if position.include?(index)
14027
14146
  insert_keyword_text = keyword.to_s
14028
- if @data['포스트설정']['키워드삽입'].checked?
14029
- insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+insert_keyword_text+'">'+insert_keyword_text.to_s+'</a> '
14147
+ if @data['포스트설정']['키워드링크삽입'].checked?
14148
+ insert_keyword_text = ' <a href="'+keyword_link_path1.to_s+'" title="'+insert_keyword_text+'">'+insert_keyword_text.to_s+'</a> '
14030
14149
  end
14031
14150
  con2 = con.split('')
14032
14151
  if con == '(자동생성글)'
@@ -14039,7 +14158,7 @@ class Wordpress
14039
14158
  content3 << con
14040
14159
  end
14041
14160
  end
14042
- content = content.split("(자동생성글)")[0]+"\n\n"+ ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+keyword.to_s+'</a> ' + "\n(자동생성글)\n" + content3.join("\n")
14161
+ content = content.split("(자동생성글)")[0]+"\n\n"+ ' <a href="'+keyword_link_path1.to_s+'" title="'+keyword.to_s+'">'+keyword.to_s+'</a> ' + "\n(자동생성글)\n" + content3.join("\n")
14043
14162
  end
14044
14163
 
14045
14164
 
@@ -14059,8 +14178,8 @@ class Wordpress
14059
14178
  content2.each_with_index do |con, index|
14060
14179
  if position2.include?(index)
14061
14180
  insert_keyword_text = keyword.to_s
14062
- if @data['포스트설정']['키워드삽입'].checked?
14063
- insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14181
+ if @data['포스트설정']['키워드링크삽입'].checked?
14182
+ insert_keyword_text = ' <a href="'+keyword_link_path1.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14064
14183
  end
14065
14184
  con2 = con.split('')
14066
14185
  content3 << con2.join('')
@@ -14074,8 +14193,8 @@ class Wordpress
14074
14193
  content2.each_with_index do |con, index|
14075
14194
  if position.include?(index)
14076
14195
  insert_keyword_text = keyword.to_s
14077
- if @data['포스트설정']['키워드삽입'].checked?
14078
- insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14196
+ if @data['포스트설정']['키워드링크삽입'].checked?
14197
+ insert_keyword_text = ' <a href="'+keyword_link_path1.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14079
14198
  end
14080
14199
  con2 = con.split('')
14081
14200
  content3 << con2.join('')
@@ -14164,15 +14283,15 @@ class Wordpress
14164
14283
 
14165
14284
  content = last_text.split(" ")
14166
14285
  insert_keyword_text = keyword.to_s
14167
- if @data['포스트설정']['키워드삽입1'].checked?
14168
- insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크1'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14286
+ if @data['포스트설정']['키워드링크삽입1'].checked?
14287
+ insert_keyword_text = ' <a href="'+keyword_link_path2.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14169
14288
  end
14170
14289
  content.each_with_index do |con, index|
14171
14290
  begin
14172
14291
  if position3[1..-1].include?(index)
14173
14292
  insert_keyword_text = keyword.to_s
14174
- if @data['포스트설정']['키워드삽입1'].checked?
14175
- insert_keyword_text = ' <a href="'+@data['포스트설정']['키워드삽입시링크1'].text.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14293
+ if @data['포스트설정']['키워드링크삽입1'].checked?
14294
+ insert_keyword_text = ' <a href="'+keyword_link_path2.to_s+'" title="'+keyword.to_s+'">'+insert_keyword_text.to_s+'</a> '
14176
14295
  end
14177
14296
  con2 = con.split('')
14178
14297
  content333 << con2.join('')
@@ -14211,8 +14330,8 @@ class Wordpress
14211
14330
  if position10.include?(index)
14212
14331
  puts index
14213
14332
  text99 = text9.split(' ')
14214
- if @data['포스트설정']['키워드삽입1'].checked?
14215
- itext = text99.insert(rand(0..(text99.length-1)), ' <a href="'+@data['포스트설정']['키워드삽입시링크1'].text.to_s+'" title="'+keyword.to_s+'">'+@data['키워드설정']['키워드'].sample[1]+'</a> ')
14333
+ if @data['포스트설정']['키워드링크삽입1'].checked?
14334
+ itext = text99.insert(rand(0..(text99.length-1)), ' <a href="'+keyword_link_path2.to_s+'" title="'+keyword.to_s+'">'+@data['키워드설정']['키워드'].sample[1]+'</a> ')
14216
14335
  else
14217
14336
  itext = text99.insert(rand(0..(text99.length-1)), @data['키워드설정']['키워드'].sample[1])
14218
14337
  end
@@ -14266,8 +14385,8 @@ class Wordpress
14266
14385
  if position10.include?(index)
14267
14386
  puts index
14268
14387
  text99 = text9.split(' ')
14269
- if @data['포스트설정']['키워드삽입1'].checked?
14270
- itext = text99.insert(rand(0..(text99.length-1)), ' <a href="'+@data['포스트설정']['키워드삽입시링크1'].text.to_s+'" title="'+keyword.to_s+'">'+@data['키워드설정']['키워드'].sample[1]+'</a> ')
14388
+ if @data['포스트설정']['키워드링크삽입1'].checked?
14389
+ itext = text99.insert(rand(0..(text99.length-1)), ' <a href="'+keyword_link_path2.to_s+'" title="'+keyword.to_s+'">'+@data['키워드설정']['키워드'].sample[1]+'</a> ')
14271
14390
  else
14272
14391
  itext = text99.insert(rand(0..(text99.length-1)), @data['키워드설정']['키워드'].sample[1])
14273
14392
  end
@@ -14432,6 +14551,8 @@ class Wordpress
14432
14551
  @data['포스트설정']['내용자동변경값'] = Hash.new
14433
14552
  @data['포스트설정']['막글'] = ''
14434
14553
  @data['포스트설정']['프록시리스트'] = Array.new
14554
+ @data['포스트설정']['링크파일'] = Array.new
14555
+ @data['포스트설정']['링크파일1'] = Array.new
14435
14556
 
14436
14557
  @user_login_ok = 4
14437
14558
  window('커뮤니티(게시판) 자동 포스팅 프로그램', 800, 620) {
@@ -15137,7 +15258,7 @@ class Wordpress
15137
15258
  }
15138
15259
  button('   폴더째로 불러오기   '){
15139
15260
  stretchy false
15140
- on_clicked {
15261
+ on_clicked {
15141
15262
  path = @data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8')
15142
15263
 
15143
15264
  # 경로가 유효한지 확인
@@ -15574,7 +15695,7 @@ class Wordpress
15574
15695
  on_toggled{
15575
15696
  if @data['포스트설정']['내용키워드삽입'].checked?
15576
15697
  @data['포스트설정']['막글삽입2'].checked = false
15577
- @data['포스트설정']['키워드삽입1'].checked = false
15698
+ @data['포스트설정']['키워드링크삽입1'].checked = false
15578
15699
  end
15579
15700
  }
15580
15701
  }
@@ -15589,15 +15710,44 @@ class Wordpress
15589
15710
  text '최대수량'
15590
15711
  }
15591
15712
 
15592
- @data['포스트설정']['키워드삽입'] = checkbox('키워드 링크 적용'){
15713
+ @data['포스트설정']['키워드링크삽입'] = checkbox('키워드 링크 적용'){
15593
15714
  top 1
15594
15715
  left 3
15595
15716
  }
15596
- @data['포스트설정']['키워드삽입시링크'] = entry(){
15717
+ button('링크 파일 불러오기'){
15597
15718
  top 1
15598
15719
  left 4
15599
- text 'URL'
15720
+
15721
+ on_clicked {
15722
+ file = open_file
15723
+ if file != nil
15724
+ file_data = File.open(file, 'r').read
15725
+ @data['포스트설정']['링크파일'] = file_data.split("\n").map { |line| ["링크", line.strip] }
15726
+ end
15727
+ }
15728
+ }
15729
+
15730
+ @data['포스트설정']['링크삽입순서'] = checkbox('링크 순서 사용'){
15731
+ top 1
15732
+ left 5
15733
+ on_toggled {
15734
+ if @data['포스트설정']['링크삽입순서'].checked?
15735
+ @data['포스트설정']['링크삽입랜덤'].checked = false
15736
+ end
15737
+ }
15738
+
15600
15739
  }
15740
+ @data['포스트설정']['링크삽입랜덤'] = checkbox('링크랜덤 사용'){
15741
+ top 1
15742
+ left 6
15743
+ on_toggled {
15744
+ if @data['포스트설정']['링크삽입랜덤'].checked?
15745
+ @data['포스트설정']['링크삽입순서'].checked = false
15746
+ end
15747
+ }
15748
+ }
15749
+
15750
+
15601
15751
  @data['포스트설정']['내용사진자동삽입'] = checkbox('이미지 자동 삽입  '){
15602
15752
  top 2
15603
15753
  left 0
@@ -15802,7 +15952,7 @@ class Wordpress
15802
15952
  on_toggled{
15803
15953
  if @data['포스트설정']['막글삽입2'].checked?
15804
15954
  @data['포스트설정']['내용키워드삽입'].checked = false
15805
- @data['포스트설정']['키워드삽입'].checked = false
15955
+ @data['포스트설정']['키워드링크삽입'].checked = false
15806
15956
  end
15807
15957
  }
15808
15958
  }
@@ -15818,15 +15968,46 @@ class Wordpress
15818
15968
  text '최대수량'
15819
15969
  }
15820
15970
 
15821
- @data['포스트설정']['키워드삽입1'] = checkbox('키워드 링크 적용'){
15971
+ @data['포스트설정']['키워드링크삽입1'] = checkbox('키워드 링크 적용'){
15822
15972
  top 0
15823
15973
  left 3
15824
15974
  }
15825
- @data['포스트설정']['키워드삽입시링크1'] = entry(){
15975
+
15976
+ button('   링크 파일 불러오기    '){
15826
15977
  top 0
15827
15978
  left 4
15828
- text 'URL'
15979
+
15980
+ on_clicked {
15981
+ file = open_file
15982
+ if file != nil
15983
+ file_data = File.open(file, 'r').read
15984
+ @data['포스트설정']['링크파일1'] = file_data.split("\n").map { |line| ["링크", line.strip] }
15985
+ end
15986
+ }
15987
+ }
15988
+
15989
+ @data['포스트설정']['링크삽입순서1'] = checkbox('링크 순서 사용'){
15990
+ top 0
15991
+ left 5
15992
+ on_toggled {
15993
+ if @data['포스트설정']['링크삽입순서1'].checked?
15994
+ @data['포스트설정']['링크삽입랜덤1'].checked = false
15995
+ end
15996
+ }
15997
+
15998
+ }
15999
+ @data['포스트설정']['링크삽입랜덤1'] = checkbox('링크랜덤 사용'){
16000
+ top 0
16001
+ left 6
16002
+ on_toggled {
16003
+ if @data['포스트설정']['링크삽입랜덤1'].checked?
16004
+ @data['포스트설정']['링크삽입순서1'].checked = false
16005
+ end
16006
+ }
15829
16007
  }
16008
+
16009
+
16010
+
15830
16011
  }
15831
16012
  vertical_separator{
15832
16013
  stretchy false
@@ -15978,7 +16159,9 @@ class Wordpress
15978
16159
  @data['포스트설정']['원고로만포스팅'].checked = true
15979
16160
  @data['포스트설정']['제목에도적용'].checked = true
15980
16161
  @data['포스트설정']['제목리스트사용'].checked = true
15981
-
16162
+ @data['포스트설정']['링크삽입순서'].checked = true
16163
+ @data['포스트설정']['링크삽입순서1'].checked = true
16164
+
15982
16165
  }.show
15983
16166
  end
15984
16167
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posting_duo
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.111.015
4
+ version: 3.111.019
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-07-03 00:00:00.000000000 Z
10
+ date: 2025-07-04 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: File to Clipboard gem
13
13
  email: mymin26@naver.com