cafe_buy 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.rb +535 -374
  3. metadata +2 -2
data/lib/cafe_buy.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,12 +1101,21 @@ 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)
1134
-
1115
+ rescue
1116
+ @driver.action.key_down(:down).key_up(:down).perform
1117
+ end
1118
+
1135
1119
  elsif i2.to_s.include?('<inyonggoo')
1136
1120
  if i2.text == ''
1137
1121
 
@@ -1952,107 +1936,19 @@ class Wordpress
1952
1936
 
1953
1937
 
1954
1938
 
1955
- def chrome_start(url, user_id, user_pw)
1956
- @url = url
1957
- @user_id = user_id
1958
- @user_pw = user_pw
1959
- begin
1960
- Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1961
- @driver = Selenium::WebDriver.for :chrome
1962
- rescue
1963
- @driver = Selenium::WebDriver.for :chrome
1964
- end
1965
- end
1939
+ #def chrome_start(url, user_id, user_pw)
1940
+ # @url = url
1941
+ # @user_id = user_id
1942
+ # @user_pw = user_pw
1943
+ # begin
1944
+ # Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1945
+ # @driver = Selenium::WebDriver.for :chrome
1946
+ # rescue
1947
+ # @driver = Selenium::WebDriver.for :chrome
1948
+ # end
1949
+ #end
1966
1950
 
1967
- def login
1968
- @driver.get(@url+'/wp-admin')
1969
- @driver.find_element(:xpath , '//*[@id="user_login"]').send_keys(@user_id)
1970
- @driver.find_element(:xpath , '//*[@id="user_pass"]').send_keys(@user_pw)
1971
- @driver.find_element(:xpath , '//*[@id="wp-submit"]').click
1972
- @cookie = Hash.new
1973
- @driver.manage.all_cookies.each do |i|
1974
- @cookie[i[:name]] = i[:value]
1975
- end
1976
- sleep(2)
1977
- begin
1978
- puts @driver.find_element(:xpath , '/html/body/div/div/div[1]/div[1]/div/div[1]/a[1]/span').text
1979
- @driver.close
1980
- return 1
1981
- rescue => e
1982
- puts e
1983
- @driver.close
1984
- return 0
1985
- end
1986
- end
1987
1951
 
1988
- def update
1989
- http = HTTP.cookies(@cookie).get(@url+'/wp-admin/post-new.php')
1990
- noko = Nokogiri::HTML(http.to_s)
1991
- @wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
1992
- @data2 = Hash.new
1993
- @data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]')[0]['value']
1994
- @data2['_wp_http_referer'] = '/wp-admin/post-new.php'
1995
- @data2['user_ID'] = '1'
1996
- @data2['action'] = 'editpost'
1997
- @data2['originalaction'] = 'editpost'
1998
- @data2['post_author'] = '1'
1999
- @data2['post_type'] = 'post'
2000
- @data2['original_post_status'] = 'auto-draft'
2001
- @data2['referredby'] = @url+'/wp-admin/update-core.php'
2002
- @data2['_wp_original_http_referer'] = @url+'/wp-admin/update-core.php'
2003
- @data2['auto_draft'] = nil
2004
- @data2['post_ID'] = noko.xpath('//*[@id="post_ID"]')[0]['value']
2005
- @data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]')[0]['value']
2006
- @data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]')[0]['value']
2007
- @data2['post_title'] = 'title3'
2008
- @data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]')[0]['value']
2009
- @data2['content'] = 'content3'
2010
- @data2['wp-preview'] = nil
2011
- @data2['hidden_post_status'] = 'draft'
2012
- @data2['post_status'] = 'draft'
2013
- @data2['hidden_post_password'] = nil
2014
- @data2['hidden_post_visibility'] = 'public'
2015
- @data2['visibility'] = 'post'
2016
- @data2['post_password'] = nil
2017
- @data2['mm'] = '10'
2018
- @data2['jj'] = '24'
2019
- @data2['aa'] = '2022'
2020
- @data2['hh'] = '02'
2021
- @data2['mn'] = '41'
2022
- @data2['ss'] = '32'
2023
- @data2['hidden_mm'] = '10'
2024
- @data2['cur_mm'] = '10'
2025
- @data2['hidden_jj'] = '24'
2026
- @data2['cur_jj'] = '24'
2027
- @data2['hidden_aa'] = '2022'
2028
- @data2['cur_aa'] = '2022'
2029
- @data2['hidden_hh'] = '02'
2030
- @data2['cur_hh'] = '02'
2031
- @data2['hidden_mn'] = '41'
2032
- @data2['cur_mn'] = '41'
2033
- @data2['original_publish'] = '공개'
2034
- @data2['publish'] = '공개'
2035
- @data2['post_format'] = '0'
2036
- @data2['post_category[]'] = '0'
2037
- @data2['newcategory'] = '새 카테고리 이름'
2038
- @data2['newcategory_parent'] = -1
2039
- @data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]')[0]['value']
2040
- @data2['tax_input[post_tag]'] = nil
2041
- @data2['newtag[post_tag]'] = nil
2042
- @data2['_thumbnail_id'] = -1
2043
- @data2['excerpt'] = nil
2044
- @data2['trackback_url'] = nil
2045
- @data2['metakeyinput'] = nil
2046
- @data2['metavalue'] = nil
2047
- @data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]')[0]['value']
2048
- @data2['advanced_view'] = '1'
2049
- @data2['comment_status'] = 'open'
2050
- @data2['ping_status'] = 'open'
2051
- @data2['post_name'] = nil
2052
- @data2['post_author_override'] = '1'
2053
- #result_http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => @data)
2054
- return @data2
2055
- end
2056
1952
 
