cafe_buy_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_buy_duo.rb +533 -373
  3. metadata +2 -2
data/lib/cafe_buy_duo.rb CHANGED
@@ -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
@@ -942,52 +996,10 @@ end
942
996
  noko = Nokogiri::HTML(content, nil, Encoding::UTF_8.to_s)
943
997
  toomung = 0
944
998
  h = Hash.new
945
- # h[:authority] = 'blog.naver.com'
946
- # h[:method] = 'POST'
947
- # h[:path] = '/RabbitWrite.naver'
948
- # h[:scheme] = 'https'
949
- # h['accept'] = 'application/json, text/plain, */*'
950
- # h['accept-encoding'] = 'gzip, deflate, br'
951
- # h['accept-language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
952
- # h['content-type'] = 'application/x-www-form-urlencoded'
953
- # h['cookie'] = @cookie
954
- # h['origin'] = 'https://blog.naver.com'
955
- # h['referer'] = 'https://blog.naver.com/'+@user_id+'/postwrite?categoryNo=1'
956
- # h['sec-ch-ua'] = '"Chromium";v="106", "Google Chrome";v="106", "Not;A=Brand";v="99"'
957
- # h['sec-ch-ua-mobile'] = '?0'
958
- # h['sec-ch-ua-platform'] = '"Windows"'
959
- # h['sec-fetch-dest'] = 'empty'
960
- # h['sec-fetch-mode'] = 'cors'
961
- # h['sec-fetch-site'] = 'same-origin'
962
- # 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'
999
+
963
1000
 
964
1001
  data = Hash.new
965
- # data['blogId'] = @user_id
966
- # data['documentModel'] = Hash.new
967
- # data['documentModel']['documentId'] = ''
968
- # data['documentModel']['document'] = Hash.new
969
- # data['documentModel']['document']['version'] = '2.6.0'
970
- # data['documentModel']['document']['theme'] = 'default'
971
- # data['documentModel']['document']['language'] = 'ko-KR'
972
- # data['documentModel']['document']['components'] = Array.new
973
- # data['documentModel']['document']['components'][0] = {
974
- # 'id' => create_id(),
975
- # 'layout' => 'default',
976
- # 'title' => [
977
- # {
978
- # 'id' => create_id(),
979
- # 'nodes' => [{
980
- # 'id' => create_id(),
981
- # 'value' => title,
982
- # '@ctype' => 'textNode'
983
- # }],
984
- # '@ctype' => 'paragraph'
985
- # }
986
- # ],
987
- # 'subTitle' => nil,
988
- # 'align' => 'left',
989
- # '@ctype' => 'documentTitle'
990
- # }
1002
+
991
1003
 
992
1004
  check_position = 1
993
1005
  noko.css('p').each do |i|
@@ -1037,21 +1049,7 @@ end
1037
1049
  sleep(3)
1038
1050
  key_stroke('enter')
1039
1051
  sleep(3)
1040
- # @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
1041
- # puts path = CGI.unescape(path)
1042
- # image_data = image_update(path)
1043
- # components_value = Hash.new
1044
- # components_value['id'] = create_id()
1045
- # components_value['layout'] = 'default'
1046
- # begin
1047
- # if i.to_s.split('text-align: ')[1].split(';')[0] == 'center'
1048
- # components_value['align'] = 'center'
1049
- # elsif i.to_s.split('text-align: ')[1].split(';')[0] == 'right'
1050
- # components_value['align'] = 'right'
1051
- # else
1052
-
1053
- # end
1054
- # rescue
1052
+
1055
1053
 
1056
1054
  if i2.to_s.split('href="')[1] != nil
1057
1055
  href2 = i2.to_s.split('href="')[1].split('"')[0]
@@ -1067,30 +1065,7 @@ end
1067
1065
  #key_stroke('enter')
1068
1066
  sleep(1)
1069
1067
  end
1070
- # end
1071
- # components_value['src'] = 'https://blogfiles.pstatic.net'+image_data['item']['url']+'?type=w1'
1072
- # components_value['internalResource'] = true
1073
- # components_value['represent'] = true
1074
- # components_value['path'] = image_data['item']['url']
1075
- # components_value['domain'] = "https://blogfiles.pstatic.net"
1076
- # components_value['fileSize'] = image_data['item']['fileSize'].to_i
1077
- # components_value['width'] = image_data['item']['width'].to_i
1078
- # components_value['widthPercentage'] = 0
1079
- # components_value['height'] = image_data['item']['height'].to_i
1080
- # components_value['fileName'] = image_data['item']['fileName'].to_i
1081
- # components_value['caption'] = nil
1082
- # if i2.to_s.split('href="')[1] != nil
1083
- # components_value['link'] = CGI.unescape(i2.to_s.split('href="')[1].split('"')[0])
1084
- # end
1085
- # components_value['format'] = 'normal'
1086
- # components_value['displayFormat'] = 'normal'
1087
- # components_value['imageLoaded'] = true
1088
- # components_value['contentMode'] = 'fit'
1089
- # components_value['origin'] = {
1090
- # 'srcFrom' => 'local',
1091
- # '@ctype' => 'imageOrigin'
1092
- # }
1093
- # components_value['@ctype'] = 'image'
1068
+
1094
1069
  elsif i2.to_s.include?('<video')
