cafe_basics_duo 0.0.5 → 0.0.9

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 +537 -375
  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]
@@ -807,11 +782,20 @@ class Naver
807
782
  sleep(3)
808
783
  @driver.action.key_down(:up).key_up(:up).perform #x탭
809
784
  sleep(1)
785
+ begin
786
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
787
+ #요소가 나타날 때까지 60초 동안 기다립니다.
788
+ wait.until { @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]') }
789
+ sleep(1)
810
790
  @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
791
+ sleep(1)
811
792
  @driver.action.send_keys(title).perform
812
793
  sleep(1)
813
794
  @driver.action.key_down(:enter).key_up(:enter).perform #엔터
814
795
  sleep(1)
796
+ rescue
797
+ @driver.action.key_down(:down).key_up(:down).perform
798
+ end
815
799
 
816
800
  elsif i2.to_s.include?('<inyonggoo')
817
801
  if i2.text == ''
@@ -1706,107 +1690,19 @@ class Wordpress
1706
1690
 
1707
1691
 
1708
1692
 
1709
- def chrome_start(url, user_id, user_pw)
1710
- @url = url
1711
- @user_id = user_id
1712
- @user_pw = user_pw
1713
- begin
1714
- Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1715
- @driver = Selenium::WebDriver.for :chrome
1716
- rescue
1717
- @driver = Selenium::WebDriver.for :chrome
1718
- end
1719
- end
1720
-
1721
- def login
1722
- @driver.get(@url+'/wp-admin')
1723
- @driver.find_element(:xpath , '//*[@id="user_login"]').send_keys(@user_id)
1724
- @driver.find_element(:xpath , '//*[@id="user_pass"]').send_keys(@user_pw)
1725
- @driver.find_element(:xpath , '//*[@id="wp-submit"]').click
1726
- @cookie = Hash.new
1727
- @driver.manage.all_cookies.each do |i|
1728
- @cookie[i[:name]] = i[:value]
1729
- end
1730
- sleep(2)
1731
- begin
1732
- puts @driver.find_element(:xpath , '/html/body/div/div/div[1]/div[1]/div/div[1]/a[1]/span').text
1733
- @driver.close
1734
- return 1
1735
- rescue => e
1736
- puts e
1737
- @driver.close
1738
- return 0
1739
- end
1740
- end
1693
+ #def chrome_start(url, user_id, user_pw)
1694
+ # @url = url
1695
+ # @user_id = user_id
1696
+ # @user_pw = user_pw
1697
+ # begin
1698
+ # Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1699
+ # @driver = Selenium::WebDriver.for :chrome
1700
+ # rescue
1701
+ # @driver = Selenium::WebDriver.for :chrome
1702
+ # end
1703
+ #end
1741
1704
 
1742
- def update
1743
- http = HTTP.cookies(@cookie).get(@url+'/wp-admin/post-new.php')
1744
- noko = Nokogiri::HTML(http.to_s)
1745
- @wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
1746
- @data2 = Hash.new
1747
- @data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]')[0]['value']
1748
- @data2['_wp_http_referer'] = '/wp-admin/post-new.php'
1749
- @data2['user_ID'] = '1'
1750
- @data2['action'] = 'editpost'
1751
- @data2['originalaction'] = 'editpost'
1752
- @data2['post_author'] = '1'
1753
- @data2['post_type'] = 'post'
1754
- @data2['original_post_status'] = 'auto-draft'
1755
- @data2['referredby'] = @url+'/wp-admin/update-core.php'
1756
- @data2['_wp_original_http_referer'] = @url+'/wp-admin/update-core.php'
1757
- @data2['auto_draft'] = nil
1758
- @data2['post_ID'] = noko.xpath('//*[@id="post_ID"]')[0]['value']
1759
- @data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]')[0]['value']
1760
- @data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]')[0]['value']
1761
- @data2['post_title'] = 'title3'
1762
- @data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]')[0]['value']
1763
- @data2['content'] = 'content3'
1764
- @data2['wp-preview'] = nil
1765
- @data2['hidden_post_status'] = 'draft'
1766
- @data2['post_status'] = 'draft'
1767
- @data2['hidden_post_password'] = nil
1768
- @data2['hidden_post_visibility'] = 'public'
1769
- @data2['visibility'] = 'post'
1770
- @data2['post_password'] = nil
1771
- @data2['mm'] = '10'
1772
- @data2['jj'] = '24'
1773
- @data2['aa'] = '2022'
1774
- @data2['hh'] = '02'
1775
- @data2['mn'] = '41'
1776
- @data2['ss'] = '32'
1777
- @data2['hidden_mm'] = '10'
1778
- @data2['cur_mm'] = '10'
1779
- @data2['hidden_jj'] = '24'
1780
- @data2['cur_jj'] = '24'
1781
- @data2['hidden_aa'] = '2022'
1782
- @data2['cur_aa'] = '2022'
1783
- @data2['hidden_hh'] = '02'
1784
- @data2['cur_hh'] = '02'
1785
- @data2['hidden_mn'] = '41'
1786
- @data2['cur_mn'] = '41'
1787
- @data2['original_publish'] = '공개'
1788
- @data2['publish'] = '공개'
1789
- @data2['post_format'] = '0'
1790
- @data2['post_category[]'] = '0'
1791
- @data2['newcategory'] = '새 카테고리 이름'
1792
- @data2['newcategory_parent'] = -1
1793
- @data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]')[0]['value']
1794
- @data2['tax_input[post_tag]'] = nil
1795
- @data2['newtag[post_tag]'] = nil
1796
- @data2['_thumbnail_id'] = -1
1797
- @data2['excerpt'] = nil
1798
- @data2['trackback_url'] = nil
1799
- @data2['metakeyinput'] = nil
1800
- @data2['metavalue'] = nil
1801
- @data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]')[0]['value']
1802
- @data2['advanced_view'] = '1'
1803
- @data2['comment_status'] = 'open'
1804
- @data2['ping_status'] = 'open'
1805
- @data2['post_name'] = nil
1806
- @data2['post_author_override'] = '1'
1807
- #result_http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => @data)
1808
- return @data2
1809
- end
1705
+
1810
1706
 
