posting_zon 3.111.011 → 3.111.013

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_zon.rb +132 -245
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4215582b1210a10618a1a5b1c8851ea1a43660305c449e8abc2bd3a903e08ca1
4
- data.tar.gz: 89f6ba002a43522cc514d3399de900521b080941e852f0432659e9495b344454
3
+ metadata.gz: 4301ae2be14ea54ebc9ba66f1edbc5fb2bea8d9e2cde21758c6a42f5512abcc9
4
+ data.tar.gz: 36f7b33ef365df82df3b0f6dba2adfad0a42e9a43c3ea927aa25bb99c15e8230
5
5
  SHA512:
6
- metadata.gz: f5cb6b2764a2dacf75e54b88bad69474e22c04685e302a56b8846106e9a9537a88e1b91dfeacd08c99b8032c658293c0d19bc5091731336d9690327ffcb292a0
7
- data.tar.gz: ad8acdafe0aa047a80c6953e9836128c982f186b1729df1614a2228c1a981716857f99be110ae4e665b40f2915b3f76f32d38f04a474387707c646b0e0cc66d3
6
+ metadata.gz: 1d74e827c7075447a3a923846a5f4ea21350e205f2b52878169f11be3f0de04d2e9e8b27cde94a8f14c20a06d0325f84d42a7bef42d0e3f866f8bae54b4f4aeb
7
+ data.tar.gz: 8095ede268aab0690be3b0f5c5c684af84b04edda93734fdea51e2df167b9ee426dbb7ad0b521d41e9baf84eed6a7c2fe7e303a1c238ddb406419bbe8abeb9f5
data/lib/posting_zon.rb CHANGED
@@ -6897,7 +6897,13 @@ begin
6897
6897
  sleep(1)
6898
6898
  puts '-[√] 닉네임 27코드 타겟.......'.yellow
6899
6899
  rescue
6900
-
6900
+ begin
6901
+ @driver.find_element(xpath: '//input[@type="text" and @name="member_display"]').send_keys(user_id)
6902
+ sleep(1)
6903
+ puts '-[√] 닉네임 28코드 타겟.......'.yellow
6904
+ rescue
6905
+
6906
+ end
6901
6907
  end
6902
6908
  end
6903
6909
  end
@@ -8356,34 +8362,44 @@ end
8356
8362
  rescue
8357
8363
  begin
8358
8364
  @driver.switch_to.default_content
8359
- if target_element
8360
- # 3. 제목 요소 바로 아래에 체크박스 HTML 삽입
8361
- checkbox_html = <<~HTML
8362
- <div class="custom-control custom-checkbox custom-control-inline">
8363
- <input type="checkbox" name="html" value="html2" id="html" onclick="html_auto_br(this);" class="custom-control-input">
8364
- <label class="custom-control-label" for="html"><span>HTML</span></label>
8365
- </div>
8366
- HTML
8367
- @driver.execute_script("arguments[0].insertAdjacentHTML('afterend', arguments[1]);", target_element, checkbox_html)
8368
- puts '체크박스 HTML 강제 적용.......'.green
8369
- sleep(1)
8370
-
8371
- # 4. 삽입한 체크박스 스크롤하여 화면 중앙으로 이동
8372
- html_checkbox = @driver.find_element(:xpath, '//*[@type="checkbox" and @name="html"]')
8373
- @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", html_checkbox)
8374
- sleep(1)
8375
-
8376
- # 5. HTML 토글 버튼 클릭
8377
- @driver.find_element(:xpath, '//*[@type="checkbox" and @name="html"]').click
8378
- puts '-[√] 임의 추가 HTML 코드 01 code.......'.yellow
8365
+ html_bb = @driver.find_element(xpath: '//input[@type="checkbox" and @name="chkhtml"]')
8366
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", html_bb)
8367
+ sleep(1)
8368
+ html_bb = @driver.find_element(xpath: '//input[@type="checkbox" and @name="chkhtml"]').click
8369
+ puts '-[√] HTML 코드 38 code.......'.yellow
8379
8370
  sleep(1)