1095
1070
  path = i2.to_s.split('src="')[1].split('"')[0]
1096
1071
  path = URI.decode_www_form(path)[0][0]
@@ -1126,11 +1101,20 @@ end
1126
1101
  sleep(3)
1127
1102
  @driver.action.key_down(:up).key_up(:up).perform #x탭
1128
1103
  sleep(1)
1104
+ begin
1105
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1106
+ #요소가 나타날 때까지 60초 동안 기다립니다.
1107
+ wait.until { @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]') }
1108
+ sleep(1)
1129
1109
  @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
1110
+ sleep(1)
1130
1111
  @driver.action.send_keys(title).perform
1131
1112
  sleep(1)
1132
1113
  @driver.action.key_down(:enter).key_up(:enter).perform #엔터
1133
1114
  sleep(1)
1115
+ rescue
1116
+ @driver.action.key_down(:down).key_up(:down).perform
1117
+ end
1134
1118
 
1135
1119
  elsif i2.to_s.include?('<inyonggoo')
1136
1120
  if i2.text == ''
@@ -2020,108 +2004,19 @@ class Wordpress
2020
2004
 
2021
2005
 
2022
2006
 
2007
+ #def chrome_start(url, user_id, user_pw)
2008
+ # @url = url
2009
+ # @user_id = user_id
2010
+ # @user_pw = user_pw
2011
+ # begin
2012
+ # Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
2013
+ # @driver = Selenium::WebDriver.for :chrome
2014
+ # rescue
2015
+ # @driver = Selenium::WebDriver.for :chrome
2016
+ # end
2017
+ #end
2023
2018
 
2024
- def chrome_start(url, user_id, user_pw)
2025
- @url = url
2026
- @user_id = user_id
2027
- @user_pw = user_pw
2028
- begin
2029
- Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
2030
- @driver = Selenium::WebDriver.for :chrome
2031
- rescue
2032
- @driver = Selenium::WebDriver.for :chrome
2033
- end
2034
- end
2035
-
2036
- def login
2037
- @driver.get(@url+'/wp-admin')
2038
- @driver.find_element(:xpath , '//*[@id="user_login"]').send_keys(@user_id)
2039
- @driver.find_element(:xpath , '//*[@id="user_pass"]').send_keys(@user_pw)
2040
- @driver.find_element(:xpath , '//*[@id="wp-submit"]').click
2041
- @cookie = Hash.new
2042
- @driver.manage.all_cookies.each do |i|
2043
- @cookie[i[:name]] = i[:value]
2044
- end
2045
- sleep(2)
2046
- begin
2047
- puts @driver.find_element(:xpath , '/html/body/div/div/div[1]/div[1]/div/div[1]/a[1]/span').text
2048
- @driver.close
2049
- return 1
2050
- rescue => e
2051
- puts e
2052
- @driver.close
2053
- return 0
2054
- end
2055
- end
2056
2019
 
2057
- def update
2058
- http = HTTP.cookies(@cookie).get(@url+'/wp-admin/post-new.php')
2059
- noko = Nokogiri::HTML(http.to_s)
2060
- @wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
2061
- @data2 = Hash.new
2062
- @data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]')[0]['value']
2063
- @data2['_wp_http_referer'] = '/wp-admin/post-new.php'
2064
- @data2['user_ID'] = '1'
2065
- @data2['action'] = 'editpost'
2066
- @data2['originalaction'] = 'editpost'
2067
- @data2['post_author'] = '1'
2068
- @data2['post_type'] = 'post'
2069
- @data2['original_post_status'] = 'auto-draft'
2070
- @data2['referredby'] = @url+'/wp-admin/update-core.php'
2071
- @data2['_wp_original_http_referer'] = @url+'/wp-admin/update-core.php'
2072
- @data2['auto_draft'] = nil
2073
- @data2['post_ID'] = noko.xpath('//*[@id="post_ID"]')[0]['value']
2074
- @data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]')[0]['value']
2075
- @data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]')[0]['value']
2076
- @data2['post_title'] = 'title3'
2077
- @data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]')[0]['value']
2078
- @data2['content'] = 'content3'
2079
- @data2['wp-preview'] = nil
2080
- @data2['hidden_post_status'] = 'draft'
2081
- @data2['post_status'] = 'draft'
2082
- @data2['hidden_post_password'] = nil
2083
- @data2['hidden_post_visibility'] = 'public'
2084
- @data2['visibility'] = 'post'
2085
- @data2['post_password'] = nil
2086
- @data2['mm'] = '10'
2087
- @data2['jj'] = '24'
2088
- @data2['aa'] = '2022'
2089
- @data2['hh'] = '02'
2090
- @data2['mn'] = '41'
2091
- @data2['ss'] = '32'
2092
- @data2['hidden_mm'] = '10'
2093
- @data2['cur_mm'] = '10'
2094
- @data2['hidden_jj'] = '24'
2095
- @data2['cur_jj'] = '24'
2096
- @data2['hidden_aa'] = '2022'
2097
- @data2['cur_aa'] = '2022'
2098
- @data2['hidden_hh'] = '02'
2099
- @data2['cur_hh'] = '02'
2100
- @data2['hidden_mn'] = '41'
2101
- @data2['cur_mn'] = '41'
2102
- @data2['original_publish'] = '공개'
2103
- @data2['publish'] = '공개'
2104
- @data2['post_format'] = '0'
2105
- @data2['post_category[]'] = '0'
2106
- @data2['newcategory'] = '새 카테고리 이름'
2107
- @data2['newcategory_parent'] = -1
2108
- @data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]')[0]['value']
2109
- @data2['tax_input[post_tag]'] = nil
2110
- @data2['newtag[post_tag]'] = nil
2111
- @data2['_thumbnail_id'] = -1
2112
- @data2['excerpt'] = nil
2113
- @data2['trackback_url'] = nil
2114
- @data2['metakeyinput'] = nil
2115
- @data2['metavalue'] = nil
2116
- @data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]')[0]['value']
2117
- @data2['advanced_view'] = '1'
2118
- @data2['comment_status'] = 'open'
2119
- @data2['ping_status'] = 'open'
2120
- @data2['post_name'] = nil
2121
- @data2['post_author_override'] = '1'
2122
- #result_http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => @data)
2123
- return @data2
2124
- end
2125
2020
 
