cafe_basics_duo 0.0.2 → 0.0.7

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/cafe_basics_duo.rb +543 -378
  3. metadata +2 -2
@@ -17,27 +17,29 @@ require 'cgi'
17
17
  require 'digest'
18
18
  require 'auto_click'
19
19
  require 'rainbow/refinement'
20
- require 'watir'
21
20
  include AutoClickMethods
22
21
  using Rainbow
23
-
22
+ include Glimmer
24
23
 
25
24
  class Chat
25
+
26
26
  def initialize(api_key)
27
27
  @api_key = api_key
28
28
  end
29
29
 
30
30
  def message2(keyword)
31
+ puts'[GPT] 키워드 기반 글을 생성 중입니다.......'.yellow
31
32
  url = 'https://api.openai.com/v1/chat/completions'
32
33
  h = {
33
34
  'Content-Type' => 'application/json',
34
35
  'Authorization' => 'Bearer ' + @api_key
35
36
  }
36
37
  d = {
37
- 'model' => 'gpt-3.5-turbo',
38
+ #'model' => 'gpt-3.5-turbo',
39
+ 'model' => 'gpt-4',
38
40
  'messages' => [{
39
41
  "role" => "assistant",
40
- "content" => keyword.to_s+" 소개하는 글만들어줘"
42
+ "content" => keyword.to_s+" 소개하는 글을 1500자에서 2500자 사이로 만들어줘"
41
43
  }]
42
44
  }
43
45
  answer = ''
@@ -68,10 +70,11 @@ class Chat
68
70
  'Authorization' => 'Bearer ' + @api_key
69
71
  }
70
72
  d = {
71
- 'model' => 'gpt-3.5-turbo',
73
+ #'model' => 'gpt-3.5-turbo',
74
+ 'model' => 'gpt-4',
72
75
  'messages' => [{
73
76
  "role" => "assistant",
74
- "content" => keyword.to_s+" 소개하는 글만들어줘"
77
+ "content" => keyword.to_s+" 관련된 글을 1500자에서 2500자 사이로 만들어줘"
75
78
  }]
76
79
  }
77
80
  answer = ''
@@ -102,23 +105,137 @@ class Chat
102
105
  end
103
106
  end
104
107
 
108
+ class Chat_title
109
+
110
+ def initialize(api_key)
111
+ @api_key = api_key
112
+ end
113
+
114
+ def message(title)
115
+ puts'[GPT] 유사 제목을 생성 중입니다.......'.yellow
116
+ url = 'https://api.openai.com/v1/chat/completions'
117
+ headers = {
118
+ 'Content-Type' => 'application/json',
119
+ 'Authorization' => 'Bearer ' + @api_key
120
+ }
121
+ data = {
122
+ 'model' => 'gpt-4',
123
+ 'messages' => [{
124
+ "role" => "system",
125
+ "content" => "너는 매우 친절하고 성의 있게 답변하는 AI 어시스턴트야."
126
+ },
127
+ {
128
+ "role" => "user",
129
+ "content" => "#{title}\n위 문장을 비슷한 길이로 ChatGPT의 멘트는 빼고 표현을 더 추가해서 하나만 만들어줘."
130
+ }]
131
+ }
132
+
133
+ begin
134
+ req = HTTP.headers(headers).post(url, json: data)
135
+ puts "HTTP Status: #{req.status}" # 상태 코드 확인
136
+ response = JSON.parse(req.body.to_s)
137
+ puts "API Response: #{response}" # 전체 응답 출력
138
+
139
+ if req.status == 429
140
+ return "API 요청 제한을 초과했습니다. 플랜 및 할당량을 확인하세요."
141
+ end
142
+
143
+ # 응답 데이터에서 안전하게 값 추출
144
+ answer = response.dig('choices', 0, 'message', 'content')
145
+ answer ||= (title) # 응답이 없을 경우 기본 메시지 설정
146
+ rescue => e
147
+ puts "Error: #{e.message}"
148
+ answer = "오류가 발생했습니다."
149
+ end
150
+
151
+ puts 'API return ==> '
152
+ puts answer
153
+ answer
154
+ end
155
+ end
156
+
157
+ class Chat_content
158
+
159
+ def initialize(api_key)
160
+ @api_key = api_key
161
+ end
162
+
163
+ def message(content)
164
+ puts'[GPT] 유사 내용을 생성 중입니다! 조금만 기다려주세요.......'.yellow
165
+ url = 'https://api.openai.com/v1/chat/completions'
166
+ headers = {
167
+ 'Content-Type' => 'application/json',
168
+ 'Authorization' => 'Bearer ' + @api_key
169
+ }
170
+ data = {
171
+ 'model' => 'gpt-4',
172
+ 'messages' => [{
173
+ "role" => "system",
174
+ "content" => "너는 매우 친절하고 성의 있게 답변하는 AI 어시스턴트야."
175
+ },
176
+ {
177
+ "role" => "user",
178
+ "content" => "#{content}\nChatGPT의 멘트는 빼고 위 전체적인 내용의 형식을 똑같이 표현을 더 추가하고 유사어로 변경하여 하나 만들어줘! 전화번호,연락처,가격,홈페이지안내 ,상담안내 관련 문구는 유지해야해"
179
+ }]
180
+ }
181
+
182
+ begin
183
+ req = HTTP.headers(headers).post(url, json: data)
184
+ puts "HTTP Status: #{req.status}" # 상태 코드 확인
185
+ response = JSON.parse(req.body.to_s)
186
+ puts "API Response: #{response}" # 전체 응답 출력
187
+
188
+ if req.status == 429
189
+ return "API 요청 제한을 초과했습니다. 플랜 및 할당량을 확인하세요."
190
+ end
191
+
192
+ # 응답 데이터에서 안전하게 값 추출
193
+ answer = response.dig('choices', 0, 'message', 'content')
194
+ answer ||= (content) # 응답이 없을 경우 기본 메시지 설정
195
+ rescue => e
196
+ puts "Error: #{e.message}"
197
+ answer = "오류가 발생했습니다."
198
+ end
199
+
200
+ puts 'API return ==> '
201
+ puts answer
202
+ answer
203
+ end
204
+ end
205
+
206
+
207
+ #############################################gpt############################################
208
+
105
209
  class Naver
106
210
  def initialize
107
211
  @seed = 1
108
- @cookie = ''
109
212
  end