8380
-
8381
- else
8382
- puts "타겟 제목 요소가 없어서 체크박스 삽입 불가".red
8383
- end
8384
8371
  rescue
8385
-
8386
- end
8372
+ begin
8373
+ @driver.switch_to.default_content
8374
+ if target_element
8375
+ # 3. 제목 요소 바로 아래에 체크박스 HTML 삽입
8376
+ checkbox_html = <<~HTML
8377
+ <div class="custom-control custom-checkbox custom-control-inline">
8378
+ <input type="checkbox" name="html" value="html2" id="html" onclick="html_auto_br(this);" class="custom-control-input">
8379
+ <label class="custom-control-label" for="html"><span>HTML</span></label>
8380
+ </div>
8381
+ HTML
8382
+ @driver.execute_script("arguments[0].insertAdjacentHTML('afterend', arguments[1]);", target_element, checkbox_html)
8383
+ puts '체크박스 HTML 강제 적용.......'.green
8384
+ sleep(1)
8385
+
8386
+ # 4. 삽입한 체크박스 스크롤하여 화면 중앙으로 이동
8387
+ html_checkbox = @driver.find_element(:xpath, '//*[@type="checkbox" and @name="html"]')
8388
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", html_checkbox)
8389
+ sleep(1)
8390
+
8391
+ # 5. HTML 토글 버튼 클릭
8392
+ @driver.find_element(:xpath, '//*[@type="checkbox" and @name="html"]').click
8393
+ puts '-[√] 임의 추가 HTML 코드 01 code.......'.yellow
8394
+ sleep(1)
8395
+
8396
+ else
8397
+ puts "타겟 제목 요소가 없어서 체크박스 삽입 불가".red
8398
+ end
8399
+ rescue
8400
+
8401
+ end
8402
+ end
8387
8403
  end
8388
8404
  end
8389
8405
  end