2057
1953
  def auto_image
2058
1954
  begin
@@ -2395,6 +2291,13 @@ class Wordpress
2395
2291
  end
2396
2292
  end
2397
2293
  end
2294
+
2295
+ if @data['포스트설정']['gpt제목'].checked?
2296
+ chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2297
+ gpt_text1 = chat.message(title)
2298
+ title = gpt_text1.to_s
2299
+ end
2300
+
2398
2301
  @data['table'][index][-1] = 5
2399
2302
  @data['table'] << []
2400
2303
  @data['table'].pop
@@ -2432,6 +2335,25 @@ class Wordpress
2432
2335
  end
2433
2336
  end
2434
2337
  end
2338
+
2339
+
2340
+ if @data['포스트설정']['gpt내용'].checked?
2341
+ api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
2342
+ #key_change = @data['포스트설정']['특정단어키워드로변경값'].text.to_s.force_encoding('utf-8')
2343
+ #imotcon_change = @data['포스트설정']['스티커로변경단어'].text.to_s.force_encoding('utf-8')
2344
+ #template_change = @data['포스트설정']['내템플릿변경단어'].text.to_s.force_encoding('utf-8')
2345
+ #ttdanar_change = @data['포스트설정']['단어링크적용단어'].text.to_s.force_encoding('utf-8')
2346
+ #sajine_change = @data['포스트설정']['단어사진으로변경단어'].text.to_s.force_encoding('utf-8')
2347
+ #mov_change = @data['포스트설정']['영상으로변경단어'].text.to_s.force_encoding('utf-8')
2348
+ #map_change = @data['포스트설정']['지도로변경단어'].text.to_s.force_encoding('utf-8')
2349
+ #inyong9_change = @data['포스트설정']['인용구변경단어'].text.to_s.force_encoding('utf-8')
2350
+
2351
+
2352
+ chat = Chat_content.new(api_key)
2353
+ gpt_text3 = chat.message(content)
2354
+ content = gpt_text3.to_s
2355
+ end
2356
+
2435
2357
  content_tag = content.split('@##@')[1]
2436
2358
  content = content.split('@##@')[0]
2437
2359
  @data['table'][index][-1] = 15
@@ -2630,7 +2552,7 @@ class Wordpress
2630
2552
  @data['table'][index][-1] = 50
2631
2553
  @data['table'] << []
2632
2554
  @data['table'].pop
2633
- if @data['포스트설정']['gpt'].checked?
2555
+ if @data['포스트설정']['gpt키워드'].checked?
2634
2556
  chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
2635
2557
  gpt_text = chat.message(keyword)
2636
2558
  content = content + "\n(자동생성글)\n" + gpt_text
@@ -2651,7 +2573,7 @@ class Wordpress
2651
2573
  joongbok_check = 0
2652
2574
  counter10 = 0
2653
2575
  while joongbok_check == 0
2654
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2576
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2655
2577
  content22 = content.split("(자동생성글)")[1].split("\n")
2656
2578
  else
2657
2579
  content22 = content.split("\n")
@@ -2675,12 +2597,12 @@ class Wordpress
2675
2597
  content2 = content.split("\n")
2676
2598
  end
2677
2599
 
2678
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2600
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2679
2601
  content2 = content.split("(자동생성글)")[1].split("\n")
2680
2602
  position.pop
2681
2603
  end
2682
2604
 
2683
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2605
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2684
2606
  content2 = content.split("\n")
2685
2607
  end