2126
2021
  def auto_image
2127
2022
  begin
@@ -2464,6 +2359,13 @@ class Wordpress
2464
2359
  end
2465
2360
  end
2466
2361
  end
2362
+
2363
+ if @data['포스트설정']['gpt제목'].checked?
2364
+ chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2365
+ gpt_text1 = chat.message(title)
2366
+ title = gpt_text1.to_s
2367
+ end
2368
+
2467
2369
  @data['table'][index][-1] = 5
2468
2370
  @data['table'] << []
2469
2371
  @data['table'].pop
@@ -2501,6 +2403,25 @@ class Wordpress
2501
2403
  end
2502
2404
  end
2503
2405
  end
2406
+
2407
+
2408
+ if @data['포스트설정']['gpt내용'].checked?
2409
+ api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
2410
+ #key_change = @data['포스트설정']['특정단어키워드로변경값'].text.to_s.force_encoding('utf-8')
2411
+ #imotcon_change = @data['포스트설정']['스티커로변경단어'].text.to_s.force_encoding('utf-8')
2412
+ #template_change = @data['포스트설정']['내템플릿변경단어'].text.to_s.force_encoding('utf-8')
2413
+ #ttdanar_change = @data['포스트설정']['단어링크적용단어'].text.to_s.force_encoding('utf-8')
2414
+ #sajine_change = @data['포스트설정']['단어사진으로변경단어'].text.to_s.force_encoding('utf-8')
2415
+ #mov_change = @data['포스트설정']['영상으로변경단어'].text.to_s.force_encoding('utf-8')
2416
+ #map_change = @data['포스트설정']['지도로변경단어'].text.to_s.force_encoding('utf-8')
2417
+ #inyong9_change = @data['포스트설정']['인용구변경단어'].text.to_s.force_encoding('utf-8')
2418
+
2419
+
2420
+ chat = Chat_content.new(api_key)
2421
+ gpt_text3 = chat.message(content)
2422
+ content = gpt_text3.to_s
2423
+ end
2424
+
2504
2425
  content_tag = content.split('@##@')[1]
2505
2426
  content = content.split('@##@')[0]
2506
2427
  @data['table'][index][-1] = 15
@@ -2699,7 +2620,7 @@ class Wordpress
2699
2620
  @data['table'][index][-1] = 50
2700
2621
  @data['table'] << []
2701
2622
  @data['table'].pop
2702
- if @data['포스트설정']['gpt'].checked?
2623
+ if @data['포스트설정']['gpt키워드'].checked?
2703
2624
  chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2704
2625
  gpt_text = chat.message(keyword)
2705
2626
  content = content + "\n(자동생성글)\n" + gpt_text
@@ -2720,7 +2641,7 @@ class Wordpress
2720
2641
  joongbok_check = 0
2721
2642
  counter10 = 0
2722
2643
  while joongbok_check == 0
2723
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2644
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2724
2645
  content22 = content.split("(자동생성글)")[1].split("\n")
2725
2646
  else
2726
2647
  content22 = content.split("\n")
@@ -2744,12 +2665,12 @@ class Wordpress
2744
2665
  content2 = content.split("\n")
2745
2666
  end
2746
2667
 
2747
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2668
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2748
2669
  content2 = content.split("(자동생성글)")[1].split("\n")
2749
2670
  position.pop
2750
2671
  end
2751
2672
 
2752
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2673
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2753
2674
  content2 = content.split("\n")
2754
2675
  end
2755
2676
 
@@ -2795,7 +2716,7 @@ class Wordpress
2795
2716
  content = content3.join("\n")
2796
2717
  end
2797
2718
 
2798
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2719
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2799
2720
  content2.each_with_index do |con, index|
2800
2721
  if position.include?(index)
2801
2722
  insert_keyword_text = keyword.to_s
@@ -2825,7 +2746,7 @@ class Wordpress
2825
2746
  end
2826
2747
  end
2827
2748
 
2828
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2749
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2829
2750
  begin
2830
2751
  content2.each_with_index do |con, index|
2831
2752
  if position.include?(index)