213
+ def chrome_setup(user_id)
214
+ naver_cookie_dir = "C:/naver_cookie"
215
+ FileUtils.mkdir_p(naver_cookie_dir) unless File.exist?(naver_cookie_dir)
216
+ system(%{"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" https://naver.com/ --remote-debugging-port=9222 --user-data-dir=C:/naver_cookie/#{user_id}})
110
217
 
111
- def chrome_start(proxy)
218
+ end
219
+ def chrome_start(proxy, user_id)
220
+ naver_cookie_dir = "C:/naver_cookie"
221
+ FileUtils.mkdir_p(naver_cookie_dir) unless File.exist?(naver_cookie_dir)
112
222
  if proxy == ''
113
223
  begin
114
224
  Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
115
- @driver = Selenium::WebDriver.for :chrome
225
+ options = Selenium::WebDriver::Chrome::Options.new
226
+ options.page_load_strategy = :normal
227
+ options.timeouts = {page_load: 20_000}
228
+ options.page_load_strategy = 'none'
229
+ options.add_argument('--remote-debugging-port=9222')
230
+ options.add_argument('user-data-dir=C:/naver_cookie/' + user_id)
231
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
116
232
  rescue
117
- @driver = Selenium::WebDriver.for :chrome
233
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
118
234
  end
119
235
  else
120
236
  begin
121
237
  Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
238
+ options = Selenium::WebDriver::Chrome::Options.new
122
239
  # profile = Selenium::WebDriver::Chrome::Profile.new
123
240
  # profile['network.proxy.type'] = 1
124
241
  # profile['network.proxy.http'] = proxy.split(':')[0]
@@ -127,177 +244,114 @@ class Naver
127
244
  # options.profile = profile
128
245
  options = Selenium::WebDriver::Chrome::Options.new
129
246
  options.add_argument '--proxy-server='+proxy.to_s.force_encoding('utf-8').to_s
130
- @driver = Selenium::WebDriver.for(:chrome, options: options)
247
+ options.page_load_strategy = :normal
248
+ options.timeouts = {page_load: 20_000}
249
+ options.page_load_strategy = 'none'
250
+ options.add_argument('--remote-debugging-port=9222')
251
+ options.add_argument('user-data-dir=C:/naver_cookie/' + user_id)
252
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
131
253
  rescue => e
132
254
  puts e
133
255
  puts 'proxy error...'
134
256
  begin
135
257
  Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
136
- @driver = Selenium::WebDriver.for :chrome
258
+ options = Selenium::WebDriver::Chrome::Options.new
259
+ options.page_load_strategy = :normal
260
+ options.timeouts = {page_load: 20_000}
261
+ options.page_load_strategy = 'none'
262
+ options.add_argument('--remote-debugging-port=9222')
263
+ options.add_argument('user-data-dir=C:/naver_cookie/' + user_id)
264
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
137
265
  rescue
138
- @driver = Selenium::WebDriver.for :chrome
266
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
139
267
  end
140
268
  end
141
269
  end
142
270
  end
143
271
 
272
+
273
+
144
274
  def login(user_id, user_pw, proxy)
145
275
  @user_id = user_id
146
276
  @user_id11 = user_id
147
- chrome_start(proxy)
148
- @driver.get('https://www.naver.com')
149
- sleep(1)
150
- user_cookie_file = Array.new
151
- begin
152
- Dir.entries('./cookie').each do |i|
153
- if i == '.' or i == '..'
277
+ current_dir = File.dirname(__FILE__)
278
+ naver_cookie_dir = "C:/naver_cookie"
279
+ FileUtils.mkdir_p(naver_cookie_dir) unless File.exist?(naver_cookie_dir)
154
280
 
155
- else
156
- user_cookie_file << i
157
- end
281
+
282
+
283
+ unless File.exist?("C:/naver_cookie/" + user_id)
284
+ driverfile_src = File.join(current_dir, 'driverfile')
285
+ if Dir.exist?(driverfile_src)
286
+ FileUtils.cp_r(driverfile_src, "C:/naver_cookie/" + user_id)
287
+
158
288
  end
159
- rescue
289
+ end
160
290
 
161
- end
291
+ # 새로운 스레드 생성 및 실행
292
+ Thread.new { chrome_setup(user_id) }
293
+ sleep(3)
162
294
 
163
- @cookie4 = Hash.new
164
- if user_cookie_file.include?(user_id+'.txt')
165
- f = File.open('./cookie/'+user_id+'.txt', 'r')
166
- @cookie4 = JSON.parse(f.read())
167
- f.close
168
- end
169
295
 
170
- begin
171
- @cookie4.each do |i|
172
- p i
173
- @driver.manage.add_cookie(name: i['name'], value: i['value'], same_site: i['same_site'], domain: i['domain'], path: i['path'])
174
- end
175
- rescue
296
+ chrome_start(proxy, user_id)
297
+ @driver.get('https://www.naver.com')
298
+ puts'[Step.01] 계정 로그인 및 세션 확인.......'.yellow
299
+
176
300
 
177
- end
178
301
  sleep(1)
179
- @driver.get('https://www.naver.com')
302
+
180
303
  begin
181
- # begin
182
- # @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="minime"]'))
183
- # rescue
184
-
185
- # end
186
- @driver.find_element(:xpath, '//*[@id="account"]/div/a').click
304
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
305
+ #요소가 나타날 때까지 3초 동안 기다립니다.
306
+ wait.until { @driver.find_element(:xpath, '//*[@class="MyView-module__link_login___HpHMW"]') }
307
+ sleep(1.5)
308
+ @driver.find_element(:xpath, '//*[@class="MyView-module__link_login___HpHMW"]').click
187
309
  check_cookie_login = 0
310
+ sleep(1)
188
311
  rescue
189
312
  check_cookie_login = 1
313
+ puts'[Step.02] 계정 세션 확인!! 로그인 skip.......'.yellow
314
+ sleep(2.5)
190
315
  end
191
316
 
192
317
  if check_cookie_login == 0
318
+ puts'[Step.02] 계정 세션이 없거나 기간 만료로 인해 로그인 시도.......'.yellow
193
319
  # @driver.find_element(:xpath, '//*[@id="right-content-area"]/div[1]/div[1]/div/a').click
194
320
  sleep(3)
195
- @driver.find_element(:xpath, '//*[@id="login_keep_wrap"]/div[2]/span/label').click
196
- sleep(2)
321
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
322
+ #요소가 나타날 때까지 3초 동안 기다립니다.
323
+ wait.until { @driver.find_element(:xpath, '//*[@for="switch"]') }
324
+ sleep(1.5)
325
+ @driver.find_element(:xpath, '//*[@id="login_keep_wrap"]/div[1]/label').click
326
+ sleep(1.5)
197
327
  @driver.find_element(:xpath, '//*[@id="id"]').click
198
328
  Clipboard.copy(user_id)
199
329
  @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
200
- sleep(3)
330
+ sleep(1.5)
201
331
  @driver.find_element(:xpath, '//*[@id="pw"]').click
202
332
  Clipboard.copy(user_pw)
203
333
  @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
204
- sleep(3)
334
+ sleep(1.5)
205
335
  @driver.find_element(:xpath, '//*[@id="log.login"]').click
206
- sleep(3)
336
+ sleep(2.5)
337
+
207
338
  else
208
339
  # @driver.switch_to.default_content
209
340
  end
210
341
 
211
- @cookie = ''
212
- cookie2 = Array.new
213
- @driver.manage.all_cookies.each do |i|
214
- puts i
215
- @cookie += i[:name]+'='+i[:value]+'; '
216
- cookie2 << i
217
- end
218
-
219
- File.open('./cookie/'+user_id+'.txt', 'w') do |ff|
220
- ff.write(cookie2.to_json)
221
- end
222
-
223
-
224
-
225
- sleep(2)
226
342
  begin
227
- @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="my-iframe"]'))
228
- puts @driver.find_element(:xpath, '/html/body/div/div/div[1]/div[1]/a[1]').text
229
- @driver.find_element(:xpath, '//*[@id="account"]/div[2]/div/div/ul/li[3]/a/span').click
230
- return 1
343
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
344
+ #요소가 나타날 때까지 3초 동안 기다립니다.
345
+ wait.until { @driver.find_element(:xpath, '//*[@class="MyView-module__btn_logout___bsTOJ"]') }
346
+
231
347
  rescue => e
348
+ puts '-[√] 로그인 실패!!.......'.red
232
349
  puts e
233
- return 1
234
- end
235
- # if @driver.current_url.include?('viewPhoneInfo')
236
- # #@driver.get('https://blog.naver.com/'+user_id)
237
- # #@driver.get('https://blog.naver.com/MyBlog.naver')
238
- # sleep(1)
239
- # @driver.find_element(:xpath, '//*[@id="account"]/div[2]/div/div/ul/li[3]/a').click
240
- # sleep(1)
241
- # @driver.find_element(:xpath, '//*[@id="account"]/div[3]/div[2]/div[1]/a[2]').click
242
- # sleep(1)
243
- # @driver.switch_to.window(@driver.window_handles[1])
244
- # @user_id = @driver.current_url.split('/')[-1]
245
- # @url = 'https://blog.naver.com/'+@user_id
246
- # @driver.close
247
- # @driver.switch_to.window(@driver.window_handles[0])
248
- # return 1
249
- # else
250
- # begin
251
- # sleep(2)
252
- # # @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="my-iframe"]'))
253
- # # puts @driver.find_element(:xpath, '/html/body/div/div/div[1]/div[1]/a[1]').text
254
- # # @driver.find_element(:xpath, '//*[@id="account"]/div[2]/div/div/ul/li[3]/a/span').click
255
- # # sleep(1)
256
- # # @driver.find_element(:xpath, '//*[@id="account"]/div[2]/div/div/ul/li[3]/a/span')
257
- # #@driver.get('https://blog.naver.com/'+user_id)
258
- # # @driver.get('https://blog.naver.com/MyBlog.naver')
259
- # @driver.find_element(:xpath, '//*[@id="account"]/div[2]/div/div/ul/li[3]/a').click
260
- # sleep(1)
261
- # @driver.find_element(:xpath, '//*[@id="account"]/div[3]/div[2]/div[1]/a[2]').click
262
- # sleep(1)
263
- # sleep(1)
264
- # @driver.switch_to.window(@driver.window_handles[1])
265
- # @user_id = @driver.current_url.split('/')[-1]
266
- # @url = 'https://blog.naver.com/'+@user_id
267
- # @driver.close
268
- # @driver.switch_to.window(@driver.window_handles[0])
269
- # return 1
270
- # rescue => e
271
- # puts e
272
- # @driver.close
273
- # return 0
274
- # end
275
- # end
276
- end
277
-
278
- def driver_close
279
- begin
280
350
  @driver.close
281
- rescue
282
-
351
+ return 0
283
352
  end
284
353
  end
285
354
 
286
- def title_action(text)
287
- @driver.find_element(:xpath, '/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[1]/div[2]/section/article/div[1]/div[1]/div').click
288
- Clipboard.copy(text)
289
- @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
290
- end
291
-
292
- def update_test
293
- @driver.get('https://blog.naver.com/'+@user_id+'?Redirect=Write')
294
- sleep(1)
295
- @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]'))
296
-
297
- title_action('제목 test')
298
-
299
- end
300
-
301
355
  def create_id