1811
1707
  def auto_image
1812
1708
  begin
@@ -2035,8 +1931,7 @@ class Wordpress
2035
1931
  @inumber2 = 0
2036
1932
  @video = Array.new
2037
1933
 
2038
- price_hash = Hash.new
2039
-
1934
+
2040
1935
  while true
2041
1936
  for n in 0..@data['table'].length-1
2042
1937
  @data['table'][n][10] = 0
@@ -2129,6 +2024,13 @@ class Wordpress
2129
2024
  end
2130
2025
  end
2131
2026
  end
2027
+
2028
+ if @data['포스트설정']['gpt제목'].checked?
2029
+ chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2030
+ gpt_text1 = chat.message(title)
2031
+ title = gpt_text1.to_s
2032
+ end
2033
+
2132
2034
  @data['table'][index][-1] = 5
2133
2035
  @data['table'] << []
2134
2036
  @data['table'].pop
@@ -2166,6 +2068,25 @@ class Wordpress
2166
2068
  end
2167
2069
  end
2168
2070
  end
2071
+
2072
+
2073
+ if @data['포스트설정']['gpt내용'].checked?
2074
+ api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
2075
+ #key_change = @data['포스트설정']['특정단어키워드로변경값'].text.to_s.force_encoding('utf-8')
2076
+ #imotcon_change = @data['포스트설정']['스티커로변경단어'].text.to_s.force_encoding('utf-8')
2077
+ #template_change = @data['포스트설정']['내템플릿변경단어'].text.to_s.force_encoding('utf-8')
2078
+ #ttdanar_change = @data['포스트설정']['단어링크적용단어'].text.to_s.force_encoding('utf-8')
2079
+ #sajine_change = @data['포스트설정']['단어사진으로변경단어'].text.to_s.force_encoding('utf-8')
2080
+ #mov_change = @data['포스트설정']['영상으로변경단어'].text.to_s.force_encoding('utf-8')
2081
+ #map_change = @data['포스트설정']['지도로변경단어'].text.to_s.force_encoding('utf-8')
2082
+ #inyong9_change = @data['포스트설정']['인용구변경단어'].text.to_s.force_encoding('utf-8')
2083
+
2084
+
2085
+ chat = Chat_content.new(api_key)
2086
+ gpt_text3 = chat.message(content)
2087
+ content = gpt_text3.to_s
2088
+ end
2089
+
2169
2090
  content_tag = content.split('@##@')[1]
2170
2091
  content = content.split('@##@')[0]
2171
2092
  @data['table'][index][-1] = 15
@@ -2364,7 +2285,7 @@ class Wordpress
2364
2285
  @data['table'][index][-1] = 50
2365
2286
  @data['table'] << []
2366
2287
  @data['table'].pop
2367
- if @data['포스트설정']['gpt'].checked?
2288
+ if @data['포스트설정']['gpt키워드'].checked?
2368
2289
  chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2369
2290
  gpt_text = chat.message(keyword)
2370
2291
  content = content + "\n(자동생성글)\n" + gpt_text
@@ -2385,7 +2306,7 @@ class Wordpress
2385
2306
  joongbok_check = 0