@@ -2920,7 +2841,7 @@ class Wordpress
2920
2841
  end
2921
2842
  end
2922
2843
 
2923
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2844
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2924
2845
  if @data['포스트설정']['자동글 수식에 입력'].checked?
2925
2846
  content5 = content.split("(자동생성글)")[0].to_s.split("\n")
2926
2847
  content55 = content.split("(자동생성글)")[1].to_s
@@ -2952,7 +2873,7 @@ class Wordpress
2952
2873
 
2953
2874
  position = position.sort
2954
2875
  ##여기서부터 이미지 순서대로 안되서 변경####-------------------------------------------------------------------------------
2955
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2876
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2956
2877
  # image_url22 = get_image_file().force_encoding('utf-8')
2957
2878
  # end
2958
2879
 
@@ -2970,7 +2891,7 @@ class Wordpress
2970
2891
  # end
2971
2892
  # end
2972
2893
 
2973
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2894
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2974
2895
  # content = content5.join("\n")+'(자동생성글)'+content55
2975
2896
  # iconv = Iconv.new('UTF-8', 'ASCII-8BIT')
2976
2897
  # content = iconv.iconv(content)
@@ -2990,7 +2911,7 @@ class Wordpress
2990
2911
  ###여기까지 이미지 순서대로 안되서 변경##-------------------------------------------------------------------------------
2991
2912
 
2992
2913
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
2993
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2914
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2994
2915
  sleep(2)
2995
2916
  puts '이미지 자동 세탁 중 · · · '
2996
2917
  end
@@ -3009,7 +2930,7 @@ class Wordpress
3009
2930
  end
3010
2931
  sleep(2)
3011
2932
  puts '이미지 자동 세탁 완료 · · · '
3012
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2933
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
3013
2934
  content = content5.join("\n")+'(자동생성글)'+content55
3014
2935
  puts content
3015
2936
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
@@ -3149,7 +3070,7 @@ class Wordpress
3149
3070
  content = content
3150
3071
  soosick_1 = content_end
3151
3072
  else
3152
- if @data['포스트설정']['gpt'].checked?
3073
+ if @data['포스트설정']['gpt키워드'].checked?
3153
3074
  if @data['포스트설정']['gpt상단'].checked?
3154
3075
  content = content_end+"\n"+content+"\n"
3155
3076
  else
@@ -3824,7 +3745,10 @@ class Wordpress
3824
3745
  }
3825
3746
  horizontal_box{
3826
3747
  stretchy false
3748
+ grid{
3827
3749
  button('전체선택'){
3750
+ top 1
3751
+ left 1
3828
3752
  on_clicked{
3829
3753
  for n in 0..@data['키워드설정']['키워드'].length-1
3830
3754
  @data['키워드설정']['키워드'][n][0] = true
@@ -3833,7 +3757,20 @@ class Wordpress
3833
3757
  end
3834
3758
  }
3835
3759
  }
3836
- button('키워드삭제'){
3760
+ button('선택해제'){
3761
+ top 1
3762
+ left 2
3763
+ on_clicked{
3764
+ for n in 0..@data['키워드설정']['키워드'].length-1
3765
+ @data['키워드설정']['키워드'][n][0] = false
3766
+ @data['키워드설정']['키워드'] << []
3767
+ @data['키워드설정']['키워드'].pop
3768
+ end
3769
+ }
3770
+ }
3771
+ button('삭제하기'){
3772
+ top 1
3773
+ left 3
3837
3774
  on_clicked{
3838
3775
  m = Array.new
3839
3776
  for n in 0..@data['키워드설정']['키워드'].length-1
@@ -3848,6 +3785,8 @@ class Wordpress
3848
3785
  @data['키워드설정']['키워드'].delete(nil)
3849
3786
  }
3850
3787
  }
3788
+ }
3789
+
3851
3790
  @data['키워드설정']['순서사용'] = checkbox('순서사용'){
3852
3791
  stretchy false
3853
3792
  on_toggled{ |c|
@@ -3865,6 +3804,59 @@ class Wordpress
3865
3804
  }
3866
3805
  }
3867
3806
  }
3807
+ vertical_separator{
3808
+ stretchy false
3809
+ }
3810
+ horizontal_box{
3811
+ stretchy false
3812
+ grid{
3813
+ @data['포스트설정']['gpt키워드'] = checkbox('GPT 키워드 기반 글 생성'){
3814
+ top 1
3815
+ left 0
3816
+ #enabled false # 기본적으로 비활성화
3817
+ on_toggled {
3818
+ if @data['포스트설정']['gpt키워드'].checked?
3819
+ @data['포스트설정']['gpt상단'].enabled = true # '내용투명' 활성화
3820
+ @data['포스트설정']['gpt하단'].enabled = true # '내용투명' 활성화
3821
+ else
3822
+ @data['포스트설정']['gpt상단'].checked = false # 체크 해제
3823
+ @data['포스트설정']['gpt상단'].enabled = false # 비활성화
3824
+ @data['포스트설정']['gpt하단'].checked = false # 체크 해제
3825
+ @data['포스트설정']['gpt하단'].enabled = false # 비활성화
3826
+ end
3827
+ }
3828
+
3829
+ }
3830
+
3831
+ @data['포스트설정']['gpt상단'] = checkbox('원고 위에 넣기'){
3832
+ top 1
3833
+ left 1
3834
+ enabled false # 기본적으로 비활성화
3835
+ on_toggled{
3836
+ if @data['포스트설정']['gpt상단'].checked?
3837
+ @data['포스트설정']['gpt하단'].checked = false
3838
+ end
3839
+ }
3840
+ }
3841
+
3842
+ @data['포스트설정']['gpt하단'] = checkbox('원고 아래 넣기'){
3843
+ top 1
3844
+ left 2
3845
+ enabled false # 기본적으로 비활성화
3846
+ on_toggled{
3847
+ if @data['포스트설정']['gpt하단'].checked?
3848
+ @data['포스트설정']['gpt상단'].checked = false
3849
+ end
3850
+ }
3851
+ }
3852
+ } }
3853
+ horizontal_box{
3854
+ stretchy false
3855
+ grid{
3856
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3857
+ } } }
3858
+
3859
+
3868
3860
  table{
3869
3861
  checkbox_column('선택'){
3870
3862
  editable true
@@ -3875,7 +3867,9 @@ class Wordpress
3875
3867
 
3876
3868
  cell_rows @data['키워드설정']['키워드']
3877
3869
  }
3878
-
3870
+
3871
+
3872
+
3879
3873
  }