302
356
  @seed += 1
303
357
  hash = Digest::SHA256.hexdigest((Time.now.to_i+@seed).to_s).to_s
@@ -623,52 +677,10 @@ class Naver
623
677
  noko = Nokogiri::HTML(content, nil, Encoding::UTF_8.to_s)
624
678
  toomung = 0
625
679
  h = Hash.new
626
- # h[:authority] = 'blog.naver.com'
627
- # h[:method] = 'POST'
628
- # h[:path] = '/RabbitWrite.naver'
629
- # h[:scheme] = 'https'
630
- # h['accept'] = 'application/json, text/plain, */*'
631
- # h['accept-encoding'] = 'gzip, deflate, br'
632
- # h['accept-language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
633
- # h['content-type'] = 'application/x-www-form-urlencoded'
634
- # h['cookie'] = @cookie
635
- # h['origin'] = 'https://blog.naver.com'
636
- # h['referer'] = 'https://blog.naver.com/'+@user_id+'/postwrite?categoryNo=1'
637
- # h['sec-ch-ua'] = '"Chromium";v="106", "Google Chrome";v="106", "Not;A=Brand";v="99"'
638
- # h['sec-ch-ua-mobile'] = '?0'
639
- # h['sec-ch-ua-platform'] = '"Windows"'
640
- # h['sec-fetch-dest'] = 'empty'
641
- # h['sec-fetch-mode'] = 'cors'
642
- # h['sec-fetch-site'] = 'same-origin'
643
- # h['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
680
+
644
681
 
645
682
  data = Hash.new
646
- # data['blogId'] = @user_id
647
- # data['documentModel'] = Hash.new
648
- # data['documentModel']['documentId'] = ''
649
- # data['documentModel']['document'] = Hash.new
650
- # data['documentModel']['document']['version'] = '2.6.0'
651
- # data['documentModel']['document']['theme'] = 'default'
652
- # data['documentModel']['document']['language'] = 'ko-KR'
653
- # data['documentModel']['document']['components'] = Array.new
654
- # data['documentModel']['document']['components'][0] = {
655
- # 'id' => create_id(),
656
- # 'layout' => 'default',
657
- # 'title' => [
658
- # {
659
- # 'id' => create_id(),
660
- # 'nodes' => [{
661
- # 'id' => create_id(),
662
- # 'value' => title,
663
- # '@ctype' => 'textNode'
664
- # }],
665
- # '@ctype' => 'paragraph'
666
- # }
667
- # ],
668
- # 'subTitle' => nil,
669
- # 'align' => 'left',
670
- # '@ctype' => 'documentTitle'
671
- # }
683
+
672
684
 
673
685
  check_position = 1
674
686
  noko.css('p').each do |i|
@@ -718,21 +730,7 @@ class Naver
718
730
  sleep(3)
719
731
  key_stroke('enter')
720
732
  sleep(3)
721
- # @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
722
- # puts path = CGI.unescape(path)
723
- # image_data = image_update(path)
724
- # components_value = Hash.new
725
- # components_value['id'] = create_id()
726
- # components_value['layout'] = 'default'
727
- # begin
728
- # if i.to_s.split('text-align: ')[1].split(';')[0] == 'center'
729
- # components_value['align'] = 'center'
730
- # elsif i.to_s.split('text-align: ')[1].split(';')[0] == 'right'
731
- # components_value['align'] = 'right'
732
- # else
733
-
734
- # end
735
- # rescue
733
+
736
734
 
737
735
  if i2.to_s.split('href="')[1] != nil
738
736
  href2 = i2.to_s.split('href="')[1].split('"')[0]
@@ -748,30 +746,7 @@ class Naver
748
746
  #key_stroke('enter')
749
747
  sleep(1)
750
748
  end
751
- # end
752
- # components_value['src'] = 'https://blogfiles.pstatic.net'+image_data['item']['url']+'?type=w1'
753
- # components_value['internalResource'] = true
754
- # components_value['represent'] = true
755
- # components_value['path'] = image_data['item']['url']
756
- # components_value['domain'] = "https://blogfiles.pstatic.net"
757
- # components_value['fileSize'] = image_data['item']['fileSize'].to_i
758
- # components_value['width'] = image_data['item']['width'].to_i
759
- # components_value['widthPercentage'] = 0
760
- # components_value['height'] = image_data['item']['height'].to_i
761
- # components_value['fileName'] = image_data['item']['fileName'].to_i
762
- # components_value['caption'] = nil
763
- # if i2.to_s.split('href="')[1] != nil
764
- # components_value['link'] = CGI.unescape(i2.to_s.split('href="')[1].split('"')[0])
765
- # end
766
- # components_value['format'] = 'normal'
767
- # components_value['displayFormat'] = 'normal'
768
- # components_value['imageLoaded'] = true
769
- # components_value['contentMode'] = 'fit'
770
- # components_value['origin'] = {
771
- # 'srcFrom' => 'local',
772
- # '@ctype' => 'imageOrigin'
773
- # }
774
- # components_value['@ctype'] = 'image'
749
+
775
750
  elsif i2.to_s.include?('<video')