2386
2307
  counter10 = 0
2387
2308
  while joongbok_check == 0
2388
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2309
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2389
2310
  content22 = content.split("(자동생성글)")[1].split("\n")
2390
2311
  else
2391
2312
  content22 = content.split("\n")
@@ -2409,12 +2330,12 @@ class Wordpress
2409
2330
  content2 = content.split("\n")
2410
2331
  end
2411
2332
 
2412
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2333
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2413
2334
  content2 = content.split("(자동생성글)")[1].split("\n")
2414
2335
  position.pop
2415
2336
  end
2416
2337
 
2417
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2338
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2418
2339
  content2 = content.split("\n")
2419
2340
  end
2420
2341
 
@@ -2460,7 +2381,7 @@ class Wordpress
2460
2381
  content = content3.join("\n")
2461
2382
  end
2462
2383
 
2463
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2384
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2464
2385
  content2.each_with_index do |con, index|
2465
2386
  if position.include?(index)
2466
2387
  insert_keyword_text = keyword.to_s
@@ -2490,7 +2411,7 @@ class Wordpress
2490
2411
  end
2491
2412
  end
2492
2413
 
2493
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2414
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2494
2415
  begin
2495
2416
  content2.each_with_index do |con, index|
2496
2417
  if position.include?(index)
@@ -2585,7 +2506,7 @@ class Wordpress
2585
2506
  end
2586
2507
  end
2587
2508
 
2588
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2509
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2589
2510
  if @data['포스트설정']['자동글 수식에 입력'].checked?
2590
2511
  content5 = content.split("(자동생성글)")[0].to_s.split("\n")
2591
2512
  content55 = content.split("(자동생성글)")[1].to_s
@@ -2617,7 +2538,7 @@ class Wordpress
2617
2538
 
2618
2539
  position = position.sort
2619
2540
  ##여기서부터 이미지 순서대로 안되서 변경####-------------------------------------------------------------------------------
2620
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2541
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2621
2542
  # image_url22 = get_image_file().force_encoding('utf-8')
2622
2543
  # end
2623
2544
 
@@ -2635,7 +2556,7 @@ class Wordpress
2635
2556
  # end
2636
2557
  # end
2637
2558
 
2638
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2559
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2639
2560
  # content = content5.join("\n")+'(자동생성글)'+content55
2640
2561
  # iconv = Iconv.new('UTF-8', 'ASCII-8BIT')
2641
2562
  # content = iconv.iconv(content)
@@ -2655,7 +2576,7 @@ class Wordpress
2655
2576
  ###여기까지 이미지 순서대로 안되서 변경##-------------------------------------------------------------------------------
2656
2577
 
2657
2578
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
2658
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2579
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2659
2580
  sleep(2)
2660
2581
  puts '이미지 자동 세탁 중 · · · '
2661
2582
  end
@@ -2674,7 +2595,7 @@ class Wordpress
2674
2595
  end
2675
2596
  sleep(2)
2676
2597
  puts '이미지 자동 세탁 완료 · · · '
2677
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2598
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2678
2599
  content = content5.join("\n")+'(자동생성글)'+content55
2679
2600
  puts content
2680
2601
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
@@ -2819,7 +2740,7 @@ class Wordpress
2819
2740
  content = content
2820
2741
  soosick_1 = content_end
2821
2742
  else
2822
- if @data['포스트설정']['gpt'].checked?
2743
+ if @data['포스트설정']['gpt키워드'].checked?
2823
2744
  if @data['포스트설정']['gpt상단'].checked?
2824
2745
  content = content_end+"\n"+content+"\n"
2825
2746
  else
@@ -3489,7 +3410,10 @@ class Wordpress
3489
3410
  }