3880
3874
  vertical_separator{
3881
3875
  stretchy false
@@ -3904,7 +3898,10 @@ class Wordpress
3904
3898
  }
3905
3899
  horizontal_box{
3906
3900
  stretchy false
3901
+ grid{
3907
3902
  button('전체선택'){
3903
+ top 1
3904
+ left 1
3908
3905
  on_clicked{
3909
3906
  for n in 0..@data['제목설정']['제목'].length-1
3910
3907
  @data['제목설정']['제목'][n][0] = true
@@ -3913,7 +3910,20 @@ class Wordpress
3913
3910
  end
3914
3911
  }
3915
3912
  }
3916
- button('제목삭제'){
3913
+ button('선택해제'){
3914
+ top 1
3915
+ left 2
3916
+ on_clicked{
3917
+ for n in 0..@data['제목설정']['제목'].length-1
3918
+ @data['제목설정']['제목'][n][0] = false
3919
+ @data['제목설정']['제목'] << []
3920
+ @data['제목설정']['제목'].pop
3921
+ end
3922
+ }
3923
+ }
3924
+ button('삭제하기'){
3925
+ top 1
3926
+ left 3
3917
3927
  on_clicked{
3918
3928
  m = Array.new
3919
3929
  for n in 0..@data['제목설정']['제목'].length-1
@@ -3928,6 +3938,7 @@ class Wordpress
3928
3938
  @data['제목설정']['제목'].delete(nil)
3929
3939
  }
3930
3940
  }
3941
+ }
3931
3942
  @data['제목설정']['순서사용'] = checkbox('순서사용'){
3932
3943
  stretchy false
3933
3944
  on_toggled{ |c|
@@ -3945,6 +3956,23 @@ class Wordpress
3945
3956
  }
3946
3957
  }
3947
3958
  }
3959
+ vertical_separator{
3960
+ stretchy false
3961
+ }
3962
+ horizontal_box{
3963
+ stretchy false
3964
+ grid{
3965
+ @data['포스트설정']['gpt제목'] = checkbox('제목을 이용해 GPT로 비슷한 제목 생성'){
3966
+
3967
+
3968
+ }}}
3969
+ horizontal_box{
3970
+ stretchy false
3971
+ grid{
3972
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3973
+ } } }
3974
+
3975
+
3948
3976
  table{
3949
3977
  checkbox_column('선택'){
3950
3978
  editable true
@@ -3955,6 +3983,7 @@ class Wordpress
3955
3983
 
3956
3984
  cell_rows @data['제목설정']['제목']
3957
3985
  }
3986
+
3958
3987
 
3959
3988
  }
3960
3989
  vertical_separator{
@@ -3982,7 +4011,10 @@ class Wordpress
3982
4011
  }