776
751
  path = i2.to_s.split('src="')[1].split('"')[0]
777
752
  path = URI.decode_www_form(path)[0][0]
@@ -787,7 +762,14 @@ class Naver
787
762
  key_up('ctrl')
788
763
  sleep(3)
789
764
  key_stroke('enter')
790
- sleep(3)
765
+ sleep(2)
766
+
767
+ @driver.find_element(:xpath, '//*[@id="nvu_inp_box_title"]').send_keys(title)
768
+ sleep(1)
769
+ @driver.find_element(:xpath, '//*[@id="nvu_inp_box_description"]').send_keys(title)
770
+ sleep(1)
771
+ @driver.find_element(:xpath, '//*[@id="nvu_inp_box_tag"]').send_keys(title)
772
+ sleep(1)
791
773
 
792
774
  for n in 1..10
793
775
  puts @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/div[1]/ul/li/div/button[1]/div[2]/em').text
@@ -796,10 +778,15 @@ class Naver
796
778
  end
797
779
  sleep(10)
798
780
  end
799
- @driver.find_element(:xpath, '//*[@id="nvu_inp_box_title"]').send_keys(title)
800
- sleep(5)
801
781
  @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[3]/button/span').click
802
782
  sleep(3)
783
+ @driver.action.key_down(:up).key_up(:up).perform #x탭
784
+ sleep(1)
785
+ @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
786
+ @driver.action.send_keys(title).perform
787
+ sleep(1)
788
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
789
+ sleep(1)
803
790
 
804
791
  elsif i2.to_s.include?('<inyonggoo')
805
792
  if i2.text == ''
@@ -1694,107 +1681,19 @@ class Wordpress
1694
1681
 
1695
1682
 
1696
1683
 
1697
- def chrome_start(url, user_id, user_pw)
1698
- @url = url
1699
- @user_id = user_id
1700
- @user_pw = user_pw
1701
- begin
1702
- Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1703
- @driver = Selenium::WebDriver.for :chrome
1704
- rescue
1705
- @driver = Selenium::WebDriver.for :chrome
1706
- end
1707
- end
1684
+ #def chrome_start(url, user_id, user_pw)
1685
+ # @url = url
1686
+ # @user_id = user_id
1687
+ # @user_pw = user_pw
1688
+ # begin
1689
+ # Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1690
+ # @driver = Selenium::WebDriver.for :chrome
1691
+ # rescue
1692
+ # @driver = Selenium::WebDriver.for :chrome
1693
+ # end
1694
+ #end
1708
1695
 
1709
- def login
1710
- @driver.get(@url+'/wp-admin')
1711
- @driver.find_element(:xpath , '//*[@id="user_login"]').send_keys(@user_id)
1712
- @driver.find_element(:xpath , '//*[@id="user_pass"]').send_keys(@user_pw)
1713
- @driver.find_element(:xpath , '//*[@id="wp-submit"]').click
1714
- @cookie = Hash.new
1715
- @driver.manage.all_cookies.each do |i|
1716
- @cookie[i[:name]] = i[:value]
1717
- end
1718
- sleep(2)
1719
- begin
1720
- puts @driver.find_element(:xpath , '/html/body/div/div/div[1]/div[1]/div/div[1]/a[1]/span').text
1721
- @driver.close
1722
- return 1
1723
- rescue => e
1724
- puts e
1725
- @driver.close
1726
- return 0
1727
- end
1728
- end
1729
-
1730
- def update
1731
- http = HTTP.cookies(@cookie).get(@url+'/wp-admin/post-new.php')
1732
- noko = Nokogiri::HTML(http.to_s)
1733
- @wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
1734
- @data2 = Hash.new
1735
- @data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]')[0]['value']
1736
- @data2['_wp_http_referer'] = '/wp-admin/post-new.php'
1737
- @data2['user_ID'] = '1'
1738
- @data2['action'] = 'editpost'
1739
- @data2['originalaction'] = 'editpost'
1740
- @data2['post_author'] = '1'
1741
- @data2['post_type'] = 'post'
1742
- @data2['original_post_status'] = 'auto-draft'
1743
- @data2['referredby'] = @url+'/wp-admin/update-core.php'
1744
- @data2['_wp_original_http_referer'] = @url+'/wp-admin/update-core.php'
1745
- @data2['auto_draft'] = nil
1746
- @data2['post_ID'] = noko.xpath('//*[@id="post_ID"]')[0]['value']
1747
- @data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]')[0]['value']
1748
- @data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]')[0]['value']
1749
- @data2['post_title'] = 'title3'
1750
- @data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]')[0]['value']
1751
- @data2['content'] = 'content3'
1752
- @data2['wp-preview'] = nil
1753
- @data2['hidden_post_status'] = 'draft'
1754
- @data2['post_status'] = 'draft'
1755
- @data2['hidden_post_password'] = nil
1756
- @data2['hidden_post_visibility'] = 'public'
1757
- @data2['visibility'] = 'post'
1758
- @data2['post_password'] = nil
1759
- @data2['mm'] = '10'
1760
- @data2['jj'] = '24'
1761
- @data2['aa'] = '2022'
1762
- @data2['hh'] = '02'
1763
- @data2['mn'] = '41'
1764
- @data2['ss'] = '32'
1765
- @data2['hidden_mm'] = '10'
1766
- @data2['cur_mm'] = '10'
1767
- @data2['hidden_jj'] = '24'
1768
- @data2['cur_jj'] = '24'
1769
- @data2['hidden_aa'] = '2022'
1770
- @data2['cur_aa'] = '2022'
1771
- @data2['hidden_hh'] = '02'
1772
- @data2['cur_hh'] = '02'
1773
- @data2['hidden_mn'] = '41'
1774
- @data2['cur_mn'] = '41'
1775
- @data2['original_publish'] = '공개'
1776
- @data2['publish'] = '공개'
1777
- @data2['post_format'] = '0'
1778
- @data2['post_category[]'] = '0'
1779
- @data2['newcategory'] = '새 카테고리 이름'
1780
- @data2['newcategory_parent'] = -1
1781
- @data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]')[0]['value']
1782
- @data2['tax_input[post_tag]'] = nil
1783
- @data2['newtag[post_tag]'] = nil
1784
- @data2['_thumbnail_id'] = -1
1785
- @data2['excerpt'] = nil
1786
- @data2['trackback_url'] = nil
1787
- @data2['metakeyinput'] = nil
1788
- @data2['metavalue'] = nil
1789
- @data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]')[0]['value']
1790
- @data2['advanced_view'] = '1'
1791
- @data2['comment_status'] = 'open'
1792
- @data2['ping_status'] = 'open'
1793
- @data2['post_name'] = nil
1794
- @data2['post_author_override'] = '1'
1795
- #result_http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => @data)
1796
- return @data2
1797
- end
1696
+
1798
1697
 
1799
1698
  def auto_image
1800
1699
  begin
@@ -2023,8 +1922,7 @@ class Wordpress
2023
1922
  @inumber2 = 0
2024
1923
  @video = Array.new
2025
1924
 
2026
- price_hash = Hash.new
2027
-
1925
+
2028
1926
  while true
2029
1927
  for n in 0..@data['table'].length-1
2030
1928
  @data['table'][n][10] = 0
@@ -2117,6 +2015,13 @@ class Wordpress
2117
2015
  end
2118
2016
  end
2119
2017
  end