@@ -12408,6 +12424,26 @@ ss_button = @driver.find_element(xpath: '//button[@type="submit" and contains(@c
12408
12424
  puts '-[√] 등록을 53번 코드로 시도하였습니다.......'.magenta
12409
12425
  sleep(1)
12410
12426
 
12427
+ rescue
12428
+ begin
12429
+ ss_button = @driver.find_element(xpath: '//img[contains(@src, "btn_write.gif")]')
12430
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", ss_button)
12431
+ sleep(1)
12432
+
12433
+ ss_button = @driver.find_element(xpath: '//img[contains(@src, "btn_write.gif")]').click
12434
+ puts '-[√] 등록을 54번 코드로 시도하였습니다.......'.magenta
12435
+ sleep(1)
12436
+ '//button[@type="submit" and contains(@class, "kboard-default-button-small") and contains(text(), "저장하기")]'
12437
+ rescue
12438
+ begin
12439
+ ss_button = @driver.find_element(xpath: '//button[@type="submit" and contains(@class, "kboard-default-button-small") and contains(text(), "저장하기")]')
12440
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", ss_button)
12441
+ sleep(1)
12442
+
12443
+ ss_button = @driver.find_element(xpath: '//button[@type="submit" and contains(@class, "kboard-default-button-small") and contains(text(), "저장하기")]').click
12444
+ puts '-[√] 등록을 55번 코드로 시도하였습니다.......'.magenta
12445
+ sleep(1)
12446
+
12411
12447
  rescue
12412
12448
  ########─────────────────────────────▼▼▼▼▼▼▼ 등록버튼 2차 시도 ▼▼▼▼▼▼▼──────────────────────────────#######
12413
12449
  begin
@@ -12619,6 +12655,8 @@ end
12619
12655
  end
12620
12656
  end
12621
12657
  end
12658
+ end
12659
+ end
12622
12660
  end
12623
12661
  ########─────────────────────────────▲▲▲▲▲▲▲ 등록버튼 2차 시도 ▲▲▲▲▲▲▲──────────────────────────────#######
12624
12662
  end
@@ -13250,6 +13288,7 @@ class Wordpress
13250
13288
  end
13251
13289
 
13252
13290
 
13291
+
13253
13292
  def color_image
13254
13293
  color = File.open('./color.ini', 'r', :encoding => 'utf-8').read().split("\n")
13255
13294
  image = Magick::Image.new(740, 740) { |k| k.background_color = color.sample }
@@ -13258,188 +13297,80 @@ class Wordpress
13258
13297
 
13259
13298
  def save_image
13260
13299
  if @data['이미지설정']['이미지'].length == 0
13261
- return
13262
- end
13263
-
13264
- if @data['이미지설정']['순서사용'].checked?
13265
- image_path = @data['이미지설정']['이미지'][@image_counter][2]
13266
- @image_counter += 1
13267
- if @image_counter > @data['이미지설정']['이미지'].length - 1
13268
- @image_counter = 0
13269
- end
13300
+
13270
13301
  else
13271
- # 초기화가 안됐거나 다 썼으면 새롭게 섞는다
13272
- @shuffled_images ||= []
13273
- if @shuffled_images.empty?
13274
- @shuffled_images = @data['이미지설정']['이미지'].shuffle
13302
+ if @data['이미지설정']['순서사용'].checked?
13303
+ image_path = @data['이미지설정']['이미지'][@image_counter][2]
13304
+ @image_counter += 1
13305
+ if @image_counter > @data['이미지설정']['이미지'].length-1
13306
+ @image_counter = 0
13307
+ end
13308
+ else
13309
+ image_path = @data['이미지설정']['이미지'].sample[2]
13275
13310
  end
13276
-
13277
- image_path = @shuffled_images.shift[2]
13311
+ img = Magick::Image.read(image_path).first
13312
+ img.write('./image/memory.png')
13278
13313
  end
13279
-
13280
- img = Magick::Image.read(image_path).first
13281
- img.write('./image/memory.png')
13282
13314
  end
13283
13315
 
13284
13316
  def change_image_size(w)
13285
13317
  img = Magick::Image.read('./image/memory.png').first
13286
13318
  width = img.columns
13287
13319
  height = img.rows
13288
-
13289
- # '원본' 선택된 경우, 리사이징을 하지 않고 원본 이미지를 그대로 반환
13290
- if w == 'original'
13291
- return img # 원본 이미지 그대로 반환
13292
- else
13293
- begin
13294
- if @data['image_type'][0].checked? or @data['image_type'][2].checked?
13295
- # 비율을 맞추어 리사이징
13296
- img.resize!(w, w * (height.to_f / width.to_f))
13297
- else
13298
- # 정사각형으로 리사이징
13299
- img.resize!(w, w)
13300
- end
13301
- rescue
13302
- img.resize!(w, w) # 예외 처리 시에도 리사이징
13320
+ begin
13321
+ if @data['image_type'][0].checked? or @data['image_type'][2].checked?
13322
+ img.resize!(w, w*(height.to_f/width.to_f))
13323
+ else
13324
+ img.resize!(w, w)
13303
13325
  end
13326
+ rescue
13327
+ img.resize!(w, w)
13304
13328
  end
13305
-
13306
- # 리사이징된 이미지 저장
13307
13329
  img.write('./image/memory.png')
13308
13330
  end
13309
13331
 
13310
- def wrap_text_to_fit(draw, text, max_width, max_height, font_path, initial_size)
13311
- size = initial_size
13312
- draw.font = font_path
13313
-
13314
- loop do
13315
- draw.pointsize = size
13316
- words = text.chars # 글자 단위로 자름 (한국어 기준)
13317
- lines = []
13318
- line = ""
13319
-
13320
- words.each do |char|
13321
- test_line = line + char
13322
- metrics = draw.get_type_metrics(test_line)
13323
- if metrics.width > max_width
13324
- lines << line
13325
- line = char
13326
- else
13327
- line = test_line
13328
- end
13332
+ def image_text(text1, text2)
13333
+ begin
13334
+ color = File.open('./color.ini', 'r', :encoding => 'utf-8').read().split("\n")
13335
+ font = Dir.entries('./fonts')
13336
+ img = Magick::Image.read('./image/memory.png').first
13337
+ text = Magick::Draw.new
13338
+ color2 = color.sample
13339
+ font2 = './fonts/'+font.sample
13340
+ message = text1.to_s+"\n"+text2.to_s
13341
+ begin
13342
+ size = rand(@data['이미지설정']['이미지글자1크기1'].text.to_i..@data['이미지설정']['이미지글자1크기2'].text.to_i)
13343
+ rescue
13344
+ size = 30
13329
13345
  end
13330
- lines << line unless line.empty?
13331
-
13332
- line_height = draw.get_type_metrics("가").height
13333
- total_height = line_height * lines.size
13334
-
13335
- # 세로 초과 안 하면 성공
13336
- if total_height <= max_height || size <= 10
13337
- return [lines.join("\n"), size]
13338
- else
13339
- size -= 2
13346
+ if @data['이미지설정']['글자그림자'].checked?
13347
+ img.annotate(text, 0,0, +3,+3, message) do
13348
+ text.gravity = Magick::CenterGravity
13349
+ text.pointsize = size
13350
+ text.fill = '#000000'
13351
+ text.font = font2
13352
+ end
13340
13353
  end
13341
- end
13342
- end
13343
-
13344
13354
 
13345
- def image_text(text1, text2)
13346
- begin
13347
- color = File.open('./color.ini', 'r', encoding: 'utf-8').read.split("\n").map(&:strip).reject(&:empty?)
13348
- font_files = Dir.entries('./fonts').select { |f| f.downcase.end_with?('.ttf') }
13349
- font2 = './fonts/' + font_files.sample
13350
-
13351
- # 랜덤 글자색 선택
13352
- color2 = color.sample
13353
-
13354
- # 헬퍼 함수: 색상 문자열 '#RRGGBB' -> [R,G,B] 배열로 변환
13355
- def hex_to_rgb(hex)
13356
- hex = hex.delete('#')
13357
- [hex[0..1], hex[2..3], hex[4..5]].map { |c| c.to_i(16) }
13358
- end
13359
-
13360
- # 헬퍼 함수: 두 RGB 색상의 차이 계산 (간단한 유클리드 거리)
13361
- def color_distance(c1, c2)
13362
- Math.sqrt(
13363
- (c1[0] - c2[0])**2 +
13364
- (c1[1] - c2[1])**2 +
13365
- (c1[2] - c2[2])**2
13366
- )
13367
- end
13368
-
13369
- # 대비가 충분히 되는 테두리 색상 선택
13370
- max_attempts = 10
13371
- stroke_color = nil
13372
- base_rgb = hex_to_rgb(color2)
13373
-
13374
- max_attempts.times do
13375
- candidate = color.sample
13376
- candidate_rgb = hex_to_rgb(candidate)
13377
- dist = color_distance(base_rgb, candidate_rgb)
13378
-
13379
- # 거리(차이) 임계값 100 (0~441 범위) — 필요시 조절 가능
13380
- if dist > 100
13381
- stroke_color = candidate
13382
- break
13383
- end
13384
- end
13385
- stroke_color ||= '#000000' # 만약 충분히 다른 색 없으면 검정색 기본값
13386
-
13387
- img = Magick::Image.read('./image/memory.png').first
13388
- draw = Magick::Draw.new
13389
-
13390
- raw_message = "#{text1}\n#{text2}".strip
13391
- max_width = img.columns * 0.85
13392
- max_height = img.rows * 0.6
13355
+ img.annotate(text, 0,0,0,0, message) do
13356
+ text.gravity = Magick::CenterGravity
13357
+ text.pointsize = size
13358
+ if @data['이미지설정']['글자테두리'].checked?
13359
+ text.stroke_width = 2
13360
+ text.stroke = '#000000'
13361
+ end
13362
+ text.fill = color2
13363
+ text.font = font2
13364
+ end
13393
13365
 
13394
- begin
13395
- size = rand(@data['이미지설정']['이미지글자1크기1'].text.to_i..@data['이미지설정']['이미지글자1크기2'].text.to_i)
13366
+ img.write('./image/memory.png')
13396
13367
  rescue
13397
- size = 30
13398
- end
13399
-
13400
- wrapped_message, adjusted_size = wrap_text_to_fit(draw, raw_message, max_width, max_height, font2, size)
13401
-
13402
- if @data['이미지설정']['글자그림자'].checked?
13403
- img.annotate(draw, 0, 0, 2, 2, wrapped_message) do
13404
- draw.gravity = Magick::CenterGravity
13405
- draw.pointsize = adjusted_size
13406
- draw.fill = '#000000'
13407
- draw.font = font2
13408
- end
13409
- end
13410
-
13411
- if @data['이미지설정']['글자테두리'].checked?
13412
- draw_stroke = Magick::Draw.new
13413
- img.annotate(draw_stroke, 0, 0, 0, 0, wrapped_message) do
13414
- draw_stroke.gravity = Magick::CenterGravity
13415
- draw_stroke.pointsize = adjusted_size
13416
- draw_stroke.fill = 'none'
13417
- draw_stroke.stroke = stroke_color
13418
- draw_stroke.stroke_width = rand(5..10)
13419
- draw_stroke.font = font2
13420
- end
13421
- end
13422
-
13423
- draw2 = Magick::Draw.new
13424
- img.annotate(draw2, 0, 0, 0, 0, wrapped_message) do
13425
- draw2.gravity = Magick::CenterGravity
13426
- draw2.pointsize = adjusted_size
13427
- draw2.fill = color2
13428
- draw2.stroke = 'none'
13429
- draw2.font = font2
13368
+ puts '이미지 폰트 불러오기 오류 재시도...'
13369
+ sleep(3)
13370
+ retry
13430
13371
  end
13431
-
13432
- img.write('./image/memory.png')
13433
-
13434
- rescue => e
13435
- puts "이미지 폰트 불러오기 오류 재시도... (#{e.message})"
13436
- sleep(3)
13437
- retry
13438
- end
13439
13372
  end
13440
13373
 
13441
-
13442
-
13443
13374
  def border()
13444
13375
  color = File.open('./color.ini', 'r',:encoding => 'utf-8').read().split("\n")
13445
13376
  img = Magick::Image.read('./image/memory.png').first
@@ -13465,69 +13396,40 @@ class Wordpress
13465
13396
  else
13466
13397
  auto_image()
13467
13398
  end
13468
-
13469
- # '원본'을 포함한 이미지 크기 옵션 추가
13470
- image_size = [480, 740, 650, 550, 480, 'original']
13399
+
13400
+ image_size = [480,740,650,550,480]
13471
13401
  size = 0
13472
-
13473
- for n in 0..5 # 0부터 5까지 반복, '원본' 옵션까지 포함
13402
+ for n in 0..4
13474
13403
  if @data['image_size'][n].checked?
13475
- if n == 5 # '원본'이 선택되었을 경우
13476
- size = 'original'
13477
- elsif n == 0
13478
- size = image_size.sample # 랜덤 선택
13404
+ if n == 0
13405
+ size = image_size.sample
13479
13406
  else
13480
13407
  size = image_size[n]
13481
13408
  end
13482
13409
  end
13483
13410
  end
13484
-
13485
- # '원본'이 선택되지 않았다면 기본 값 설정
13486
13411
  if size == 0
13487
13412
  size = 480
13488
13413
  end
13489
-
13490
- change_image_size(size) # 크기 변경 함수 호출
13491
13414
 
13415
+ change_image_size(size)
13492
13416
 
13493
13417
  if @data['이미지설정']['필터사용'].checked?
13494
13418
  image_filter()
13495
13419
  end
13496
13420
 
13421
+ insert_image_text1 = ''
13422
+ insert_image_text2 = ''
13497
13423
  if @data['이미지설정']['글자삽입1'].checked?
13498
- if @data['이미지설정']['이미지글자1'].length == 0
13499
- image_text_path1 = ''
13500
- else
13501
- if @data['이미지설정']['글자랜덤'].checked?
13502
- image_text_path1 = @data['이미지설정']['이미지글자1'].sample
13503
- else
13504
- image_text_path1 = @data['이미지설정']['이미지글자1'][@image_text_soon1]
13505
- @image_text_soon1 += 1
13506
- if @image_text_soon1 > @data['이미지설정']['이미지글자1'].length - 1
13507
- @image_text_soon1 = 0
13508
- end
13509
- end
13510
- end
13424
+ insert_image_text1 = @data['이미지설정']['이미지글자1'].sample
13511
13425
  end
13512
13426
 
13513
13427
  if @data['이미지설정']['글자삽입2'].checked?
13514
- if @data['이미지설정']['이미지글자2'].length == 0
13515
- image_text_path2 = ''
13516
- else
13517
- if @data['이미지설정']['글자랜덤'].checked?
13518
- image_text_path2 = @data['이미지설정']['이미지글자2'].sample
13519
- else
13520
- image_text_path2 = @data['이미지설정']['이미지글자2'][@image_text_soon2]
13521
- @image_text_soon2 += 1
13522
- if @image_text_soon2 > @data['이미지설정']['이미지글자2'].length - 1
13523
- @image_text_soon2 = 0
13524
- end
13525
- end
13526
- end
13428
+ insert_image_text2 = @data['이미지설정']['이미지글자2'].sample
13527
13429
  end
13528
-
13430
+
13529
13431
  if @data['이미지설정']['글자삽입1'].checked? or @data['이미지설정']['글자삽입2'].checked?
13530
- image_text(image_text_path1, image_text_path2)
13432
+ image_text(insert_image_text1, insert_image_text2)
13531
13433
  end
13532
13434
 
13533
13435
  if @data['이미지설정']['테두리사용'].checked?
@@ -15383,13 +15285,12 @@ class Wordpress
15383
15285
  horizontal_box{
15384
15286
  stretchy false
15385
15287
  @data['image_size'][0] = checkbox('랜덤 px'){
15386
- on_toggled{
15288
+ on_toggled{
15387
15289
  if @data['image_size'][0].checked?
15388
15290
  @data['image_size'][1].checked = false
15389
15291
  @data['image_size'][2].checked = false
15390
15292
  @data['image_size'][3].checked = false
15391
15293
  @data['image_size'][4].checked = false
15392
- @data['image_size'][5].checked = false
15393
15294
  end
15394
15295
  }
15395
15296
  }
@@ -15400,7 +15301,6 @@ class Wordpress
15400
15301
  @data['image_size'][2].checked = false
15401
15302
  @data['image_size'][3].checked = false
15402
15303
  @data['image_size'][4].checked = false
15403
- @data['image_size'][5].checked = false
15404
15304
  end
15405
15305
  }
15406
15306
  }
@@ -15411,7 +15311,6 @@ class Wordpress
15411
15311
  @data['image_size'][0].checked = false
15412
15312
  @data['image_size'][3].checked = false
15413
15313
  @data['image_size'][4].checked = false
15414
- @data['image_size'][5].checked = false
15415
15314
  end
15416
15315
  }