2686
2608
 
@@ -2726,7 +2648,7 @@ class Wordpress
2726
2648
  content = content3.join("\n")
2727
2649
  end
2728
2650
 
2729
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2651
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2730
2652
  content2.each_with_index do |con, index|
2731
2653
  if position.include?(index)
2732
2654
  insert_keyword_text = keyword.to_s
@@ -2756,7 +2678,7 @@ class Wordpress
2756
2678
  end
2757
2679
  end
2758
2680
 
2759
- if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
2681
+ if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
2760
2682
  begin
2761
2683
  content2.each_with_index do |con, index|
2762
2684
  if position.include?(index)
@@ -2851,7 +2773,7 @@ class Wordpress
2851
2773
  end
2852
2774
  end
2853
2775
 
2854
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2776
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2855
2777
  if @data['포스트설정']['자동글 수식에 입력'].checked?
2856
2778
  content5 = content.split("(자동생성글)")[0].to_s.split("\n")
2857
2779
  content55 = content.split("(자동생성글)")[1].to_s
@@ -2881,9 +2803,9 @@ class Wordpress
2881
2803
  end
2882
2804
  end
2883
2805
 
2884
- position = position.sort
2806
+ position = position.sort
2885
2807
  ##여기서부터 이미지 순서대로 안되서 변경####-------------------------------------------------------------------------------
2886
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2808
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2887
2809
  # image_url22 = get_image_file().force_encoding('utf-8')
2888
2810
  # end
2889
2811
 
@@ -2901,7 +2823,7 @@ class Wordpress
2901
2823
  # end
2902
2824
  # end
2903
2825
 
2904
- # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2826
+ # if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2905
2827
  # content = content5.join("\n")+'(자동생성글)'+content55
2906
2828
  # iconv = Iconv.new('UTF-8', 'ASCII-8BIT')
2907
2829
  # content = iconv.iconv(content)
@@ -2921,7 +2843,7 @@ class Wordpress
2921
2843
  ###여기까지 이미지 순서대로 안되서 변경##-------------------------------------------------------------------------------
2922
2844
 
2923
2845
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
2924
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2846
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2925
2847
  sleep(2)
2926
2848
  puts '이미지 자동 세탁 중 · · · '
2927
2849
  end
@@ -2940,7 +2862,7 @@ class Wordpress
2940
2862
  end
2941
2863
  sleep(2)
2942
2864
  puts '이미지 자동 세탁 완료 · · · '
2943
- if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
2865
+ if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
2944
2866
  content = content5.join("\n")+'(자동생성글)'+content55
2945
2867
  puts content
2946
2868
  ##여기서부터 이미지 순서대로 수정코드 변경####-------------------------------------------------------------------------------
@@ -3080,7 +3002,7 @@ class Wordpress
3080
3002
  content = content
3081
3003
  soosick_1 = content_end
3082
3004
  else
3083
- if @data['포스트설정']['gpt'].checked?
3005
+ if @data['포스트설정']['gpt키워드'].checked?
3084
3006
  if @data['포스트설정']['gpt상단'].checked?
3085
3007
  content = content_end+"\n"+content+"\n"
3086
3008
  else
@@ -3749,7 +3671,10 @@ class Wordpress
3749
3671
  }