2018
+
2019
+ if @data['포스트설정']['gpt제목'].checked?
2020
+ chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2021
+ gpt_text1 = chat.message(title)
2022
+ title = gpt_text1.to_s
2023
+ end
2024
+
2120
2025
  @data['table'][index][-1] = 5
2121
2026
  @data['table'] << []
2122
2027
  @data['table'].pop
@@ -2154,6 +2059,25 @@ class Wordpress
2154
2059
  end
2155
2060
  end
2156
2061
  end
2062
+
2063
+
2064
+ if @data['포스트설정']['gpt내용'].checked?
2065
+ api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
2066
+ #key_change = @data['포스트설정']['특정단어키워드로변경값'].text.to_s.force_encoding('utf-8')
2067
+ #imotcon_change = @data['포스트설정']['스티커로변경단어'].text.to_s.force_encoding('utf-8')
2068
+ #template_change = @data['포스트설정']['내템플릿변경단어'].text.to_s.force_encoding('utf-8')
2069
+ #ttdanar_change = @data['포스트설정']['단어링크적용단어'].text.to_s.force_encoding('utf-8')
2070
+ #sajine_change = @data['포스트설정']['단어사진으로변경단어'].text.to_s.force_encoding('utf-8')
2071
+ #mov_change = @data['포스트설정']['영상으로변경단어'].text.to_s.force_encoding('utf-8')
2072
+ #map_change = @data['포스트설정']['지도로변경단어'].text.to_s.force_encoding('utf-8')
2073
+ #inyong9_change = @data['포스트설정']['인용구변경단어'].text.to_s.force_encoding('utf-8')
2074
+
2075
+
2076
+ chat = Chat_content.new(api_key)
2077
+ gpt_text3 = chat.message(content)
2078
+ content = gpt_text3.to_s
2079
+ end
2080
+
2157
2081
  content_tag = content.split('@##@')[1]
2158
2082
  content = content.split('@##@')[0]
2159
2083
  @data['table'][index][-1] = 15
@@ -2352,7 +2276,7 @@ class Wordpress
2352
2276
  @data['table'][index][-1] = 50
2353
2277
  @data['table'] << []
2354
2278
  @data['table'].pop
2355
- if @data['포스트설정']['gpt'].checked?
2279
+ if @data['포스트설정']['gpt키워드'].checked?
2356
2280
  chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2357
2281
  gpt_text = chat.message(keyword)
2358
2282
  content = content + "\n(자동생성글)\n" + gpt_text
@@ -2373,7 +2297,7 @@ class Wordpress
2373
2297
  joongbok_check = 0
2374
2298
  counter10 = 0
2375
2299
  while joongbok_check == 0
2376
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2300
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2377
2301
  content22 = content.split("(자동생성글)")[1].split("\n")
2378
2302
  else
2379
2303
  content22 = content.split("\n")
@@ -2397,12 +2321,12 @@ class Wordpress
2397
2321
  content2 = content.split("\n")
2398
2322
  end
2399
2323
 
2400
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2324
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2401
2325
  content2 = content.split("(자동생성글)")[1].split("\n")
2402
2326
  position.pop
2403
2327
  end
2404
2328
 
2405
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2329
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2406
2330
  content2 = content.split("\n")
2407
2331
  end
2408
2332
 
@@ -2448,7 +2372,7 @@ class Wordpress
2448
2372
  content = content3.join("\n")
2449
2373
  end
2450
2374
 
2451
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2375
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2452
2376
  content2.each_with_index do |con, index|
2453
2377
  if position.include?(index)
2454
2378
  insert_keyword_text = keyword.to_s
@@ -2478,7 +2402,7 @@ class Wordpress
2478
2402
  end
2479
2403
  end
2480
2404
 
2481
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2405
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2482
2406
  begin
2483
2407
  content2.each_with_index do |con, index|
2484
2408
  if position.include?(index)
@@ -2573,7 +2497,7 @@ class Wordpress
2573
2497
  end
2574
2498
  end
2575
2499
 
2576
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2500
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2577
2501
  if @data['포스트설정']['자동글 수식에 입력'].checked?
2578
2502
  content5 = content.split("(자동생성글)")[0].to_s.split("\n")
2579
2503
  content55 = content.split("(자동생성글)")[1].to_s
@@ -2605,7 +2529,7 @@ class Wordpress
2605
2529
 
2606
2530
  position = position.sort
2607
2531
  ##여기서부터 이미지 순서대로 안되서 변경####-------------------------------------------------------------------------------
2608
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2532
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2609
2533
  # image_url22 = get_image_file().force_encoding('utf-8')
2610
2534
  # end
2611
2535
 
@@ -2623,7 +2547,7 @@ class Wordpress
2623
2547
  # end
2624
2548
  # end
2625
2549
 
2626
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2550
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2627
2551
  # content = content5.join("\n")+'(자동생성글)'+content55
2628
2552
  # iconv = Iconv.new('UTF-8', 'ASCII-8BIT')
2629
2553
  # content = iconv.iconv(content)
@@ -2643,7 +2567,7 @@ class Wordpress
2643
2567
  ###여기까지 이미지 순서대로 안되서 변경##-------------------------------------------------------------------------------
2644
2568
 
2645
2569
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
2646
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2570
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2647
2571
  sleep(2)
2648
2572
  puts '이미지 자동 세탁 중 · · · '
2649
2573
  end
@@ -2662,7 +2586,7 @@ class Wordpress
2662
2586
  end
2663
2587
  sleep(2)
2664
2588
  puts '이미지 자동 세탁 완료 · · · '
2665
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2589
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2666
2590
  content = content5.join("\n")+'(자동생성글)'+content55
2667
2591
  puts content
2668
2592
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
@@ -2807,7 +2731,7 @@ class Wordpress
2807
2731
  content = content
2808
2732
  soosick_1 = content_end
2809
2733
  else
2810
- if @data['포스트설정']['gpt'].checked?
2734
+ if @data['포스트설정']['gpt키워드'].checked?
2811
2735
  if @data['포스트설정']['gpt상단'].checked?
2812
2736
  content = content_end+"\n"+content+"\n"
2813
2737
  else
@@ -3477,7 +3401,10 @@ class Wordpress
3477
3401
  }