3490
3411
  horizontal_box{
3491
3412
  stretchy false
3413
+ grid{
3492
3414
  button('전체선택'){
3415
+ top 1
3416
+ left 1
3493
3417
  on_clicked{
3494
3418
  for n in 0..@data['키워드설정']['키워드'].length-1
3495
3419
  @data['키워드설정']['키워드'][n][0] = true
@@ -3498,7 +3422,20 @@ class Wordpress
3498
3422
  end
3499
3423
  }
3500
3424
  }
3501
- button('키워드삭제'){
3425
+ button('선택해제'){
3426
+ top 1
3427
+ left 2
3428
+ on_clicked{
3429
+ for n in 0..@data['키워드설정']['키워드'].length-1
3430
+ @data['키워드설정']['키워드'][n][0] = false
3431
+ @data['키워드설정']['키워드'] << []
3432
+ @data['키워드설정']['키워드'].pop
3433
+ end
3434
+ }
3435
+ }
3436
+ button('삭제하기'){
3437
+ top 1
3438
+ left 3
3502
3439
  on_clicked{
3503
3440
  m = Array.new
3504
3441
  for n in 0..@data['키워드설정']['키워드'].length-1
@@ -3513,6 +3450,8 @@ class Wordpress
3513
3450
  @data['키워드설정']['키워드'].delete(nil)
3514
3451
  }
3515
3452
  }
3453
+ }
3454
+
3516
3455
  @data['키워드설정']['순서사용'] = checkbox('순서사용'){
3517
3456
  stretchy false
3518
3457
  on_toggled{ |c|
@@ -3530,6 +3469,59 @@ class Wordpress
3530
3469
  }
3531
3470
  }
3532
3471
  }
3472
+ vertical_separator{
3473
+ stretchy false
3474
+ }
3475
+ horizontal_box{
3476
+ stretchy false
3477
+ grid{
3478
+ @data['포스트설정']['gpt키워드'] = checkbox('GPT 키워드 기반 글 생성'){
3479
+ top 1
3480
+ left 0
3481
+ #enabled false # 기본적으로 비활성화
3482
+ on_toggled {
3483
+ if @data['포스트설정']['gpt키워드'].checked?
3484
+ @data['포스트설정']['gpt상단'].enabled = true # '내용투명' 활성화
3485
+ @data['포스트설정']['gpt하단'].enabled = true # '내용투명' 활성화
3486
+ else
3487
+ @data['포스트설정']['gpt상단'].checked = false # 체크 해제
3488
+ @data['포스트설정']['gpt상단'].enabled = false # 비활성화
3489
+ @data['포스트설정']['gpt하단'].checked = false # 체크 해제
3490
+ @data['포스트설정']['gpt하단'].enabled = false # 비활성화
3491
+ end
3492
+ }
3493
+
3494
+ }
3495
+
3496
+ @data['포스트설정']['gpt상단'] = checkbox('원고 위에 넣기'){
3497
+ top 1
3498
+ left 1
3499
+ enabled false # 기본적으로 비활성화
3500
+ on_toggled{
3501
+ if @data['포스트설정']['gpt상단'].checked?
3502
+ @data['포스트설정']['gpt하단'].checked = false
3503
+ end
3504
+ }
3505
+ }
3506
+
3507
+ @data['포스트설정']['gpt하단'] = checkbox('원고 아래 넣기'){
3508
+ top 1
3509
+ left 2
3510
+ enabled false # 기본적으로 비활성화
3511
+ on_toggled{
3512
+ if @data['포스트설정']['gpt하단'].checked?
3513
+ @data['포스트설정']['gpt상단'].checked = false
3514
+ end
3515
+ }
3516
+ }
3517
+ } }
3518
+ horizontal_box{
3519
+ stretchy false
3520
+ grid{
3521
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3522
+ } } }
3523
+
3524
+
3533
3525
  table{
3534
3526
  checkbox_column('선택'){
3535
3527
  editable true
@@ -3540,7 +3532,9 @@ class Wordpress
3540
3532
 
3541
3533
  cell_rows @data['키워드설정']['키워드']
3542
3534
  }
3543
-
3535
+
3536
+
3537
+
3544
3538
  }
3545
3539
  vertical_separator{
3546
3540
  stretchy false
@@ -3569,7 +3563,10 @@ class Wordpress
3569
3563
  }
3570
3564
  horizontal_box{
3571
3565
  stretchy false
3566
+ grid{
3572
3567
  button('전체선택'){
3568
+ top 1
3569
+ left 1
3573
3570
  on_clicked{
3574
3571
  for n in 0..@data['제목설정']['제목'].length-1
3575
3572
  @data['제목설정']['제목'][n][0] = true
@@ -3578,7 +3575,20 @@ class Wordpress
3578
3575
  end
3579
3576
  }
3580
3577
  }
3581
- button('제목삭제'){
3578
+ button('선택해제'){
3579
+ top 1
3580
+ left 2
3581
+ on_clicked{
3582
+ for n in 0..@data['제목설정']['제목'].length-1
3583
+ @data['제목설정']['제목'][n][0] = false
3584
+ @data['제목설정']['제목'] << []
3585
+ @data['제목설정']['제목'].pop
3586
+ end
3587
+ }
3588
+ }
3589
+ button('삭제하기'){
3590
+ top 1
3591
+ left 3
3582
3592
  on_clicked{
3583
3593
  m = Array.new
3584
3594
  for n in 0..@data['제목설정']['제목'].length-1
@@ -3593,6 +3603,7 @@ class Wordpress
3593
3603
  @data['제목설정']['제목'].delete(nil)
3594
3604
  }
3595
3605
  }
3606
+ }
3596
3607
  @data['제목설정']['순서사용'] = checkbox('순서사용'){
3597
3608
  stretchy false
3598
3609
  on_toggled{ |c|
@@ -3610,6 +3621,23 @@ class Wordpress
3610
3621
  }
3611
3622
  }
3612
3623
  }
3624
+ vertical_separator{
3625
+ stretchy false
3626
+ }
3627
+ horizontal_box{
3628
+ stretchy false
3629
+ grid{
3630
+ @data['포스트설정']['gpt제목'] = checkbox('제목을 이용해 GPT로 비슷한 제목 생성'){
3631
+
3632
+
3633
+ }}}
3634
+ horizontal_box{
3635
+ stretchy false
3636
+ grid{
3637
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3638
+ } } }
3639
+
3640
+
3613
3641
  table{
3614
3642
  checkbox_column('선택'){
3615
3643
  editable true
@@ -3620,6 +3648,7 @@ class Wordpress
3620
3648
 
3621
3649
  cell_rows @data['제목설정']['제목']
3622
3650
  }
3651
+
3623
3652
 
3624
3653
  }