3983
4012
  horizontal_box{
3984
4013
  stretchy false
4014
+ grid{
3985
4015
  button('전체선택'){
4016
+ top 1
4017
+ left 1
3986
4018
  on_clicked{
3987
4019
  for n in 0..@data['내용설정']['내용'].length-1
3988
4020
  @data['내용설정']['내용'][n][0] = true
@@ -3991,7 +4023,20 @@ class Wordpress
3991
4023
  end
3992
4024
  }
3993
4025
  }
3994
- button('내용삭제'){
4026
+ button('선택해제'){
4027
+ top 1
4028
+ left 2
4029
+ on_clicked{
4030
+ for n in 0..@data['내용설정']['내용'].length-1
4031
+ @data['내용설정']['내용'][n][0] = false
4032
+ @data['내용설정']['내용'] << []
4033
+ @data['내용설정']['내용'].pop
4034
+ end
4035
+ }
4036
+ }
4037
+ button('삭제하기'){
4038
+ top 1
4039
+ left 3
3995
4040
  on_clicked{
3996
4041
  m = Array.new
3997
4042
  for n in 0..@data['내용설정']['내용'].length-1
@@ -4006,6 +4051,7 @@ class Wordpress
4006
4051
  @data['내용설정']['내용'].delete(nil)
4007
4052
  }
4008
4053
  }
4054
+ }
4009
4055
  @data['내용설정']['순서사용'] = checkbox('순서사용'){
4010
4056
  stretchy false
4011
4057
  on_toggled{ |c|
@@ -4023,6 +4069,22 @@ class Wordpress
4023
4069
  }
4024
4070
  }
4025
4071
  }
4072
+ vertical_separator{
4073
+ stretchy false
4074
+ }
4075
+ horizontal_box{
4076
+ stretchy false
4077
+ grid{
4078
+ @data['포스트설정']['gpt내용'] = checkbox('내용파일을 이용해 GPT로 글 변형'){
4079
+
4080
+
4081
+ }}}
4082
+ horizontal_box{
4083
+ stretchy false
4084
+ grid{
4085
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
4086
+ } } }
4087
+
4026
4088
  table{
4027
4089
  checkbox_column('선택'){
4028
4090
  editable true
@@ -4040,8 +4102,8 @@ class Wordpress
4040
4102
  stretchy false
4041
4103
  text "내용폴더경로 ex)C:\\내용\\폴더1"
4042
4104
  }
4043
- button('폴더째로불러오기'){
4044
- stretchy false
4105
+ button('폴더째로 불러오기'){
4106
+
4045
4107
  on_clicked{
4046
4108
  path = @data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
4047
4109
  Dir.entries(@data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -4139,7 +4201,7 @@ class Wordpress
4139
4201
  text "사진폴더경로 ex)C:\\사진\\폴더2"
4140
4202
  }
4141
4203
  button('폴더째로불러오기'){
4142
- stretchy false
4204
+
4143
4205
  on_clicked{
4144
4206
  path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
4145
4207
  Dir.entries(@data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -4392,6 +4454,18 @@ class Wordpress
4392
4454
  @data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
4393
4455
  top 2
4394
4456
  left 0
4457
+ #enabled false # 기본적으로 비활성화
4458
+ on_toggled {
4459
+ if @data['포스트설정']['제목에키워드삽입'].checked?
4460
+ @data['포스트설정']['제목앞'].enabled = true # '내용투명' 활성화
4461
+ @data['포스트설정']['제목뒤'].enabled = true # '내용투명' 활성화
4462
+ else
4463
+ @data['포스트설정']['제목앞'].checked = false # 체크 해제
4464
+ @data['포스트설정']['제목앞'].enabled = false # 비활성화
4465
+ @data['포스트설정']['제목뒤'].checked = false # 체크 해제
4466
+ @data['포스트설정']['제목뒤'].enabled = false # 비활성화
4467
+ end
4468
+ }
4395
4469
  }
4396
4470
  @data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
4397
4471
  top 2
@@ -4414,6 +4488,7 @@ class Wordpress
4414
4488
  @data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
4415
4489
  top 3
4416
4490
  left 3
4491
+ enabled false # 기본적으로 비활성화
4417
4492
  on_toggled{
4418
4493
  if @data['포스트설정']['제목앞'].checked? == true
4419
4494
  if @data['포스트설정']['제목뒤'].checked?
@@ -4429,6 +4504,7 @@ class Wordpress
4429
4504
  @data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
4430
4505
  top 4
4431
4506
  left 3
4507
+ enabled false # 기본적으로 비활성화
4432
4508
  on_toggled{
4433
4509
  if @data['포스트설정']['제목뒤'].checked? == true
4434
4510
  if @data['포스트설정']['제목앞'].checked?
@@ -4437,26 +4513,51 @@ class Wordpress
4437
4513
  end
4438
4514
  }
4439
4515
  }
4440
- @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4516
+ @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 특수문자 삽입'){
4441
4517
  top 4
4442
4518
  left 0
4443
4519
  }
4444
-
4445
- @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
4520
+ @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4446
4521
  top 5
4447
4522
  left 0
4523
+ on_toggled{
4524
+ if @data['포스트설정']['제목을랜덤'].checked? == true
4525
+ if @data['포스트설정']['제목내용설정'].checked?
4526
+ @data['포스트설정']['제목내용설정'].checked = false
4527
+ end
4528
+ end
4529
+ }
4448
4530
  }
4449
- @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4531
+ @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4450
4532
  top 6
4451
4533
  left 0
4534
+ on_toggled{
4535
+ if @data['포스트설정']['제목내용설정'].checked? == true
4536
+ if @data['포스트설정']['제목을랜덤'].checked?
4537
+ @data['포스트설정']['제목을랜덤'].checked = false
4538
+ end
4539
+ end
4540
+ }
4452
4541
  }
4453
4542
  @data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
4454
4543
  top 7
4455
4544
  left 0
4545
+ on_toggled {
4546
+ if @data['포스트설정']['내용키워드삽입'].checked?
4547
+ @data['포스트설정']['키워드삽입'].enabled = true # '내용투명' 활성화
4548
+ @data['포스트설정']['키워드삽입시링크'].enabled = true # '내용투명' 활성화
4549
+ else
4550
+ @data['포스트설정']['키워드삽입'].checked = false # 체크 해제
4551
+ @data['포스트설정']['키워드삽입'].enabled = false # 비활성화
4552
+ @data['포스트설정']['키워드삽입시링크'].text = 'URL' # 기본 텍스트 설정
4553
+ @data['포스트설정']['키워드삽입시링크'].enabled = false # 비활성화
4554
+ end
4555
+ }
4456
4556
  }
4457
4557
  @data['포스트설정']['키워드삽입시작숫자'] = entry(){
4458
4558
  top 7
4459
4559
  left 1
4560
+
4460
4561
  text '최소수량'
4461
4562
  }
4462
4563
  label('~'){
@@ -4477,55 +4578,51 @@ class Wordpress
4477
4578
  left 1
4478
4579
  text 'URL'
4479
4580
  }
4480
- @data['포스트설정']['내용을자동생성'] = checkbox('내용을 키워드 기반으로 자동 생성해서 포스팅'){
4581
+ @data['포스트설정']['내용을자동생성'] = checkbox('키워드기반 생성으로만 등록(GPT 사용시 자체 생성)'){
4481
4582
  top 9
4482
4583
  left 0
4483
4584
  on_toggled{
4484
4585
  if @data['포스트설정']['내용을자동생성'].checked?
4485
- if @data['포스트설정']['내용과자동생성'].checked?
4486
- @data['포스트설정']['내용과자동생성'].checked = false
4487
- end
4586
+ @data['포스트설정']['내용과자동생성'].checked = false
4587
+ @data['포스트설정']['내용투명'].checked = false
4588
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4589
+
4488
4590
  end
4489
4591
  }
4490
4592
  }
4491
4593
 
4492
- @data['포스트설정']['gpt'] = checkbox('내용을 키워드 기반의 GPT로 생성해서 포스팅'){
4493
- top 10
4494
- left 0
4495
- }
4496
-
4497
- @data['포스트설정']['api_key'] = entry(){
4498
- top 10
4499
- left 1
4500
- text 'api key'
4501
- }
4594
+
4502
4595
 
4503
- @data['포스트설정']['gpt상단'] = checkbox('원고내용 위에 넣기'){
4504
- top 10
4505
- left 3
4506
- }
4507
-
4508
- @data['포스트설정']['gpt하단'] = checkbox('원고내용 아래에 넣기'){
4509
- top 11
4510
- left 3
4511
- }
4512
4596
 
4513
4597
  aa1 = 2
4514
- @data['포스트설정']['내용과자동생성'] = checkbox('내용을 내용 파일 + 자동 생성 조합으로 포스팅'){
4598
+ @data['포스트설정']['내용과자동생성'] = checkbox('내용파일+키워드기반 생성 등록(GPT 사용시 자체 생성)') {
4515
4599
  top 10 + aa1
4516
4600
  left 0
4517
- on_toggled{
4518
- if @data['포스트설정']['내용과자동생성'].checked?
4519
- if @data['포스트설정']['내용을자동생성'].checked?
4520
- @data['포스트설정']['내용을자동생성'].checked = false
4521
- end
4522
- end
4601
+ on_toggled {
4602
+ if @data['포스트설정']['내용과자동생성'].checked?
4603
+ @data['포스트설정']['내용을자동생성'].checked = false
4604
+ @data['포스트설정']['내용투명'].enabled = true # '내용투명' 활성화
4605
+ @data['포스트설정']['자동글 수식에 입력'].enabled = true # '내용투명' 활성화
4606
+ else
4607
+ @data['포스트설정']['내용투명'].checked = false # 체크 해제
4608
+ @data['포스트설정']['내용투명'].enabled = false # 비활성화
4609
+ @data['포스트설정']['자동글 수식에 입력'].checked = false # 체크 해제
4610
+ @data['포스트설정']['자동글 수식에 입력'].enabled = false # 비활성화
4611
+ end
4523
4612
  }
4524
- }
4525
- @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리'){
4526
- top 11+ aa1
4613
+ }
4614
+
4615
+ @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리') {
4616
+ top 11 + aa1
4527
4617
  left 0
4528
- }
4618
+ enabled false # 기본적으로 비활성화
4619
+ on_toggled {
4620
+ if @data['포스트설정']['내용투명'].checked?
4621
+ @data['포스트설정']['내용을자동생성'].checked = false
4622
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4623
+ end
4624
+ }
4625
+ }
4529
4626
  @data['포스트설정']['내용자동변경'] = checkbox('내용에 단어들을 자동 변경'){
4530
4627
  top 12+ aa1
4531
4628
  left 0
@@ -4553,6 +4650,18 @@ class Wordpress
4553
4650
  @data['포스트설정']['내용사진자동삽입'] = checkbox('내용 사진 자동 삽입'){
4554
4651
  top 13+ aa1
4555
4652
  left 0
4653
+ #enabled false # 기본적으로 비활성화
4654
+ on_toggled {
4655
+ if @data['포스트설정']['내용사진자동삽입'].checked?
4656
+ @data['포스트설정']['내용사진링크'].enabled = true # '내용투명' 활성화
4657
+ @data['포스트설정']['내용사진링크값'].enabled = true # '내용투명' 활성화
4658
+ else
4659
+ @data['포스트설정']['내용사진링크'].checked = false # 체크 해제
4660
+ @data['포스트설정']['내용사진링크'].enabled = false # 비활성화
4661
+ @data['포스트설정']['내용사진링크값'].text = 'URL' # 기본 텍스트 설정
4662
+ @data['포스트설정']['내용사진링크값'].enabled = false # 비활성화
4663
+ end
4664
+ }
4556
4665
  }
4557
4666
  @data['포스트설정']['내용사진자동삽입시작숫자'] = entry(){
4558
4667
  top 13+ aa1
@@ -4570,15 +4679,28 @@ class Wordpress
4570
4679
  }
4571
4680
 
4572
4681
  @data['포스트설정']['내용사진링크'] = checkbox('내용 사진 자동 삽입시 링크 삽입'){
4682
+ enabled false # 기본적으로 비활성화
4573
4683
  top 14+ aa1
4574
4684
  left 0
4575
4685
  }
4576
4686
 
4577
4687
  @data['포스트설정']['내용사진링크값'] = entry(){
4688
+ enabled false # 기본적으로 비활성화
4578
4689
  top 14+ aa1
4579
4690
  left 1
4580
4691
  text 'URL'
4581
4692
  }
4693
+
4694
+ @data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기'){
4695
+ top 15+ aa1
4696
+ left 0
4697
+ }
4698
+
4699
+ @data['포스트설정']['api_key'] = entry(){
4700
+ top 15+ aa1
4701
+ left 1
4702
+ text 'api key 입력 필수!!'
4703
+ }
4582
4704
  }
4583
4705
  }