3478
3402
  horizontal_box{
3479
3403
  stretchy false
3404
+ grid{
3480
3405
  button('전체선택'){
3406
+ top 1
3407
+ left 1
3481
3408
  on_clicked{
3482
3409
  for n in 0..@data['키워드설정']['키워드'].length-1
3483
3410
  @data['키워드설정']['키워드'][n][0] = true
@@ -3486,7 +3413,20 @@ class Wordpress
3486
3413
  end
3487
3414
  }
3488
3415
  }
3489
- button('키워드삭제'){
3416
+ button('선택해제'){
3417
+ top 1
3418
+ left 2
3419
+ on_clicked{
3420
+ for n in 0..@data['키워드설정']['키워드'].length-1
3421
+ @data['키워드설정']['키워드'][n][0] = false
3422
+ @data['키워드설정']['키워드'] << []
3423
+ @data['키워드설정']['키워드'].pop
3424
+ end
3425
+ }
3426
+ }
3427
+ button('삭제하기'){
3428
+ top 1
3429
+ left 3
3490
3430
  on_clicked{
3491
3431
  m = Array.new
3492
3432
  for n in 0..@data['키워드설정']['키워드'].length-1
@@ -3501,6 +3441,8 @@ class Wordpress
3501
3441
  @data['키워드설정']['키워드'].delete(nil)
3502
3442
  }
3503
3443
  }
3444
+ }
3445
+
3504
3446
  @data['키워드설정']['순서사용'] = checkbox('순서사용'){
3505
3447
  stretchy false
3506
3448
  on_toggled{ |c|
@@ -3518,6 +3460,59 @@ class Wordpress
3518
3460
  }
3519
3461
  }
3520
3462
  }
3463
+ vertical_separator{
3464
+ stretchy false
3465
+ }
3466
+ horizontal_box{
3467
+ stretchy false
3468
+ grid{
3469
+ @data['포스트설정']['gpt키워드'] = checkbox('GPT 키워드 기반 글 생성'){
3470
+ top 1
3471
+ left 0
3472
+ #enabled false # 기본적으로 비활성화
3473
+ on_toggled {
3474
+ if @data['포스트설정']['gpt키워드'].checked?
3475
+ @data['포스트설정']['gpt상단'].enabled = true # '내용투명' 활성화
3476
+ @data['포스트설정']['gpt하단'].enabled = true # '내용투명' 활성화
3477
+ else
3478
+ @data['포스트설정']['gpt상단'].checked = false # 체크 해제
3479
+ @data['포스트설정']['gpt상단'].enabled = false # 비활성화
3480
+ @data['포스트설정']['gpt하단'].checked = false # 체크 해제
3481
+ @data['포스트설정']['gpt하단'].enabled = false # 비활성화
3482
+ end
3483
+ }
3484
+
3485
+ }
3486
+
3487
+ @data['포스트설정']['gpt상단'] = checkbox('원고 위에 넣기'){
3488
+ top 1
3489
+ left 1
3490
+ enabled false # 기본적으로 비활성화
3491
+ on_toggled{
3492
+ if @data['포스트설정']['gpt상단'].checked?
3493
+ @data['포스트설정']['gpt하단'].checked = false
3494
+ end
3495
+ }
3496
+ }
3497
+
3498
+ @data['포스트설정']['gpt하단'] = checkbox('원고 아래 넣기'){
3499
+ top 1
3500
+ left 2
3501
+ enabled false # 기본적으로 비활성화
3502
+ on_toggled{
3503
+ if @data['포스트설정']['gpt하단'].checked?
3504
+ @data['포스트설정']['gpt상단'].checked = false
3505
+ end
3506
+ }
3507
+ }
3508
+ } }
3509
+ horizontal_box{
3510
+ stretchy false
3511
+ grid{
3512
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3513
+ } } }
3514
+
3515
+
3521
3516
  table{
3522
3517
  checkbox_column('선택'){
3523
3518
  editable true
@@ -3528,7 +3523,9 @@ class Wordpress
3528
3523
 
3529
3524
  cell_rows @data['키워드설정']['키워드']
3530
3525
  }
3531
-
3526
+
3527
+
3528
+
3532
3529
  }
3533
3530
  vertical_separator{
3534
3531
  stretchy false
@@ -3557,7 +3554,10 @@ class Wordpress
3557
3554
  }
3558
3555
  horizontal_box{
3559
3556
  stretchy false
3557
+ grid{
3560
3558
  button('전체선택'){
3559
+ top 1
3560
+ left 1
3561
3561
  on_clicked{
3562
3562
  for n in 0..@data['제목설정']['제목'].length-1
3563
3563
  @data['제목설정']['제목'][n][0] = true
@@ -3566,7 +3566,20 @@ class Wordpress
3566
3566
  end
3567
3567
  }
3568
3568
  }
3569
- button('제목삭제'){
3569
+ button('선택해제'){
3570
+ top 1
3571
+ left 2
3572
+ on_clicked{
3573
+ for n in 0..@data['제목설정']['제목'].length-1
3574
+ @data['제목설정']['제목'][n][0] = false
3575
+ @data['제목설정']['제목'] << []
3576
+ @data['제목설정']['제목'].pop
3577
+ end
3578
+ }
3579
+ }
3580
+ button('삭제하기'){
3581
+ top 1
3582
+ left 3
3570
3583
  on_clicked{
3571
3584
  m = Array.new
3572
3585
  for n in 0..@data['제목설정']['제목'].length-1
@@ -3581,6 +3594,7 @@ class Wordpress
3581
3594
  @data['제목설정']['제목'].delete(nil)
3582
3595
  }
3583
3596
  }
3597
+ }
3584
3598
  @data['제목설정']['순서사용'] = checkbox('순서사용'){
3585
3599
  stretchy false
3586
3600
  on_toggled{ |c|
@@ -3598,6 +3612,23 @@ class Wordpress
3598
3612
  }
3599
3613
  }
3600
3614
  }
3615
+ vertical_separator{
3616
+ stretchy false
3617
+ }
3618
+ horizontal_box{
3619
+ stretchy false
3620
+ grid{
3621
+ @data['포스트설정']['gpt제목'] = checkbox('제목을 이용해 GPT로 비슷한 제목 생성'){
3622
+
3623
+
3624
+ }}}
3625
+ horizontal_box{
3626
+ stretchy false
3627
+ grid{
3628
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3629
+ } } }
3630
+
3631
+
3601
3632
  table{
3602
3633
  checkbox_column('선택'){
3603
3634
  editable true
@@ -3608,6 +3639,7 @@ class Wordpress
3608
3639
 
3609
3640
  cell_rows @data['제목설정']['제목']
3610
3641
  }
3642
+
3611
3643
 
3612
3644
  }
3613
3645
  vertical_separator{
@@ -3635,7 +3667,10 @@ class Wordpress
3635
3667
  }
