tblog_zon 0.0.1 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tblog_zon.rb +1227 -1070
- metadata +2 -2
data/lib/tblog_zon.rb
CHANGED
@@ -19,14 +19,11 @@ require 'auto_click'
|
|
19
19
|
require 'rainbow/refinement'
|
20
20
|
include AutoClickMethods
|
21
21
|
using Rainbow
|
22
|
+
include Glimmer
|
22
23
|
|
23
24
|
|
24
25
|
|
25
26
|
|
26
|
-
|
27
|
-
#driver.find_element(:class, 'highlight-java')
|
28
|
-
# or
|
29
|
-
#driver.find_element(:class_name, 'highlight-java')
|
30
27
|
class Chat
|
31
28
|
def initialize(api_key)
|
32
29
|
@api_key = api_key
|
@@ -39,10 +36,11 @@ class Chat
|
|
39
36
|
'Authorization' => 'Bearer ' + @api_key
|
40
37
|
}
|
41
38
|
d = {
|
42
|
-
'model' => 'gpt-3.5-turbo',
|
39
|
+
#'model' => 'gpt-3.5-turbo',
|
40
|
+
'model' => 'gpt-4',
|
43
41
|
'messages' => [{
|
44
42
|
"role" => "assistant",
|
45
|
-
"content" => keyword.to_s+" 소개하는 글을
|
43
|
+
"content" => keyword.to_s+" 소개하는 글을 1500자에서 2500자 사이로 만들어줘"
|
46
44
|
}]
|
47
45
|
}
|
48
46
|
answer = ''
|
@@ -73,10 +71,11 @@ class Chat
|
|
73
71
|
'Authorization' => 'Bearer ' + @api_key
|
74
72
|
}
|
75
73
|
d = {
|
76
|
-
'model' => 'gpt-3.5-turbo',
|
74
|
+
#'model' => 'gpt-3.5-turbo',
|
75
|
+
'model' => 'gpt-4',
|
77
76
|
'messages' => [{
|
78
77
|
"role" => "assistant",
|
79
|
-
"content" => keyword.to_s+" 관련된 글을
|
78
|
+
"content" => keyword.to_s+" 관련된 글을 1500자에서 2500자 사이로 만들어줘"
|
80
79
|
}]
|
81
80
|
}
|
82
81
|
answer = ''
|
@@ -107,215 +106,213 @@ class Chat
|
|
107
106
|
end
|
108
107
|
end
|
109
108
|
|
110
|
-
class
|
111
|
-
def initialize
|
112
|
-
@
|
113
|
-
@cookie = ''
|
109
|
+
class Chat_title
|
110
|
+
def initialize(api_key)
|
111
|
+
@api_key = api_key
|
114
112
|
end
|
115
|
-
|
116
|
-
def chrome_start(proxy)
|
117
|
-
if proxy == ''
|
118
|
-
begin
|
119
|
-
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
120
|
-
options = Selenium::WebDriver::Chrome::Options.new #(options: {"excludeSwitches" => ["enable-automation"]}) #자동화된 테스트...제거(options: {"excludeSwitches" => ["enable-automation"]})
|
121
|
-
options.add_extension('./crx/app.crx')
|
122
|
-
options.add_argument('--disable-blink-features=AutomationControlled')
|
123
|
-
options.add_argument('--disable-popup-blocking')
|
124
|
-
options.add_argument('--dns-prefetch-disable')
|
125
|
-
options.add_argument('--disable-dev-shm-usage')
|
126
|
-
options.add_argument('--disable-software-rasterizer')
|
127
|
-
options.add_argument('--ignore-certificate-errors')
|
128
|
-
options.add_argument('--disable-gpu') # GPU가속 끄기
|
129
|
-
options.excludeSwitches('enable-automation') #자동화된 테스트...제거
|
130
|
-
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') # user-agent 위조
|
131
|
-
|
132
|
-
options.add_argument('--disable-web-security')
|
133
|
-
options.add_argument('--allow-running-insecure-content')
|
134
|
-
options.add_argument('--ignore-certificate-errors')
|
135
|
-
options.add_argument('--allow-insecure-localhost')
|
136
|
-
options.add_argument('--no-sandbox')
|
137
|
-
|
138
|
-
options.add_argument('--disable-translate')
|
139
|
-
options.add_argument('--disable-extensions-file-access-check')
|
140
|
-
options.add_argument('--disable-impl-side-painting')
|
141
|
-
|
142
|
-
|
143
113
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
options.add_argument('--disable-popup-blocking')
|
162
|
-
options.add_argument('--dns-prefetch-disable')
|
163
|
-
options.add_argument('--disable-dev-shm-usage')
|
164
|
-
options.add_argument('--disable-software-rasterizer')
|
165
|
-
options.add_argument('--ignore-certificate-errors')
|
166
|
-
options.add_argument('--disable-gpu') # GPU가속 끄기
|
167
|
-
options.excludeSwitches('enable-automation') #자동화된 테스트...제거
|
168
|
-
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') # user-agent 위조
|
169
|
-
|
170
|
-
options.add_argument('--disable-web-security')
|
171
|
-
options.add_argument('--allow-running-insecure-content')
|
172
|
-
options.add_argument('--ignore-certificate-errors')
|
173
|
-
options.add_argument('--allow-insecure-localhost')
|
174
|
-
options.add_argument('--no-sandbox')
|
175
|
-
|
176
|
-
options.add_argument('--disable-translate')
|
177
|
-
options.add_argument('--disable-extensions-file-access-check')
|
178
|
-
options.add_argument('--disable-impl-side-painting')
|
179
|
-
|
114
|
+
def message(title)
|
115
|
+
url = 'https://api.openai.com/v1/chat/completions'
|
116
|
+
headers = {
|
117
|
+
'Content-Type' => 'application/json',
|
118
|
+
'Authorization' => 'Bearer ' + @api_key
|
119
|
+
}
|
120
|
+
data = {
|
121
|
+
'model' => 'gpt-4',
|
122
|
+
'messages' => [{
|
123
|
+
"role" => "system",
|
124
|
+
"content" => "너는 매우 친절하고 성의 있게 답변하는 AI 어시스턴트야."
|
125
|
+
},
|
126
|
+
{
|
127
|
+
"role" => "user",
|
128
|
+
"content" => "#{title}\n위 문장을 비슷한 길이로 ChatGPT의 멘트는 빼고 표현을 더 추가해서 하나만 만들어줘."
|
129
|
+
}]
|
130
|
+
}
|
180
131
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
187
|
-
options.add_extension('./crx/app.crx')
|
188
|
-
options.add_argument('--disable-blink-features=AutomationControlled')
|
189
|
-
options.add_argument('--disable-popup-blocking')
|
190
|
-
options.add_argument('--dns-prefetch-disable')
|
191
|
-
options.add_argument('--disable-dev-shm-usage')
|
192
|
-
options.add_argument('--disable-software-rasterizer')
|
193
|
-
options.add_argument('--ignore-certificate-errors')
|
194
|
-
options.add_argument('--disable-gpu') # GPU가속 끄기
|
195
|
-
options.excludeSwitches('enable-automation') #자동화된 테스트...제거
|
196
|
-
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') # user-agent 위조
|
197
|
-
|
198
|
-
options.add_argument('--disable-web-security')
|
199
|
-
options.add_argument('--allow-running-insecure-content')
|
200
|
-
options.add_argument('--ignore-certificate-errors')
|
201
|
-
options.add_argument('--allow-insecure-localhost')
|
202
|
-
options.add_argument('--no-sandbox')
|
203
|
-
|
204
|
-
options.add_argument('--disable-translate')
|
205
|
-
options.add_argument('--disable-extensions-file-access-check')
|
206
|
-
options.add_argument('--disable-impl-side-painting')
|
132
|
+
begin
|
133
|
+
req = HTTP.headers(headers).post(url, json: data)
|
134
|
+
puts "HTTP Status: #{req.status}" # 상태 코드 확인
|
135
|
+
response = JSON.parse(req.body.to_s)
|
136
|
+
puts "API Response: #{response}" # 전체 응답 출력
|
207
137
|
|
208
|
-
|
209
|
-
|
210
|
-
@driver = Selenium::WebDriver.for(:chrome, capabilities: options)
|
211
|
-
end
|
138
|
+
if req.status == 429
|
139
|
+
return "API 요청 제한을 초과했습니다. 플랜 및 할당량을 확인하세요."
|
212
140
|
end
|
141
|
+
|
142
|
+
# 응답 데이터에서 안전하게 값 추출
|
143
|
+
answer = response.dig('choices', 0, 'message', 'content')
|
144
|
+
answer ||= (title) # 응답이 없을 경우 기본 메시지 설정
|
145
|
+
rescue => e
|
146
|
+
puts "Error: #{e.message}"
|
147
|
+
answer = "오류가 발생했습니다."
|
213
148
|
end
|
149
|
+
|
150
|
+
puts 'API return ==> '
|
151
|
+
puts answer
|
152
|
+
answer
|
214
153
|
end
|
154
|
+
end
|
215
155
|
|
156
|
+
class Chat_content
|
157
|
+
def initialize(api_key)
|
158
|
+
@api_key = api_key
|
159
|
+
end
|
216
160
|
|
217
|
-
|
218
|
-
|
219
|
-
def login(user_id, user_pw, proxy ,captcha_key)
|
220
|
-
chrome_start(proxy)
|
221
|
-
sleep(2)
|
222
|
-
@captcha_key = captcha_key
|
223
|
-
@driver.get('chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html')
|
224
|
-
sleep(3)
|
225
|
-
begin
|
226
|
-
@driver.switch_to.window(@driver.window_handles[1])
|
227
|
-
@driver.close()
|
228
|
-
rescue
|
229
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
230
|
-
end
|
231
|
-
sleep(2)
|
232
|
-
# @driver.close()
|
233
|
-
sleep(2)
|
234
|
-
####################탭나누기 수정중######################################
|
235
|
-
begin
|
236
|
-
puts '-[√] 투 캡챠 api 입력 시도 1.......'.green
|
237
|
-
sleep(1)
|
238
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
239
|
-
sleep(1)
|
240
|
-
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[2]/input').click
|
241
|
-
sleep(1)
|
242
|
-
Clipboard.copy(captcha_key)
|
243
|
-
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
244
|
-
sleep(3)
|
245
|
-
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
|
246
|
-
sleep(3)
|
247
|
-
@driver.switch_to.alert.dismiss
|
248
|
-
#팝업창 닫기
|
249
|
-
#key_down('ctrl')
|
250
|
-
#key_stroke('tab')
|
251
|
-
#key_up('ctrl')
|
252
|
-
#sleep(1)
|
253
|
-
#@driver.close()
|
254
|
-
rescue
|
255
|
-
begin
|
256
|
-
puts '-[√] 투 캡챠 api 입력 시도 2.......'.green
|
257
|
-
sleep(1)
|
258
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
259
|
-
sleep(1)
|
260
|
-
@driver.find_element(:name, 'apiKey').click
|
261
|
-
sleep(1)
|
262
|
-
Clipboard.copy(captcha_key)
|
263
|
-
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
264
|
-
sleep(3)
|
265
|
-
@driver.find_element(:class_name, 'default-btn').click
|
266
|
-
sleep(3)
|
267
|
-
@driver.switch_to.alert.dismiss
|
268
|
-
#팝업창 닫기
|
269
|
-
#key_down('ctrl')
|
270
|
-
#key_stroke('tab')
|
271
|
-
#key_up('ctrl')
|
272
|
-
#sleep(1)
|
273
|
-
#@driver.close()
|
274
|
-
rescue
|
275
|
-
begin
|
276
|
-
@driver.quit()
|
277
|
-
rescue
|
278
|
-
end
|
279
|
-
end
|
280
|
-
end
|
281
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
282
|
-
####################탭나누기 수정중######################################
|
283
|
-
@user_id = user_id
|
284
|
-
@user_id11 = user_id
|
285
|
-
sleep(3)
|
286
|
-
@driver.get('https://www.tistory.com/auth/login')
|
287
|
-
sleep(3)
|
161
|
+
def message(content)
|
288
162
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
163
|
+
url = 'https://api.openai.com/v1/chat/completions'
|
164
|
+
headers = {
|
165
|
+
'Content-Type' => 'application/json',
|
166
|
+
'Authorization' => 'Bearer ' + @api_key
|
167
|
+
}
|
168
|
+
data = {
|
169
|
+
'model' => 'gpt-4',
|
170
|
+
'messages' => [{
|
171
|
+
"role" => "system",
|
172
|
+
"content" => "너는 매우 친절하고 성의 있게 답변하는 AI 어시스턴트야."
|
173
|
+
},
|
174
|
+
{
|
175
|
+
"role" => "user",
|
176
|
+
"content" => "#{content}\nChatGPT의 멘트는 빼고 위 전체적인 내용의 형식을 똑같이 표현을 더 추가하고 유사어로 변경하여 하나 만들어줘! 전화번호,연락처,가격,홈페이지안내 ,상담안내 관련 문구는 유지해야해"
|
177
|
+
}]
|
178
|
+
}
|
293
179
|
|
294
|
-
|
295
|
-
|
296
|
-
|
180
|
+
begin
|
181
|
+
req = HTTP.headers(headers).post(url, json: data)
|
182
|
+
puts "HTTP Status: #{req.status}" # 상태 코드 확인
|
183
|
+
response = JSON.parse(req.body.to_s)
|
184
|
+
puts "API Response: #{response}" # 전체 응답 출력
|
185
|
+
|
186
|
+
if req.status == 429
|
187
|
+
return "API 요청 제한을 초과했습니다. 플랜 및 할당량을 확인하세요."
|
297
188
|
end
|
298
|
-
rescue
|
299
|
-
end
|
300
189
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
190
|
+
# 응답 데이터에서 안전하게 값 추출
|
191
|
+
answer = response.dig('choices', 0, 'message', 'content')
|
192
|
+
answer ||= (content) # 응답이 없을 경우 기본 메시지 설정
|
193
|
+
rescue => e
|
194
|
+
puts "Error: #{e.message}"
|
195
|
+
answer = "오류가 발생했습니다."
|
306
196
|
end
|
307
197
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
198
|
+
puts 'API return ==> '
|
199
|
+
puts answer
|
200
|
+
answer
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
#############################################gpt############################################
|
206
|
+
|
207
|
+
class Naver
|
208
|
+
def initialize
|
209
|
+
@seed = 1
|
210
|
+
@cookie = ''
|
211
|
+
end
|
212
|
+
|
213
|
+
def chrome_start(proxy)
|
214
|
+
# 공통 옵션 설정
|
215
|
+
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
216
|
+
options = Selenium::WebDriver::Chrome::Options.new
|
217
|
+
|
218
|
+
options.add_extension('./crx/app.crx') # 확장 프로그램을 첫 번째 탭에 추가
|
219
|
+
options.add_argument('--disable-blink-features=AutomationControlled')
|
220
|
+
options.add_argument('--disable-popup-blocking')
|
221
|
+
options.add_argument('--dns-prefetch-disable')
|
222
|
+
options.add_argument('--disable-dev-shm-usage')
|
223
|
+
options.add_argument('--disable-software-rasterizer')
|
224
|
+
options.add_argument('--ignore-certificate-errors')
|
225
|
+
options.add_argument('--disable-gpu') # GPU 가속 끄기
|
226
|
+
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') # user-agent 위조
|
227
|
+
options.add_argument('--disable-web-security')
|
228
|
+
options.add_argument('--allow-running-insecure-content')
|
229
|
+
options.add_argument('--allow-insecure-localhost')
|
230
|
+
options.add_argument('--no-sandbox')
|
231
|
+
options.add_argument('--disable-translate')
|
232
|
+
options.add_argument('--disable-extensions-file-access-check')
|
233
|
+
options.add_argument('--disable-impl-side-painting')
|
234
|
+
|
235
|
+
# 자동화된 테스트 제거
|
236
|
+
options.exclude_switches = ['enable-automation']
|
237
|
+
|
238
|
+
options.add_preference("profile.password_manager_enabled", false) # 비밀번호 관리자 비활성화
|
239
|
+
options.add_preference("credentials_enable_service", false) # 비밀번호 저장 기능 비활성화
|
240
|
+
#options.add_preference("profile.managed_default_content_settings.cookies", 2) # 쿠키 관련 팝업 차단
|
241
|
+
options.add_preference("profile.default_content_setting_values.notifications", 2) # 알림 차단
|
242
|
+
options.add_argument("--disable-save-password-bubble") # 비밀번호 저장 팝업 차단
|
243
|
+
|
244
|
+
|
245
|
+
# Proxy 설정
|
246
|
+
if proxy != ''
|
247
|
+
options.add_argument('--proxy-server=' + proxy.to_s.force_encoding('utf-8'))
|
248
|
+
end
|
249
|
+
|
250
|
+
# 브라우저 실행
|
251
|
+
begin
|
252
|
+
# 새 드라이버 실행
|
253
|
+
@driver = Selenium::WebDriver.for(:chrome, options: options)
|
254
|
+
|
255
|
+
# 첫 번째 탭에서 확장 프로그램을 로드
|
256
|
+
#@driver.get("chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html")
|
315
257
|
|
316
258
|
sleep(1)
|
259
|
+
# 두 번째 탭에서 로그인 페이지 열기
|
260
|
+
@driver.get('https://www.tistory.com/auth/login')
|
261
|
+
sleep(1)
|
262
|
+
|
263
|
+
rescue => e
|
264
|
+
|
265
|
+
puts "Error: #{e.message}"
|
266
|
+
puts 'Using default Chrome driver without proxy'
|
267
|
+
@driver = Selenium::WebDriver.for(:chrome, options: options)
|
268
|
+
|
269
|
+
# 첫 번째 탭에서 확장 프로그램을 로드
|
270
|
+
#@driver.get("chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html")
|
271
|
+
sleep(1)
|
272
|
+
# 두 번째 탭에서 로그인 페이지 열기
|
317
273
|
@driver.get('https://www.tistory.com/auth/login')
|
274
|
+
sleep(1)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
def login(user_id, user_pw, proxy, captcha_api_key)
|
279
|
+
chrome_start(proxy)
|
280
|
+
@captcha_api_key = captcha_api_key
|
281
|
+
@user_id = user_id
|
282
|
+
|
283
|
+
user_cookie_file = []
|
284
|
+
begin
|
285
|
+
Dir.entries('./cookie').each do |i|
|
286
|
+
if i != '.' && i != '..'
|
287
|
+
user_cookie_file << i
|
288
|
+
end
|
289
|
+
end
|
290
|
+
rescue
|
291
|
+
end
|
292
|
+
|
293
|
+
@cookie4 = {}
|
294
|
+
if user_cookie_file.include?(user_id+'.txt')
|
295
|
+
f = File.open('./cookie/'+user_id+'.txt', 'r')
|
296
|
+
@cookie4 = JSON.parse(f.read)
|
297
|
+
f.close
|
298
|
+
end
|
299
|
+
|
300
|
+
# 기존 쿠키가 있으면 쿠키를 추가
|
301
|
+
begin
|
302
|
+
@cookie4.each do |i|
|
303
|
+
@driver.manage.add_cookie(name: i['name'], value: i['value'], same_site: i['same_site'], domain: i['domain'], path: i['path'])
|
304
|
+
end
|
305
|
+
rescue
|
306
|
+
end
|
307
|
+
|
308
|
+
@driver.switch_to.window(@driver.window_handles.last)
|
309
|
+
sleep(1.5)
|
310
|
+
@driver.get('https://www.tistory.com/auth/login')
|
311
|
+
|
312
|
+
sleep(1)
|
318
313
|
begin
|
314
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
315
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="cMain"]/div/div/div/div/a[2]/span[2]') }
|
319
316
|
@driver.find_element(:xpath, '//*[@id="cMain"]/div/div/div/div/a[2]/span[2]').click
|
320
317
|
check_cookie_login = 0
|
321
318
|
rescue
|
@@ -323,45 +320,67 @@ class Naver
|
|
323
320
|
end
|
324
321
|
|
325
322
|
if check_cookie_login == 0
|
326
|
-
|
323
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
324
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="loginId--1"]') }
|
327
325
|
@driver.find_element(:xpath, '//*[@id="loginId--1"]').click
|
328
326
|
Clipboard.copy(user_id)
|
327
|
+
sleep(0.5)
|
329
328
|
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
330
329
|
puts '-[√] 1 아이디 입력.......'.yellow
|
331
|
-
|
330
|
+
|
331
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
332
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="password--2"]') }
|
332
333
|
@driver.find_element(:xpath, '//*[@id="password--2"]').click
|
333
334
|
Clipboard.copy(user_pw)
|
335
|
+
sleep(0.5)
|
334
336
|
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
335
337
|
puts '-[√] 2 비밀번호 입력.......'.yellow
|
336
|
-
|
338
|
+
|
339
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
340
|
+
wait.until { @driver.find_element(:xpath, '//*[@class="btn_g highlight submit"]') }
|
337
341
|
@driver.find_element(:xpath, '//*[@type="submit"]').click
|
338
|
-
#@driver.find_element(:xpath, '//*[@id="mainContent"]/div/div/form/div[4]/button[1]').click
|
339
342
|
puts '-[√] 3 로그인 버튼 클릭.......'.yellow
|
340
|
-
|
341
|
-
sleep(5)
|
342
|
-
|
343
|
-
|
344
|
-
puts '-[√] 3 캡챠 발생 및 이메일 인증 유무 확인.......'.green
|
345
|
-
sleep(1)
|
346
|
-
puts '-[√] 3 캡챠 발생 및 이메일 인증 유무 확인.......'.green
|
347
|
-
sleep(1)
|
348
|
-
puts '-[√] 3 캡챠 발생 및 이메일 인증 유무 확인.......'.green
|
349
|
-
sleep(1)
|
350
|
-
|
351
343
|
|
344
|
+
#캡챠 해제시
|
345
|
+
begin
|
346
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
347
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="captchaContainer"]') }
|
348
|
+
puts '-[√] 로그인 중 캡챠 요구 발생 처리 진행.......'.yellow
|
349
|
+
sleep(1)
|
350
|
+
@driver.switch_to.window(@driver.window_handles[0])
|
351
|
+
sleep(1)
|
352
|
+
@driver.find_element(:xpath, '//*[@name="apiKey"]').click
|
353
|
+
Clipboard.copy(captcha_api_key)
|
354
|
+
sleep(0.5)
|
355
|
+
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
356
|
+
sleep(0.5)
|
357
|
+
@driver.find_element(:xpath, '//*[@data-lang="login"]').click
|
358
|
+
|
359
|
+
begin
|
360
|
+
sleep(2)
|
361
|
+
@driver.switch_to.alert.dismiss
|
362
|
+
sleep(1)
|
363
|
+
rescue
|
364
|
+
|
365
|
+
end
|
352
366
|
|
367
|
+
# 두 번째 탭으로 전환
|
368
|
+
@driver.switch_to.window(@driver.window_handles[1])
|
353
369
|
|
354
370
|
begin
|
371
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 7)
|
372
|
+
wait.until { @driver.find_element(:xpath, '//*[@data-state="ready"]') }
|
355
373
|
@driver.find_element(:xpath, '//*[@data-state="ready"]').click #캡챠우회버튼
|
356
374
|
puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
|
357
375
|
sleep(10)
|
376
|
+
|
358
377
|
begin
|
359
378
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
360
379
|
puts '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
361
380
|
puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
362
|
-
|
381
|
+
sleep(1)
|
382
|
+
@driver.quit
|
363
383
|
rescue
|
364
|
-
|
365
384
|
# 타임아웃을 77초로 설정
|
366
385
|
wait = Selenium::WebDriver::Wait.new(:timeout => 100)
|
367
386
|
# 요소가 나타날 때까지 100초 동안 기다립니다.
|
@@ -373,89 +392,107 @@ class Naver
|
|
373
392
|
@driver.find_element(:xpath, '//*[@id="password--2"]').click #비번 클릭
|
374
393
|
sleep(1)
|
375
394
|
@driver.action.send_keys(:enter).perform #엔터키 주기
|
376
|
-
|
377
|
-
end
|
378
|
-
rescue
|
379
|
-
puts '-[√] 캡챠 인증 없음 확인.......'.yellow
|
380
|
-
sleep(1)
|
381
|
-
end
|
382
|
-
|
395
|
+
end
|
383
396
|
|
397
|
+
rescue
|
398
|
+
end
|
384
399
|
|
385
|
-
|
386
|
-
|
387
|
-
puts '-[√] 이메일 인증 체크 확인 중.......'.yellow
|
388
|
-
sleep(2)
|
389
|
-
# 타임아웃을 10초로 설정
|
390
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
391
|
-
#요소가 나타날 때까지 3초 동안 기다립니다.
|
392
|
-
wait.until { @driver.find_element(:xpath, '//*[@class="ico_comm ico_mail"]') }
|
393
|
-
@driver.find_element(:xpath, '//*[@class="ico_comm ico_mail"]')
|
394
|
-
print "이메일 인증 요구 발생!! 수동으로 인증 완료 후 여기에 엔터를 쳐주세요".cyan
|
395
|
-
input = gets.chomp()
|
396
|
-
rescue
|
397
|
-
puts '-[√] 이메일 인증 없음 확인.......'.yellow
|
398
|
-
sleep(1)
|
399
|
-
end
|
400
|
-
|
400
|
+
rescue
|
401
|
+
end
|
401
402
|
|
402
403
|
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
404
|
+
# 아이디/비밀번호 오류 처리 부분
|
405
|
+
begin
|
406
|
+
@driver.find_element(:xpath, '//*[@class="desc_error"]')
|
407
|
+
sleep(1)
|
408
|
+
@driver.quit
|
409
|
+
puts 'error = 아이디/비밀번호 오류'.yellow
|
410
|
+
rescue
|
411
|
+
end
|
412
|
+
|
413
|
+
|
414
|
+
#예외 변수
|
415
|
+
begin
|
416
|
+
# 타임아웃을 10초로 설정
|
417
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 1)
|
418
|
+
#요소가 나타날 때까지 3초 동안 기다립니다.
|
419
|
+
wait.until { @driver.find_element(:xpath, '//*[@class="ico_comm ico_mail"]') }
|
420
|
+
@driver.find_element(:xpath, '//*[@class="ico_comm ico_mail"]')
|
421
|
+
print "이메일 인증 요구 발생!! 수동으로 인증 완료 후 여기에 엔터를 쳐주세요".cyan
|
422
|
+
input = gets.chomp()
|
423
|
+
rescue
|
424
|
+
end
|
425
|
+
|
426
|
+
#예외 변수
|
427
|
+
begin
|
428
|
+
@driver.find_element(:xpath, '//*[@class="link_comm link_g"]').click
|
429
|
+
puts '비밀번호 재 요청 다음에하기 클릭'.yellow
|
430
|
+
sleep(1)
|
431
|
+
rescue
|
432
|
+
end
|
433
|
+
|
434
|
+
#예외 변수
|
435
|
+
begin
|
436
|
+
@driver.find_element(:xpath, '//*[@class="inner_error inner_error_type2"]')
|
437
|
+
puts 'error = 평소와 다른 로그인이 감지되어 추가 인증이 필요합니다.'.yellow
|
438
|
+
@driver.quit
|
439
|
+
rescue
|
440
|
+
end
|
441
|
+
|
442
|
+
#최종 로그인 실패시
|
443
|
+
begin
|
444
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
|
445
|
+
wait.until { @driver.find_element(:xpath, '//*[@class="my_tistory border_box"]') }
|
446
|
+
rescue => e
|
447
|
+
puts '-[√] 로그인 실패.......'.red
|
448
|
+
@driver.quit
|
449
|
+
return 0
|
450
|
+
end
|
451
|
+
|
423
452
|
end
|
424
453
|
|
425
454
|
@cookie = ''
|
426
|
-
cookie2 =
|
455
|
+
cookie2 = []
|
427
456
|
@driver.manage.all_cookies.each do |i|
|
428
|
-
puts i
|
429
|
-
@cookie += i[:name]+'='+i[:value]+'; '
|
430
457
|
cookie2 << i
|
431
458
|
end
|
432
459
|
|
460
|
+
# 쿠키 만료 시간을 1년으로 설정
|
461
|
+
cookie2.each do |cookie|
|
462
|
+
cookie[:expiry] = Time.now.to_i + 365 * 24 * 60 * 60 # 만료 시간을 1년 후로 설정
|
463
|
+
end
|
464
|
+
|
433
465
|
File.open('./cookie/'+user_id+'.txt', 'w') do |ff|
|
434
466
|
ff.write(cookie2.to_json)
|
435
467
|
end
|
436
468
|
end
|
437
|
-
|
438
469
|
|
439
470
|
sleep(2)
|
440
471
|
|
441
|
-
|
472
|
+
|
473
|
+
|
474
|
+
def update(title, content, option, url, keyword, captcha_api_key)#dd_time
|
442
475
|
puts 'start...'.yellow
|
443
476
|
puts(url)
|
444
477
|
sleep(1)
|
445
478
|
@driver.get(url)
|
446
|
-
sleep(
|
447
|
-
|
479
|
+
sleep(2)
|
480
|
+
|
448
481
|
|
449
482
|
|
450
483
|
begin
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
484
|
+
# alert이 뜨기를 기다리기
|
485
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 5) # 10초 대기
|
486
|
+
alert = wait.until { @driver.switch_to.alert }
|
487
|
+
|
488
|
+
# alert 처리 (예: dismiss나 accept)
|
489
|
+
alert.dismiss # 또는 alert.accept
|
490
|
+
sleep(2)
|
491
|
+
rescue
|
492
|
+
sleep(1)
|
456
493
|
end
|
457
494
|
|
458
|
-
|
495
|
+
|
459
496
|
|
460
497
|
|
461
498
|
|
@@ -489,7 +526,8 @@ class Naver
|
|
489
526
|
rescue => e
|
490
527
|
puts '-[√] 카테고리 ERROR 발생.......'.red
|
491
528
|
puts '-[√] 다음 작업이 준비중이니 1~60 초 정도 기다려주세요.......'.green
|
492
|
-
|
529
|
+
@driver.quit
|
530
|
+
return 0
|
493
531
|
end
|
494
532
|
|
495
533
|
|
@@ -503,8 +541,10 @@ class Naver
|
|
503
541
|
|
504
542
|
begin
|
505
543
|
@driver.find_element(:xpath, '//*[@id="post-title-inp"]').send_keys(title)
|
506
|
-
rescue
|
507
|
-
|
544
|
+
rescue => e
|
545
|
+
@driver.quit
|
546
|
+
return 0
|
547
|
+
puts '-[√] 페이지 로드(로딩)시간 초과 및 알수없는 오류로 종료.......'.red
|
508
548
|
puts '-[√] 다음 작업이 준비중이니 1~60 초 정도 기다려주세요.......'.green
|
509
549
|
puts e
|
510
550
|
end
|
@@ -517,61 +557,26 @@ class Naver
|
|
517
557
|
|
518
558
|
sleep(1)
|
519
559
|
|
560
|
+
begin
|
561
|
+
@driver.find_element(:xpath, '//*[@id="mceu_9-button"]').click()
|
562
|
+
@driver.find_element(:xpath, '//*[@id="mceu_9-button"]').click()
|
563
|
+
rescue => e
|
564
|
+
@driver.quit
|
565
|
+
return 0
|
566
|
+
puts '-[√] 페이지 로드(로딩)시간 초과 및 알수없는 오류로 종료.......'.red
|
567
|
+
puts '-[√] 다음 작업이 준비중이니 1~60 초 정도 기다려주세요.......'.green
|
568
|
+
|
569
|
+
end
|
520
570
|
|
521
|
-
@driver.find_element(:xpath, '//*[@id="mceu_9-button"]').click()
|
522
|
-
@driver.find_element(:xpath, '//*[@id="mceu_9-button"]').click()
|
523
|
-
|
524
571
|
|
525
572
|
puts content
|
526
573
|
noko = Nokogiri::HTML(content, nil, Encoding::UTF_8.to_s)
|
527
574
|
toomung = 0
|
528
575
|
h = Hash.new
|
529
|
-
|
530
|
-
# h[:method] = 'POST'
|
531
|
-
# h[:path] = '/RabbitWrite.naver'
|
532
|
-
# h[:scheme] = 'https'
|
533
|
-
# h['accept'] = 'application/json, text/plain, */*'
|
534
|
-
# h['accept-encoding'] = 'gzip, deflate, br'
|
535
|
-
# h['accept-language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
|
536
|
-
# h['content-type'] = 'application/x-www-form-urlencoded'
|
537
|
-
# h['cookie'] = @cookie
|
538
|
-
# h['origin'] = 'https://blog.naver.com'
|
539
|
-
# h['referer'] = 'https://blog.naver.com/'+@user_id+'/postwrite?categoryNo=1'
|
540
|
-
# h['sec-ch-ua'] = '"Chromium";v="106", "Google Chrome";v="106", "Not;A=Brand";v="99"'
|
541
|
-
# h['sec-ch-ua-mobile'] = '?0'
|
542
|
-
# h['sec-ch-ua-platform'] = '"Windows"'
|
543
|
-
# h['sec-fetch-dest'] = 'empty'
|
544
|
-
# h['sec-fetch-mode'] = 'cors'
|
545
|
-
# h['sec-fetch-site'] = 'same-origin'
|
546
|
-
# 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'
|
576
|
+
|
547
577
|
|
548
578
|
data = Hash.new
|
549
|
-
|
550
|
-
# data['documentModel'] = Hash.new
|
551
|
-
# data['documentModel']['documentId'] = ''
|
552
|
-
# data['documentModel']['document'] = Hash.new
|
553
|
-
# data['documentModel']['document']['version'] = '2.6.0'
|
554
|
-
# data['documentModel']['document']['theme'] = 'default'
|
555
|
-
# data['documentModel']['document']['language'] = 'ko-KR'
|
556
|
-
# data['documentModel']['document']['components'] = Array.new
|
557
|
-
# data['documentModel']['document']['components'][0] = {
|
558
|
-
# 'id' => create_id(),
|
559
|
-
# 'layout' => 'default',
|
560
|
-
# 'title' => [
|
561
|
-
# {
|
562
|
-
# 'id' => create_id(),
|
563
|
-
# 'nodes' => [{
|
564
|
-
# 'id' => create_id(),
|
565
|
-
# 'value' => title,
|
566
|
-
# '@ctype' => 'textNode'
|
567
|
-
# }],
|
568
|
-
# '@ctype' => 'paragraph'
|
569
|
-
# }
|
570
|
-
# ],
|
571
|
-
# 'subTitle' => nil,
|
572
|
-
# 'align' => 'left',
|
573
|
-
# '@ctype' => 'documentTitle'
|
574
|
-
# }
|
579
|
+
|
575
580
|
|
576
581
|
check_position = 1
|
577
582
|
noko.css('p').each do |i|
|
@@ -971,7 +976,7 @@ class Naver
|
|
971
976
|
end
|
972
977
|
|
973
978
|
|
974
|
-
|
979
|
+
|
975
980
|
|
976
981
|
|
977
982
|
#링크 넣는 코드 ↓
|
@@ -1042,22 +1047,7 @@ class Naver
|
|
1042
1047
|
end
|
1043
1048
|
end
|
1044
1049
|
end
|
1045
|
-
|
1046
|
-
#아이프레임 선택
|
1047
|
-
#sleep(0.5)
|
1048
|
-
#@driver.find_element(:xpath, '//*[@id="tinymce"]/p').click
|
1049
|
-
#아이프레임에서 코드 선택
|
1050
|
-
#sleep(0.5)
|
1051
|
-
#@driver.action.key_down(:control).key_down(:end).perform
|
1052
|
-
#sleep(0.5)
|
1053
|
-
#@driver.action.key_up(:control).key_up(:end).perform
|
1054
|
-
#sleep(0.5)
|
1055
|
-
#@driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
|
1056
|
-
#sleep(0.5)
|
1057
|
-
#@driver.switch_to.default_content()
|
1058
|
-
#sleep(0.5)
|
1059
|
-
#아이프레임 나오기
|
1060
|
-
|
1050
|
+
|
1061
1051
|
|
1062
1052
|
|
1063
1053
|
@driver.action.key_down(:end).key_up(:end).perform
|
@@ -1069,52 +1059,10 @@ class Naver
|
|
1069
1059
|
|
1070
1060
|
sleep(1)
|
1071
1061
|
|
1072
|
-
|
1073
|
-
#sleep(1)
|
1074
|
-
#@driver.action.key_down(:end).key_up(:end).perform
|
1075
|
-
#sleep(0.5)
|
1076
|
-
#@driver.action.key_down(:enter).key_up(:enter).perform
|
1077
|
-
|
1078
|
-
#sleep(1)
|
1079
|
-
## 줄바꿈~~~~~~~~
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
#@driver.find_element(:xpath, '/html/body/div[1]/div/main/div/div[1]').click
|
1084
|
-
#빈공간 클릭
|
1085
|
-
#sleep(1)
|
1086
|
-
#@driver.action.key_down(:end).key_up(:end).perform
|
1087
|
-
#스크롤 내리기
|
1088
|
-
#sleep(1)
|
1089
|
-
|
1090
1062
|
end
|
1091
1063
|
|
1092
1064
|
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
if option['중앙정렬'] == 'false'
|
1065
|
+
if option['중앙정렬'] == 'true'
|
1118
1066
|
puts '-[√] 중앙정렬 선택.......'.yellow
|
1119
1067
|
begin
|
1120
1068
|
|
@@ -1128,7 +1076,7 @@ class Naver
|
|
1128
1076
|
sleep(1.5)
|
1129
1077
|
|
1130
1078
|
|
1131
|
-
if option['좌측정렬'] == '
|
1079
|
+
if option['좌측정렬'] == 'true'
|
1132
1080
|
puts '-[√] 좌측정렬 선택.......'.yellow
|
1133
1081
|
begin
|
1134
1082
|
@driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
|
@@ -1140,7 +1088,7 @@ class Naver
|
|
1140
1088
|
sleep(1.5)
|
1141
1089
|
|
1142
1090
|
|
1143
|
-
if option['우측정렬'] == '
|
1091
|
+
if option['우측정렬'] == 'true'
|
1144
1092
|
puts '-[√] 우측정렬 선택.......'.yellow
|
1145
1093
|
begin
|
1146
1094
|
@driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
|
@@ -1167,224 +1115,287 @@ class Naver
|
|
1167
1115
|
#태그 입력 항목
|
1168
1116
|
|
1169
1117
|
sleep(1.5)
|
1170
|
-
|
1171
|
-
@driver.find_element(:xpath, '/html/body/div[1]/div/div[2]/div[3]/button').click
|
1172
|
-
#1차 완료버튼
|
1173
|
-
sleep(1.5)
|
1174
|
-
|
1175
|
-
# 타임아웃을 10초로 설정
|
1176
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 60)
|
1177
|
-
#요소가 나타날 때까지 60초 동안 기다립니다.
|
1178
|
-
wait.until { @driver.find_element(:xpath, '//*[@id="open20"]') }
|
1179
|
-
|
1180
|
-
|
1181
|
-
if option['전체공개'] == 'false'
|
1182
|
-
puts '-[√] 전체공개 선택.......'.yellow
|
1183
|
-
begin
|
1184
|
-
sleep(2)
|
1185
|
-
@driver.find_element(:xpath, '//*[@id="open20"]').click
|
1186
|
-
rescue
|
1187
|
-
end
|
1188
|
-
end
|
1189
|
-
sleep(2)
|
1190
|
-
|
1191
|
-
if option['비공개'] == 'false'
|
1192
|
-
puts '-[√] 비공개 선택.......'.yellow
|
1193
|
-
begin
|
1194
|
-
sleep(2)
|
1195
|
-
@driver.find_element(:xpath, '//*[@id="open0"]').click
|
1196
|
-
rescue
|
1197
|
-
end
|
1198
|
-
end
|
1199
|
-
sleep(2)
|
1200
|
-
|
1201
|
-
if option['댓글허용'] == 'false'
|
1202
|
-
puts '-[√] 댓글허용 선택.......'.yellow
|
1203
|
-
begin
|
1204
|
-
sleep(2)
|
1205
|
-
@driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
|
1206
|
-
sleep(2)
|
1207
|
-
@driver.find_element(:partial_link_text, '댓글 허용').click
|
1208
|
-
rescue
|
1209
|
-
end
|
1210
|
-
end
|
1211
|
-
sleep(2)
|
1212
|
-
|
1213
|
-
if option['댓글 비 허용'] == 'false'
|
1214
|
-
puts '-[√] 댓글 비 허용 선택.......'.yellow
|
1215
|
-
begin
|
1216
|
-
sleep(2)
|
1217
|
-
@driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
|
1218
|
-
sleep(2)
|
1219
|
-
@driver.find_element(:partial_link_text, '댓글 비허용').click
|
1220
|
-
rescue
|
1221
|
-
end
|
1222
|
-
end
|
1223
|
-
|
1224
|
-
|
1225
|
-
puts '-[√] 캡챠 발생 유무 확인.......'.green
|
1226
|
-
sleep(1)
|
1227
|
-
puts '-[√] 캡챠 발생 유무 확인.......'.green
|
1228
|
-
sleep(1)
|
1229
|
-
puts '-[√] 캡챠 발생 유무 확인.......'.green
|
1230
|
-
sleep(1)
|
1231
1118
|
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
|
1237
|
-
sleep(10)
|
1119
|
+
##################글 발행##################
|
1120
|
+
|
1121
|
+
if option['글발생하기'] == 'true'
|
1122
|
+
puts '-[√] 글 발행 선택.......'.yellow
|
1238
1123
|
begin
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
sleep(1)
|
1245
|
-
@driver.close
|
1246
|
-
puts '-[√] 작업 종료 중........다음 포스팅 작업을 준비 합니다........'.red
|
1247
|
-
sleep(1)
|
1248
|
-
sleep(dd_time.to_i) #등록버튼 누르기전 딜레이
|
1249
|
-
@driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
|
1250
|
-
rescue
|
1251
|
-
# 타임아웃을 100초로 설정
|
1252
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 100)
|
1253
|
-
# 요소가 나타날 때까지 100초 동안 기다립니다.
|
1254
|
-
wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
|
1255
|
-
sleep(2)
|
1256
|
-
@driver.find_element(:xpath, '//*[@data-state="solved"]').click #캡챠 해제 완료 버튼
|
1257
|
-
puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
|
1258
|
-
sleep(3.7)
|
1259
|
-
puts '-[√] 등록 버튼 클릭.......'.yellow
|
1260
|
-
sleep(dd_time.to_i) #등록버튼 누르기전 딜레이
|
1261
|
-
@driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
|
1262
|
-
puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
|
1263
|
-
sleep(5)
|
1264
|
-
@driver.find_element(:xpath, '//*[@class="post_cont"]')
|
1265
|
-
sleep(1)
|
1266
|
-
puts '-[√] 포스트 등록 완료.......'.yellow
|
1267
|
-
@driver.close
|
1268
|
-
end
|
1269
|
-
rescue
|
1270
|
-
#puts '-[체크] 등록 버튼 클릭.......'
|
1271
|
-
sleep(dd_time.to_i) #등록버튼 누르기전 딜레이
|
1272
|
-
@driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
|
1273
|
-
puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
|
1274
|
-
|
1275
|
-
###########포스트 캡챠해제 팝업 시 재시도 작업 시작▼▼▼▼▼▼▼▼▼▼▼▼
|
1276
|
-
begin
|
1277
|
-
sleep(1)
|
1278
|
-
@driver.switch_to.alert.accept
|
1279
|
-
puts '-[√] 캡챠 체크 시간 초과!! 재 등록 시도.......'.green
|
1280
|
-
sleep(2)
|
1281
|
-
@driver.get(url)
|
1282
|
-
puts '-[√] 등록 내용 불러오기 시도.......'.yellow
|
1283
|
-
sleep(2)
|
1284
|
-
@driver.switch_to.alert.accept
|
1285
|
-
sleep(2)
|
1286
|
-
puts '-[√] 재 등록 시도 시작.......'.yellow
|
1287
|
-
@driver.find_element(:xpath, '//*[@id="publish-layer-btn"]').click
|
1288
|
-
sleep(2)
|
1124
|
+
|
1125
|
+
|
1126
|
+
@driver.find_element(:xpath, '/html/body/div[1]/div/div[2]/div[3]/button').click
|
1127
|
+
#1차 완료버튼
|
1128
|
+
sleep(1.5)
|
1289
1129
|
|
1290
1130
|
# 타임아웃을 10초로 설정
|
1291
1131
|
wait = Selenium::WebDriver::Wait.new(:timeout => 60)
|
1292
1132
|
#요소가 나타날 때까지 60초 동안 기다립니다.
|
1293
1133
|
wait.until { @driver.find_element(:xpath, '//*[@id="open20"]') }
|
1294
|
-
|
1295
1134
|
|
1296
|
-
|
1135
|
+
|
1136
|
+
if option['전체공개'] == 'true'
|
1297
1137
|
puts '-[√] 전체공개 선택.......'.yellow
|
1298
1138
|
begin
|
1299
|
-
|
1139
|
+
|
1300
1140
|
@driver.find_element(:xpath, '//*[@id="open20"]').click
|
1141
|
+
sleep(1)
|
1301
1142
|
rescue
|
1302
1143
|
end
|
1303
1144
|
end
|
1304
|
-
|
1305
|
-
|
1306
|
-
if option['비공개'] == '
|
1145
|
+
|
1146
|
+
|
1147
|
+
if option['비공개'] == 'true'
|
1307
1148
|
puts '-[√] 비공개 선택.......'.yellow
|
1308
1149
|
begin
|
1309
|
-
sleep(2)
|
1310
1150
|
@driver.find_element(:xpath, '//*[@id="open0"]').click
|
1151
|
+
sleep(1)
|
1311
1152
|
rescue
|
1312
1153
|
end
|
1313
1154
|
end
|
1314
|
-
|
1315
|
-
|
1316
|
-
if option['댓글허용'] == '
|
1155
|
+
|
1156
|
+
|
1157
|
+
if option['댓글허용'] == 'true'
|
1317
1158
|
puts '-[√] 댓글허용 선택.......'.yellow
|
1318
1159
|
begin
|
1319
|
-
|
1160
|
+
|
1320
1161
|
@driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
|
1321
1162
|
sleep(2)
|
1322
1163
|
@driver.find_element(:partial_link_text, '댓글 허용').click
|
1164
|
+
sleep(1)
|
1323
1165
|
rescue
|
1324
1166
|
end
|
1325
1167
|
end
|
1326
1168
|
sleep(2)
|
1327
|
-
|
1328
|
-
if option['댓글 비 허용'] == '
|
1169
|
+
|
1170
|
+
if option['댓글 비 허용'] == 'true'
|
1329
1171
|
puts '-[√] 댓글 비 허용 선택.......'.yellow
|
1330
1172
|
begin
|
1331
|
-
sleep(2)
|
1332
1173
|
@driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
|
1333
1174
|
sleep(2)
|
1334
1175
|
@driver.find_element(:partial_link_text, '댓글 비허용').click
|
1176
|
+
sleep(1)
|
1335
1177
|
rescue
|
1336
1178
|
end
|
1337
1179
|
end
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1346
|
-
|
1180
|
+
|
1181
|
+
|
1182
|
+
|
1183
|
+
|
1184
|
+
|
1185
|
+
|
1186
|
+
|
1187
|
+
|
1188
|
+
|
1189
|
+
#캡챠 해제시######################################################################
|
1190
|
+
begin
|
1191
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3.7)
|
1192
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="captchaContainer"]') }
|
1193
|
+
puts '-[√] 로그인 중 캡챠 요구 발생 처리 진행.......'.yellow
|
1194
|
+
sleep(1)
|
1195
|
+
@driver.switch_to.window(@driver.window_handles[0])
|
1347
1196
|
sleep(1)
|
1348
|
-
|
1349
|
-
|
1197
|
+
@driver.find_element(:xpath, '//*[@name="apiKey"]').click
|
1198
|
+
sleep(0.5)
|
1199
|
+
@driver.find_element(:xpath, '//*[@name="apiKey"]').clear
|
1200
|
+
sleep(0.5)
|
1201
|
+
Clipboard.copy(captcha_api_key)
|
1202
|
+
sleep(0.5)
|
1203
|
+
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
1204
|
+
sleep(0.5)
|
1205
|
+
@driver.find_element(:xpath, '//*[@data-lang="login"]').click
|
1206
|
+
|
1207
|
+
begin
|
1208
|
+
sleep(2)
|
1209
|
+
@driver.switch_to.alert.dismiss
|
1210
|
+
sleep(1)
|
1211
|
+
rescue
|
1212
|
+
|
1213
|
+
end
|
1214
|
+
|
1215
|
+
# 두 번째 탭으로 전환
|
1216
|
+
@driver.switch_to.window(@driver.window_handles[1])
|
1217
|
+
|
1218
|
+
begin
|
1219
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 7)
|
1220
|
+
wait.until { @driver.find_element(:xpath, '//*[@data-state="ready"]') }
|
1221
|
+
@driver.find_element(:xpath, '//*[@data-state="ready"]').click #캡챠우회버튼
|
1350
1222
|
puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
|
1351
1223
|
sleep(10)
|
1224
|
+
|
1225
|
+
begin
|
1226
|
+
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
1227
|
+
puts '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
1228
|
+
puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
1229
|
+
|
1230
|
+
@driver.quit
|
1231
|
+
puts '-[√] 다음 작업을 진행합니다. 약 10~60초 소요 될 수 있습니다.......'.red
|
1232
|
+
rescue
|
1233
|
+
# 타임아웃을 77초로 설정
|
1234
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 100)
|
1235
|
+
# 요소가 나타날 때까지 100초 동안 기다립니다.
|
1236
|
+
wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
|
1237
|
+
sleep(1)
|
1238
|
+
@driver.find_element(:xpath, '//*[@data-state="solved"]').click
|
1239
|
+
puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
|
1240
|
+
sleep(1)
|
1241
|
+
|
1242
|
+
end
|
1243
|
+
|
1244
|
+
rescue
|
1245
|
+
end
|
1246
|
+
|
1247
|
+
rescue
|
1248
|
+
end
|
1249
|
+
#캡챠 해제시######################################################################
|
1250
|
+
|
1251
|
+
|
1252
|
+
|
1253
|
+
|
1254
|
+
|
1255
|
+
|
1256
|
+
#sleep(dd_time.to_i) # 등록버튼 누르기 전 딜레이
|
1257
|
+
# 등록 버튼 클릭
|
1258
|
+
@driver.find_element(:xpath, '//*[@id="publish-btn"]').click
|
1259
|
+
puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
|
1260
|
+
sleep(2)
|
1261
|
+
###########포스트 캡챠해제 팝업 시 재시도 작업 시작▼▼▼▼▼▼▼▼▼▼▼▼
|
1262
|
+
begin
|
1263
|
+
sleep(1)
|
1264
|
+
@driver.switch_to.alert.accept
|
1265
|
+
puts '-[√] 캡챠 체크 시간 초과!! 재 등록 시도.......'.green
|
1266
|
+
sleep(2)
|
1267
|
+
@driver.get(url)
|
1268
|
+
puts '-[√] 등록 내용 불러오기 시도.......'.yellow
|
1269
|
+
sleep(2)
|
1270
|
+
@driver.switch_to.alert.accept
|
1271
|
+
sleep(2)
|
1272
|
+
puts '-[√] 재 등록 시도 시작.......'.yellow
|
1273
|
+
@driver.find_element(:xpath, '//*[@id="publish-layer-btn"]').click
|
1274
|
+
sleep(2)
|
1275
|
+
|
1276
|
+
# 타임아웃을 10초로 설정
|
1277
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 60)
|
1278
|
+
#요소가 나타날 때까지 60초 동안 기다립니다.
|
1279
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="open20"]') }
|
1280
|
+
|
1281
|
+
if option['전체공개'] == 'true'
|
1282
|
+
puts '-[√] 전체공개 선택.......'.yellow
|
1283
|
+
begin
|
1284
|
+
|
1285
|
+
@driver.find_element(:xpath, '//*[@id="open20"]').click
|
1286
|
+
sleep(2)
|
1287
|
+
rescue
|
1288
|
+
end
|
1289
|
+
end
|
1290
|
+
|
1291
|
+
|
1292
|
+
if option['비공개'] == 'true'
|
1293
|
+
puts '-[√] 비공개 선택.......'.yellow
|
1294
|
+
begin
|
1295
|
+
@driver.find_element(:xpath, '//*[@id="open0"]').click
|
1296
|
+
sleep(2)
|
1297
|
+
rescue
|
1298
|
+
end
|
1299
|
+
end
|
1300
|
+
|
1301
|
+
|
1302
|
+
if option['댓글허용'] == 'true'
|
1303
|
+
puts '-[√] 댓글허용 선택.......'.yellow
|
1304
|
+
begin
|
1305
|
+
|
1306
|
+
@driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
|
1307
|
+
sleep(2)
|
1308
|
+
@driver.find_element(:partial_link_text, '댓글 허용').click
|
1309
|
+
sleep(2)
|
1310
|
+
rescue
|
1311
|
+
end
|
1312
|
+
end
|
1313
|
+
sleep(2)
|
1314
|
+
|
1315
|
+
if option['댓글 비 허용'] == 'true'
|
1316
|
+
puts '-[√] 댓글 비 허용 선택.......'.yellow
|
1317
|
+
begin
|
1318
|
+
@driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
|
1319
|
+
sleep(2)
|
1320
|
+
@driver.find_element(:partial_link_text, '댓글 비허용').click
|
1321
|
+
sleep(2)
|
1322
|
+
rescue
|
1323
|
+
end
|
1324
|
+
end
|
1325
|
+
|
1352
1326
|
begin
|
1353
1327
|
sleep(1)
|
1354
|
-
|
1355
|
-
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1328
|
+
puts '-[√] 캡챠 발생 유무 확인.......'.green
|
1329
|
+
@driver.find_element(:xpath, '//*[@data-state="ready"]').click #캡챠우회버튼 (xpath값에서 data-state="ready를 지목하고자 한다면 //*[@data-state="ready"] 입력)
|
1330
|
+
puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
|
1331
|
+
sleep(10)
|
1332
|
+
begin
|
1333
|
+
sleep(1)
|
1334
|
+
@driver.find_element(:xpath, '//*[@data-state="error"]').click #캡챠 해제 오류 버튼
|
1335
|
+
puts '-[√] 캡챠 해제 에러 발생 !! API번호 및 포인트를 체크해주세요.......'.red
|
1336
|
+
sleep(1)
|
1337
|
+
puts '-[√] 캡챠 해제 에러 발생 !! API번호 및 포인트를 체크해주세요.......'.red
|
1338
|
+
sleep(1)
|
1339
|
+
@driver.close
|
1340
|
+
puts '-[√] 작업 종료 중........다음 포스팅 작업을 준비 합니다........'.red
|
1341
|
+
sleep(1)
|
1342
|
+
sleep(dd_time.to_i) #등록버튼 누르기전 딜레이
|
1343
|
+
@driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
|
1344
|
+
rescue
|
1345
|
+
# 타임아웃을 100초로 설정
|
1346
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 100)
|
1347
|
+
# 요소가 나타날 때까지 100초 동안 기다립니다.
|
1348
|
+
wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
|
1349
|
+
sleep(2)
|
1350
|
+
@driver.find_element(:xpath, '//*[@data-state="solved"]').click #캡챠 해제 완료 버튼
|
1351
|
+
puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
|
1352
|
+
sleep(3.7)
|
1353
|
+
end
|
1364
1354
|
rescue
|
1365
|
-
# 타임아웃을 100초로 설정
|
1366
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 100)
|
1367
|
-
# 요소가 나타날 때까지 100초 동안 기다립니다.
|
1368
|
-
wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
|
1369
|
-
sleep(2)
|
1370
|
-
@driver.find_element(:xpath, '//*[@data-state="solved"]').click #캡챠 해제 완료 버튼
|
1371
|
-
puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
|
1372
|
-
sleep(3.7)
|
1373
1355
|
end
|
1356
|
+
|
1357
|
+
@driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
|
1358
|
+
puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
|
1374
1359
|
rescue
|
1375
1360
|
end
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1361
|
+
|
1362
|
+
|
1363
|
+
|
1364
|
+
# 포스트 등록 완료 확인
|
1365
|
+
begin
|
1366
|
+
# 포스트 등록 완료를 확인할 수 있는 요소(예: 등록 후 확인 페이지로 이동)
|
1367
|
+
wait.until { @driver.find_element(:xpath, '//*[@class="post_cont"]') }
|
1368
|
+
puts '-[√] 포스트 등록 완료.......'.yellow
|
1369
|
+
sleep(1.5)
|
1370
|
+
@driver.quit
|
1371
|
+
rescue => e
|
1372
|
+
puts '-[×] 포스트 등록 실패!'.red
|
1373
|
+
@driver.quit
|
1374
|
+
return 0
|
1375
|
+
end
|
1376
|
+
|
1379
1377
|
rescue
|
1380
1378
|
end
|
1381
|
-
###########포스트 캡챠해제 팝업 시 재시도 작업 끝 ▲▲▲▲▲▲▲▲▲▲▲▲
|
1382
|
-
sleep(5)
|
1383
|
-
@driver.find_element(:xpath, '//*[@class="post_cont"]')
|
1384
|
-
sleep(1)
|
1385
|
-
puts '-[√] 포스트 등록 완료.......'.yellow
|
1386
|
-
@driver.close
|
1387
1379
|
end
|
1380
|
+
|
1381
|
+
|
1382
|
+
if option['글임시저장'] == 'true'
|
1383
|
+
puts '-[√] 임시 저장 선택.......'.yellow
|
1384
|
+
begin
|
1385
|
+
|
1386
|
+
@driver.find_element(:xpath, '//*[@class="btn btn-draft"]').click
|
1387
|
+
sleep(1.5)
|
1388
|
+
@driver.quit
|
1389
|
+
rescue
|
1390
|
+
end
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
|
1394
|
+
|
1395
|
+
|
1396
|
+
|
1397
|
+
|
1398
|
+
|
1388
1399
|
|
1389
1400
|
|
1390
1401
|
end
|
@@ -1525,11 +1536,11 @@ class Wordpress
|
|
1525
1536
|
|
1526
1537
|
|
1527
1538
|
|
1528
|
-
def chrome_start(url, user_id, user_pw,
|
1539
|
+
def chrome_start(url, user_id, user_pw, captcha_api_key)
|
1529
1540
|
@url = url
|
1530
1541
|
@user_id = user_id
|
1531
1542
|
@user_pw = user_pw
|
1532
|
-
@
|
1543
|
+
@captcha_api_key = captcha_api_key
|
1533
1544
|
begin
|
1534
1545
|
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
1535
1546
|
@driver = Selenium::WebDriver.for :chrome
|
@@ -1538,95 +1549,7 @@ class Wordpress
|
|
1538
1549
|
end
|
1539
1550
|
end
|
1540
1551
|
|
1541
|
-
|
1542
|
-
@driver.get(@url+'/wp-admin')
|
1543
|
-
@driver.find_element(:xpath , '//*[@id="user_login"]').send_keys(@user_id)
|
1544
|
-
@driver.find_element(:xpath , '//*[@id="user_pass"]').send_keys(@user_pw)
|
1545
|
-
@driver.find_element(:xpath , '//*[@id="wp-submit"]').click
|
1546
|
-
@cookie = Hash.new
|
1547
|
-
@driver.manage.all_cookies.each do |i|
|
1548
|
-
@cookie[i[:name]] = i[:value]
|
1549
|
-
end
|
1550
|
-
sleep(2)
|
1551
|
-
begin
|
1552
|
-
puts @driver.find_element(:xpath , '/html/body/div/div/div[1]/div[1]/div/div[1]/a[1]/span').text
|
1553
|
-
@driver.close
|
1554
|
-
return 1
|
1555
|
-
rescue => e
|
1556
|
-
puts e
|
1557
|
-
@driver.close
|
1558
|
-
return 0
|
1559
|
-
end
|
1560
|
-
end
|
1561
|
-
|
1562
|
-
def update
|
1563
|
-
http = HTTP.cookies(@cookie).get(@url+'/wp-admin/post-new.php')
|
1564
|
-
noko = Nokogiri::HTML(http.to_s)
|
1565
|
-
@wpnonce = http.to_s.split('_wpnonce":"')[1].split('"')[0]
|
1566
|
-
@data2 = Hash.new
|
1567
|
-
@data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]')[0]['value']
|
1568
|
-
@data2['_wp_http_referer'] = '/wp-admin/post-new.php'
|
1569
|
-
@data2['user_ID'] = '1'
|
1570
|
-
@data2['action'] = 'editpost'
|
1571
|
-
@data2['originalaction'] = 'editpost'
|
1572
|
-
@data2['post_author'] = '1'
|
1573
|
-
@data2['post_type'] = 'post'
|
1574
|
-
@data2['original_post_status'] = 'auto-draft'
|
1575
|
-
@data2['referredby'] = @url+'/wp-admin/update-core.php'
|
1576
|
-
@data2['_wp_original_http_referer'] = @url+'/wp-admin/update-core.php'
|
1577
|
-
@data2['auto_draft'] = nil
|
1578
|
-
@data2['post_ID'] = noko.xpath('//*[@id="post_ID"]')[0]['value']
|
1579
|
-
@data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]')[0]['value']
|
1580
|
-
@data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]')[0]['value']
|
1581
|
-
@data2['post_title'] = 'title3'
|
1582
|
-
@data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]')[0]['value']
|
1583
|
-
@data2['content'] = 'content3'
|
1584
|
-
@data2['wp-preview'] = nil
|
1585
|
-
@data2['hidden_post_status'] = 'draft'
|
1586
|
-
@data2['post_status'] = 'draft'
|
1587
|
-
@data2['hidden_post_password'] = nil
|
1588
|
-
@data2['hidden_post_visibility'] = 'public'
|
1589
|
-
@data2['visibility'] = 'post'
|
1590
|
-
@data2['post_password'] = nil
|
1591
|
-
@data2['mm'] = '10'
|
1592
|
-
@data2['jj'] = '24'
|
1593
|
-
@data2['aa'] = '2022'
|
1594
|
-
@data2['hh'] = '02'
|
1595
|
-
@data2['mn'] = '41'
|
1596
|
-
@data2['ss'] = '32'
|
1597
|
-
@data2['hidden_mm'] = '10'
|
1598
|
-
@data2['cur_mm'] = '10'
|
1599
|
-
@data2['hidden_jj'] = '24'
|
1600
|
-
@data2['cur_jj'] = '24'
|
1601
|
-
@data2['hidden_aa'] = '2022'
|
1602
|
-
@data2['cur_aa'] = '2022'
|
1603
|
-
@data2['hidden_hh'] = '02'
|
1604
|
-
@data2['cur_hh'] = '02'
|
1605
|
-
@data2['hidden_mn'] = '41'
|
1606
|
-
@data2['cur_mn'] = '41'
|
1607
|
-
@data2['original_publish'] = '공개'
|
1608
|
-
@data2['publish'] = '공개'
|
1609
|
-
@data2['post_format'] = '0'
|
1610
|
-
@data2['post_category[]'] = '0'
|
1611
|
-
@data2['newcategory'] = '새 카테고리 이름'
|
1612
|
-
@data2['newcategory_parent'] = -1
|
1613
|
-
@data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]')[0]['value']
|
1614
|
-
@data2['tax_input[post_tag]'] = nil
|
1615
|
-
@data2['newtag[post_tag]'] = nil
|
1616
|
-
@data2['_thumbnail_id'] = -1
|
1617
|
-
@data2['excerpt'] = nil
|
1618
|
-
@data2['trackback_url'] = nil
|
1619
|
-
@data2['metakeyinput'] = nil
|
1620
|
-
@data2['metavalue'] = nil
|
1621
|
-
@data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]')[0]['value']
|
1622
|
-
@data2['advanced_view'] = '1'
|
1623
|
-
@data2['comment_status'] = 'open'
|
1624
|
-
@data2['ping_status'] = 'open'
|
1625
|
-
@data2['post_name'] = nil
|
1626
|
-
@data2['post_author_override'] = '1'
|
1627
|
-
#result_http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => @data)
|
1628
|
-
return @data2
|
1629
|
-
end
|
1552
|
+
|
1630
1553
|
|
1631
1554
|
def auto_image
|
1632
1555
|
begin
|
@@ -1859,7 +1782,7 @@ class Wordpress
|
|
1859
1782
|
|
1860
1783
|
while true
|
1861
1784
|
for n in 0..@data['table'].length-1
|
1862
|
-
@data['table'][n][
|
1785
|
+
@data['table'][n][8] = 0
|
1863
1786
|
end
|
1864
1787
|
|
1865
1788
|
while true
|
@@ -1881,6 +1804,7 @@ class Wordpress
|
|
1881
1804
|
option['category'] = ''
|
1882
1805
|
end
|
1883
1806
|
|
1807
|
+
|
1884
1808
|
#begin
|
1885
1809
|
# option['category2'] = table[5].to_s.force_encoding('utf-8').to_s
|
1886
1810
|
# if option['category2'].to_s == '편집모드'
|
@@ -1892,10 +1816,10 @@ class Wordpress
|
|
1892
1816
|
|
1893
1817
|
option['proxy'] = ''
|
1894
1818
|
if @data['포스트설정']['프록시'].checked?
|
1895
|
-
if table[
|
1819
|
+
if table[5].to_s.include?('ex)') or table[5].to_i == 0
|
1896
1820
|
option['proxy'] = @data['포스트설정']['프록시리스트'].sample.to_s
|
1897
1821
|
else
|
1898
|
-
option['proxy'] = table[
|
1822
|
+
option['proxy'] = table[5].to_s.force_encoding('utf-8').to_s
|
1899
1823
|
end
|
1900
1824
|
end
|
1901
1825
|
|
@@ -1903,9 +1827,10 @@ class Wordpress
|
|
1903
1827
|
|
1904
1828
|
|
1905
1829
|
|
1906
|
-
puts table[
|
1907
|
-
puts table[
|
1908
|
-
|
1830
|
+
puts table[6]
|
1831
|
+
puts table[8]
|
1832
|
+
|
1833
|
+
if table[6].to_i > table[8].to_i
|
1909
1834
|
if @data['포스트설정']['테더링'].checked?
|
1910
1835
|
puts 'tedering ip change...'
|
1911
1836
|
stdout, stderr, status = Open3.capture3('./adb devices')
|
@@ -1953,6 +1878,14 @@ class Wordpress
|
|
1953
1878
|
end
|
1954
1879
|
end
|
1955
1880
|
end
|
1881
|
+
|
1882
|
+
if @data['포스트설정']['gpt제목'].checked?
|
1883
|
+
chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
|
1884
|
+
gpt_text1 = chat.message(title)
|
1885
|
+
title = gpt_text1.to_s
|
1886
|
+
end
|
1887
|
+
|
1888
|
+
|
1956
1889
|
@data['table'][index][-1] = 5
|
1957
1890
|
@data['table'] << []
|
1958
1891
|
@data['table'].pop
|
@@ -1990,6 +1923,25 @@ class Wordpress
|
|
1990
1923
|
end
|
1991
1924
|
end
|
1992
1925
|
end
|
1926
|
+
|
1927
|
+
if @data['포스트설정']['gpt내용'].checked?
|
1928
|
+
api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
|
1929
|
+
#key_change = @data['포스트설정']['특정단어키워드로변경값'].text.to_s.force_encoding('utf-8')
|
1930
|
+
#imotcon_change = @data['포스트설정']['스티커로변경단어'].text.to_s.force_encoding('utf-8')
|
1931
|
+
#template_change = @data['포스트설정']['내템플릿변경단어'].text.to_s.force_encoding('utf-8')
|
1932
|
+
#ttdanar_change = @data['포스트설정']['단어링크적용단어'].text.to_s.force_encoding('utf-8')
|
1933
|
+
#sajine_change = @data['포스트설정']['단어사진으로변경단어'].text.to_s.force_encoding('utf-8')
|
1934
|
+
#mov_change = @data['포스트설정']['영상으로변경단어'].text.to_s.force_encoding('utf-8')
|
1935
|
+
#map_change = @data['포스트설정']['지도로변경단어'].text.to_s.force_encoding('utf-8')
|
1936
|
+
#inyong9_change = @data['포스트설정']['인용구변경단어'].text.to_s.force_encoding('utf-8')
|
1937
|
+
|
1938
|
+
|
1939
|
+
chat = Chat_content.new(api_key)
|
1940
|
+
gpt_text3 = chat.message(content)
|
1941
|
+
content = gpt_text3.to_s
|
1942
|
+
end
|
1943
|
+
|
1944
|
+
|
1993
1945
|
content_tag = content.split('@##@')[1]
|
1994
1946
|
content = content.split('@##@')[0]
|
1995
1947
|
@data['table'][index][-1] = 15
|
@@ -2006,14 +1958,14 @@ class Wordpress
|
|
2006
1958
|
proxy = table[3].to_s
|
2007
1959
|
user_id = table[1].to_s
|
2008
1960
|
user_pw = table[2].to_s
|
2009
|
-
|
1961
|
+
captcha_api_key = @data['포스트설정']['captcha_api_key'].text.to_s.force_encoding('utf-8')
|
2010
1962
|
naver = Naver.new
|
2011
1963
|
@data['table'][index][-1] = 25
|
2012
1964
|
@data['table'] << []
|
2013
1965
|
@data['table'].pop
|
2014
1966
|
|
2015
|
-
#네이버로그인
|
2016
|
-
login_check = naver.login(user_id, user_pw, option['proxy'],
|
1967
|
+
#네이버로그인login(user_id, user_pw, proxy ,captcha_api_key)
|
1968
|
+
login_check = naver.login(user_id, user_pw, option['proxy'], captcha_api_key)
|
2017
1969
|
if login_check == 0
|
2018
1970
|
black_users << table[1].to_s
|
2019
1971
|
next
|
@@ -2185,11 +2137,11 @@ class Wordpress
|
|
2185
2137
|
content = content2
|
2186
2138
|
end
|
2187
2139
|
end
|
2188
|
-
|
2140
|
+
|
2189
2141
|
@data['table'][index][-1] = 50
|
2190
2142
|
@data['table'] << []
|
2191
2143
|
@data['table'].pop
|
2192
|
-
if @data['포스트설정']['gpt'].checked?
|
2144
|
+
if @data['포스트설정']['gpt키워드'].checked?
|
2193
2145
|
chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'))
|
2194
2146
|
gpt_text = chat.message(keyword)
|
2195
2147
|
content = content.to_s + "\n(자동생성글)\n" + gpt_text.to_s
|
@@ -2210,7 +2162,7 @@ class Wordpress
|
|
2210
2162
|
joongbok_check = 0
|
2211
2163
|
counter10 = 0
|
2212
2164
|
while joongbok_check == 0
|
2213
|
-
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
|
2165
|
+
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
|
2214
2166
|
content22 = content.split("(자동생성글)")[1].split("\n")
|
2215
2167
|
else
|
2216
2168
|
content22 = content.split("\n")
|
@@ -2234,12 +2186,12 @@ class Wordpress
|
|
2234
2186
|
content2 = content.split("\n")
|
2235
2187
|
end
|
2236
2188
|
|
2237
|
-
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
|
2189
|
+
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
|
2238
2190
|
content2 = content.split("(자동생성글)")[1].split("\n")
|
2239
2191
|
position.pop
|
2240
2192
|
end
|
2241
2193
|
|
2242
|
-
if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
|
2194
|
+
if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
|
2243
2195
|
content2 = content.split("\n")
|
2244
2196
|
end
|
2245
2197
|
|
@@ -2285,7 +2237,7 @@ class Wordpress
|
|
2285
2237
|
content = content3.join("\n")
|
2286
2238
|
end
|
2287
2239
|
|
2288
|
-
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
|
2240
|
+
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt키워드'].checked?
|
2289
2241
|
content2.each_with_index do |con, index|
|
2290
2242
|
if position.include?(index)
|
2291
2243
|
insert_keyword_text = keyword.to_s
|
@@ -2315,7 +2267,7 @@ class Wordpress
|
|
2315
2267
|
end
|
2316
2268
|
end
|
2317
2269
|
|
2318
|
-
if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt'].checked? == false
|
2270
|
+
if @data['포스트설정']['내용과자동생성'].checked? == false and @data['포스트설정']['내용을자동생성'].checked? == false and @data['포스트설정']['gpt키워드'].checked? == false
|
2319
2271
|
begin
|
2320
2272
|
content2.each_with_index do |con, index|
|
2321
2273
|
if position.include?(index)
|
@@ -2374,101 +2326,70 @@ class Wordpress
|
|
2374
2326
|
end
|
2375
2327
|
|
2376
2328
|
image_thum_ids = Array.new
|
2377
|
-
|
2378
2329
|
image_memory = Array.new
|
2379
|
-
|
2330
|
+
|
2380
2331
|
if @data['포스트설정']['내용사진자동삽입'].checked?
|
2381
2332
|
puts '내용사진자동삽입...'
|
2333
|
+
|
2382
2334
|
sn = @data['포스트설정']['내용사진자동삽입시작숫자'].text.to_s.force_encoding('utf-8').to_i
|
2383
2335
|
en = @data['포스트설정']['내용사진자동삽입끝숫자'].text.to_s.force_encoding('utf-8').to_i
|
2336
|
+
|
2384
2337
|
begin
|
2385
2338
|
cn = rand(sn..en)
|
2386
2339
|
rescue
|
2387
2340
|
cn = 0
|
2388
2341
|
puts 'cn = rand(sn..en) error cn = 1'
|
2389
2342
|
end
|
2390
|
-
|
2343
|
+
|
2391
2344
|
if cn != 0
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2398
|
-
|
2399
|
-
|
2400
|
-
|
2401
|
-
|
2402
|
-
|
2403
|
-
|
2404
|
-
|
2405
|
-
|
2406
|
-
if @data['포스트설정']['내용과자동생성'].checked? or @data['포스트설정']['gpt'].checked?
|
2407
|
-
content5 = content.split("(자동생성글)")[0].to_s.split("\n")
|
2408
|
-
content55 = content.split("(자동생성글)")[1].to_s
|
2409
|
-
|
2410
|
-
else
|
2411
|
-
content55 = ''
|
2412
|
-
content5 = content.split("(자동생성글)")[0].to_s.split("\n")
|
2413
|
-
end
|
2414
|
-
|
2415
|
-
p content5
|
2416
|
-
puts content55
|
2417
|
-
p position
|
2418
|
-
|
2419
|
-
while true
|
2420
|
-
check11 = 0
|
2421
|
-
for nn in 0..position.length-1
|
2422
|
-
if content5[position[nn]].to_s.include?('style') or content5[position[nn]].to_s.include?('<') or content5[position[nn]].to_s.include?('>')
|
2423
|
-
check11 = 1
|
2424
|
-
position[nn] += 4
|
2425
|
-
end
|
2426
|
-
end
|
2427
|
-
if check11 == 0
|
2428
|
-
break
|
2345
|
+
# 내용 분할 (자동 생성 글과 텍스트)
|
2346
|
+
content5 = content.split("(자동생성글)")[0].to_s.split("\n")
|
2347
|
+
content55 = content.split("(자동생성글)")[1].to_s if @data['포스트설정']['내용과자동생성'].checked? || @data['포스트설정']['gpt키워드'].checked?
|
2348
|
+
|
2349
|
+
# 빈 줄 찾기
|
2350
|
+
empty_positions = content5.each_with_index.select { |line, index| line.strip.empty? }.map { |line, index| index }
|
2351
|
+
|
2352
|
+
# 빈 줄이 부족하면 텍스트 끝에 빈 줄 추가
|
2353
|
+
if empty_positions.length < cn
|
2354
|
+
# 부족한 빈 줄의 수
|
2355
|
+
missing_empty_lines = cn - empty_positions.length
|
2356
|
+
missing_empty_lines.times do
|
2357
|
+
content5 << "" # 텍스트 마지막에 빈 줄 추가
|
2429
2358
|
end
|
2359
|
+
empty_positions = content5.each_with_index.select { |line, index| line.strip.empty? }.map { |line, index| index } # 다시 빈 줄 위치 계산
|
2430
2360
|
end
|
2431
|
-
|
2432
|
-
|
2433
|
-
|
2434
|
-
|
2361
|
+
|
2362
|
+
# 이미지 삽입할 위치를 지정 (빈 줄 위치에 삽입)
|
2363
|
+
position = empty_positions[0..cn-1]
|
2364
|
+
|
2365
|
+
# 이미지 URL 가져오기
|
2366
|
+
if @data['포스트설정']['내용과자동생성'].checked? || @data['포스트설정']['gpt키워드'].checked?
|
2435
2367
|
image_url22 = get_image_file().force_encoding('utf-8')
|
2436
2368
|
end
|
2437
|
-
|
2369
|
+
|
2370
|
+
# 각 위치에 이미지를 하나씩만 삽입
|
2438
2371
|
position.each do |i|
|
2439
2372
|
image_url = get_image_file().force_encoding('utf-8')
|
2440
|
-
puts
|
2441
|
-
|
2442
|
-
|
2373
|
+
puts '사진넣는위치 => ' + i.to_s
|
2374
|
+
|
2375
|
+
# 링크가 있을 경우 링크 포함
|
2443
2376
|
if @data['포스트설정']['내용사진링크'].checked?
|
2444
|
-
image_memory << "
|
2445
|
-
content5
|
2377
|
+
image_memory << "<a href='" + @data['포스트설정']['내용사진링크값'].text.to_s.force_encoding('utf-8') + "'><img src='" + image_url + "' alt='" + keyword.force_encoding('utf-8') + "'></a>"
|
2378
|
+
content5[i] = '**image**' # 빈 줄에 이미지를 삽입
|
2446
2379
|
else
|
2447
|
-
image_memory << "
|
2448
|
-
content5
|
2380
|
+
image_memory << "<img src='" + image_url + "' alt='" + keyword + "' class='aligncenter size-full'>"
|
2381
|
+
content5[i] = '**image**' # 빈 줄에 이미지를 삽입
|
2449
2382
|
end
|
2450
2383
|
end
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
# content = iconv.iconv(content)
|
2456
|
-
# content = content.encode('UTF-8', 'binary', invalid: :replace, replace: '')
|
2457
|
-
puts content
|
2458
|
-
image_url = image_url22
|
2459
|
-
|
2460
|
-
# if @data['포스트설정']['자동글 수식에 입력'].checked?
|
2461
|
-
|
2462
|
-
# else
|
2463
|
-
# if @data['포스트설정']['내용사진링크'].checked?
|
2464
|
-
# content = content.split('(자동생성글)')[0]+""+'<a href="'+@data['포스트설정']['내용사진링크값'].text.to_s.force_encoding('utf-8')+'"><img src="'+image_url+'" alt="'+keyword+'"></a>'+""+'(자동생성글)'+content.split('(자동생성글)')[1]
|
2465
|
-
# else
|
2466
|
-
# content = content.split('(자동생성글)')[0]+""+'<img src="'+image_url+'" alt="'+keyword+'" >'+""+'(자동생성글)'+content.split('(자동생성글)')[1]
|
2467
|
-
# end
|
2468
|
-
# end
|
2384
|
+
|
2385
|
+
# 자동 생성된 내용과 합치기
|
2386
|
+
if @data['포스트설정']['내용과자동생성'].checked? || @data['포스트설정']['gpt키워드'].checked?
|
2387
|
+
content = content5.join("\n") + '(자동생성글)' + content55
|
2469
2388
|
else
|
2470
2389
|
content = content5.join("\n")
|
2471
2390
|
end
|
2391
|
+
|
2392
|
+
puts content
|
2472
2393
|
end
|
2473
2394
|
end
|
2474
2395
|
|
@@ -2619,7 +2540,7 @@ class Wordpress
|
|
2619
2540
|
# content = content
|
2620
2541
|
# soosick_1 = content_end
|
2621
2542
|
#else
|
2622
|
-
if @data['포스트설정']['gpt'].checked?
|
2543
|
+
if @data['포스트설정']['gpt키워드'].checked?
|
2623
2544
|
if @data['포스트설정']['gpt상단'].checked?
|
2624
2545
|
content = content_end+"\n"+content+"\n"
|
2625
2546
|
else
|
@@ -2688,27 +2609,27 @@ class Wordpress
|
|
2688
2609
|
|
2689
2610
|
|
2690
2611
|
if @data['포스트설정']['전체공개'].checked?
|
2691
|
-
option['전체공개'] = 'false'
|
2692
|
-
else
|
2693
2612
|
option['전체공개'] = 'true'
|
2613
|
+
else
|
2614
|
+
option['전체공개'] = 'false'
|
2694
2615
|
end
|
2695
2616
|
|
2696
2617
|
if @data['포스트설정']['비공개'].checked?
|
2697
|
-
option['비공개'] = 'false'
|
2698
|
-
else
|
2699
2618
|
option['비공개'] = 'true'
|
2619
|
+
else
|
2620
|
+
option['비공개'] = 'false'
|
2700
2621
|
end
|
2701
2622
|
|
2702
2623
|
if @data['포스트설정']['댓글허용'].checked?
|
2703
|
-
option['댓글허용'] = 'false'
|
2704
|
-
else
|
2705
2624
|
option['댓글허용'] = 'true'
|
2625
|
+
else
|
2626
|
+
option['댓글허용'] = 'false'
|
2706
2627
|
end
|
2707
2628
|
|
2708
2629
|
if @data['포스트설정']['댓글 비 허용'].checked?
|
2709
|
-
option['댓글 비 허용'] = 'false'
|
2710
|
-
else
|
2711
2630
|
option['댓글 비 허용'] = 'true'
|
2631
|
+
else
|
2632
|
+
option['댓글 비 허용'] = 'false'
|
2712
2633
|
end
|
2713
2634
|
|
2714
2635
|
|
@@ -2717,40 +2638,55 @@ class Wordpress
|
|
2717
2638
|
end
|
2718
2639
|
|
2719
2640
|
if @data['포스트설정']['중앙정렬'].checked?
|
2720
|
-
option['중앙정렬'] = 'false'
|
2721
|
-
else
|
2722
2641
|
option['중앙정렬'] = 'true'
|
2642
|
+
else
|
2643
|
+
option['중앙정렬'] = 'false'
|
2723
2644
|
end
|
2724
2645
|
|
2725
2646
|
if @data['포스트설정']['우측정렬'].checked?
|
2726
|
-
option['우측정렬'] = 'false'
|
2727
|
-
else
|
2728
2647
|
option['우측정렬'] = 'true'
|
2648
|
+
else
|
2649
|
+
option['우측정렬'] = 'false'
|
2729
2650
|
end
|
2730
2651
|
|
2731
2652
|
if @data['포스트설정']['좌측정렬'].checked?
|
2653
|
+
option['좌측정렬'] = 'true'
|
2654
|
+
else
|
2732
2655
|
option['좌측정렬'] = 'false'
|
2656
|
+
end
|
2657
|
+
|
2658
|
+
if @data['포스트설정']['글발생하기'].checked?
|
2659
|
+
option['글발생하기'] = 'true'
|
2733
2660
|
else
|
2734
|
-
option['
|
2661
|
+
option['글발생하기'] = 'false'
|
2662
|
+
end
|
2663
|
+
|
2664
|
+
if @data['포스트설정']['글임시저장'].checked?
|
2665
|
+
option['글임시저장'] = 'true'
|
2666
|
+
else
|
2667
|
+
option['글임시저장'] = 'false'
|
2735
2668
|
end
|
2736
2669
|
|
2670
|
+
|
2737
2671
|
@data['table'][index][-1] = 90
|
2738
2672
|
@data['table'] << []
|
2739
2673
|
@data['table'].pop
|
2740
2674
|
|
2741
2675
|
p option
|
2742
2676
|
|
2743
|
-
dd_time = @data['table'][index][
|
2677
|
+
#dd_time = @data['table'][index][8].to_s.force_encoding('utf-8').to_i
|
2744
2678
|
url = @data['table'][index][3].to_s.force_encoding('utf-8')
|
2745
|
-
|
2679
|
+
captcha_api_key = @data['포스트설정']['captcha_api_key'].text.to_s.force_encoding('utf-8')
|
2680
|
+
|
2681
|
+
|
2746
2682
|
puts 'start...'
|
2747
|
-
naver.update(title,content,option,
|
2683
|
+
naver.update(title,content,option, url, keyword, captcha_api_key)#dd_time
|
2748
2684
|
|
2749
|
-
@data['table'][index][
|
2685
|
+
@data['table'][index][8] = @data['table'][index][8].to_i + 1
|
2750
2686
|
@data['table'][index][-1] = 100
|
2751
2687
|
@data['table'] << []
|
2752
2688
|
@data['table'].pop
|
2753
|
-
sleep(@data['table'][index][
|
2689
|
+
sleep(@data['table'][index][7].to_i)
|
2754
2690
|
end
|
2755
2691
|
rescue => e
|
2756
2692
|
puts e
|
@@ -3094,13 +3030,11 @@ class Wordpress
|
|
3094
3030
|
horizontal_box{
|
3095
3031
|
stretchy false
|
3096
3032
|
horizontal_box{
|
3097
|
-
|
3098
|
-
text 'captcha_api_key 입력'
|
3099
|
-
}
|
3033
|
+
|
3100
3034
|
button('등록'){
|
3101
3035
|
on_clicked {
|
3102
|
-
@data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text
|
3103
|
-
@data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text
|
3036
|
+
@data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text, 1, 1, 0,0]
|
3037
|
+
@data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text, 1, 1, 0,0]
|
3104
3038
|
@data['table'].pop
|
3105
3039
|
}
|
3106
3040
|
}
|
@@ -3112,8 +3046,8 @@ class Wordpress
|
|
3112
3046
|
file_data.split("\n").each do |i|
|
3113
3047
|
i3 = i.to_s.force_encoding('utf-8').to_s
|
3114
3048
|
i2 = i3.split(',')
|
3115
|
-
@data['table'] << [false, i2[0].to_s, i2[1].to_s,i2[2].to_s,i2[3].to_s,i2[4].to_s,
|
3116
|
-
@data['table'] << [false, i2[0].to_s, i2[1].to_s,1,1,
|
3049
|
+
@data['table'] << [false, i2[0].to_s, i2[1].to_s,i2[2].to_s,i2[3].to_s,i2[4].to_s,1,1,0,0]
|
3050
|
+
@data['table'] << [false, i2[0].to_s, i2[1].to_s,1,1,0,0]
|
3117
3051
|
@data['table'].pop
|
3118
3052
|
end
|
3119
3053
|
end
|
@@ -3168,19 +3102,16 @@ class Wordpress
|
|
3168
3102
|
text_column('프록시'){
|
3169
3103
|
editable true
|
3170
3104
|
}
|
3171
|
-
|
3172
|
-
editable true
|
3173
|
-
}
|
3174
|
-
|
3105
|
+
|
3175
3106
|
text_column('수량'){
|
3176
3107
|
editable true
|
3177
3108
|
}
|
3178
3109
|
text_column('다음 작업 딜레이'){
|
3179
3110
|
editable true
|
3180
3111
|
}
|
3181
|
-
|
3182
|
-
|
3183
|
-
|
3112
|
+
# text_column('등록 버튼 딜레이'){
|
3113
|
+
# editable true
|
3114
|
+
# }
|
3184
3115
|
text_column('시도 횟수'){
|
3185
3116
|
|
3186
3117
|
}
|
@@ -3192,27 +3123,28 @@ class Wordpress
|
|
3192
3123
|
|
3193
3124
|
horizontal_box{
|
3194
3125
|
stretchy false
|
3195
|
-
|
3196
|
-
@data['
|
3197
|
-
|
3126
|
+
|
3127
|
+
@data['포스트설정']['captcha_api_key'] = entry(){
|
3128
|
+
text 'captcha_api_key 입력'
|
3198
3129
|
}
|
3130
|
+
|
3199
3131
|
@data['table_counter_input'] = entry{
|
3200
3132
|
text '수량 ex) 3'
|
3201
3133
|
}
|
3202
3134
|
@data['table_delay_input'] = entry{
|
3203
3135
|
text '딜레이 ex) 3'
|
3204
3136
|
}
|
3205
|
-
|
3206
|
-
|
3207
|
-
}
|
3137
|
+
#@data['table_delay_input2'] = entry{
|
3138
|
+
# text '등록전딜레이'
|
3139
|
+
#}
|
3208
3140
|
|
3209
3141
|
button('전체설정'){
|
3210
3142
|
on_clicked{
|
3211
3143
|
for n in 0..@data['table'].length-1
|
3212
|
-
|
3213
|
-
@data['table'][n][
|
3214
|
-
@data['table'][n][
|
3215
|
-
|
3144
|
+
|
3145
|
+
@data['table'][n][6] = @data['table_counter_input'].text.to_i
|
3146
|
+
@data['table'][n][7] = @data['table_delay_input'].text.to_i
|
3147
|
+
#@data['table'][n][8] = @data['table_delay_input2'].text.to_i
|
3216
3148
|
@data['table'] << []
|
3217
3149
|
@data['table'].pop
|
3218
3150
|
end
|
@@ -3248,7 +3180,10 @@ class Wordpress
|
|
3248
3180
|
}
|
3249
3181
|
horizontal_box{
|
3250
3182
|
stretchy false
|
3183
|
+
grid{
|
3251
3184
|
button('전체선택'){
|
3185
|
+
top 1
|
3186
|
+
left 1
|
3252
3187
|
on_clicked{
|
3253
3188
|
for n in 0..@data['키워드설정']['키워드'].length-1
|
3254
3189
|
@data['키워드설정']['키워드'][n][0] = true
|
@@ -3257,7 +3192,20 @@ class Wordpress
|
|
3257
3192
|
end
|
3258
3193
|
}
|
3259
3194
|
}
|
3260
|
-
button('
|
3195
|
+
button('선택해제'){
|
3196
|
+
top 1
|
3197
|
+
left 2
|
3198
|
+
on_clicked{
|
3199
|
+
for n in 0..@data['키워드설정']['키워드'].length-1
|
3200
|
+
@data['키워드설정']['키워드'][n][0] = false
|
3201
|
+
@data['키워드설정']['키워드'] << []
|
3202
|
+
@data['키워드설정']['키워드'].pop
|
3203
|
+
end
|
3204
|
+
}
|
3205
|
+
}
|
3206
|
+
button('삭제하기'){
|
3207
|
+
top 1
|
3208
|
+
left 3
|
3261
3209
|
on_clicked{
|
3262
3210
|
m = Array.new
|
3263
3211
|
for n in 0..@data['키워드설정']['키워드'].length-1
|
@@ -3265,13 +3213,15 @@ class Wordpress
|
|
3265
3213
|
m << n
|
3266
3214
|
end
|
3267
3215
|
end
|
3268
|
-
|
3216
|
+
|
3269
3217
|
m.reverse.each do |i|
|
3270
3218
|
@data['키워드설정']['키워드'].delete_at(i)
|
3271
3219
|
end
|
3272
3220
|
@data['키워드설정']['키워드'].delete(nil)
|
3273
3221
|
}
|
3274
3222
|
}
|
3223
|
+
}
|
3224
|
+
|
3275
3225
|
@data['키워드설정']['순서사용'] = checkbox('순서사용'){
|
3276
3226
|
stretchy false
|
3277
3227
|
on_toggled{ |c|
|
@@ -3289,6 +3239,58 @@ class Wordpress
|
|
3289
3239
|
}
|
3290
3240
|
}
|
3291
3241
|
}
|
3242
|
+
vertical_separator{
|
3243
|
+
stretchy false
|
3244
|
+
}
|
3245
|
+
horizontal_box{
|
3246
|
+
stretchy false
|
3247
|
+
grid{
|
3248
|
+
@data['포스트설정']['gpt키워드'] = checkbox('GPT 키워드 기반 글 생성'){
|
3249
|
+
top 1
|
3250
|
+
left 0
|
3251
|
+
#enabled false # 기본적으로 비활성화
|
3252
|
+
on_toggled {
|
3253
|
+
if @data['포스트설정']['gpt키워드'].checked?
|
3254
|
+
@data['포스트설정']['gpt상단'].enabled = true # '내용투명' 활성화
|
3255
|
+
@data['포스트설정']['gpt하단'].enabled = true # '내용투명' 활성화
|
3256
|
+
else
|
3257
|
+
@data['포스트설정']['gpt상단'].checked = false # 체크 해제
|
3258
|
+
@data['포스트설정']['gpt상단'].enabled = false # 비활성화
|
3259
|
+
@data['포스트설정']['gpt하단'].checked = false # 체크 해제
|
3260
|
+
@data['포스트설정']['gpt하단'].enabled = false # 비활성화
|
3261
|
+
end
|
3262
|
+
}
|
3263
|
+
|
3264
|
+
}
|
3265
|
+
|
3266
|
+
@data['포스트설정']['gpt상단'] = checkbox('원고 위에 넣기'){
|
3267
|
+
top 1
|
3268
|
+
left 1
|
3269
|
+
enabled false # 기본적으로 비활성화
|
3270
|
+
on_toggled{
|
3271
|
+
if @data['포스트설정']['gpt상단'].checked?
|
3272
|
+
@data['포스트설정']['gpt하단'].checked = false
|
3273
|
+
end
|
3274
|
+
}
|
3275
|
+
}
|
3276
|
+
|
3277
|
+
@data['포스트설정']['gpt하단'] = checkbox('원고 아래 넣기'){
|
3278
|
+
top 1
|
3279
|
+
left 2
|
3280
|
+
enabled false # 기본적으로 비활성화
|
3281
|
+
on_toggled{
|
3282
|
+
if @data['포스트설정']['gpt하단'].checked?
|
3283
|
+
@data['포스트설정']['gpt상단'].checked = false
|
3284
|
+
end
|
3285
|
+
}
|
3286
|
+
}
|
3287
|
+
} }
|
3288
|
+
horizontal_box{
|
3289
|
+
stretchy false
|
3290
|
+
grid{
|
3291
|
+
label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
|
3292
|
+
} } }
|
3293
|
+
|
3292
3294
|
table{
|
3293
3295
|
checkbox_column('선택'){
|
3294
3296
|
editable true
|
@@ -3307,68 +3309,100 @@ class Wordpress
|
|
3307
3309
|
vertical_box{
|
3308
3310
|
horizontal_box{
|
3309
3311
|
stretchy false
|
3310
|
-
|
3311
|
-
|
3312
|
-
|
3313
|
-
|
3314
|
-
|
3315
|
-
|
3316
|
-
|
3312
|
+
button('제목불러오기'){
|
3313
|
+
on_clicked{
|
3314
|
+
file = open_file
|
3315
|
+
if file != nil
|
3316
|
+
file_data = File.open(file, 'r', :encoding => 'utf-8').read()
|
3317
|
+
file_data.split("\n").each do |title|
|
3318
|
+
if title.split(" ").join('').length < 2
|
3317
3319
|
|
3318
|
-
|
3319
|
-
|
3320
|
-
|
3321
|
-
@data['제목설정']['제목'].pop
|
3322
|
-
end
|
3323
|
-
end
|
3324
|
-
end
|
3325
|
-
}
|
3326
|
-
}
|
3327
|
-
|
3328
|
-
}
|
3329
|
-
horizontal_box{
|
3330
|
-
stretchy false
|
3331
|
-
button('전체선택'){
|
3332
|
-
on_clicked{
|
3333
|
-
for n in 0..@data['제목설정']['제목'].length-1
|
3334
|
-
@data['제목설정']['제목'][n][0] = true
|
3335
|
-
@data['제목설정']['제목'] << []
|
3320
|
+
else
|
3321
|
+
@data['제목설정']['제목'] << [false, title]
|
3322
|
+
@data['제목설정']['제목'] << [false, title]
|
3336
3323
|
@data['제목설정']['제목'].pop
|
3337
3324
|
end
|
3338
|
-
|
3339
|
-
|
3340
|
-
|
3341
|
-
|
3342
|
-
m = Array.new
|
3343
|
-
for n in 0..@data['제목설정']['제목'].length-1
|
3344
|
-
if @data['제목설정']['제목'][n][0] == true
|
3345
|
-
m << n
|
3346
|
-
end
|
3347
|
-
end
|
3325
|
+
end
|
3326
|
+
end
|
3327
|
+
}
|
3328
|
+
}
|
3348
3329
|
|
3349
|
-
|
3350
|
-
|
3351
|
-
|
3352
|
-
|
3353
|
-
|
3354
|
-
|
3355
|
-
|
3356
|
-
|
3357
|
-
|
3358
|
-
|
3359
|
-
|
3360
|
-
|
3361
|
-
|
3362
|
-
|
3363
|
-
|
3364
|
-
|
3365
|
-
|
3366
|
-
|
3367
|
-
|
3368
|
-
|
3369
|
-
|
3370
|
-
|
3330
|
+
}
|
3331
|
+
horizontal_box{
|
3332
|
+
stretchy false
|
3333
|
+
grid{
|
3334
|
+
button('전체선택'){
|
3335
|
+
top 1
|
3336
|
+
left 1
|
3337
|
+
on_clicked{
|
3338
|
+
for n in 0..@data['제목설정']['제목'].length-1
|
3339
|
+
@data['제목설정']['제목'][n][0] = true
|
3340
|
+
@data['제목설정']['제목'] << []
|
3341
|
+
@data['제목설정']['제목'].pop
|
3342
|
+
end
|
3343
|
+
}
|
3344
|
+
}
|
3345
|
+
button('선택해제'){
|
3346
|
+
top 1
|
3347
|
+
left 2
|
3348
|
+
on_clicked{
|
3349
|
+
for n in 0..@data['제목설정']['제목'].length-1
|
3350
|
+
@data['제목설정']['제목'][n][0] = false
|
3351
|
+
@data['제목설정']['제목'] << []
|
3352
|
+
@data['제목설정']['제목'].pop
|
3353
|
+
end
|
3354
|
+
}
|
3355
|
+
}
|
3356
|
+
button('삭제하기'){
|
3357
|
+
top 1
|
3358
|
+
left 3
|
3359
|
+
on_clicked{
|
3360
|
+
m = Array.new
|
3361
|
+
for n in 0..@data['제목설정']['제목'].length-1
|
3362
|
+
if @data['제목설정']['제목'][n][0] == true
|
3363
|
+
m << n
|
3364
|
+
end
|
3365
|
+
end
|
3366
|
+
|
3367
|
+
m.reverse.each do |i|
|
3368
|
+
@data['제목설정']['제목'].delete_at(i)
|
3369
|
+
end
|
3370
|
+
@data['제목설정']['제목'].delete(nil)
|
3371
|
+
}
|
3372
|
+
}
|
3373
|
+
}
|
3374
|
+
@data['제목설정']['순서사용'] = checkbox('순서사용'){
|
3375
|
+
stretchy false
|
3376
|
+
on_toggled{ |c|
|
3377
|
+
if c.checked?
|
3378
|
+
@data['제목설정']['랜덤사용'].checked = false
|
3379
|
+
end
|
3380
|
+
}
|
3381
|
+
}
|
3382
|
+
@data['제목설정']['랜덤사용'] = checkbox('랜덤사용'){
|
3383
|
+
stretchy false
|
3384
|
+
on_toggled{ |c|
|
3385
|
+
if c.checked?
|
3386
|
+
@data['제목설정']['순서사용'].checked = false
|
3387
|
+
end
|
3371
3388
|
}
|
3389
|
+
}
|
3390
|
+
}
|
3391
|
+
vertical_separator{
|
3392
|
+
stretchy false
|
3393
|
+
}
|
3394
|
+
horizontal_box{
|
3395
|
+
stretchy false
|
3396
|
+
grid{
|
3397
|
+
@data['포스트설정']['gpt제목'] = checkbox('제목을 이용해 GPT로 비슷한 제목 생성'){
|
3398
|
+
|
3399
|
+
|
3400
|
+
}}}
|
3401
|
+
horizontal_box{
|
3402
|
+
stretchy false
|
3403
|
+
grid{
|
3404
|
+
label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
|
3405
|
+
} } }
|
3372
3406
|
table{
|
3373
3407
|
checkbox_column('선택'){
|
3374
3408
|
editable true
|
@@ -3402,11 +3436,14 @@ class Wordpress
|
|
3402
3436
|
end
|
3403
3437
|
}
|
3404
3438
|
}
|
3405
|
-
|
3439
|
+
|
3406
3440
|
}
|
3407
3441
|
horizontal_box{
|
3408
3442
|
stretchy false
|
3443
|
+
grid{
|
3409
3444
|
button('전체선택'){
|
3445
|
+
top 1
|
3446
|
+
left 1
|
3410
3447
|
on_clicked{
|
3411
3448
|
for n in 0..@data['내용설정']['내용'].length-1
|
3412
3449
|
@data['내용설정']['내용'][n][0] = true
|
@@ -3415,7 +3452,20 @@ class Wordpress
|
|
3415
3452
|
end
|
3416
3453
|
}
|
3417
3454
|
}
|
3418
|
-
button('
|
3455
|
+
button('선택해제'){
|
3456
|
+
top 1
|
3457
|
+
left 2
|
3458
|
+
on_clicked{
|
3459
|
+
for n in 0..@data['내용설정']['내용'].length-1
|
3460
|
+
@data['내용설정']['내용'][n][0] = false
|
3461
|
+
@data['내용설정']['내용'] << []
|
3462
|
+
@data['내용설정']['내용'].pop
|
3463
|
+
end
|
3464
|
+
}
|
3465
|
+
}
|
3466
|
+
button('삭제하기'){
|
3467
|
+
top 1
|
3468
|
+
left 3
|
3419
3469
|
on_clicked{
|
3420
3470
|
m = Array.new
|
3421
3471
|
for n in 0..@data['내용설정']['내용'].length-1
|
@@ -3423,13 +3473,14 @@ class Wordpress
|
|
3423
3473
|
m << n
|
3424
3474
|
end
|
3425
3475
|
end
|
3426
|
-
|
3476
|
+
|
3427
3477
|
m.reverse.each do |i|
|
3428
3478
|
@data['내용설정']['내용'].delete_at(i)
|
3429
3479
|
end
|
3430
3480
|
@data['내용설정']['내용'].delete(nil)
|
3431
3481
|
}
|
3432
3482
|
}
|
3483
|
+
}
|
3433
3484
|
@data['내용설정']['순서사용'] = checkbox('순서사용'){
|
3434
3485
|
stretchy false
|
3435
3486
|
on_toggled{ |c|
|
@@ -3447,6 +3498,21 @@ class Wordpress
|
|
3447
3498
|
}
|
3448
3499
|
}
|
3449
3500
|
}
|
3501
|
+
vertical_separator{
|
3502
|
+
stretchy false
|
3503
|
+
}
|
3504
|
+
horizontal_box{
|
3505
|
+
stretchy false
|
3506
|
+
grid{
|
3507
|
+
@data['포스트설정']['gpt내용'] = checkbox('내용파일을 이용해 GPT로 글 변형'){
|
3508
|
+
|
3509
|
+
|
3510
|
+
}}}
|
3511
|
+
horizontal_box{
|
3512
|
+
stretchy false
|
3513
|
+
grid{
|
3514
|
+
label('※ GPT 기능 사용시 포스트설정1에서 GPT사용에 체크 필수'){
|
3515
|
+
} } }
|
3450
3516
|
table{
|
3451
3517
|
checkbox_column('선택'){
|
3452
3518
|
editable true
|
@@ -3777,248 +3843,298 @@ class Wordpress
|
|
3777
3843
|
}
|
3778
3844
|
|
3779
3845
|
tab_item('포스트설정1'){
|
3780
|
-
|
3781
|
-
|
3782
|
-
|
3783
|
-
|
3784
|
-
|
3785
|
-
|
3786
|
-
|
3787
|
-
|
3788
|
-
|
3789
|
-
}
|
3790
|
-
@data['포스트설정']['제목키워드변경단어'] = entry{
|
3791
|
-
top 0
|
3792
|
-
left 1
|
3793
|
-
text '특정단어'
|
3794
|
-
}
|
3795
|
-
|
3796
|
-
# @data['포스트설정']['제목단어변경'] = checkbox('제목에 특정 단어를 변경'){
|
3797
|
-
# top 1
|
3798
|
-
# left 0
|
3799
|
-
# }
|
3800
|
-
# @data['포스트설정']['제목단어변경파일불러오기'] = button('설정 파일 불러오기'){
|
3801
|
-
# top 1
|
3802
|
-
# left 1
|
3803
|
-
# on_clicked{
|
3804
|
-
# file = open_file
|
3805
|
-
# if file != nil
|
3806
|
-
# file_data = File.open(file, 'r', :encoding => 'utf-8').read()
|
3807
|
-
# file_data.split("\n").each do |i|
|
3808
|
-
# i2 = i.split('>')
|
3809
|
-
# text_key = i2[0].to_s
|
3810
|
-
# text_val = i2[1].to_s.split(',')
|
3811
|
-
# @data['포스트설정']['제목특정단어변경데이터'][text_key] = text_val
|
3812
|
-
# end
|
3813
|
-
# end
|
3814
|
-
# }
|
3815
|
-
# }
|
3816
|
-
@data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
|
3817
|
-
top 2
|
3818
|
-
left 0
|
3819
|
-
}
|
3820
|
-
@data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
|
3821
|
-
top 2
|
3822
|
-
left 1
|
3823
|
-
text '최소수량'
|
3824
|
-
}
|
3825
|
-
label('~'){
|
3826
|
-
top 2
|
3827
|
-
left 2
|
3828
|
-
}
|
3829
|
-
@data['포스트설정']['제목에키워드삽입숫자2'] = entry(){
|
3830
|
-
top 2
|
3831
|
-
left 3
|
3832
|
-
text '최대수량'
|
3833
|
-
}
|
3834
|
-
label('ㄴ'){
|
3835
|
-
top 3
|
3836
|
-
left 2
|
3837
|
-
}
|
3838
|
-
@data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
|
3839
|
-
top 3
|
3840
|
-
left 3
|
3841
|
-
on_toggled{
|
3842
|
-
if @data['포스트설정']['제목앞'].checked? == true
|
3843
|
-
if @data['포스트설정']['제목뒤'].checked?
|
3844
|
-
@data['포스트설정']['제목뒤'].checked = false
|
3845
|
-
end
|
3846
|
-
end
|
3847
|
-
}
|
3848
|
-
}
|
3849
|
-
label('ㄴ'){
|
3850
|
-
top 4
|
3851
|
-
left 2
|
3852
|
-
}
|
3853
|
-
@data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
|
3854
|
-
top 4
|
3855
|
-
left 3
|
3856
|
-
on_toggled{
|
3857
|
-
if @data['포스트설정']['제목뒤'].checked? == true
|
3858
|
-
if @data['포스트설정']['제목앞'].checked?
|
3859
|
-
@data['포스트설정']['제목앞'].checked = false
|
3860
|
-
end
|
3861
|
-
end
|
3862
|
-
}
|
3863
|
-
}
|
3864
|
-
@data['포스트설정']['제목내용설정'] = checkbox('내용의 첫 문장을 제목으로 설정'){
|
3865
|
-
top 4
|
3866
|
-
left 0
|
3867
|
-
}
|
3868
|
-
|
3869
|
-
@data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
|
3870
|
-
top 5
|
3871
|
-
left 0
|
3872
|
-
}
|
3873
|
-
@data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
|
3874
|
-
top 6
|
3875
|
-
left 0
|
3876
|
-
}
|
3877
|
-
@data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
|
3878
|
-
top 7
|
3879
|
-
left 0
|
3880
|
-
}
|
3881
|
-
@data['포스트설정']['키워드삽입시작숫자'] = entry(){
|
3882
|
-
top 7
|
3883
|
-
left 1
|
3884
|
-
text '최소수량'
|
3885
|
-
}
|
3886
|
-
label('~'){
|
3887
|
-
top 7
|
3888
|
-
left 2
|
3889
|
-
}
|
3890
|
-
@data['포스트설정']['키워드삽입끝숫자'] = entry(){
|
3891
|
-
top 7
|
3892
|
-
left 3
|
3893
|
-
text '최대수량'
|
3894
|
-
}
|
3895
|
-
@data['포스트설정']['키워드삽입'] = checkbox('내용 키워드 삽입시 링크 삽입'){
|
3896
|
-
top 8
|
3897
|
-
left 0
|
3898
|
-
}
|
3899
|
-
@data['포스트설정']['키워드삽입시링크'] = entry(){
|
3900
|
-
top 8
|
3901
|
-
left 1
|
3902
|
-
text 'URL'
|
3903
|
-
}
|
3904
|
-
@data['포스트설정']['내용을자동생성'] = checkbox('내용을 키워드 기반으로 자동 생성해서 포스팅'){
|
3905
|
-
top 9
|
3906
|
-
left 0
|
3907
|
-
on_toggled{
|
3908
|
-
if @data['포스트설정']['내용을자동생성'].checked?
|
3909
|
-
if @data['포스트설정']['내용과자동생성'].checked?
|
3910
|
-
@data['포스트설정']['내용과자동생성'].checked = false
|
3911
|
-
end
|
3912
|
-
end
|
3913
|
-
}
|
3914
|
-
}
|
3915
|
-
|
3916
|
-
@data['포스트설정']['gpt'] = checkbox('내용을 키워드 기반의 GPT로 생성해서 포스팅'){
|
3917
|
-
top 10
|
3918
|
-
left 0
|
3919
|
-
}
|
3920
|
-
|
3921
|
-
@data['포스트설정']['api_key'] = entry(){
|
3922
|
-
top 10
|
3923
|
-
left 1
|
3924
|
-
text 'api key'
|
3925
|
-
}
|
3846
|
+
horizontal_box{
|
3847
|
+
vertical_box{
|
3848
|
+
stretchy false
|
3849
|
+
grid{
|
3850
|
+
stretchy false
|
3851
|
+
@data['포스트설정']['제목키워드변경'] = checkbox('제목에 특정 단어를 내용에 사용할 키워드로 변경'){
|
3852
|
+
top 0
|
3853
|
+
left 0
|
3926
3854
|
|
3927
|
-
|
3928
|
-
|
3929
|
-
|
3930
|
-
|
3931
|
-
|
3932
|
-
|
3933
|
-
@data['포스트설정']['gpt하단'].checked = false
|
3934
|
-
end
|
3935
|
-
end
|
3936
|
-
}
|
3937
|
-
}
|
3855
|
+
}
|
3856
|
+
@data['포스트설정']['제목키워드변경단어'] = entry{
|
3857
|
+
top 0
|
3858
|
+
left 1
|
3859
|
+
text '특정단어'
|
3860
|
+
}
|
3938
3861
|
|
3939
|
-
|
3940
|
-
|
3941
|
-
|
3942
|
-
|
3943
|
-
|
3944
|
-
|
3945
|
-
|
3946
|
-
|
3947
|
-
|
3948
|
-
|
3949
|
-
|
3862
|
+
# @data['포스트설정']['제목단어변경'] = checkbox('제목에 특정 단어를 변경'){
|
3863
|
+
# top 1
|
3864
|
+
# left 0
|
3865
|
+
# }
|
3866
|
+
# @data['포스트설정']['제목단어변경파일불러오기'] = button('설정 파일 불러오기'){
|
3867
|
+
# top 1
|
3868
|
+
# left 1
|
3869
|
+
# on_clicked{
|
3870
|
+
# file = open_file
|
3871
|
+
# if file != nil
|
3872
|
+
# file_data = File.open(file, 'r', :encoding => 'utf-8').read()
|
3873
|
+
# file_data.split("\n").each do |i|
|
3874
|
+
# i2 = i.split('>')
|
3875
|
+
# text_key = i2[0].to_s
|
3876
|
+
# text_val = i2[1].to_s.split(',')
|
3877
|
+
# @data['포스트설정']['제목특정단어변경데이터'][text_key] = text_val
|
3878
|
+
# end
|
3879
|
+
# end
|
3880
|
+
# }
|
3881
|
+
# }
|
3882
|
+
@data['포스트설정']['제목에키워드삽입'] = checkbox('제목에 키워드 삽입'){
|
3883
|
+
top 2
|
3884
|
+
left 0
|
3885
|
+
#enabled false # 기본적으로 비활성화
|
3886
|
+
on_toggled {
|
3887
|
+
if @data['포스트설정']['제목에키워드삽입'].checked?
|
3888
|
+
@data['포스트설정']['제목앞'].enabled = true # '내용투명' 활성화
|
3889
|
+
@data['포스트설정']['제목뒤'].enabled = true # '내용투명' 활성화
|
3890
|
+
else
|
3891
|
+
@data['포스트설정']['제목앞'].checked = false # 체크 해제
|
3892
|
+
@data['포스트설정']['제목앞'].enabled = false # 비활성화
|
3893
|
+
@data['포스트설정']['제목뒤'].checked = false # 체크 해제
|
3894
|
+
@data['포스트설정']['제목뒤'].enabled = false # 비활성화
|
3895
|
+
end
|
3896
|
+
}
|
3897
|
+
|
3898
|
+
}
|
3899
|
+
@data['포스트설정']['제목에키워드삽입숫자1'] = entry(){
|
3900
|
+
top 2
|
3901
|
+
left 1
|
3902
|
+
text '최소수량'
|
3903
|
+
}
|
3904
|
+
label('~'){
|
3905
|
+
top 2
|
3906
|
+
left 2
|
3907
|
+
}
|
3908
|
+
@data['포스트설정']['제목에키워드삽입숫자2'] = entry(){
|
3909
|
+
top 2
|
3910
|
+
left 3
|
3911
|
+
text '최대수량'
|
3912
|
+
}
|
3913
|
+
label('ㄴ'){
|
3914
|
+
top 3
|
3915
|
+
left 2
|
3916
|
+
}
|
3917
|
+
@data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
|
3918
|
+
top 3
|
3919
|
+
left 3
|
3920
|
+
enabled false # 기본적으로 비활성화
|
3921
|
+
on_toggled{
|
3922
|
+
if @data['포스트설정']['제목앞'].checked? == true
|
3923
|
+
if @data['포스트설정']['제목뒤'].checked?
|
3924
|
+
@data['포스트설정']['제목뒤'].checked = false
|
3925
|
+
end
|
3926
|
+
end
|
3927
|
+
}
|
3928
|
+
}
|
3929
|
+
label('ㄴ'){
|
3930
|
+
top 4
|
3931
|
+
left 2
|
3932
|
+
}
|
3933
|
+
@data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
|
3934
|
+
top 4
|
3935
|
+
left 3
|
3936
|
+
enabled false # 기본적으로 비활성화
|
3937
|
+
on_toggled{
|
3938
|
+
if @data['포스트설정']['제목뒤'].checked? == true
|
3939
|
+
if @data['포스트설정']['제목앞'].checked?
|
3940
|
+
@data['포스트설정']['제목앞'].checked = false
|
3941
|
+
end
|
3942
|
+
end
|
3943
|
+
}
|
3944
|
+
}
|
3945
|
+
|
3946
|
+
@data['포스트설정']['특수문자'] = checkbox('제목에 키워드 삽입 시 특수문자 삽입'){
|
3947
|
+
top 4
|
3948
|
+
left 0
|
3949
|
+
}
|
3950
|
+
@data['포스트설정']['제목을랜덤'] = checkbox('제목을 랜덤 단어 조합으로 자동 입력'){
|
3951
|
+
top 5
|
3952
|
+
left 0
|
3953
|
+
on_toggled{
|
3954
|
+
if @data['포스트설정']['제목을랜덤'].checked? == true
|
3955
|
+
if @data['포스트설정']['제목내용설정'].checked?
|
3956
|
+
@data['포스트설정']['제목내용설정'].checked = false
|
3957
|
+
end
|
3958
|
+
end
|
3959
|
+
}
|
3960
|
+
}
|
3961
|
+
@data['포스트설정']['제목내용설정'] = checkbox('내용의 첫 문장을 제목으로 설정'){
|
3962
|
+
top 6
|
3963
|
+
left 0
|
3964
|
+
on_toggled{
|
3965
|
+
if @data['포스트설정']['제목내용설정'].checked? == true
|
3966
|
+
if @data['포스트설정']['제목을랜덤'].checked?
|
3967
|
+
@data['포스트설정']['제목을랜덤'].checked = false
|
3968
|
+
end
|
3969
|
+
end
|
3970
|
+
}
|
3971
|
+
}
|
3972
|
+
@data['포스트설정']['내용키워드삽입'] = checkbox('내용 키워드 삽입'){
|
3973
|
+
top 7
|
3974
|
+
left 0
|
3975
|
+
on_toggled {
|
3976
|
+
if @data['포스트설정']['내용키워드삽입'].checked?
|
3977
|
+
@data['포스트설정']['키워드삽입'].enabled = true # '내용투명' 활성화
|
3978
|
+
@data['포스트설정']['키워드삽입시링크'].enabled = true # '내용투명' 활성화
|
3979
|
+
else
|
3980
|
+
@data['포스트설정']['키워드삽입'].checked = false # 체크 해제
|
3981
|
+
@data['포스트설정']['키워드삽입'].enabled = false # 비활성화
|
3982
|
+
@data['포스트설정']['키워드삽입시링크'].text = 'URL' # 기본 텍스트 설정
|
3983
|
+
@data['포스트설정']['키워드삽입시링크'].enabled = false # 비활성화
|
3984
|
+
end
|
3985
|
+
}
|
3986
|
+
}
|
3987
|
+
@data['포스트설정']['키워드삽입시작숫자'] = entry(){
|
3988
|
+
top 7
|
3989
|
+
left 1
|
3990
|
+
|
3991
|
+
text '최소수량'
|
3992
|
+
}
|
3993
|
+
label('~'){
|
3994
|
+
top 7
|
3995
|
+
left 2
|
3996
|
+
}
|
3997
|
+
@data['포스트설정']['키워드삽입끝숫자'] = entry(){
|
3998
|
+
top 7
|
3999
|
+
left 3
|
4000
|
+
text '최대수량'
|
4001
|
+
}
|
4002
|
+
@data['포스트설정']['키워드삽입'] = checkbox('내용 키워드 삽입시 링크 삽입'){
|
4003
|
+
enabled false # 기본적으로 비활성화
|
4004
|
+
top 8
|
4005
|
+
left 0
|
4006
|
+
|
4007
|
+
}
|
4008
|
+
@data['포스트설정']['키워드삽입시링크'] = entry(){
|
4009
|
+
enabled false # 기본적으로 비활성화
|
4010
|
+
top 8
|
4011
|
+
left 1
|
4012
|
+
text 'URL'
|
4013
|
+
}
|
4014
|
+
@data['포스트설정']['내용을자동생성'] = checkbox('키워드기반 생성으로만 등록(GPT 미 사용시 자체 생성)'){
|
4015
|
+
top 9
|
4016
|
+
left 0
|
4017
|
+
on_toggled{
|
4018
|
+
if @data['포스트설정']['내용을자동생성'].checked?
|
4019
|
+
@data['포스트설정']['내용과자동생성'].checked = false
|
4020
|
+
@data['포스트설정']['내용투명'].checked = false
|
4021
|
+
@data['포스트설정']['자동글 수식에 입력'].checked = false
|
4022
|
+
|
4023
|
+
end
|
4024
|
+
}
|
4025
|
+
}
|
3950
4026
|
|
3951
|
-
|
3952
|
-
|
3953
|
-
|
3954
|
-
|
3955
|
-
|
3956
|
-
|
3957
|
-
|
3958
|
-
|
3959
|
-
|
3960
|
-
|
3961
|
-
|
3962
|
-
|
3963
|
-
@data['포스트설정']['내용투명'] =
|
3964
|
-
|
3965
|
-
|
3966
|
-
|
3967
|
-
|
3968
|
-
|
3969
|
-
|
3970
|
-
|
3971
|
-
|
3972
|
-
|
3973
|
-
|
3974
|
-
|
3975
|
-
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
3986
|
-
|
3987
|
-
|
3988
|
-
|
3989
|
-
|
4027
|
+
|
4028
|
+
aa1 = 2
|
4029
|
+
@data['포스트설정']['내용과자동생성'] = checkbox('내용파일+키워드기반 생성 등록(GPT 미 사용시 자체 생성)') {
|
4030
|
+
top 10 + aa1
|
4031
|
+
left 0
|
4032
|
+
on_toggled {
|
4033
|
+
if @data['포스트설정']['내용과자동생성'].checked?
|
4034
|
+
@data['포스트설정']['내용을자동생성'].checked = false
|
4035
|
+
@data['포스트설정']['내용투명'].enabled = true # '내용투명' 활성화
|
4036
|
+
@data['포스트설정']['자동글 수식에 입력'].enabled = true # '내용투명' 활성화
|
4037
|
+
else
|
4038
|
+
@data['포스트설정']['내용투명'].checked = false # 체크 해제
|
4039
|
+
@data['포스트설정']['내용투명'].enabled = false # 비활성화
|
4040
|
+
@data['포스트설정']['자동글 수식에 입력'].checked = false # 체크 해제
|
4041
|
+
@data['포스트설정']['자동글 수식에 입력'].enabled = false # 비활성화
|
4042
|
+
end
|
4043
|
+
}
|
4044
|
+
}
|
4045
|
+
|
4046
|
+
@data['포스트설정']['내용투명'] = checkbox('키워드 기반 자동 생성글 안보이게 처리') {
|
4047
|
+
top 11 + aa1
|
4048
|
+
left 0
|
4049
|
+
enabled false # 기본적으로 비활성화
|
4050
|
+
on_toggled {
|
4051
|
+
if @data['포스트설정']['내용투명'].checked?
|
4052
|
+
@data['포스트설정']['내용을자동생성'].checked = false
|
4053
|
+
@data['포스트설정']['자동글 수식에 입력'].checked = false
|
4054
|
+
end
|
4055
|
+
}
|
4056
|
+
}
|
4057
|
+
@data['포스트설정']['내용자동변경'] = checkbox('내용에 단어들을 자동 변경'){
|
4058
|
+
top 12+ aa1
|
4059
|
+
left 0
|
4060
|
+
}
|
4061
|
+
button('설정 파일 불러오기'){
|
4062
|
+
top 12+ aa1
|
4063
|
+
left 1
|
4064
|
+
on_clicked{
|
4065
|
+
file = open_file
|
4066
|
+
if file != nil
|
4067
|
+
file_data = File.open(file, 'r', :encoding => 'utf-8').read()
|
4068
|
+
file_data.split("\n").each do |i|
|
4069
|
+
key = i.split('>')[0]
|
4070
|
+
v = i.split('>')[1].to_s.split(',')
|
4071
|
+
@data['포스트설정']['내용자동변경값'][key] = v
|
4072
|
+
end
|
4073
|
+
end
|
4074
|
+
}
|
4075
|
+
}
|
4076
|
+
@data['포스트설정']['제목에도적용'] = checkbox('제목에도 적용'){
|
4077
|
+
top 12+ aa1
|
4078
|
+
left 3
|
4079
|
+
}
|
3990
4080
|
|
3991
|
-
|
3992
|
-
|
3993
|
-
|
3994
|
-
|
3995
|
-
|
3996
|
-
|
3997
|
-
|
3998
|
-
|
3999
|
-
|
4000
|
-
|
4001
|
-
|
4002
|
-
|
4003
|
-
|
4004
|
-
|
4005
|
-
|
4006
|
-
|
4007
|
-
|
4008
|
-
|
4081
|
+
@data['포스트설정']['내용사진자동삽입'] = checkbox('내용 사진 자동 삽입'){
|
4082
|
+
top 13+ aa1
|
4083
|
+
left 0
|
4084
|
+
#enabled false # 기본적으로 비활성화
|
4085
|
+
on_toggled {
|
4086
|
+
if @data['포스트설정']['내용사진자동삽입'].checked?
|
4087
|
+
@data['포스트설정']['내용사진링크'].enabled = true # '내용투명' 활성화
|
4088
|
+
@data['포스트설정']['내용사진링크값'].enabled = true # '내용투명' 활성화
|
4089
|
+
else
|
4090
|
+
@data['포스트설정']['내용사진링크'].checked = false # 체크 해제
|
4091
|
+
@data['포스트설정']['내용사진링크'].enabled = false # 비활성화
|
4092
|
+
@data['포스트설정']['내용사진링크값'].text = 'URL' # 기본 텍스트 설정
|
4093
|
+
@data['포스트설정']['내용사진링크값'].enabled = false # 비활성화
|
4094
|
+
end
|
4095
|
+
}
|
4096
|
+
}
|
4097
|
+
@data['포스트설정']['내용사진자동삽입시작숫자'] = entry(){
|
4098
|
+
top 13+ aa1
|
4099
|
+
left 1
|
4100
|
+
text '최소수량'
|
4101
|
+
}
|
4102
|
+
label('~'){
|
4103
|
+
top 13+ aa1
|
4104
|
+
left 2
|
4105
|
+
}
|
4106
|
+
@data['포스트설정']['내용사진자동삽입끝숫자'] = entry(){
|
4107
|
+
top 13+ aa1
|
4108
|
+
left 3
|
4109
|
+
text '최대수량'
|
4110
|
+
}
|
4009
4111
|
|
4010
|
-
|
4011
|
-
|
4012
|
-
|
4013
|
-
|
4112
|
+
@data['포스트설정']['내용사진링크'] = checkbox('내용 사진 자동 삽입시 링크 삽입'){
|
4113
|
+
enabled false # 기본적으로 비활성화
|
4114
|
+
top 14+ aa1
|
4115
|
+
left 0
|
4116
|
+
}
|
4014
4117
|
|
4015
|
-
|
4016
|
-
|
4017
|
-
|
4018
|
-
|
4019
|
-
|
4020
|
-
}
|
4118
|
+
@data['포스트설정']['내용사진링크값'] = entry(){
|
4119
|
+
enabled false # 기본적으로 비활성화
|
4120
|
+
top 14+ aa1
|
4121
|
+
left 1
|
4122
|
+
text 'URL'
|
4021
4123
|
}
|
4124
|
+
|
4125
|
+
@data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기'){
|
4126
|
+
top 15+ aa1
|
4127
|
+
left 0
|
4128
|
+
}
|
4129
|
+
|
4130
|
+
@data['포스트설정']['api_key'] = entry(){
|
4131
|
+
top 15+ aa1
|
4132
|
+
left 1
|
4133
|
+
text 'api key 입력 필수!!'
|
4134
|
+
}
|
4135
|
+
|
4136
|
+
}
|
4137
|
+
}
|
4022
4138
|
|
4023
4139
|
vertical_separator{
|
4024
4140
|
stretchy false
|
@@ -4230,6 +4346,20 @@ class Wordpress
|
|
4230
4346
|
@data['포스트설정']['막글삽입'] = checkbox('내용 하단에 막글 삽입'){
|
4231
4347
|
top 6
|
4232
4348
|
left 0
|
4349
|
+
on_toggled {
|
4350
|
+
if @data['포스트설정']['막글삽입'].checked?
|
4351
|
+
@data['포스트설정']['막글투명'].enabled = true # '내용투명' 활성화
|
4352
|
+
@data['포스트설정']['막글그대로'].enabled = true # '내용투명' 활성화
|
4353
|
+
|
4354
|
+
|
4355
|
+
else
|
4356
|
+
@data['포스트설정']['막글투명'].checked = false # 체크 해제
|
4357
|
+
@data['포스트설정']['막글투명'].enabled = false # 비활성화
|
4358
|
+
@data['포스트설정']['막글그대로'].checked = false # 체크 해제
|
4359
|
+
@data['포스트설정']['막글그대로'].enabled = false # 비활성화
|
4360
|
+
|
4361
|
+
end
|
4362
|
+
}
|
4233
4363
|
}
|
4234
4364
|
@data['포스트설정']['막글삽입시작숫자'] = entry{
|
4235
4365
|
top 6
|
@@ -4259,10 +4389,12 @@ class Wordpress
|
|
4259
4389
|
@data['포스트설정']['막글투명'] = checkbox('막글 안보이게 처리'){
|
4260
4390
|
top 7
|
4261
4391
|
left 0
|
4392
|
+
enabled false
|
4262
4393
|
}
|
4263
4394
|
@data['포스트설정']['막글그대로'] = checkbox('막글 그대로 입력'){
|
4264
4395
|
top 7
|
4265
4396
|
left 1
|
4397
|
+
enabled false
|
4266
4398
|
}
|
4267
4399
|
|
4268
4400
|
@data['포스트설정']['태그삽입1'] = checkbox('태그삽입'){
|
@@ -4390,6 +4522,31 @@ class Wordpress
|
|
4390
4522
|
@data['무한반복'] = checkbox('무한반복'){
|
4391
4523
|
stretchy false
|
4392
4524
|
}
|
4525
|
+
|
4526
|
+
|
4527
|
+
|
4528
|
+
@data['포스트설정']['글발생하기'] = checkbox('글 발행하기'){
|
4529
|
+
stretchy false
|
4530
|
+
on_toggled{
|
4531
|
+
if @data['포스트설정']['글발생하기'].checked? == true
|
4532
|
+
if @data['포스트설정']['글임시저장'].checked?
|
4533
|
+
@data['포스트설정']['글임시저장'].checked = false
|
4534
|
+
end
|
4535
|
+
end
|
4536
|
+
}
|
4537
|
+
}
|
4538
|
+
@data['포스트설정']['글임시저장'] = checkbox('글 임시저장'){
|
4539
|
+
stretchy false
|
4540
|
+
on_toggled{
|
4541
|
+
if @data['포스트설정']['글임시저장'].checked? == true
|
4542
|
+
if @data['포스트설정']['글발생하기'].checked?
|
4543
|
+
@data['포스트설정']['글발생하기'].checked = false
|
4544
|
+
end
|
4545
|
+
end
|
4546
|
+
}
|
4547
|
+
}
|
4548
|
+
|
4549
|
+
|
4393
4550
|
button('작업시작'){
|
4394
4551
|
on_clicked{
|
4395
4552
|
if @user_login_ok == "0"
|
@@ -4430,7 +4587,7 @@ class Wordpress
|
|
4430
4587
|
@data['포스트설정']['중앙정렬'].checked = true
|
4431
4588
|
@data['포스트설정']['전체공개'].checked = true
|
4432
4589
|
@data['포스트설정']['댓글허용'].checked = true
|
4433
|
-
|
4590
|
+
@data['포스트설정']['글발생하기'].checked = true
|
4434
4591
|
|
4435
4592
|
}.show
|
4436
4593
|
end
|