4584
4706
 
@@ -4769,6 +4891,22 @@ class Wordpress
4769
4891
  @data['포스트설정']['막글삽입'] = checkbox('내용 하단에 막글 삽입'){
4770
4892
  top 6
4771
4893
  left 0
4894
+ #enabled false # 기본적으로 비활성화
4895
+ on_toggled {
4896
+ if @data['포스트설정']['막글삽입'].checked?
4897
+ @data['포스트설정']['막글투명'].enabled = true # '내용투명' 활성화
4898
+ @data['포스트설정']['막글그대로'].enabled = true # '내용투명' 활성화
4899
+ @data['포스트설정']['막글 수식에 입력'].enabled = true # '내용투명' 활성화
4900
+
4901
+ else
4902
+ @data['포스트설정']['막글투명'].checked = false # 체크 해제
4903
+ @data['포스트설정']['막글투명'].enabled = false # 비활성화
4904
+ @data['포스트설정']['막글그대로'].checked = false # 체크 해제
4905
+ @data['포스트설정']['막글그대로'].enabled = false # 비활성화
4906
+ @data['포스트설정']['막글 수식에 입력'].checked = false # 체크 해제
4907
+ @data['포스트설정']['막글 수식에 입력'].enabled = false # 비활성화
4908
+ end
4909
+ }
4772
4910
  }