3625
3654
  vertical_separator{
@@ -3647,7 +3676,10 @@ class Wordpress
3647
3676
  }
3648
3677
  horizontal_box{
3649
3678
  stretchy false
3679
+ grid{
3650
3680
  button('전체선택'){
3681
+ top 1
3682
+ left 1
3651
3683
  on_clicked{
3652
3684
  for n in 0..@data['내용설정']['내용'].length-1
3653
3685
  @data['내용설정']['내용'][n][0] = true
@@ -3656,7 +3688,20 @@ class Wordpress
3656
3688
  end
3657
3689
  }
3658
3690
  }
3659
- button('내용삭제'){
3691
+ button('선택해제'){
3692
+ top 1
3693
+ left 2
3694
+ on_clicked{
3695
+ for n in 0..@data['내용설정']['내용'].length-1
3696
+ @data['내용설정']['내용'][n][0] = false
3697
+ @data['내용설정']['내용'] << []
3698
+ @data['내용설정']['내용'].pop
3699
+ end
3700
+ }
3701
+ }
3702
+ button('삭제하기'){
3703
+ top 1
3704
+ left 3
3660
3705
  on_clicked{
3661
3706
  m = Array.new
3662
3707
  for n in 0..@data['내용설정']['내용'].length-1
@@ -3671,6 +3716,7 @@ class Wordpress
3671
3716
  @data['내용설정']['내용'].delete(nil)
3672
3717
  }
3673
3718
  }
3719
+ }
3674
3720
  @data['내용설정']['순서사용'] = checkbox('순서사용'){
3675
3721
  stretchy false
3676
3722
  on_toggled{ |c|
@@ -3688,6 +3734,22 @@ class Wordpress
3688
3734
  }
3689
3735
  }
3690
3736
  }
3737
+ vertical_separator{
3738
+ stretchy false
3739
+ }
3740
+ horizontal_box{
3741
+ stretchy false
3742
+ grid{
3743
+ @data['포스트설정']['gpt내용'] = checkbox('내용파일을 이용해 GPT로 글 변형'){
3744
+
3745
+
3746
+ }}}
3747
+ horizontal_box{
3748
+ stretchy false
3749
+ grid{
3750
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3751
+ } } }
3752
+
3691
3753
  table{
3692
3754
  checkbox_column('선택'){
3693
3755
  editable true
@@ -3705,8 +3767,8 @@ class Wordpress
3705
3767
  stretchy false
3706
3768
  text "내용폴더경로 ex)C:\\내용\\폴더1"
3707
3769
  }
3708
- button('폴더째로불러오기'){
3709
- stretchy false
3770
+ button('폴더째로 불러오기'){
3771
+
3710
3772
  on_clicked{
3711
3773
  path = @data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
3712
3774
  Dir.entries(@data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -3804,7 +3866,7 @@ class Wordpress
3804
3866
  text "사진폴더경로 ex)C:\\사진\\폴더2"
3805
3867
  }
3806
3868
  button('폴더째로불러오기'){
3807
- stretchy false
3869
+
3808
3870
  on_clicked{
3809
3871
  path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
3810
3872
  Dir.entries(@data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -4057,6 +4119,18 @@ class Wordpress
4057
4119
  @data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
4058
4120
  top 2
4059
4121
  left 0
4122
+ #enabled false # 기본적으로 비활성화
4123
+ on_toggled {
4124
+ if @data['포스트설정']['제목에키워드삽입'].checked?
4125
+ @data['포스트설정']['제목앞'].enabled = true # '내용투명' 활성화
4126
+ @data['포스트설정']['제목뒤'].enabled = true # '내용투명' 활성화
4127
+ else
4128
+ @data['포스트설정']['제목앞'].checked = false # 체크 해제
4129
+ @data['포스트설정']['제목앞'].enabled = false # 비활성화
4130
+ @data['포스트설정']['제목뒤'].checked = false # 체크 해제
4131
+ @data['포스트설정']['제목뒤'].enabled = false # 비활성화
4132
+ end
4133
+ }
4060
4134
  }
4061
4135
  @data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
4062
4136
  top 2
@@ -4079,6 +4153,7 @@ class Wordpress
4079
4153
  @data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
4080
4154
  top 3
4081
4155
  left 3
4156
+ enabled false # 기본적으로 비활성화
4082
4157
  on_toggled{
4083
4158
  if @data['포스트설정']['제목앞'].checked? == true
4084
4159
  if @data['포스트설정']['제목뒤'].checked?
@@ -4094,6 +4169,7 @@ class Wordpress
4094
4169
  @data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
4095
4170
  top 4
4096
4171
  left 3
4172
+ enabled false # 기본적으로 비활성화
4097
4173
  on_toggled{
4098
4174
  if @data['포스트설정']['제목뒤'].checked? == true
4099
4175
  if @data['포스트설정']['제목앞'].checked?
@@ -4102,26 +4178,51 @@ class Wordpress
4102
4178
  end
4103
4179
  }
4104
4180
  }
4105
- @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4181
+ @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 특수문자 삽입'){
4106
4182
  top 4
4107
4183
  left 0
4108
4184
  }
4109
-
4110
- @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
4185
+ @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4111
4186
  top 5
4112
4187
  left 0
4188
+ on_toggled{
4189
+ if @data['포스트설정']['제목을랜덤'].checked? == true
4190
+ if @data['포스트설정']['제목내용설정'].checked?
4191
+ @data['포스트설정']['제목내용설정'].checked = false
4192
+ end
4193
+ end
4194
+ }
4113
4195
  }
4114
- @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4196
+ @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4115
4197
  top 6
4116
4198
  left 0
4199
+ on_toggled{
4200
+ if @data['포스트설정']['제목내용설정'].checked? == true
4201
+ if @data['포스트설정']['제목을랜덤'].checked?
4202
+ @data['포스트설정']['제목을랜덤'].checked = false
4203
+ end
4204
+ end
4205
+ }
4117
4206
  }
4118
4207
  @data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
4119
4208
  top 7
4120
4209
  left 0
4210
+ on_toggled {
4211
+ if @data['포스트설정']['내용키워드삽입'].checked?
4212
+ @data['포스트설정']['키워드삽입'].enabled = true # '내용투명' 활성화
4213
+ @data['포스트설정']['키워드삽입시링크'].enabled = true # '내용투명' 활성화
4214
+ else
4215
+ @data['포스트설정']['키워드삽입'].checked = false # 체크 해제
4216
+ @data['포스트설정']['키워드삽입'].enabled = false # 비활성화
4217
+ @data['포스트설정']['키워드삽입시링크'].text = 'URL' # 기본 텍스트 설정
4218
+ @data['포스트설정']['키워드삽입시링크'].enabled = false # 비활성화
4219
+ end
4220
+ }
4121
4221
  }
4122
4222
  @data['포스트설정']['키워드삽입시작숫자'] = entry(){
4123
4223
  top 7
4124
4224
  left 1
4225
+
4125
4226
  text '최소수량'
4126
4227
  }
4127
4228
  label('~'){
@@ -4134,63 +4235,61 @@ class Wordpress
4134
4235
  text '최대수량'
4135
4236
  }
4136
4237
  @data['포스트설정']['키워드삽입'] = checkbox('내용 키워드 삽입시 링크 삽입'){
4238
+ enabled false # 기본적으로 비활성화
4137
4239
  top 8
4138
4240
  left 0
4139
4241
  }
4140
4242
  @data['포스트설정']['키워드삽입시링크'] = entry(){
4243
+ enabled false # 기본적으로 비활성화
4141
4244
  top 8
4142
4245
  left 1
4143
4246
  text 'URL'
4144
4247
  }
4145
- @data['포스트설정']['내용을자동생성'] = checkbox('내용을 키워드 기반으로 자동 생성해서 포스팅'){
4248
+ @data['포스트설정']['내용을자동생성'] = checkbox('키워드기반 생성으로만 등록(GPT 사용시 자체 생성)'){
4146
4249
  top 9
4147
4250
  left 0
4148
4251
  on_toggled{
4149
4252
  if @data['포스트설정']['내용을자동생성'].checked?
4150
- if @data['포스트설정']['내용과자동생성'].checked?
4151
- @data['포스트설정']['내용과자동생성'].checked = false
4152
- end
4253
+ @data['포스트설정']['내용과자동생성'].checked = false
4254
+ @data['포스트설정']['내용투명'].checked = false
4255
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4256
+
4153
4257
  end
4154
4258
  }
4155
4259
  }
4156
4260
 
4157
- @data['포스트설정']['gpt'] = checkbox('내용을 키워드 기반의 GPT로 생성해서 포스팅'){
4158
- top 10
4159
- left 0
4160
- }
4161
4261
 
4162
- @data['포스트설정']['api_key'] = entry(){
4163
- top 10
4164
- left 1
4165
- text 'api key'
4166
- }
4167
-
4168
- @data['포스트설정']['gpt상단'] = checkbox('원고내용 위에 넣기'){
4169
- top 10
4170
- left 3
4171
- }
4172
-
4173
- @data['포스트설정']['gpt하단'] = checkbox('원고내용 아래에 넣기'){
4174
- top 11
4175
- left 3
4176
- }
4262
+
4177
4263
 
4178
4264
  aa1 = 2
4179
- @data['포스트설정']['내용과자동생성'] = checkbox('내용을 내용 파일 + 자동 생성 조합으로 포스팅'){
4265
+ @data['포스트설정']['내용과자동생성'] = checkbox('내용파일+키워드기반 생성 등록(GPT 사용시 자체 생성)') {
4180
4266
  top 10 + aa1
4181
4267
  left 0
4182
- on_toggled{
4183
- if @data['포스트설정']['내용과자동생성'].checked?
4184
- if @data['포스트설정']['내용을자동생성'].checked?
4185
- @data['포스트설정']['내용을자동생성'].checked = false
4186
- end
4187
- end
4268
+ on_toggled {
4269
+ if @data['포스트설정']['내용과자동생성'].checked?
4270
+ @data['포스트설정']['내용을자동생성'].checked = false
4271
+ @data['포스트설정']['내용투명'].enabled = true # '내용투명' 활성화
4272
+ @data['포스트설정']['자동글 수식에 입력'].enabled = true # '내용투명' 활성화
4273
+ else
4274
+ @data['포스트설정']['내용투명'].checked = false # 체크 해제
4275
+ @data['포스트설정']['내용투명'].enabled = false # 비활성화
4276
+ @data['포스트설정']['자동글 수식에 입력'].checked = false # 체크 해제
4277
+ @data['포스트설정']['자동글 수식에 입력'].enabled = false # 비활성화
4278
+ end
4188
4279
  }
4189
- }
4190
- @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리'){
4191
- top 11+ aa1
4280
+ }
4281
+
4282
+ @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리') {
4283
+ top 11 + aa1
4192
4284
  left 0
4193
- }
4285
+ enabled false # 기본적으로 비활성화
4286
+ on_toggled {
4287
+ if @data['포스트설정']['내용투명'].checked?
4288
+ @data['포스트설정']['내용을자동생성'].checked = false
4289
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4290
+ end
4291
+ }
4292
+ }
4194
4293
  @data['포스트설정']['내용자동변경'] = checkbox('내용에 단어들을 자동 변경'){
4195
4294
  top 12+ aa1
4196
4295
  left 0
@@ -4218,6 +4317,18 @@ class Wordpress
4218
4317
  @data['포스트설정']['내용사진자동삽입'] = checkbox('내용 사진 자동 삽입'){
4219
4318
  top 13+ aa1
4220
4319
  left 0
4320
+ #enabled false # 기본적으로 비활성화
4321
+ on_toggled {
4322
+ if @data['포스트설정']['내용사진자동삽입'].checked?
4323
+ @data['포스트설정']['내용사진링크'].enabled = true # '내용투명' 활성화
4324
+ @data['포스트설정']['내용사진링크값'].enabled = true # '내용투명' 활성화
4325
+ else
4326
+ @data['포스트설정']['내용사진링크'].checked = false # 체크 해제
4327
+ @data['포스트설정']['내용사진링크'].enabled = false # 비활성화
4328
+ @data['포스트설정']['내용사진링크값'].text = 'URL' # 기본 텍스트 설정
4329
+ @data['포스트설정']['내용사진링크값'].enabled = false # 비활성화
4330
+ end
4331
+ }
4221
4332
  }
4222
4333
  @data['포스트설정']['내용사진자동삽입시작숫자'] = entry(){
4223
4334
  top 13+ aa1
@@ -4235,15 +4346,28 @@ class Wordpress
4235
4346
  }
4236
4347
 
4237
4348
  @data['포스트설정']['내용사진링크'] = checkbox('내용 사진 자동 삽입시 링크 삽입'){
4349
+ enabled false # 기본적으로 비활성화
4238
4350
  top 14+ aa1
4239
4351
  left 0
4240
4352
  }
4241
4353
 
4242
4354
  @data['포스트설정']['내용사진링크값'] = entry(){
4355
+ enabled false # 기본적으로 비활성화
4243
4356
  top 14+ aa1
4244
4357
  left 1
4245
4358
  text 'URL'
4246
4359
  }
4360
+
4361
+ @data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기'){
4362
+ top 15+ aa1
4363
+ left 0
4364
+ }
4365
+
4366
+ @data['포스트설정']['api_key'] = entry(){
4367
+ top 15+ aa1
4368
+ left 1
4369
+ text 'api key 입력 필수!!'
4370
+ }
4247
4371
  }
4248
4372
  }