3636
3668
  horizontal_box{
3637
3669
  stretchy false
3670
+ grid{
3638
3671
  button('전체선택'){
3672
+ top 1
3673
+ left 1
3639
3674
  on_clicked{
3640
3675
  for n in 0..@data['내용설정']['내용'].length-1
3641
3676
  @data['내용설정']['내용'][n][0] = true
@@ -3644,7 +3679,20 @@ class Wordpress
3644
3679
  end
3645
3680
  }
3646
3681
  }
3647
- button('내용삭제'){
3682
+ button('선택해제'){
3683
+ top 1
3684
+ left 2
3685
+ on_clicked{
3686
+ for n in 0..@data['내용설정']['내용'].length-1
3687
+ @data['내용설정']['내용'][n][0] = false
3688
+ @data['내용설정']['내용'] << []
3689
+ @data['내용설정']['내용'].pop
3690
+ end
3691
+ }
3692
+ }
3693
+ button('삭제하기'){
3694
+ top 1
3695
+ left 3
3648
3696
  on_clicked{
3649
3697
  m = Array.new
3650
3698
  for n in 0..@data['내용설정']['내용'].length-1
@@ -3659,6 +3707,7 @@ class Wordpress
3659
3707
  @data['내용설정']['내용'].delete(nil)
3660
3708
  }
3661
3709
  }
3710
+ }
3662
3711
  @data['내용설정']['순서사용'] = checkbox('순서사용'){
3663
3712
  stretchy false
3664
3713
  on_toggled{ |c|
@@ -3676,6 +3725,22 @@ class Wordpress
3676
3725
  }
3677
3726
  }
3678
3727
  }
3728
+ vertical_separator{
3729
+ stretchy false
3730
+ }
3731
+ horizontal_box{
3732
+ stretchy false
3733
+ grid{
3734
+ @data['포스트설정']['gpt내용'] = checkbox('내용파일을 이용해 GPT로 글 변형'){
3735
+
3736
+
3737
+ }}}
3738
+ horizontal_box{
3739
+ stretchy false
3740
+ grid{
3741
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3742
+ } } }
3743
+
3679
3744
  table{
3680
3745
  checkbox_column('선택'){
3681
3746
  editable true
@@ -3693,8 +3758,8 @@ class Wordpress
3693
3758
  stretchy false
3694
3759
  text "내용폴더경로 ex)C:\\내용\\폴더1"
3695
3760
  }
3696
- button('폴더째로불러오기'){
3697
- stretchy false
3761
+ button('폴더째로 불러오기'){
3762
+
3698
3763
  on_clicked{
3699
3764
  path = @data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
3700
3765
  Dir.entries(@data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -3792,7 +3857,7 @@ class Wordpress
3792
3857
  text "사진폴더경로 ex)C:\\사진\\폴더2"
3793
3858
  }
3794
3859
  button('폴더째로불러오기'){
3795
- stretchy false
3860
+
3796
3861
  on_clicked{
3797
3862
  path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
3798
3863
  Dir.entries(@data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -4045,6 +4110,18 @@ class Wordpress
4045
4110
  @data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
4046
4111
  top 2
4047
4112
  left 0
4113
+ #enabled false # 기본적으로 비활성화
4114
+ on_toggled {
4115
+ if @data['포스트설정']['제목에키워드삽입'].checked?
4116
+ @data['포스트설정']['제목앞'].enabled = true # '내용투명' 활성화
4117
+ @data['포스트설정']['제목뒤'].enabled = true # '내용투명' 활성화
4118
+ else
4119
+ @data['포스트설정']['제목앞'].checked = false # 체크 해제
4120
+ @data['포스트설정']['제목앞'].enabled = false # 비활성화
4121
+ @data['포스트설정']['제목뒤'].checked = false # 체크 해제
4122
+ @data['포스트설정']['제목뒤'].enabled = false # 비활성화
4123
+ end
4124
+ }
4048
4125
  }
4049
4126
  @data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
4050
4127
  top 2
@@ -4067,6 +4144,7 @@ class Wordpress
4067
4144
  @data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
4068
4145
  top 3
4069
4146
  left 3
4147
+ enabled false # 기본적으로 비활성화
4070
4148
  on_toggled{
4071
4149
  if @data['포스트설정']['제목앞'].checked? == true
4072
4150
  if @data['포스트설정']['제목뒤'].checked?
@@ -4082,6 +4160,7 @@ class Wordpress
4082
4160
  @data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
4083
4161
  top 4
4084
4162
  left 3
4163
+ enabled false # 기본적으로 비활성화
4085
4164
  on_toggled{
4086
4165
  if @data['포스트설정']['제목뒤'].checked? == true
4087
4166
  if @data['포스트설정']['제목앞'].checked?
@@ -4090,26 +4169,51 @@ class Wordpress
4090
4169
  end
4091
4170
  }
4092
4171
  }
4093
- @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4172
+ @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 특수문자 삽입'){
4094
4173
  top 4
4095
4174
  left 0
4096
4175
  }
4097
-
4098
- @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
4176
+ @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4099
4177
  top 5
4100
4178
  left 0
4179
+ on_toggled{
4180
+ if @data['포스트설정']['제목을랜덤'].checked? == true
4181
+ if @data['포스트설정']['제목내용설정'].checked?
4182
+ @data['포스트설정']['제목내용설정'].checked = false
4183
+ end
4184
+ end
4185
+ }
4101
4186
  }
4102
- @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4187
+ @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4103
4188
  top 6
4104
4189
  left 0
4190
+ on_toggled{
4191
+ if @data['포스트설정']['제목내용설정'].checked? == true
4192
+ if @data['포스트설정']['제목을랜덤'].checked?
4193
+ @data['포스트설정']['제목을랜덤'].checked = false
4194
+ end
4195
+ end
4196
+ }
4105
4197
  }
4106
4198
  @data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
4107
4199
  top 7
4108
4200
  left 0
4201
+ on_toggled {
4202
+ if @data['포스트설정']['내용키워드삽입'].checked?
4203
+ @data['포스트설정']['키워드삽입'].enabled = true # '내용투명' 활성화
4204
+ @data['포스트설정']['키워드삽입시링크'].enabled = true # '내용투명' 활성화
4205
+ else
4206
+ @data['포스트설정']['키워드삽입'].checked = false # 체크 해제
4207
+ @data['포스트설정']['키워드삽입'].enabled = false # 비활성화
4208
+ @data['포스트설정']['키워드삽입시링크'].text = 'URL' # 기본 텍스트 설정
4209
+ @data['포스트설정']['키워드삽입시링크'].enabled = false # 비활성화
4210
+ end
4211
+ }
4109
4212
  }
4110
4213
  @data['포스트설정']['키워드삽입시작숫자'] = entry(){
4111
4214
  top 7
4112
4215
  left 1
4216
+
4113
4217
  text '최소수량'
4114
4218
  }
4115
4219
  label('~'){
@@ -4122,63 +4226,61 @@ class Wordpress
4122
4226
  text '최대수량'
4123
4227
  }
4124
4228
  @data['포스트설정']['키워드삽입'] = checkbox('내용 키워드 삽입시 링크 삽입'){
4229
+ enabled false # 기본적으로 비활성화
4125
4230
  top 8
4126
4231
  left 0
4127
4232
  }
4128
4233
  @data['포스트설정']['키워드삽입시링크'] = entry(){
4234
+ enabled false # 기본적으로 비활성화
4129
4235
  top 8
4130
4236
  left 1
4131
4237
  text 'URL'
4132
4238
  }
4133
- @data['포스트설정']['내용을자동생성'] = checkbox('내용을 키워드 기반으로 자동 생성해서 포스팅'){
4239
+ @data['포스트설정']['내용을자동생성'] = checkbox('키워드기반 생성으로만 등록(GPT 사용시 자체 생성)'){
4134
4240
  top 9
4135
4241
  left 0
4136
4242
  on_toggled{
4137
4243
  if @data['포스트설정']['내용을자동생성'].checked?
4138
- if @data['포스트설정']['내용과자동생성'].checked?
4139
- @data['포스트설정']['내용과자동생성'].checked = false
4140
- end
4244
+ @data['포스트설정']['내용과자동생성'].checked = false
4245
+ @data['포스트설정']['내용투명'].checked = false
4246
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4247
+
4141
4248
  end
4142
4249
  }
4143
4250
  }
4144
4251
 
4145
- @data['포스트설정']['gpt'] = checkbox('내용을 키워드 기반의 GPT로 생성해서 포스팅'){
4146
- top 10
4147
- left 0
4148
- }
4149
4252
 
4150
- @data['포스트설정']['api_key'] = entry(){
4151
- top 10
4152
- left 1
4153
- text 'api key'
4154
- }
4155
-
4156
- @data['포스트설정']['gpt상단'] = checkbox('원고내용 위에 넣기'){
4157
- top 10
4158
- left 3
4159
- }
4160
-
4161
- @data['포스트설정']['gpt하단'] = checkbox('원고내용 아래에 넣기'){
4162
- top 11
4163
- left 3
4164
- }
4253
+
4165
4254
 
4166
4255
  aa1 = 2
4167
- @data['포스트설정']['내용과자동생성'] = checkbox('내용을 내용 파일 + 자동 생성 조합으로 포스팅'){
4256
+ @data['포스트설정']['내용과자동생성'] = checkbox('내용파일+키워드기반 생성 등록(GPT 사용시 자체 생성)') {
4168
4257
  top 10 + aa1
4169
4258
  left 0
4170
- on_toggled{
4171
- if @data['포스트설정']['내용과자동생성'].checked?
4172
- if @data['포스트설정']['내용을자동생성'].checked?
4173
- @data['포스트설정']['내용을자동생성'].checked = false
4174
- end
4175
- end
4259
+ on_toggled {
4260
+ if @data['포스트설정']['내용과자동생성'].checked?
4261
+ @data['포스트설정']['내용을자동생성'].checked = false
4262
+ @data['포스트설정']['내용투명'].enabled = true # '내용투명' 활성화
4263
+ @data['포스트설정']['자동글 수식에 입력'].enabled = true # '내용투명' 활성화
4264
+ else
4265
+ @data['포스트설정']['내용투명'].checked = false # 체크 해제
4266
+ @data['포스트설정']['내용투명'].enabled = false # 비활성화
4267
+ @data['포스트설정']['자동글 수식에 입력'].checked = false # 체크 해제
4268
+ @data['포스트설정']['자동글 수식에 입력'].enabled = false # 비활성화
4269
+ end
4176
4270
  }
4177
- }
4178
- @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리'){
4179
- top 11+ aa1
4271
+ }
4272
+
4273
+ @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리') {
4274
+ top 11 + aa1
4180
4275
  left 0
4181
- }
4276
+ enabled false # 기본적으로 비활성화
4277
+ on_toggled {
4278
+ if @data['포스트설정']['내용투명'].checked?
4279
+ @data['포스트설정']['내용을자동생성'].checked = false
4280
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4281
+ end
4282
+ }
4283
+ }
4182
4284
  @data['포스트설정']['내용자동변경'] = checkbox('내용에 단어들을 자동 변경'){
4183
4285
  top 12+ aa1
4184
4286
  left 0
@@ -4206,6 +4308,18 @@ class Wordpress
4206
4308
  @data['포스트설정']['내용사진자동삽입'] = checkbox('내용 사진 자동 삽입'){
4207
4309
  top 13+ aa1
4208
4310
  left 0
4311
+ #enabled false # 기본적으로 비활성화
4312
+ on_toggled {
4313
+ if @data['포스트설정']['내용사진자동삽입'].checked?
4314
+ @data['포스트설정']['내용사진링크'].enabled = true # '내용투명' 활성화
4315
+ @data['포스트설정']['내용사진링크값'].enabled = true # '내용투명' 활성화
4316
+ else
4317
+ @data['포스트설정']['내용사진링크'].checked = false # 체크 해제
4318
+ @data['포스트설정']['내용사진링크'].enabled = false # 비활성화
4319
+ @data['포스트설정']['내용사진링크값'].text = 'URL' # 기본 텍스트 설정
4320
+ @data['포스트설정']['내용사진링크값'].enabled = false # 비활성화
4321
+ end
4322
+ }
4209
4323
  }
4210
4324
  @data['포스트설정']['내용사진자동삽입시작숫자'] = entry(){
4211
4325
  top 13+ aa1
@@ -4223,15 +4337,28 @@ class Wordpress
4223
4337
  }
4224
4338
 
4225
4339
  @data['포스트설정']['내용사진링크'] = checkbox('내용 사진 자동 삽입시 링크 삽입'){
4340
+ enabled false # 기본적으로 비활성화
4226
4341
  top 14+ aa1
4227
4342
  left 0
4228
4343
  }
4229
4344
 
4230
4345
  @data['포스트설정']['내용사진링크값'] = entry(){
4346
+ enabled false # 기본적으로 비활성화
4231
4347
  top 14+ aa1
4232
4348
  left 1
4233
4349
  text 'URL'
4234
4350
  }
4351
+
4352
+ @data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기'){
4353
+ top 15+ aa1
4354
+ left 0
4355
+ }
4356
+
4357
+ @data['포스트설정']['api_key'] = entry(){
4358
+ top 15+ aa1
4359
+ left 1
4360
+ text 'api key 입력 필수!!'
4361
+ }
4235
4362
  }
4236
4363
  }