3750
3672
  horizontal_box{
3751
3673
  stretchy false
3674
+ grid{
3752
3675
  button('전체선택'){
3676
+ top 1
3677
+ left 1
3753
3678
  on_clicked{
3754
3679
  for n in 0..@data['키워드설정']['키워드'].length-1
3755
3680
  @data['키워드설정']['키워드'][n][0] = true
@@ -3758,7 +3683,20 @@ class Wordpress
3758
3683
  end
3759
3684
  }
3760
3685
  }
3761
- button('키워드삭제'){
3686
+ button('선택해제'){
3687
+ top 1
3688
+ left 2
3689
+ on_clicked{
3690
+ for n in 0..@data['키워드설정']['키워드'].length-1
3691
+ @data['키워드설정']['키워드'][n][0] = false
3692
+ @data['키워드설정']['키워드'] << []
3693
+ @data['키워드설정']['키워드'].pop
3694
+ end
3695
+ }
3696
+ }
3697
+ button('삭제하기'){
3698
+ top 1
3699
+ left 3
3762
3700
  on_clicked{
3763
3701
  m = Array.new
3764
3702
  for n in 0..@data['키워드설정']['키워드'].length-1
@@ -3773,6 +3711,8 @@ class Wordpress
3773
3711
  @data['키워드설정']['키워드'].delete(nil)
3774
3712
  }
3775
3713
  }
3714
+ }
3715
+
3776
3716
  @data['키워드설정']['순서사용'] = checkbox('순서사용'){
3777
3717
  stretchy false
3778
3718
  on_toggled{ |c|
@@ -3790,6 +3730,59 @@ class Wordpress
3790
3730
  }
3791
3731
  }
3792
3732
  }
3733
+ vertical_separator{
3734
+ stretchy false
3735
+ }
3736
+ horizontal_box{
3737
+ stretchy false
3738
+ grid{
3739
+ @data['포스트설정']['gpt키워드'] = checkbox('GPT 키워드 기반 글 생성'){
3740
+ top 1
3741
+ left 0
3742
+ #enabled false # 기본적으로 비활성화
3743
+ on_toggled {
3744
+ if @data['포스트설정']['gpt키워드'].checked?
3745
+ @data['포스트설정']['gpt상단'].enabled = true # '내용투명' 활성화
3746
+ @data['포스트설정']['gpt하단'].enabled = true # '내용투명' 활성화
3747
+ else
3748
+ @data['포스트설정']['gpt상단'].checked = false # 체크 해제
3749
+ @data['포스트설정']['gpt상단'].enabled = false # 비활성화
3750
+ @data['포스트설정']['gpt하단'].checked = false # 체크 해제
3751
+ @data['포스트설정']['gpt하단'].enabled = false # 비활성화
3752
+ end
3753
+ }
3754
+
3755
+ }
3756
+
3757
+ @data['포스트설정']['gpt상단'] = checkbox('원고 위에 넣기'){
3758
+ top 1
3759
+ left 1
3760
+ enabled false # 기본적으로 비활성화
3761
+ on_toggled{
3762
+ if @data['포스트설정']['gpt상단'].checked?
3763
+ @data['포스트설정']['gpt하단'].checked = false
3764
+ end
3765
+ }
3766
+ }
3767
+
3768
+ @data['포스트설정']['gpt하단'] = checkbox('원고 아래 넣기'){
3769
+ top 1
3770
+ left 2
3771
+ enabled false # 기본적으로 비활성화
3772
+ on_toggled{
3773
+ if @data['포스트설정']['gpt하단'].checked?
3774
+ @data['포스트설정']['gpt상단'].checked = false
3775
+ end
3776
+ }
3777
+ }
3778
+ } }
3779
+ horizontal_box{
3780
+ stretchy false
3781
+ grid{
3782
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3783
+ } } }
3784
+
3785
+
3793
3786
  table{
3794
3787
  checkbox_column('선택'){
3795
3788
  editable true
@@ -3800,7 +3793,9 @@ class Wordpress
3800
3793
 
3801
3794
  cell_rows @data['키워드설정']['키워드']
3802
3795
  }
3803
-
3796
+
3797
+
3798
+
3804
3799
  }
3805
3800
  vertical_separator{
3806
3801
  stretchy false
@@ -3829,7 +3824,10 @@ class Wordpress
3829
3824
  }
3830
3825
  horizontal_box{
3831
3826
  stretchy false
3827
+ grid{
3832
3828
  button('전체선택'){
3829
+ top 1
3830
+ left 1
3833
3831
  on_clicked{
3834
3832
  for n in 0..@data['제목설정']['제목'].length-1
3835
3833
  @data['제목설정']['제목'][n][0] = true
@@ -3838,7 +3836,20 @@ class Wordpress
3838
3836
  end
3839
3837
  }
3840
3838
  }
3841
- button('제목삭제'){
3839
+ button('선택해제'){
3840
+ top 1
3841
+ left 2
3842
+ on_clicked{
3843
+ for n in 0..@data['제목설정']['제목'].length-1
3844
+ @data['제목설정']['제목'][n][0] = false
3845
+ @data['제목설정']['제목'] << []
3846
+ @data['제목설정']['제목'].pop
3847
+ end
3848
+ }
3849
+ }
3850
+ button('삭제하기'){
3851
+ top 1
3852
+ left 3
3842
3853
  on_clicked{
3843
3854
  m = Array.new
3844
3855
  for n in 0..@data['제목설정']['제목'].length-1
@@ -3853,6 +3864,7 @@ class Wordpress
3853
3864
  @data['제목설정']['제목'].delete(nil)
3854
3865
  }
3855
3866
  }
3867
+ }
3856
3868
  @data['제목설정']['순서사용'] = checkbox('순서사용'){
3857
3869
  stretchy false
3858
3870
  on_toggled{ |c|
@@ -3870,6 +3882,23 @@ class Wordpress
3870
3882
  }
3871
3883
  }
3872
3884
  }
3885
+ vertical_separator{
3886
+ stretchy false
3887
+ }
3888
+ horizontal_box{
3889
+ stretchy false
3890
+ grid{
3891
+ @data['포스트설정']['gpt제목'] = checkbox('제목을 이용해 GPT로 비슷한 제목 생성'){
3892
+
3893
+
3894
+ }}}
3895
+ horizontal_box{
3896
+ stretchy false
3897
+ grid{
3898
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
3899
+ } } }
3900
+
3901
+
3873
3902
  table{
3874
3903
  checkbox_column('선택'){
3875
3904
  editable true
@@ -3880,6 +3909,7 @@ class Wordpress
3880
3909
 
3881
3910
  cell_rows @data['제목설정']['제목']
3882
3911
  }
3912
+
3883
3913
 
3884
3914
  }