4249
4373
 
@@ -4434,6 +4558,22 @@ class Wordpress
4434
4558
  @data['포스트설정']['막글삽입'] = checkbox('내용 하단에 막글 삽입'){
4435
4559
  top 6
4436
4560
  left 0
4561
+ #enabled false # 기본적으로 비활성화
4562
+ on_toggled {
4563
+ if @data['포스트설정']['막글삽입'].checked?
4564
+ @data['포스트설정']['막글투명'].enabled = true # '내용투명' 활성화
4565
+ @data['포스트설정']['막글그대로'].enabled = true # '내용투명' 활성화
4566
+ @data['포스트설정']['막글 수식에 입력'].enabled = true # '내용투명' 활성화
4567
+
4568
+ else
4569
+ @data['포스트설정']['막글투명'].checked = false # 체크 해제
4570
+ @data['포스트설정']['막글투명'].enabled = false # 비활성화
4571
+ @data['포스트설정']['막글그대로'].checked = false # 체크 해제
4572
+ @data['포스트설정']['막글그대로'].enabled = false # 비활성화
4573
+ @data['포스트설정']['막글 수식에 입력'].checked = false # 체크 해제
4574
+ @data['포스트설정']['막글 수식에 입력'].enabled = false # 비활성화
4575
+ end
4576
+ }
4437
4577
  }