4773
4911
  @data['포스트설정']['막글삽입시작숫자'] = entry{
4774
4912
  top 6
@@ -4798,10 +4936,12 @@ class Wordpress
4798
4936
  @data['포스트설정']['막글투명'] = checkbox('막글 안보이게 처리'){
4799
4937
  top 7
4800
4938
  left 0
4939
+ enabled false # 기본적으로 비활성화
4801
4940
  }
4802
4941
  @data['포스트설정']['막글그대로'] = checkbox('막글 그대로 입력'){
4803
4942
  top 7
4804
4943
  left 1
4944
+ enabled false # 기본적으로 비활성화
4805
4945
  }
4806
4946
 
4807
4947
  @data['포스트설정']['태그삽입1'] = checkbox('태그삽입'){
@@ -4826,11 +4966,19 @@ class Wordpress
4826
4966
  @data['포스트설정']['자동글 수식에 입력'] = checkbox('자동글 수식에 입력'){
4827
4967
  top 9
4828
4968
  left 0
4969
+ enabled false # 기본적으로 비활성화
4970
+ on_toggled {
4971
+ if @data['포스트설정']['자동글 수식에 입력'].checked?
4972
+ @data['포스트설정']['내용을자동생성'].checked = false
4973
+ @data['포스트설정']['내용투명'].checked = false
4974
+ end
4975
+ }
4829
4976
  }
4830
4977
 
4831
4978
  @data['포스트설정']['막글 수식에 입력'] = checkbox('막글 수식에 입력'){
4832
4979
  top 9
4833
4980
  left 1
4981
+ enabled false # 기본적으로 비활성화
4834
4982
  }
4835
4983
 
4836
4984
 
@@ -4913,10 +5061,22 @@ class Wordpress
4913
5061
  @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용'){
4914
5062
  top 15
4915
5063
  left 0
5064
+ on_toggled{
5065
+ if @data['포스트설정']['테더링'].checked?
5066
+ @data['포스트설정']['프록시'].checked = false
5067
+
5068
+ end
5069
+ }
4916
5070
  }
4917
5071
  @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용'){
4918
5072
  top 15
4919
5073
  left 1
5074
+ on_toggled{
5075
+ if @data['포스트설정']['프록시'].checked?
5076
+ @data['포스트설정']['테더링'].checked = false
5077
+
5078
+ end
5079
+ }
4920
5080
  }
4921
5081
  button('프록시 IP 파일 불러오기'){
4922
5082
  top 15