3885
3915
  vertical_separator{
@@ -3907,7 +3937,10 @@ class Wordpress
3907
3937
  }
3908
3938
  horizontal_box{
3909
3939
  stretchy false
3940
+ grid{
3910
3941
  button('전체선택'){
3942
+ top 1
3943
+ left 1
3911
3944
  on_clicked{
3912
3945
  for n in 0..@data['내용설정']['내용'].length-1
3913
3946
  @data['내용설정']['내용'][n][0] = true
@@ -3916,7 +3949,20 @@ class Wordpress
3916
3949
  end
3917
3950
  }
3918
3951
  }
3919
- button('내용삭제'){
3952
+ button('선택해제'){
3953
+ top 1
3954
+ left 2
3955
+ on_clicked{
3956
+ for n in 0..@data['내용설정']['내용'].length-1
3957
+ @data['내용설정']['내용'][n][0] = false
3958
+ @data['내용설정']['내용'] << []
3959
+ @data['내용설정']['내용'].pop
3960
+ end
3961
+ }
3962
+ }
3963
+ button('삭제하기'){
3964
+ top 1
3965
+ left 3
3920
3966
  on_clicked{
3921
3967
  m = Array.new
3922
3968
  for n in 0..@data['내용설정']['내용'].length-1
@@ -3931,6 +3977,7 @@ class Wordpress
3931
3977
  @data['내용설정']['내용'].delete(nil)
3932
3978
  }
3933
3979
  }
3980
+ }
3934
3981
  @data['내용설정']['순서사용'] = checkbox('순서사용'){
3935
3982
  stretchy false
3936
3983
  on_toggled{ |c|
@@ -3948,6 +3995,22 @@ class Wordpress
3948
3995
  }
3949
3996
  }
3950
3997
  }
3998
+ vertical_separator{
3999
+ stretchy false
4000
+ }
4001
+ horizontal_box{
4002
+ stretchy false
4003
+ grid{
4004
+ @data['포스트설정']['gpt내용'] = checkbox('내용파일을 이용해 GPT로 글 변형'){
4005
+
4006
+
4007
+ }}}
4008
+ horizontal_box{
4009
+ stretchy false
4010
+ grid{
4011
+ label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
4012
+ } } }
4013
+
3951
4014
  table{
3952
4015
  checkbox_column('선택'){
3953
4016
  editable true
@@ -3965,8 +4028,8 @@ class Wordpress
3965
4028
  stretchy false
3966
4029
  text "내용폴더경로 ex)C:\\내용\\폴더1"
3967
4030
  }
3968
- button('폴더째로불러오기'){
3969
- stretchy false
4031
+ button('폴더째로 불러오기'){
4032
+
3970
4033
  on_clicked{
3971
4034
  path = @data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
3972
4035
  Dir.entries(@data['이미지설정']['폴더경로2'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -4064,7 +4127,7 @@ class Wordpress
4064
4127
  text "사진폴더경로 ex)C:\\사진\\폴더2"
4065
4128
  }
4066
4129
  button('폴더째로불러오기'){
4067
- stretchy false
4130
+
4068
4131
  on_clicked{
4069
4132
  path = @data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8').force_encoding('utf-8')
4070
4133
  Dir.entries(@data['이미지설정']['폴더경로'].text.to_s.force_encoding('utf-8')).each do |file|
@@ -4317,6 +4380,18 @@ class Wordpress
4317
4380
  @data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
4318
4381
  top 2
4319
4382
  left 0
4383
+ #enabled false # 기본적으로 비활성화
4384
+ on_toggled {
4385
+ if @data['포스트설정']['제목에키워드삽입'].checked?
4386
+ @data['포스트설정']['제목앞'].enabled = true # '내용투명' 활성화
4387
+ @data['포스트설정']['제목뒤'].enabled = true # '내용투명' 활성화
4388
+ else
4389
+ @data['포스트설정']['제목앞'].checked = false # 체크 해제
4390
+ @data['포스트설정']['제목앞'].enabled = false # 비활성화
4391
+ @data['포스트설정']['제목뒤'].checked = false # 체크 해제
4392
+ @data['포스트설정']['제목뒤'].enabled = false # 비활성화
4393
+ end
4394
+ }
4320
4395
  }
4321
4396
  @data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
4322
4397
  top 2
@@ -4339,6 +4414,7 @@ class Wordpress
4339
4414
  @data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
4340
4415
  top 3
4341
4416
  left 3
4417
+ enabled false # 기본적으로 비활성화
4342
4418
  on_toggled{
4343
4419
  if @data['포스트설정']['제목앞'].checked? == true
4344
4420
  if @data['포스트설정']['제목뒤'].checked?
@@ -4354,6 +4430,7 @@ class Wordpress
4354
4430
  @data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
4355
4431
  top 4
4356
4432
  left 3
4433
+ enabled false # 기본적으로 비활성화
4357
4434
  on_toggled{
4358
4435
  if @data['포스트설정']['제목뒤'].checked? == true
4359
4436
  if @data['포스트설정']['제목앞'].checked?
@@ -4362,26 +4439,51 @@ class Wordpress
4362
4439
  end
4363
4440
  }
4364
4441
  }
4365
- @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4442
+ @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 특수문자 삽입'){
4366
4443
  top 4
4367
4444
  left 0
4368
4445
  }
4369
-
4370
- @data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
4446
+ @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4371
4447
  top 5
4372
4448
  left 0
4449
+ on_toggled{
4450
+ if @data['포스트설정']['제목을랜덤'].checked? == true
4451
+ if @data['포스트설정']['제목내용설정'].checked?
4452
+ @data['포스트설정']['제목내용설정'].checked = false
4453
+ end
4454
+ end
4455
+ }
4373
4456
  }
4374
- @data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
4457
+ @data['포스트설정']['제목내용설정'] = checkbox('내용의 문장을 제목으로 설정'){
4375
4458
  top 6
4376
4459
  left 0
4460
+ on_toggled{
4461
+ if @data['포스트설정']['제목내용설정'].checked? == true
4462
+ if @data['포스트설정']['제목을랜덤'].checked?
4463
+ @data['포스트설정']['제목을랜덤'].checked = false
4464
+ end
4465
+ end
4466
+ }
4377
4467
  }
4378
4468
  @data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
4379
4469
  top 7
4380
4470
  left 0
4471
+ on_toggled {
4472
+ if @data['포스트설정']['내용키워드삽입'].checked?
4473
+ @data['포스트설정']['키워드삽입'].enabled = true # '내용투명' 활성화
4474
+ @data['포스트설정']['키워드삽입시링크'].enabled = true # '내용투명' 활성화
4475
+ else
4476
+ @data['포스트설정']['키워드삽입'].checked = false # 체크 해제
4477
+ @data['포스트설정']['키워드삽입'].enabled = false # 비활성화
4478
+ @data['포스트설정']['키워드삽입시링크'].text = 'URL' # 기본 텍스트 설정
4479
+ @data['포스트설정']['키워드삽입시링크'].enabled = false # 비활성화
4480
+ end
4481
+ }
4381
4482
  }
4382
4483
  @data['포스트설정']['키워드삽입시작숫자'] = entry(){
4383
4484
  top 7
4384
4485
  left 1
4486
+
4385
4487
  text '최소수량'
4386
4488
  }
4387
4489
  label('~'){
@@ -4402,55 +4504,51 @@ class Wordpress
4402
4504
  left 1
4403
4505
  text 'URL'
4404
4506
  }
4405
- @data['포스트설정']['내용을자동생성'] = checkbox('내용을 키워드 기반으로 자동 생성해서 포스팅'){
4507
+ @data['포스트설정']['내용을자동생성'] = checkbox('키워드기반 생성으로만 등록(GPT 사용시 자체 생성)'){
4406
4508
  top 9
4407
4509
  left 0
4408
4510
  on_toggled{
4409
4511
  if @data['포스트설정']['내용을자동생성'].checked?
4410
- if @data['포스트설정']['내용과자동생성'].checked?
4411
- @data['포스트설정']['내용과자동생성'].checked = false
4412
- end
4512
+ @data['포스트설정']['내용과자동생성'].checked = false
4513
+ @data['포스트설정']['내용투명'].checked = false
4514
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4515
+
4413
4516
  end
4414
4517
  }
4415
4518
  }
4416
4519
 
4417
- @data['포스트설정']['gpt'] = checkbox('내용을 키워드 기반의 GPT로 생성해서 포스팅'){
4418
- top 10
4419
- left 0
4420
- }
4421
-
4422
- @data['포스트설정']['api_key'] = entry(){
4423
- top 10
4424
- left 1
4425
- text 'api key'
4426
- }
4520
+
4427
4521
 
4428
- @data['포스트설정']['gpt상단'] = checkbox('원고내용 위에 넣기'){
4429
- top 10
4430
- left 3
4431
- }
4432
-
4433
- @data['포스트설정']['gpt하단'] = checkbox('원고내용 아래에 넣기'){
4434
- top 11
4435
- left 3
4436
- }
4437
4522
 
4438
4523
  aa1 = 2
4439
- @data['포스트설정']['내용과자동생성'] = checkbox('내용을 내용 파일 + 자동 생성 조합으로 포스팅'){
4524
+ @data['포스트설정']['내용과자동생성'] = checkbox('내용파일+키워드기반 생성 등록(GPT 사용시 자체 생성)') {
4440
4525
  top 10 + aa1
4441
4526
  left 0
4442
- on_toggled{
4443
- if @data['포스트설정']['내용과자동생성'].checked?
4444
- if @data['포스트설정']['내용을자동생성'].checked?
4445
- @data['포스트설정']['내용을자동생성'].checked = false
4446
- end
4447
- end
4527
+ on_toggled {
4528
+ if @data['포스트설정']['내용과자동생성'].checked?
4529
+ @data['포스트설정']['내용을자동생성'].checked = false
4530
+ @data['포스트설정']['내용투명'].enabled = true # '내용투명' 활성화
4531
+ @data['포스트설정']['자동글 수식에 입력'].enabled = true # '내용투명' 활성화
4532
+ else
4533
+ @data['포스트설정']['내용투명'].checked = false # 체크 해제
4534
+ @data['포스트설정']['내용투명'].enabled = false # 비활성화
4535
+ @data['포스트설정']['자동글 수식에 입력'].checked = false # 체크 해제
4536
+ @data['포스트설정']['자동글 수식에 입력'].enabled = false # 비활성화
4537
+ end
4448
4538
  }
4449
- }
4450
- @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리'){
4451
- top 11+ aa1
4539
+ }
4540
+
4541
+ @data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리') {
4542
+ top 11 + aa1
4452
4543
  left 0
4453
- }
4544
+ enabled false # 기본적으로 비활성화
4545
+ on_toggled {
4546
+ if @data['포스트설정']['내용투명'].checked?
4547
+ @data['포스트설정']['내용을자동생성'].checked = false
4548
+ @data['포스트설정']['자동글 수식에 입력'].checked = false
4549
+ end
4550
+ }
4551
+ }
4454
4552
  @data['포스트설정']['내용자동변경'] = checkbox('내용에 단어들을 자동 변경'){
4455
4553
  top 12+ aa1
4456
4554
  left 0
@@ -4478,6 +4576,18 @@ class Wordpress
4478
4576
  @data['포스트설정']['내용사진자동삽입'] = checkbox('내용 사진 자동 삽입'){
4479
4577
  top 13+ aa1
4480
4578
  left 0
4579
+ #enabled false # 기본적으로 비활성화
4580
+ on_toggled {
4581
+ if @data['포스트설정']['내용사진자동삽입'].checked?
4582
+ @data['포스트설정']['내용사진링크'].enabled = true # '내용투명' 활성화
4583
+ @data['포스트설정']['내용사진링크값'].enabled = true # '내용투명' 활성화
4584
+ else
4585
+ @data['포스트설정']['내용사진링크'].checked = false # 체크 해제
4586
+ @data['포스트설정']['내용사진링크'].enabled = false # 비활성화
4587
+ @data['포스트설정']['내용사진링크값'].text = 'URL' # 기본 텍스트 설정
4588
+ @data['포스트설정']['내용사진링크값'].enabled = false # 비활성화
4589
+ end
4590
+ }
4481
4591
  }
4482
4592
  @data['포스트설정']['내용사진자동삽입시작숫자'] = entry(){
4483
4593
  top 13+ aa1
@@ -4495,15 +4605,28 @@ class Wordpress
4495
4605
  }
4496
4606
 
4497
4607
  @data['포스트설정']['내용사진링크'] = checkbox('내용 사진 자동 삽입시 링크 삽입'){
4608
+ enabled false # 기본적으로 비활성화
4498
4609
  top 14+ aa1
4499
4610
  left 0
4500
4611
  }
4501
4612
 
4502
4613
  @data['포스트설정']['내용사진링크값'] = entry(){
4614
+ enabled false # 기본적으로 비활성화
4503
4615
  top 14+ aa1
4504
4616
  left 1
4505
4617
  text 'URL'
4506
4618
  }
4619
+
4620
+ @data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기'){
4621
+ top 15+ aa1
4622
+ left 0
4623
+ }
4624
+
4625
+ @data['포스트설정']['api_key'] = entry(){
4626
+ top 15+ aa1
4627
+ left 1
4628
+ text 'api key 입력 필수!!'
4629
+ }
4507
4630
  }
4508
4631
  }
4509
4632
 
@@ -4694,6 +4817,22 @@ class Wordpress
4694
4817
  @data['포스트설정']['막글삽입'] = checkbox('내용 하단에 막글 삽입'){
4695
4818
  top 6
4696
4819
  left 0
4820
+ #enabled false # 기본적으로 비활성화
4821
+ on_toggled {
4822
+ if @data['포스트설정']['막글삽입'].checked?
4823
+ @data['포스트설정']['막글투명'].enabled = true # '내용투명' 활성화
4824
+ @data['포스트설정']['막글그대로'].enabled = true # '내용투명' 활성화
4825
+ @data['포스트설정']['막글 수식에 입력'].enabled = true # '내용투명' 활성화
4826
+
4827
+ else
4828
+ @data['포스트설정']['막글투명'].checked = false # 체크 해제
4829
+ @data['포스트설정']['막글투명'].enabled = false # 비활성화
4830
+ @data['포스트설정']['막글그대로'].checked = false # 체크 해제
4831
+ @data['포스트설정']['막글그대로'].enabled = false # 비활성화
4832
+ @data['포스트설정']['막글 수식에 입력'].checked = false # 체크 해제
4833
+ @data['포스트설정']['막글 수식에 입력'].enabled = false # 비활성화
4834
+ end
4835
+ }
4697
4836
  }
4698
4837
  @data['포스트설정']['막글삽입시작숫자'] = entry{
4699
4838
  top 6
@@ -4723,10 +4862,12 @@ class Wordpress
4723
4862
  @data['포스트설정']['막글투명'] = checkbox('막글 안보이게 처리'){
4724
4863
  top 7
4725
4864
  left 0
4865
+ enabled false # 기본적으로 비활성화
4726
4866
  }
4727
4867
  @data['포스트설정']['막글그대로'] = checkbox('막글 그대로 입력'){
4728
4868
  top 7
4729
4869
  left 1
4870
+ enabled false # 기본적으로 비활성화
4730
4871
  }
4731
4872
 
4732
4873
  @data['포스트설정']['태그삽입1'] = checkbox('태그삽입'){
@@ -4751,11 +4892,19 @@ class Wordpress
4751
4892
  @data['포스트설정']['자동글 수식에 입력'] = checkbox('자동글 수식에 입력'){
4752
4893
  top 9
4753
4894
  left 0
4895
+ enabled false # 기본적으로 비활성화
4896
+ on_toggled {
4897
+ if @data['포스트설정']['자동글 수식에 입력'].checked?
4898
+ @data['포스트설정']['내용을자동생성'].checked = false
4899
+ @data['포스트설정']['내용투명'].checked = false
4900
+ end
4901
+ }
4754
4902
  }
4755
4903
 
4756
4904
  @data['포스트설정']['막글 수식에 입력'] = checkbox('막글 수식에 입력'){
4757
4905
  top 9
4758
4906
  left 1
4907
+ enabled false # 기본적으로 비활성화
4759
4908
  }
4760
4909
 
4761
4910
 
@@ -4838,10 +4987,22 @@ class Wordpress
4838
4987
  @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용'){
4839
4988
  top 15
4840
4989
  left 0
4990
+ on_toggled{
4991
+ if @data['포스트설정']['테더링'].checked?
4992
+ @data['포스트설정']['프록시'].checked = false
4993
+
4994
+ end
4995
+ }
4841
4996
  }
4842
4997
  @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용'){
4843
4998
  top 15
4844
4999
  left 1
5000
+ on_toggled{
5001
+ if @data['포스트설정']['프록시'].checked?
5002
+ @data['포스트설정']['테더링'].checked = false
5003
+
5004
+ end
5005
+ }
4845
5006
  }
4846
5007
  button('프록시 IP 파일 불러오기'){
4847
5008
  top 15