4237
4364
 
@@ -4422,6 +4549,22 @@ class Wordpress
4422
4549
  @data['포스트설정']['막글삽입'] = checkbox('내용 하단에 막글 삽입'){
4423
4550
  top 6
4424
4551
  left 0
4552
+ #enabled false # 기본적으로 비활성화
4553
+ on_toggled {
4554
+ if @data['포스트설정']['막글삽입'].checked?
4555
+ @data['포스트설정']['막글투명'].enabled = true # '내용투명' 활성화
4556
+ @data['포스트설정']['막글그대로'].enabled = true # '내용투명' 활성화
4557
+ @data['포스트설정']['막글 수식에 입력'].enabled = true # '내용투명' 활성화
4558
+
4559
+ else
4560
+ @data['포스트설정']['막글투명'].checked = false # 체크 해제
4561
+ @data['포스트설정']['막글투명'].enabled = false # 비활성화
4562
+ @data['포스트설정']['막글그대로'].checked = false # 체크 해제
4563
+ @data['포스트설정']['막글그대로'].enabled = false # 비활성화
4564
+ @data['포스트설정']['막글 수식에 입력'].checked = false # 체크 해제
4565
+ @data['포스트설정']['막글 수식에 입력'].enabled = false # 비활성화
4566
+ end
4567
+ }
4425
4568
  }
4426
4569
  @data['포스트설정']['막글삽입시작숫자'] = entry{
4427
4570
  top 6
@@ -4451,10 +4594,12 @@ class Wordpress
4451
4594
  @data['포스트설정']['막글투명'] = checkbox('막글 안보이게 처리'){
4452
4595
  top 7
4453
4596
  left 0
4597
+ enabled false # 기본적으로 비활성화
4454
4598
  }
4455
4599
  @data['포스트설정']['막글그대로'] = checkbox('막글 그대로 입력'){
4456
4600
  top 7
4457
4601
  left 1
4602
+ enabled false # 기본적으로 비활성화
4458
4603
  }
4459
4604
 
4460
4605
  @data['포스트설정']['태그삽입1'] = checkbox('태그삽입'){
@@ -4479,11 +4624,19 @@ class Wordpress
4479
4624
  @data['포스트설정']['자동글 수식에 입력'] = checkbox('자동글 수식에 입력'){
4480
4625
  top 9
4481
4626
  left 0
4627
+ enabled false # 기본적으로 비활성화
4628
+ on_toggled {
4629
+ if @data['포스트설정']['자동글 수식에 입력'].checked?
4630
+ @data['포스트설정']['내용을자동생성'].checked = false
4631
+ @data['포스트설정']['내용투명'].checked = false
4632
+ end
4633
+ }
4482
4634
  }
4483
4635
 
4484
4636
  @data['포스트설정']['막글 수식에 입력'] = checkbox('막글 수식에 입력'){
4485
4637
  top 9
4486
4638
  left 1
4639
+ enabled false # 기본적으로 비활성화
4487
4640
  }
4488
4641
 
4489
4642
 
@@ -4566,10 +4719,22 @@ class Wordpress
4566
4719
  @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용'){
4567
4720
  top 15
4568
4721
  left 0
4722
+ on_toggled{
4723
+ if @data['포스트설정']['테더링'].checked?
4724
+ @data['포스트설정']['프록시'].checked = false
4725
+
4726
+ end
4727
+ }
4569
4728
  }
4570
4729
  @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용'){
4571
4730
  top 15
4572
4731
  left 1
4732
+ on_toggled{
4733
+ if @data['포스트설정']['프록시'].checked?
4734
+ @data['포스트설정']['테더링'].checked = false
4735
+
4736
+ end
4737
+ }
4573
4738
  }
4574
4739
  button('프록시 IP 파일 불러오기'){
4575
4740
  top 15