4438
4578
  @data['포스트설정']['막글삽입시작숫자'] = entry{
4439
4579
  top 6
@@ -4463,10 +4603,12 @@ class Wordpress
4463
4603
  @data['포스트설정']['막글투명'] = checkbox('막글 안보이게 처리'){
4464
4604
  top 7
4465
4605
  left 0
4606
+ enabled false # 기본적으로 비활성화
4466
4607
  }
4467
4608
  @data['포스트설정']['막글그대로'] = checkbox('막글 그대로 입력'){
4468
4609
  top 7
4469
4610
  left 1
4611
+ enabled false # 기본적으로 비활성화
4470
4612
  }
4471
4613
 
4472
4614
  @data['포스트설정']['태그삽입1'] = checkbox('태그삽입'){
@@ -4491,11 +4633,19 @@ class Wordpress
4491
4633
  @data['포스트설정']['자동글 수식에 입력'] = checkbox('자동글 수식에 입력'){
4492
4634
  top 9
4493
4635
  left 0
4636
+ enabled false # 기본적으로 비활성화
4637
+ on_toggled {
4638
+ if @data['포스트설정']['자동글 수식에 입력'].checked?
4639
+ @data['포스트설정']['내용을자동생성'].checked = false
4640
+ @data['포스트설정']['내용투명'].checked = false
4641
+ end
4642
+ }
4494
4643
  }
4495
4644
 
4496
4645
  @data['포스트설정']['막글 수식에 입력'] = checkbox('막글 수식에 입력'){
4497
4646
  top 9
4498
4647
  left 1
4648
+ enabled false # 기본적으로 비활성화
4499
4649
  }
4500
4650
 
4501
4651
 
@@ -4578,10 +4728,22 @@ class Wordpress
4578
4728
  @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용'){
4579
4729
  top 15
4580
4730
  left 0
4731
+ on_toggled{
4732
+ if @data['포스트설정']['테더링'].checked?
4733
+ @data['포스트설정']['프록시'].checked = false
4734
+
4735
+ end
4736
+ }
4581
4737
  }
4582
4738
  @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용'){
4583
4739
  top 15
4584
4740
  left 1
4741
+ on_toggled{
4742
+ if @data['포스트설정']['프록시'].checked?
4743
+ @data['포스트설정']['테더링'].checked = false
4744
+
4745
+ end
4746
+ }
4585
4747
  }
4586
4748
  button('프록시 IP 파일 불러오기'){
4587
4749
  top 15