15417
15316
  }
@@ -15422,7 +15321,6 @@ class Wordpress
15422
15321
  @data['image_size'][2].checked = false
15423
15322
  @data['image_size'][0].checked = false
15424
15323
  @data['image_size'][4].checked = false
15425
- @data['image_size'][5].checked = false
15426
15324
  end
15427
15325
  }
15428
15326
  }
@@ -15433,21 +15331,10 @@ class Wordpress
15433
15331
  @data['image_size'][2].checked = false
15434
15332
  @data['image_size'][3].checked = false
15435
15333
  @data['image_size'][0].checked = false
15436
- @data['image_size'][5].checked = false
15437
- end
15438
- }
15439
- }
15440
- @data['image_size'][5] = checkbox('원본 px'){
15441
- on_toggled{
15442
- if @data['image_size'][5].checked?
15443
- @data['image_size'][1].checked = false
15444
- @data['image_size'][2].checked = false
15445
- @data['image_size'][3].checked = false
15446
- @data['image_size'][0].checked = false
15447
- @data['image_size'][4].checked = false
15448
15334
  end
15449
15335
  }
15450
15336
  }
15337
+
15451
15338
  }
15452
15339
  }
15453
15340
  }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posting_zon
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.111.011
4
+ version: 3.111.013
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-30 00:00:00.000000000 Z
10
+ date: 2025-07-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: posting app
13
13
  email: mymin26@naver.com