deltago 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/deltago.rb +1733 -0
  3. metadata +43 -0
data/lib/deltago.rb ADDED
@@ -0,0 +1,1733 @@
1
+ require 'glimmer-dsl-libui'
2
+ require 'http'
3
+ require 'nokogiri'
4
+ require 'selenium-webdriver'
5
+ require 'rest-client'
6
+ require 'open-uri'
7
+ require 'open3'
8
+
9
+ class Soonje
10
+ def robot
11
+ if @post_counter.text.to_i == 0
12
+ msg_box('수량을 적어주세요')
13
+ else
14
+ @word = Hash.new
15
+ @coupang = Coupang.new
16
+ @coupang.login(@coupang_id.text, @coupang_password.text)
17
+ @naver_keyword = naver_get_item()
18
+ for counter100 in 1..@post_counter.text.to_i
19
+ if @tedering.checked?
20
+ puts 'tedering ip change...'
21
+ stdout, stderr, status = Open3.capture3('adb devices')
22
+ if status.success?
23
+ device_id = stdout.split("\n")[1].split("\t")[0]
24
+ puts device_id
25
+ puts 'adb -s '+device_id+' shell svc data disable'
26
+ stdout2, stderr2, status2 = Open3.capture3('adb -s '+device_id+' shell svc data disable')
27
+ sleep(3)
28
+ puts 'adb -s '+device_id+' shell svc data enable'
29
+ Open3.capture3('adb -s '+device_id+' shell svc data enable')
30
+ sleep(3)
31
+ puts 'adb ok'
32
+ else
33
+ puts 'adb error pass'
34
+ end
35
+ end
36
+
37
+ @search_text = ''
38
+ s2 = @counter_start.text.to_i
39
+ e2 = @counter_end.text.to_i
40
+ if s2 == e2
41
+ counter7 = s2
42
+ else
43
+ counter7 = rand(s2..e2)
44
+ end
45
+ if @update_type == 1
46
+ rand_search_memory = Array.new
47
+ @naver_keyword.each do |key,v|
48
+ if @update_keyword[key] == 1
49
+ v.each do |i|
50
+ rand_search_memory << i
51
+ end
52
+ end
53
+ end
54
+ @search_text = rand_search_memory.shuffle
55
+ elsif @update_type == 2
56
+ @search_text = [@where_search]
57
+ elsif @update_type == 3
58
+ @search_text = @user_keyword.shuffle
59
+ end
60
+
61
+ if @update_type == 2
62
+ product_data = @coupang.get_product_data2(@where_search)
63
+ product_data2 = product_data.sample(counter7)
64
+ else
65
+ puts '검색중 ==> '+@search_text[0]
66
+ product_data = @coupang.get_product_data(@search_text[0])
67
+ if product_data.length == 0
68
+ puts '쿠팡 검색 갯수 = 0 다시검색'
69
+ product_data = @coupang.get_product_data(@search_text[1])
70
+ end
71
+
72
+ product_data2 = product_data.sample(counter7)
73
+ end
74
+
75
+ url_memory = Hash.new
76
+
77
+ puts '쿠팡 파트너스 상품 url 얻는중 ...'
78
+ product_data2.each do |data3|
79
+ url_memory[data3['productId']] = @coupang.get_product_url(data3)
80
+ end
81
+
82
+ puts product_data2
83
+ puts url_memory
84
+
85
+ if @title_file.length == 0
86
+ title = ''
87
+ else
88
+ title = @title_file.shuffle[0]
89
+
90
+ if @title_setting1 == true
91
+ title = product_data2[0]['title'] + ' ' +title
92
+ end
93
+
94
+ if @keyword_setting1 == true
95
+ title = @search_text[0] + ' ' + title
96
+ end
97
+
98
+ if @change_text_setting1 == true
99
+ @change_memory1.each do |key,v|
100
+ title = (title+'_').split(key).join(v.shuffle[0])
101
+ end
102
+ end
103
+ end
104
+
105
+ text_top = @text_top.to_s.force_encoding('utf-8')+'_'
106
+ if text_top != ''
107
+ if @tt1.checked?
108
+ @change_memory2.each do |key,v|
109
+ text_top = text_top.split(key).join(v.shuffle[0])
110
+ end
111
+ end
112
+
113
+ if @point_change_text1
114
+ text_top = text_top.split(@point_keyword1.text.force_encoding('utf-8')).join(@search_text[0].force_encoding('utf-8'))
115
+ end
116
+
117
+ if @point_product_name1
118
+ text_top = text_top.split(@point_keyword2.text.force_encoding('utf-8')).join(product_data2[0]['title'].force_encoding('utf-8'))
119
+ end
120
+ end
121
+
122
+ text_bottom = '_'+@text_bottom.to_s.force_encoding('utf-8')+'_'
123
+ if text_bottom != ''
124
+ if @change_text_setting3
125
+ @change_memory3.each do |key,v|
126
+ text_bottom = text_bottom.split(key).join(v.shuffle[0])
127
+ end
128
+ end
129
+
130
+ if @point_change_text2
131
+ text_bottom = text_bottom.split(@point_keyword11.text.force_encoding('utf-8')).join(@search_text[0].force_encoding('utf-8'))
132
+ end
133
+
134
+ if @point_product_name2
135
+ text_bottom = text_bottom.sub(@point_keyword22.text.force_encoding('utf-8'), product_data2[0]['title'].force_encoding('utf-8'))
136
+ end
137
+ end
138
+
139
+ add_text = ''
140
+ if @add_text_setting1
141
+ add_text = naver_text(@search_text[0])
142
+ end
143
+
144
+ add_text_check = @add_text_setting2
145
+
146
+ if @tag_setting
147
+ search_text = @search_text[0]
148
+ else
149
+ search_text = ''
150
+ end
151
+
152
+ title = title.to_s.split('_').join('')
153
+ text_top = text_top.to_s.split('_').join('')
154
+ text_bottom = text_bottom.to_s.split('_').join('')
155
+
156
+ #@word[blog[1]].update(product_data2, url_memory, title, text_top, text_bottom, add_text, add_text_check, category, @tag_setting ,@search_text[0], @url_change_setting, @proxy_check2.checked?, @proxy_list.shuffle[0])
157
+ html_maker(title, text_top, text_bottom, product_data2, add_text, add_text_check, url_memory, @url_change_setting)
158
+ @code_text << Time.now.to_s+ ' => ' + product_data2[0]['productId'].to_s+'.html 생성완료'
159
+ @code_entry.text = @code_text.join("\n")
160
+ #blog[5] = (blog[5].to_i+1).to_s
161
+ #puts blog[1].to_s.force_encoding('utf-8')+' => 상품등록완료 누적 등록 수 ('+blog[5].to_s.force_encoding('utf-8')+')'
162
+ sleep(@post_delay.text.to_s.to_i)
163
+ end
164
+ end
165
+ end
166
+
167
+ def stop
168
+ begin
169
+ @thread.kill
170
+ rescue
171
+
172
+ end
173
+ end
174
+
175
+ def change_url(url)
176
+ begin
177
+ http = HTTP.post('https://linkchanger-vfllz.run.goorm.io/action', :json => {'url' => url})
178
+ rescue
179
+ puts '링크체인저 http 일시적 error 10 초후 재시도'
180
+ sleep(10)
181
+ retry
182
+ end
183
+
184
+ json = JSON.parse(http.to_s)
185
+ return json['result']
186
+ end
187
+
188
+ def html_maker(title, text_top, text_bottom, product, add_text, add_text_check, url_memory, url_change_check)
189
+ vv2 = '<div style="text-align: center;" align="center"><span style="font-size: 23pt;">'+title+'</span></div><br>'
190
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
191
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
192
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
193
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
194
+ vv2 += '<div style="text-align: center;" align="center">'+text_top+'</div><br>'
195
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
196
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
197
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
198
+
199
+ product.each do |dd|
200
+ link_url = url_memory[dd['productId']]
201
+ if url_change_check
202
+ link_url = change_url(link_url)
203
+ end
204
+ vv = '<p style="text-align: center;" align="center">'+dd['productId'].to_s+' => 파일사진위치</p>'
205
+ vv = vv+ '<div style="text-align: center;" align="center"><span style="font-size: 18pt;">'+dd['title']+'</span></div>'
206
+ vv = vv+ '<div style="text-align: center;" align="center"><span style="font-size: 18pt; color: #ff4b4b;">'+dd['salesPrice'].to_s+' 원</span></div>'
207
+ vv = vv+ '<div style="text-align: center;" align="center"><span style="font-size: 10pt;">무료배송</span></div>'
208
+ vv = vv+ '<p style="font-size: 13pt; text-align: center;" align="center"><a style="text-align: center;" href="'+link_url+'"><span style="font-size: 18pt;">상품보기</span></a></p>'
209
+ vv2 += vv
210
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
211
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
212
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
213
+ end
214
+
215
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
216
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
217
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
218
+ vv2 += '<div style="text-align: center;" align="center">'+text_bottom+'</div><br>'
219
+
220
+ hidden_text = '<canvas width="0" height="0"><table width="165" style="width: 124pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"><tbody><tr height="22" style="height: 16.5pt;"><td width="165" height="22" style="width: 124pt; text-align: center; font-size: 8pt; vertical-align: bottom; white-space: nowrap;"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '
221
+ hidden_text2 = '<div id="ssp-bottom"></div></td></tr></tbody></table></canvas>'
222
+
223
+ if add_text_check
224
+ vv2 += '<div style="text-align: center;" align="center">'+hidden_text+add_text+hidden_text2+'</div><br>'
225
+ else
226
+ vv2 += '<div style="text-align: center;" align="center">'+add_text+'</div><br>'
227
+ end
228
+
229
+ Dir.mkdir('./data/'+product[0]['productId'].to_s)
230
+ File.open('./data/'+product[0]['productId'].to_s+'/'+product[0]['productId'].to_s+'.html', 'w') do |f|
231
+ f.write(vv2)
232
+ end
233
+
234
+
235
+ product.each do |dd|
236
+ begin
237
+ http_image = HTTP.get(dd['image'].to_s.split('212x212').join('500x500'))
238
+ rescue
239
+ puts '쿠팡 이미지 가저오는중 http error 10초후 재시도'
240
+ sleep(10)
241
+ retry
242
+ end
243
+ File.open('./data/'+product[0]['productId'].to_s+'/'+dd['productId'].to_s+'.jpg', 'wb') do |f|
244
+ f.write(http_image.body)
245
+ end
246
+ end
247
+ end
248
+
249
+
250
+
251
+ def naver_get_item
252
+ answer = Hash.new
253
+ mem = Hash.new
254
+ mem['패션의류'] = '50000000'
255
+ mem['패션잡화'] = '50000001'
256
+ mem['화장품/미용'] = '50000002'
257
+ mem['디지털/가전'] = '50000003'
258
+ mem['가구/인테리어'] = '50000004'
259
+ mem['출산/육아'] = '50000005'
260
+ mem['식품'] = '50000006'
261
+ mem['스포츠/레저'] = '50000007'
262
+ mem['생활/건강'] = '50000008'
263
+ mem['여가/생활편의'] = '50000009'
264
+ mem['면세점'] = '50000010'
265
+ mem['도서'] = '50005542'
266
+ mem.each do |key,code|
267
+ sleep(1)
268
+ head = Hash.new
269
+ head[:authority] = 'datalab.naver.com'
270
+ head[:method] = 'POST'
271
+ head[:path] = '/shoppingInsight/getKeywordRank.naver?timeUnit=date&cid='+code.to_s
272
+ head[:scheme] = 'https'
273
+ head['accept'] = '*/*'
274
+ head['accept-encoding'] = 'gzip, deflate, br'
275
+ head['accept-language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
276
+ head['content-length'] = 0
277
+ head['origin'] = 'https://datalab.naver.com'
278
+ head['referer'] = 'https://datalab.naver.com/'
279
+ head['sec-ch-ua'] = '" Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"'
280
+ head['sec-ch-ua-mobile'] = '?0'
281
+ head['sec-ch-ua-platform'] = '"Windows"'
282
+ head['sec-fetch-dest'] = 'empty'
283
+ head['sec-fetch-mode'] = 'cors'
284
+ head['sec-fetch-site'] = 'same-origin'
285
+ head['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
286
+ head['x-requested-with'] = 'XMLHttpRequest'
287
+ begin
288
+ http = HTTP.headers(head).post('https://datalab.naver.com/shoppingInsight/getKeywordRank.naver?timeUnit=date&cid='+code.to_s)
289
+ rescue => exception
290
+ puts exception
291
+ puts 'http error 10초후 재시도'
292
+ sleep(10)
293
+ retry
294
+ end
295
+ data = JSON.parse(http.to_s)
296
+ keyword = Array.new
297
+ data[-1]['ranks'].each do |i|
298
+ keyword << i['keyword']
299
+ end
300
+ p keyword
301
+ answer[key] = keyword
302
+ end
303
+ puts answer
304
+ return answer
305
+ end
306
+
307
+ def naver_text(t)
308
+ text1 = Array.new
309
+ text2 = Array.new
310
+ text3 = ''
311
+ for page in 2..3
312
+ error = 0
313
+ counter = 0
314
+ begin
315
+ http = HTTP.get('https://search.naver.com/search.naver?display=15&f=&filetype=0&page='+page.to_s+'&query='+t.to_s+'&research_url=&sm=tab_pge&start='+(1+(page-2)*15).to_s+'&where=web')
316
+ rescue
317
+ puts '네이버 문자열 수집중 http error 10초후 재시도 -> ('+counter.to_s+')'
318
+ sleep(10)
319
+ counter += 1
320
+ if counter > 3
321
+ retry
322
+ else
323
+ error = 1
324
+ puts '네이버 문자열 수집 http pass'
325
+ end
326
+ end
327
+ if error == 0
328
+ noko = Nokogiri::HTML(http.to_s)
329
+ for y in 1..15
330
+ begin
331
+ t = noko.xpath('//*[@id="web_'+y.to_s+'"]/div/div[3]/div/a/div').to_s.split('">')[1].split('</div>')[0].to_s
332
+ rescue
333
+ t = ''
334
+ end
335
+ if t != ''
336
+ t.split(' ').each do |i|
337
+ if i[-2..-1] == '요.' or i[-2..-1] == '다.'
338
+ text2 << i
339
+ else
340
+ text1 << i
341
+ end
342
+ end
343
+ end
344
+ end
345
+ end
346
+ end
347
+
348
+ for n in 0..100
349
+ text3 += text1.shuffle[0..5].join(' ')+text2.shuffle[0]
350
+ end
351
+
352
+ max_text = rand(900)+600
353
+ text3 = text3[0..max_text]
354
+ return text3
355
+ end
356
+
357
+ def login_check(user_id, user_pw)
358
+ json = Hash.new
359
+ json['url'] = '%2Fbbs%2FbuyListManager7.php'
360
+ json['mb_id'] = user_id.to_s
361
+ json['mb_password'] = user_pw.to_s
362
+ http = HTTP.post('http://marketingduo.co.kr/bbs/login_check.php', :form => json)
363
+ if http.to_s.length == 0
364
+ http = HTTP.get('http://marketingduo.co.kr/bbs/buyListManager7.php')
365
+ noko = Nokogiri::HTML(http.to_s)
366
+ c = noko.xpath('//*[@id="at-main"]/div/table/tbody').to_s.split('<tr>').length-1
367
+ for n in 1..c
368
+ tt = noko.xpath('//*[@id="at-main"]/div/table/tbody/tr['+n.to_s+']').to_s
369
+ if tt.include?(user_id.to_s) and tt.include?('오토팡 [워드프레스 자동 등록기]')
370
+ if noko.xpath('//*[@id="at-main"]/div/table/tbody/tr['+n.to_s+']/td[7]/label[1]/input').to_s.include?('checked')
371
+ if mac_check(user_id) == 1
372
+ return 1
373
+ else
374
+ return 44
375
+ end
376
+ else
377
+ return 22
378
+ end
379
+ end
380
+ end
381
+ else
382
+ return 33
383
+ end
384
+ end
385
+
386
+ def mac_check(userid)
387
+ json = Hash.new
388
+ json['mb_id'] = 'marketingduo'
389
+ json['mb_password'] = 'mhhs0201'
390
+
391
+ http = HTTP.post('http://marketingduo.co.kr/bbs/login_check.php', :form => json)
392
+ cookie = Hash.new
393
+ http.cookies.each do |i|
394
+ cookie[i.to_s.split('=')[0]] = i.to_s.split('=')[1]
395
+ end
396
+
397
+ http = HTTP.cookies(cookie).get('http://marketingduo.co.kr/bbs/board.php?bo_table=product&sca=&sfl=wr_subject&sop=and&stx='+userid)
398
+ noko = Nokogiri::HTML(http.to_s)
399
+ mac_history = Array.new
400
+ mac_url = Array.new
401
+ for n in 1..5
402
+ begin
403
+ url = noko.css('#fboardlist > div.list-board > ul > li:nth-child('+n.to_s+') > div.wr-subject > a').to_s.split('href="')[1].split('"')[0]
404
+ url = url.split('amp;').join('')
405
+ mac_url << url
406
+ rescue
407
+ break
408
+ end
409
+ end
410
+
411
+ mac_url.each do |i|
412
+ http = HTTP.cookies(cookie).get(i)
413
+ noko = Nokogiri::HTML(http.to_s)
414
+ title = noko.css('#at-main > div > section:nth-child(1) > article > div:nth-child(3) > div.view-content').to_s
415
+ title = title.split('>')[1].split('<')[0].split("\t").join('').split("\n").join('').split(' ').join('')
416
+ p title
417
+ mac_history << title
418
+ end
419
+
420
+ mac_address, stderr, status = Open3.capture3('getmac /v')
421
+ mac_address = mac_address.force_encoding('cp949').encode('utf-8').split('이더넷')[1]
422
+ mac_address = mac_address.split("\n").join('').split(' ').join
423
+ puts mac_address
424
+ if mac_history.length >= 5
425
+ puts '최대 5대 기기 사용가능 로그인실패'
426
+ return 3
427
+ else
428
+ if mac_history.include?(mac_address)
429
+ puts '등록 맥주소 확인 완료'
430
+ return 1
431
+ else
432
+ puts '신규 기기 등록'
433
+ http = HTTP.cookies(cookie).post('http://marketingduo.co.kr/bbs/write_token.php', :form => {'bo_table' => 'product'})
434
+ token = http.to_s.split('token":"')[1].split('"')[0]
435
+ year = Time.now.to_s.split(' ')[0].split('-').join('')
436
+ year2 = Time.now.to_s.split(' ')[1].split(':').join('')
437
+ uid = year+year2
438
+ puts uid
439
+ json = {'token' => token, 'uid' => uid, 'bo_table' => 'product', 'wr_id' => '0', 'wr_subject' => userid, 'wr_content' => mac_address}
440
+ http = HTTP.cookies(cookie).post('http://marketingduo.co.kr/bbs/write_update.php', :form => json)
441
+ return 1
442
+ end
443
+ end
444
+ end
445
+
446
+ include Glimmer
447
+ attr_accessor :user_id, :user_password
448
+ def launch
449
+ @proxy_check = false
450
+ @tedering_check = false
451
+ @update_type = 1
452
+ @update_keyword = Hash.new
453
+ @blog_data = [[false, '0', '0', '0', '0', '0']]
454
+ @keyword_setting1 = false
455
+ @title_file = []
456
+ @title_setting1 = false
457
+ @change_text_setting1 = false
458
+ @change_text_setting2 = false
459
+ @change_memory1 = Hash.new
460
+ @change_memory2 = Hash.new
461
+ @change_memory3 = Hash.new
462
+ @text_top = ''
463
+ @point_change_text1 = false
464
+ @point_change_text2 = false
465
+ @point_product_name1 = false
466
+ @point_product_name2 = false
467
+ @text_bottom = ''
468
+ @add_text_setting1 = false
469
+ @add_text_setting2 = false
470
+ @user_keyword = Array.new
471
+ @where_search = 'goldbox'
472
+ @proxy_list = Array.new
473
+ @change_text_setting3 = false
474
+ @user_login_ok = 0
475
+ @code_text = Array.new
476
+
477
+
478
+ window('Contacts', 1000, 450) {
479
+ margined true
480
+ vertical_box {
481
+ horizontal_box {
482
+ stretchy false
483
+ form {
484
+ @user_id = entry{
485
+ label 'ID'
486
+ text
487
+ }
488
+
489
+ @user_password = password_entry{
490
+ label 'PW'
491
+ text
492
+ }
493
+ }
494
+
495
+ button('로그인') {
496
+ on_clicked {
497
+ @user_login_ok = login_check(@user_id.text.to_s, @user_password.text.to_s)
498
+ if @user_login_ok == 1
499
+ msg_box('로그인 성공')
500
+ elsif @user_login_ok == 33
501
+ msg_box('로그인 실패')
502
+ elsif @user_login_ok == 22
503
+ msg_box('권한 없음')
504
+ elsif @user_login_ok == 44
505
+ msg_box('등록 기기 초과')
506
+ else
507
+ msg_box('실패')
508
+ end
509
+ }
510
+ }
511
+
512
+ button('세팅저장') {
513
+ on_clicked {
514
+ begin
515
+ dd = Hash.new
516
+ dd['프록시'] = @proxy_check2.checked?
517
+ dd['프록시아이피'] = @proxy_list
518
+ dd['테더링'] = @tedering.checked?
519
+ @blog_data.each_with_index do |i,index1|
520
+ i.each_with_index do |j,index2|
521
+ if j.class == String
522
+ begin
523
+ @blog_data[index1][index2] = j.to_s.force_encoding('utf-8')
524
+ rescue
525
+ puts j
526
+ end
527
+ end
528
+ end
529
+ end
530
+ dd['쿠팡아이디'] = @coupang_id.text.to_s
531
+ dd['쿠팡비번'] = @coupang_password.text.to_s
532
+ dd['포스팅딜레이'] = @post_delay.text.to_s
533
+ dd['포스팅수량'] = @post_counter.text.to_s
534
+ dd['포스팅갯수1'] = @counter_start.text.to_s
535
+ dd['포스닝갯수2'] = @counter_end.text.to_s
536
+ dd['포스팅타입1'] = @update_type
537
+ dd['포스팅키워드1'] = @update_keyword
538
+ dd['포스팅추천상품'] = @where_search
539
+ dd['원하는상품키워드'] = @user_keyword
540
+ dd['제목파일'] = @title_file
541
+ dd['제목사용한키워드'] = @keyword_setting1
542
+ dd['사용한상품명'] = @title_setting1
543
+ dd['제목치환단어사용'] = @change_text_setting1
544
+ dd['제목치환파일'] = @change_memory1
545
+ dd['내용상단'] = @text_top
546
+ dd['내용친환단어사용'] = @change_text_setting2
547
+ dd['내용치환파일'] = @change_memory2
548
+ dd['내용특정단어키워드'] = @point_change_text1
549
+ dd['내용특정단어키워드값'] = @point_keyword1.text.to_s
550
+ dd['내용특정단어상품명'] = @point_product_name1
551
+ dd['내용특정단어상품명값'] = @point_keyword2.text.to_s
552
+ dd['링크우회'] = @url_change_setting
553
+ dd['@text_bottom'] = @text_bottom
554
+ dd['@change_text_setting3'] = @change_text_setting3
555
+ dd['@change_memory3'] = @change_memory3
556
+ dd['@point_change_text2'] = @point_change_text2
557
+ dd['@point_keyword11'] = @point_keyword11.text.to_s
558
+ dd['@point_product_name2'] = @point_product_name2
559
+ dd['@point_keyword22'] = @point_keyword22.text.to_s
560
+ dd['@add_text_setting1'] = @add_text_setting1
561
+ dd['@add_text_setting2'] = @add_text_setting2
562
+ dd['@tag_setting'] = @tag_setting
563
+ f = save_file
564
+ dd.each do |key,v|
565
+ if v.class == String
566
+ dd[key] = v.force_encoding('utf-8')
567
+ end
568
+ end
569
+ puts dd
570
+ File.open(f, 'w') do |ff|
571
+ ff.write(dd.to_json)
572
+ end
573
+ rescue
574
+
575
+ end
576
+ }
577
+ }
578
+
579
+ button('세팅로드') {
580
+ on_clicked {
581
+ begin
582
+ f = open_file
583
+ ff = File.open(f,'r').read
584
+ json = JSON.parse(ff)
585
+ @proxy_check2.checked = json['프록시']
586
+ @proxy_check = json['프록시']
587
+ @proxy_list = json['프록시아이피']
588
+ @tedering.checked = json['테더링']
589
+ @coupang_id.text = json['쿠팡아이디']
590
+ @coupang_password.text = json['쿠팡비번']
591
+ @post_delay.text = json['포스팅딜레이']
592
+ @post_counter.text = json['포스팅수량']
593
+ @counter_start.text = json['포스팅갯수1']
594
+ @counter_end.text = json['포스닝갯수2']
595
+ @update_type = json['포스팅타입1']
596
+ @update_keyword = json['포스팅키워드1']
597
+ @update_keyword.each do |key,v|
598
+ @kk1.checked = true if key == '패션의류'
599
+ @kk2.checked = true if key == '패션잡화'
600
+ @kk3.checked = true if key == '화장품/미용'
601
+ @kk4.checked = true if key == '디지털/가전'
602
+ @kk5.checked = true if key == '출산/육아'
603
+ @kk6.checked = true if key == '식품'
604
+ @kk7.checked = true if key == '스포츠/레저'
605
+ @kk8.checked = true if key == '역사/생활편의'
606
+ @kk9.checked = true if key == '면세점'
607
+ @kk10.checked = true if key == '도서'
608
+ @kk11.checked = true if key == '랜덤'
609
+ end
610
+
611
+ if @update_type == 1
612
+ @update1.checked = true
613
+ elsif @update_type == 2
614
+ @update2.checked = true
615
+ elsif @update_type == 3
616
+ @update3.checked = true
617
+ end
618
+
619
+ @where_search = json['포스팅추천상품']
620
+ if @update_type == 2
621
+ i22 = @where_search
622
+ @ss1.checked = true if i22 == 'goldbox'
623
+ @ss2.checked = true if i22 == 'rocket-fresh'
624
+ @ss3.checked = true if i22 == 'most-discounted'
625
+ @ss4.checked = true if i22 == 'most-sold'
626
+ @ss5.checked = true if i22 == 'random'
627
+ end
628
+
629
+ @user_keyword = json['원하는상품키워드']
630
+ @title_file = json['제목파일']
631
+ @keyword_setting1 = json['제목사용한키워드']
632
+ @title_keyword.checked = true if @keyword_setting1
633
+ @title_setting1 = json['사용한상품명']
634
+ @title_product_name.checked = true if @title_setting1
635
+ @change_text_setting1 = json['제목치환단어사용']
636
+ @title_change_text.checked = true if @change_text_setting1
637
+ @change_memory1 = json['제목치환파일']
638
+ @text_top = json['내용상단']
639
+ @change_text_setting2 = json['내용친환단어사용']
640
+ @tt1.checked = @change_text_setting2
641
+ @change_memory2 = json['내용치환파일']
642
+ @point_change_text1 = json['내용특정단어키워드']
643
+ @tt2.checked = true if @point_change_text1
644
+ @point_keyword1.text = json['내용특정단어키워드값']
645
+ @point_product_name1 = json['내용특정단어상품명']
646
+ @tt3.checked = @point_product_name1
647
+ @point_keyword2.text = json['내용특정단어상품명값']
648
+ @url_change_setting = json['링크우회']
649
+ @tt4.checked = @url_change_setting
650
+ @text_bottom = json['@text_bottom']
651
+ @change_text_setting3 = json['@change_text_setting3']
652
+ @tt5.checked = @change_text_setting3
653
+ @change_memory3 = json['@change_memory3']
654
+ @point_change_text2 = json['@point_change_text2']
655
+ @tt6.checked = @point_change_text2
656
+ @point_keyword11.text = json['@point_keyword11']
657
+ @point_product_name2 = json['@point_product_name2']
658
+ @tt7.checked = json['@point_product_name2']
659
+ @point_keyword22.text = json['@point_keyword22']
660
+ @add_text_setting1 = json['@add_text_setting1']
661
+ @tt8.checked = @add_text_setting1
662
+ @add_text_setting2 = json['@add_text_setting2']
663
+ @tt9.checked = @add_text_setting2
664
+ @tag_setting = json['@tag_setting']
665
+ @tt10.checked = @tag_setting
666
+ rescue
667
+
668
+ end
669
+ }
670
+ }
671
+ }
672
+
673
+ tab {
674
+ tab_item('실행설정'){
675
+ vertical_box {
676
+ grid{
677
+ stretchy false
678
+ @coupang_id = entry{
679
+ top 0
680
+ left 0
681
+ text '쿠팡 파트너스 ID(이메일) 입력'
682
+ }
683
+
684
+ @coupang_password = entry{
685
+ top 0
686
+ left 1
687
+ text 'PW 입력'
688
+ }
689
+ } #grid
690
+
691
+ @code_entry = non_wrapping_multiline_entry{
692
+ text 'init'
693
+ }
694
+
695
+ @blog_data.shift
696
+
697
+
698
+ horizontal_box {
699
+ stretchy false
700
+ @proxy_check2 = checkbox('프록시 사용'){
701
+ stretchy false
702
+ on_toggled do |c|
703
+ @proxy_check = c.checked?
704
+ end
705
+ }
706
+
707
+ button('IP 불러오기'){
708
+ stretchy false
709
+ on_clicked {
710
+ begin
711
+ file = open_file
712
+ if file != nil
713
+ file_data = File.open(file, 'r').read
714
+ file_data.split("\n").each do |i|
715
+ @proxy_list << i
716
+ end
717
+ end
718
+ rescue
719
+
720
+ end
721
+ }
722
+ }
723
+
724
+ @tedering = checkbox('테더링 사용'){
725
+ stretchy false
726
+ on_toggled do |c|
727
+
728
+ end
729
+ }
730
+
731
+ label('포스팅 딜레이'){
732
+ stretchy false
733
+ }
734
+
735
+ @post_delay = entry{
736
+ stretchy false
737
+ }
738
+
739
+ label('포스팅 수량'){
740
+ stretchy false
741
+ }
742
+
743
+ @post_counter = entry{
744
+ stretchy false
745
+ }
746
+
747
+ button('자동 홍보 시작'){
748
+ stretchy false
749
+ on_clicked do
750
+ if @user_login_ok == 1
751
+ @thread = Thread.new do
752
+ robot()
753
+ end
754
+ end
755
+ end
756
+ }
757
+
758
+ button('자동 홍보 정지'){
759
+ stretchy false
760
+ on_clicked do
761
+ stop()
762
+ end
763
+ }
764
+ }
765
+ }
766
+ }
767
+
768
+ tab_item('상품설정'){
769
+ vertical_box{
770
+ horizontal_box{
771
+ stretchy false
772
+ label('★ 한 포스팅에 등록할 상품 갯수'){
773
+ stretchy false
774
+ }
775
+ @counter_start = entry{
776
+ stretchy false
777
+ }
778
+
779
+ label(' ~ '){
780
+ stretchy false
781
+ }
782
+
783
+ @counter_end = entry{
784
+ stretchy false
785
+ }
786
+ label('※ 1~1 입력시 1개/ 2~2 입력시 2개/ 1~3 입력시 3개 이하 랜덤 적용'){
787
+ stretchy false
788
+ }
789
+ }
790
+
791
+ vertical_separator {
792
+ stretchy false
793
+ }
794
+
795
+ horizontal_box{
796
+ stretchy false
797
+ @update1 = checkbox(' 쇼핑 인기 검색어 사용 (복수 체크 가능)'){
798
+ stretchy false
799
+ on_toggled do |c|
800
+ check = c.checked?
801
+ if check == true
802
+ @update_type = 1
803
+ end
804
+ end
805
+ }
806
+ }
807
+
808
+ grid {
809
+ stretchy false
810
+ @kk1 = checkbox('패션의류'){
811
+ top 0
812
+ left 0
813
+ on_toggled do |c|
814
+ check = c.checked?
815
+ if check == true
816
+ @update_keyword['패션의류'] = 1
817
+ else
818
+ @update_keyword['패션의류'] = nil
819
+ end
820
+ end
821
+ }
822
+
823
+ @kk2 = checkbox('패션잡화'){
824
+ top 0
825
+ left 1
826
+ on_toggled do |c|
827
+ check = c.checked?
828
+ if check == true
829
+ @update_keyword['패션잡화'] = 1
830
+ else
831
+ @update_keyword['패션잡화'] = nil
832
+ end
833
+ end
834
+ }
835
+
836
+ @kk3 = checkbox('화장품/미용'){
837
+ top 0
838
+ left 2
839
+ on_toggled do |c|
840
+ check = c.checked?
841
+ if check == true
842
+ @update_keyword['화장품/미용'] = 1
843
+ else
844
+ @update_keyword['화장품/미용'] = nil
845
+ end
846
+ end
847
+ }
848
+
849
+ @kk4 = checkbox('디지털/가전'){
850
+ top 0
851
+ left 3
852
+ on_toggled do |c|
853
+ check = c.checked?
854
+ if check == true
855
+ @update_keyword['디지털/가전'] = 1
856
+ else
857
+ @update_keyword['디지털/가전'] = nil
858
+ end
859
+ end
860
+ }
861
+
862
+ @kk5 = checkbox('출산/육아'){
863
+ top 0
864
+ left 4
865
+ on_toggled do |c|
866
+ check = c.checked?
867
+ if check == true
868
+ @update_keyword['출산/육아'] = 1
869
+ else
870
+ @update_keyword['출산/육아'] = nil
871
+ end
872
+ end
873
+ }
874
+
875
+ @kk6 = checkbox('식품'){
876
+ top 0
877
+ left 5
878
+ on_toggled do |c|
879
+ check = c.checked?
880
+ if check == true
881
+ @update_keyword['식품'] = 1
882
+ else
883
+ @update_keyword['식품'] = nil
884
+ end
885
+ end
886
+ }
887
+
888
+ @kk7 = checkbox('스포츠/레저'){
889
+ top 0
890
+ left 6
891
+ on_toggled do |c|
892
+ check = c.checked?
893
+ if check == true
894
+ @update_keyword['스포츠/레저'] = 1
895
+ else
896
+ @update_keyword['스포츠/레저'] = nil
897
+ end
898
+ end
899
+ }
900
+
901
+ @kk8 = checkbox('역사/생활편의'){
902
+ top 1
903
+ left 0
904
+ on_toggled do |c|
905
+ check = c.checked?
906
+ if check == true
907
+ @update_keyword['역사/생활편의'] = 1
908
+ else
909
+ @update_keyword['역사/생활편의'] = nil
910
+ end
911
+ end
912
+ }
913
+
914
+ @kk9 = checkbox('면세점'){
915
+ top 1
916
+ left 1
917
+ on_toggled do |c|
918
+ check = c.checked?
919
+ if check == true
920
+ @update_keyword['면세점'] = 1
921
+ else
922
+ @update_keyword['면세점'] = nil
923
+ end
924
+ end
925
+ }
926
+
927
+ @kk10 = checkbox('도서'){
928
+ top 1
929
+ left 2
930
+ on_toggled do |c|
931
+ check = c.checked?
932
+ if check == true
933
+ @update_keyword['도서'] = 1
934
+ else
935
+ @update_keyword['도서'] = nil
936
+ end
937
+ end
938
+ }
939
+
940
+ @kk11 = checkbox('랜덤'){
941
+ top 1
942
+ left 3
943
+ on_toggled do |c|
944
+ check = c.checked?
945
+ if check == true
946
+ @update_keyword['랜덤'] = 1
947
+ else
948
+ @update_keyword['랜덤'] = nil
949
+ end
950
+ end
951
+ }
952
+ }
953
+
954
+ vertical_separator {
955
+ stretchy false
956
+ }
957
+
958
+ horizontal_box{
959
+ stretchy false
960
+ @update2 = checkbox(' 추천 상품 (복수 체크 가능)'){
961
+ stretchy false
962
+ on_toggled do |c|
963
+ check = c.checked?
964
+ if check == true
965
+ @update_type = 2
966
+ end
967
+ end
968
+ }
969
+ }
970
+
971
+ grid{
972
+ stretchy false
973
+ @ss1 = checkbox('골드박스'){
974
+ top 0
975
+ left 0
976
+ on_toggled do |c|
977
+ if c.checked?
978
+ @where_search = 'goldbox'
979
+ end
980
+ end
981
+ }
982
+
983
+ @ss2 = checkbox('로켓프레시'){
984
+ top 0
985
+ left 1
986
+ on_toggled do |c|
987
+ if c.checked?
988
+ @where_search = 'rocket-fresh'
989
+ end
990
+ end
991
+ }
992
+
993
+ @ss3 = checkbox('할인율 높은 상품'){
994
+ top 0
995
+ left 2
996
+ on_toggled do |c|
997
+ if c.checked?
998
+ @where_search = 'most-discounted'
999
+ end
1000
+ end
1001
+ }
1002
+
1003
+ @ss4 = checkbox('최근 많이 팔린 상품'){
1004
+ top 0
1005
+ left 3
1006
+ on_toggled do |c|
1007
+ if c.checked?
1008
+ @where_search = 'most-sold'
1009
+ end
1010
+ end
1011
+ }
1012
+
1013
+ @ss5 = checkbox('랜덤'){
1014
+ top 0
1015
+ left 4
1016
+ on_toggled do |c|
1017
+ if c.checked?
1018
+ @where_search = 'random'
1019
+ end
1020
+ end
1021
+ }
1022
+ }
1023
+ vertical_separator {
1024
+ stretchy false
1025
+
1026
+ }
1027
+
1028
+ horizontal_box{
1029
+ stretchy false
1030
+ @update3 = checkbox(' 원하는 상품 키워드 삽입'){
1031
+ stretchy false
1032
+ on_toggled do |c|
1033
+ check = c.checked?
1034
+ if check == true
1035
+ @update_type = 3
1036
+ end
1037
+ end
1038
+ }
1039
+ button('파일 불러오기'){
1040
+ stretchy false
1041
+ on_clicked do
1042
+ begin
1043
+ f2 = open_file
1044
+ if f2 != nil
1045
+ if @user_keyword == nil
1046
+ @user_keyword = Array.new
1047
+ end
1048
+ file_data = File.open(f2, 'r').read
1049
+ file_data.split("\n").each do |i|
1050
+ @user_keyword << i
1051
+ end
1052
+ end
1053
+ rescue
1054
+
1055
+ end
1056
+ end
1057
+ }
1058
+ }
1059
+
1060
+ vertical_separator {
1061
+ stretchy false
1062
+ }
1063
+
1064
+ horizontal_box{
1065
+ stretchy false
1066
+
1067
+ #checkbox('이미지 형식'){
1068
+ # stretchy false
1069
+ #}
1070
+
1071
+ #checkbox('링크 이미지 형식'){
1072
+ # stretchy false
1073
+ #}
1074
+
1075
+ }
1076
+ }
1077
+ }
1078
+
1079
+ tab_item('내용설정'){
1080
+ vertical_box{
1081
+ horizontal_box{
1082
+ stretchy false
1083
+ label('★ 제목에 설정'){
1084
+ stretchy false
1085
+ }
1086
+
1087
+ button('제목 파일 불러오기'){
1088
+ stretchy false
1089
+ on_clicked do
1090
+ begin
1091
+ f2 = open_file
1092
+ if f2 != nil
1093
+ file_data = File.open(f2, 'r').read
1094
+ @title_file = file_data.split("\n")
1095
+ puts @title_file
1096
+ end
1097
+ rescue
1098
+
1099
+ end
1100
+ end
1101
+ }
1102
+
1103
+ @title_keyword = checkbox('사용한 키워드 넣기'){
1104
+ stretchy false
1105
+ on_toggled do |c|
1106
+ @keyword_setting1 = c.checked?
1107
+ end
1108
+ }
1109
+
1110
+ @title_product_name = checkbox('사용한 상품명 넣기'){
1111
+ stretchy false
1112
+ on_toggled do |c|
1113
+ @title_setting1 = c.checked?
1114
+ end
1115
+ }
1116
+
1117
+ @title_change_text = checkbox('치환 단어 사용'){
1118
+ stretchy false
1119
+ on_toggled do |c|
1120
+ @change_text_setting1 = c.checked?
1121
+ end
1122
+ }
1123
+
1124
+ button('치환 파일 불러오기'){
1125
+ stretchy false
1126
+ on_clicked do
1127
+ begin
1128
+ f2 = open_file
1129
+ if f2 != nil
1130
+ file_data = File.open(f2, 'r').read
1131
+ file_data.split("\n").each do |i|
1132
+ @change_memory1[i.split('>')[0]] = i.split('>')[1].split(',')
1133
+ puts @change_memory1
1134
+ end
1135
+ end
1136
+ rescue
1137
+
1138
+ end
1139
+ end
1140
+ }
1141
+
1142
+
1143
+ }
1144
+
1145
+ vertical_separator {
1146
+ stretchy false
1147
+ }
1148
+
1149
+ grid{
1150
+ stretchy false
1151
+
1152
+ label('★ 내용 상단 설정'){
1153
+ top 0
1154
+ left 0
1155
+ }
1156
+
1157
+ button('내용 파일 불러오기'){
1158
+ top 0
1159
+ left 1
1160
+ on_clicked do
1161
+ f2 = open_file
1162
+ if f2 != nil
1163
+ file_data = File.open(f2, 'r').read
1164
+ @text_top = file_data.to_s
1165
+ end
1166
+ end
1167
+ }
1168
+
1169
+ @tt1 = checkbox('치환(변경)단어 적용'){
1170
+ top 0
1171
+ left 2
1172
+ on_toggled do |c|
1173
+ @change_text_setting2 = c.checked?
1174
+ end
1175
+ }
1176
+
1177
+ button('치환 파일 불러오기'){
1178
+ top 0
1179
+ left 3
1180
+ on_clicked do
1181
+ begin
1182
+ f2 = open_file
1183
+ if f2 != nil
1184
+ @change_memory2 = Hash.new
1185
+ file_data = File.open(f2, 'r').read
1186
+ file_data.split("\n").each do |i|
1187
+ @change_memory2[i.split('>')[0]] = i.split('>')[1].split(',')
1188
+ puts @change_memory2
1189
+ end
1190
+ end
1191
+ rescue
1192
+
1193
+ end
1194
+ end
1195
+ }
1196
+
1197
+ @tt2 = checkbox('특정단어에 사용한 키워드로 변경'){
1198
+ top 1
1199
+ left 0
1200
+ on_toggled do |c|
1201
+ @point_change_text1 = c.checked?
1202
+ end
1203
+ }
1204
+
1205
+ @point_keyword1 = entry{
1206
+ top 1
1207
+ left 1
1208
+ }
1209
+
1210
+ @tt3 = checkbox('특정단어에 사용한 상품명으로 변경'){
1211
+ top 1
1212
+ left 2
1213
+ on_toggled do |c|
1214
+ @point_product_name1 = c.checked?
1215
+ end
1216
+ }
1217
+
1218
+ @point_keyword2 = entry{
1219
+ top 1
1220
+ left 3
1221
+ }
1222
+ }
1223
+
1224
+ vertical_separator {
1225
+ stretchy false
1226
+ }
1227
+
1228
+ horizontal_box{
1229
+ stretchy false
1230
+ label('★ 내용 중앙 쿠팡 광고 삽입 부분'){
1231
+ stretchy false
1232
+ }
1233
+
1234
+ @tt4 = checkbox(' 쿠팡파트너스 링크우회/단축도메인 사용'){
1235
+ stretchy false
1236
+ on_toggled do |c|
1237
+ @url_change_setting = c.checked?
1238
+ end
1239
+ }
1240
+ }
1241
+
1242
+ vertical_separator {
1243
+ stretchy false
1244
+ }
1245
+
1246
+ grid{
1247
+ stretchy false
1248
+
1249
+ label('★ 내용 하단 설정'){
1250
+ top 0
1251
+ left 0
1252
+ }
1253
+
1254
+ button('내용 파일 불러오기'){
1255
+ top 0
1256
+ left 1
1257
+ on_clicked do
1258
+ begin
1259
+ f2 = open_file
1260
+ if f2 != nil
1261
+ file_data = File.open(f2, 'r').read
1262
+ @text_bottom = file_data.to_s
1263
+ end
1264
+ rescue
1265
+
1266
+ end
1267
+ end
1268
+ }
1269
+
1270
+ @tt5 = checkbox('치환(변경)단어 적용'){
1271
+ top 0
1272
+ left 2
1273
+ on_toggled do |c|
1274
+ @change_text_setting3 = c.checked?
1275
+ end
1276
+ }
1277
+
1278
+ button('치환 파일 불러오기'){
1279
+ top 0
1280
+ left 3
1281
+ on_clicked do
1282
+ begin
1283
+ f2 = open_file
1284
+ if f2 != nil
1285
+ @chnage_memory3 = Hash.new
1286
+ file_data = File.open(f2, 'r').read
1287
+ file_data.split("\n").each do |i|
1288
+ @change_memory3[i.split('>')[0]] = i.split('>')[1].split(',')
1289
+ end
1290
+ end
1291
+ puts @change_memory3
1292
+ rescue
1293
+
1294
+ end
1295
+ end
1296
+ }
1297
+
1298
+ @tt6 = checkbox('특정단어에 사용한 키워드로 변경'){
1299
+ top 1
1300
+ left 0
1301
+ on_toggled do |c|
1302
+ @point_change_text2 = c.checked?
1303
+ end
1304
+ }
1305
+
1306
+ @point_keyword11 = entry{
1307
+ top 1
1308
+ left 1
1309
+ }
1310
+
1311
+ @tt7 = checkbox('특정단어에 사용한 상품명으로 변경'){
1312
+ top 1
1313
+ left 2
1314
+ on_toggled do |c|
1315
+ @point_product_name2 = c.checked?
1316
+ end
1317
+ }
1318
+
1319
+ @point_keyword22 = entry{
1320
+ top 1
1321
+ left 3
1322
+ }
1323
+ }
1324
+
1325
+ vertical_separator {
1326
+ stretchy false
1327
+ }
1328
+
1329
+ horizontal_box{
1330
+ stretchy false
1331
+ label('★ 내용 하단 추가 설정'){
1332
+ stretchy false
1333
+ }
1334
+
1335
+ @tt8 = checkbox('자동원고 덧붙임 ('){
1336
+ stretchy false
1337
+ on_toggled do |c|
1338
+ @add_text_setting1 = c.checked?
1339
+ end
1340
+ }
1341
+
1342
+ @tt9 = checkbox('자동원고 안보이게 히든 적용)'){
1343
+ stretchy false
1344
+ on_toggled do |c|
1345
+ @add_text_setting2 = c.checked?
1346
+ end
1347
+ }
1348
+ }
1349
+
1350
+ vertical_separator {
1351
+ stretchy false
1352
+ }
1353
+
1354
+ horizontal_box{
1355
+ stretchy false
1356
+ label('★ 마무리 설정'){
1357
+ stretchy false
1358
+ }
1359
+
1360
+ @tt10 = checkbox('태그 자동 입력'){
1361
+ stretchy false
1362
+ on_toggled do |c|
1363
+ @tag_setting = c.checked?
1364
+ end
1365
+ }
1366
+
1367
+ #combobox{
1368
+ # stretchy false
1369
+ # items('전체공개', '이웃공개', '서로이웃공개' , '비공개')
1370
+ # selected(0)
1371
+ # on_selected do |c|
1372
+ # @open_option = c.selected
1373
+ # end
1374
+ #}
1375
+ }
1376
+ }
1377
+ }
1378
+ }
1379
+ }
1380
+ }.show
1381
+ end
1382
+ end
1383
+
1384
+ class Coupang
1385
+ def initialize
1386
+ @start_chrome = Thread.new do
1387
+ begin
1388
+ system('"'+"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"+'"'+" https://naver.com/ --remote-debugging-port=9222 --user-data-dir=C:/ChromeTEMP")
1389
+ system('"'+"C:/Program Files/Google/Chrome/Application/chrome.exe"+'"'+" https://naver.com/ --remote-debugging-port=9222 --user-data-dir=C:/ChromeTEMP")
1390
+ rescue => exception
1391
+ puts exception
1392
+ end
1393
+ end
1394
+ sleep(3)
1395
+ Selenium::WebDriver::Chrome.driver_path = './chromedriver.exe'
1396
+ options = Selenium::WebDriver::Chrome::Options.new
1397
+ options.add_option("debuggerAddress", "127.0.0.1:9222")
1398
+ @driver = Selenium::WebDriver.for :chrome, options: options
1399
+ @driver.manage.window.maximize
1400
+ @wait = Selenium::WebDriver::Wait.new(:timeout => 5)
1401
+ end
1402
+
1403
+ def login(user_id,user_pw)
1404
+ @driver.get('https://partners.coupang.com/')
1405
+ begin
1406
+ sleep(3)
1407
+ element = @wait.until { @driver.find_element(:xpath, '//*[@id="app-header"]/div[2]/div/button[1]') }
1408
+ element.click
1409
+
1410
+ e = @wait.until { @driver.find_element(:xpath, '//*[@id="login-email-input"]') }
1411
+ e.send_keys(user_id)
1412
+ @driver.find_element(:xpath, '//*[@id="login-password-input"]').send_keys(user_pw)
1413
+ sleep(1)
1414
+ #@driver.find_element(:xpath, '/html/body/div[1]/div/div/form/div[4]/label/span').click
1415
+ #sleep(1)
1416
+ @driver.find_element(:xpath, '/html/body/div[1]/div/div/form/div[5]/button').click
1417
+ sleep(5)
1418
+
1419
+ rescue => exception
1420
+ puts exception
1421
+ puts 'logined'
1422
+ end
1423
+ sleep(2)
1424
+ @cookie = Hash.new
1425
+ @driver.manage.all_cookies.each do |cookie|
1426
+ @cookie[cookie[:name]] = cookie[:value]
1427
+ end
1428
+ puts @cookie
1429
+ sleep(2)
1430
+ @driver.close
1431
+ end
1432
+
1433
+ def get_product_data(name)
1434
+ json = {
1435
+ 'page' => {
1436
+ 'pageNumber' => 0,
1437
+ 'size' => 36
1438
+ },
1439
+ 'deliveryTypes' => [],
1440
+ 'filter' => name
1441
+ }
1442
+
1443
+ http = HTTP.cookies(@cookie).post('https://partners.coupang.com/api/v1/search', :json => json)
1444
+ data = JSON.parse(http.to_s)['data']['products']
1445
+ puts data
1446
+ return data
1447
+ end
1448
+
1449
+ def get_product_data2(where)
1450
+ http = HTTP.cookies(@cookie).get('https://partners.coupang.com/api/v1/discovery/'+where+'?limit=20')
1451
+ data = JSON.parse(http.to_s)['data']['products']
1452
+ puts data
1453
+ return data
1454
+ end
1455
+
1456
+ def get_product_url(product_data)
1457
+ json = {
1458
+ 'product' => {
1459
+ 'deliveryBadgeImage' => product_data['deliveryBadgeImage'],
1460
+ 'discountRate' => nil,
1461
+ 'image' => product_data['image'],
1462
+ 'itemId' => product_data['itemId'],
1463
+ 'originPrice' => product_data['originPrice'],
1464
+ 'productId' => product_data['productId'],
1465
+ 'salesPrice' => product_data['salesPrice'],
1466
+ 'title' => product_data['title'],
1467
+ 'type' => product_data['type'],
1468
+ 'vendorItemId' => product_data['vendorItemId']
1469
+ }
1470
+ }
1471
+ begin
1472
+ http = http = HTTP.headers('x-token' => @cookie['AFATK']).cookies(@cookie).post('https://partners.coupang.com/api/v1/banner/iframe/url', :json => json)
1473
+ json = JSON.parse(http.to_s)
1474
+ puts json
1475
+ url = json['data']['shortUrl']
1476
+ rescue => exception
1477
+ puts exception
1478
+ puts '10초후 재시도 http error...'
1479
+ sleep(10)
1480
+ retry
1481
+ end
1482
+ puts url
1483
+ return url
1484
+ end
1485
+ end
1486
+
1487
+
1488
+ class WordLib
1489
+ def initialize(user_id, user_pw, url)
1490
+ @url = url
1491
+ @form2 = {'log' => user_id,
1492
+ 'pwd' => user_pw,
1493
+ 'wp-submit' => '로그인',
1494
+ 'redirect_to' => url+'/wp-admin/',
1495
+ 'testcookie' => 1}
1496
+
1497
+ @header_value = {
1498
+ 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
1499
+ 'Accept-Encoding' => 'gzip, deflate',
1500
+ 'Accept-Language' => 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7',
1501
+ 'Cache-Control' => 'max-age=0',
1502
+ 'Connection' => 'keep-alive',
1503
+ 'Content-Type' => 'application/x-www-form-urlencoded',
1504
+ 'Host' => url.split('//')[1],
1505
+ 'Origin' => url,
1506
+ 'Referer' => url+'/wp-login.php?loggedout=true&wp_lang=ko_KR',
1507
+ 'Upgrade-Insecure-Requests' => 1,
1508
+ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
1509
+ }
1510
+
1511
+ http = HTTP.headers(@header_value).post(url+'/wp-login.php', :form => @form2)
1512
+ answer = Hash.new
1513
+ @cookie2 = ''
1514
+ http.cookies.each do |v|
1515
+ @cookie2 += v.to_s.split('=')[0] + '=' + v.to_s.split('=')[1] +'; '
1516
+ answer[v.to_s.split('=')[0]] = v.to_s.split('=')[1]
1517
+ end
1518
+ puts answer
1519
+ @cookie = answer
1520
+ return answer
1521
+ end
1522
+
1523
+ def word_image_update(image_path, wpnonce, post_id, product_id)
1524
+ begin
1525
+ http_image = HTTP.get(image_path.to_s.split('212x212').join('500x500'))
1526
+ rescue
1527
+ puts '쿠팡 이미지 가저오는중 http error 10초후 재시도'
1528
+ sleep(10)
1529
+ retry
1530
+ end
1531
+ File.open('./image/'+product_id.to_s+'.jpg', 'wb') do |f|
1532
+ f.write(http_image.body)
1533
+ end
1534
+
1535
+ file_size = File.size('./image/'+product_id.to_s+'.jpg')
1536
+
1537
+ @h = Hash.new
1538
+ @h['Host'] = @url.split('//')[1]
1539
+ @h['Accept'] = '*/*'
1540
+ @h['Connection'] = 'keep-alive'
1541
+ @h['Accept-Encoding'] = 'gzip, deflate, br'
1542
+ @h['Accept-Language'] = 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
1543
+ @h['Content-Length'] = File.size('./image/'+product_id.to_s+'.jpg')+602
1544
+ @h['Content-Type'] = 'multipart/form-data; boundary=----WebKitFormBoundaryNbi1Vusy7cc25XJq'
1545
+ @h['Origin'] = @url
1546
+ @h['Referer'] = @url+'/wp-admin/post-new.php'
1547
+ @h['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
1548
+ puts @cookie2
1549
+ @h['Cookie'] = @cookie2
1550
+
1551
+
1552
+ image_json = {
1553
+ 'name' => product_id.to_s+'.jpg',
1554
+ 'action' => 'upload-attachment',
1555
+ '_wpnonce' => wpnonce,
1556
+ 'post_id' => post_id.to_i,
1557
+ 'async-upload' => File.new('./image/'+product_id.to_s+'.jpg')
1558
+ }
1559
+
1560
+ puts image_json
1561
+ puts @url.split('ttps://').join('ttp://')+'/wp-admin/async-upload.php'
1562
+ begin
1563
+ r = RestClient.post(@url.split('ttps://').join('ttp://')+'/wp-admin/async-upload.php', image_json ,headers=@h)
1564
+ rescue
1565
+ puts '워드프레스 이미지 올리는중 http error 10초후 재시도'
1566
+ sleep(10)
1567
+ retry
1568
+ end
1569
+ json = JSON.parse(r.body)
1570
+ return json['data']['url']
1571
+ end
1572
+
1573
+ def update(product, url_memory, title, text_top, text_bottom, add_text, add_text_check, category, tag_setting, search, url_change_check, proxy_check, proxy_ip)
1574
+ http = HTTP.cookies(@cookie).get(@url+'/wp-admin/post-new.php')
1575
+ http.cookies.each do |v|
1576
+ @cookie2 += v.to_s.split('=')[0] + '=' + v.to_s.split('=')[1] + '; '
1577
+ @cookie[v.to_s.split('=')[0]] = v.to_s.split('=')[1]
1578
+ end
1579
+ noko = Nokogiri::HTML(http.to_s)
1580
+ wpnonce2 = noko.to_s.split('_wpnonce":"')[1].split('"')[0]
1581
+ puts category
1582
+ cmm = Hash.new
1583
+ giri = noko.xpath('//*[@id="categorychecklist"]').to_s.split('<li')
1584
+ giri.shift
1585
+ giri.each do |kk|
1586
+ name = kk.split('in-category')[1].split('>')[1].split('<')[0].split(' ').join('').split('"').join('').force_encoding('utf-8')
1587
+ value = kk.split('value="')[1].split('"')[0]
1588
+ cmm[name] = value.to_i
1589
+ end
1590
+ puts cmm
1591
+
1592
+ if category == '새 카테고리 이름'
1593
+ category_value = 1
1594
+ else
1595
+ begin
1596
+ category_value = cmm[category.to_s.force_encoding('utf-8')].to_i
1597
+ rescue => exception
1598
+ puts exception
1599
+ category_value = 1
1600
+ end
1601
+ end
1602
+
1603
+
1604
+ vv2 = '<div style="text-align: center;" align="center">'+text_top+'</div><br>'
1605
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1606
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1607
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1608
+
1609
+ product.each do |dd|
1610
+ link_url = url_memory[dd['productId']]
1611
+ if url_change_check
1612
+ link_url = change_url(link_url)
1613
+ end
1614
+ vv = '<a href="'+link_url+'"><img class="aligncenter size-full wp-image-175" src="'+word_image_update(dd['image'], wpnonce2 , noko.xpath('//*[@id="post_ID"]').to_s.split('value="')[1].split('"')[0], dd['productId'])+'" alt="" width="410" height="410" /></a>'
1615
+ vv = vv+ '<div style="text-align: center;" align="center"><span style="font-size: 18pt;">'+dd['title']+'</span></div>'
1616
+ vv = vv+ '<div style="text-align: center;" align="center"><span style="font-size: 18pt; color: #ff4b4b;">'+dd['salesPrice'].to_s+' 원</span></div>'
1617
+ vv = vv+ '<div style="text-align: center;" align="center"><span style="font-size: 10pt;">무료배송</span></div>'
1618
+ vv = vv+ '<p style="font-size: 13pt; text-align: center;" align="center"><a style="text-align: center;" href="'+link_url+'"><span style="font-size: 18pt;">상품보기</span></a></p>'
1619
+ vv2 += vv
1620
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1621
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1622
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1623
+ end
1624
+
1625
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1626
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1627
+ vv2 += '<div style="text-align: center;" align="center"> </div><br>'
1628
+ vv2 += '<div style="text-align: center;" align="center">'+text_bottom+'</div><br>'
1629
+
1630
+ hidden_text = '<canvas width="0" height="0"><table width="165" style="width: 124pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"><tbody><tr height="22" style="height: 16.5pt;"><td width="165" height="22" style="width: 124pt; text-align: center; font-size: 8pt; vertical-align: bottom; white-space: nowrap;"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '
1631
+ hidden_text2 = '<div id="ssp-bottom"></div></td></tr></tbody></table></canvas>'
1632
+
1633
+ if add_text_check
1634
+ vv2 += '<div style="text-align: center;" align="center">'+hidden_text+add_text+hidden_text2+'</div><br>'
1635
+ else
1636
+ vv2 += '<div style="text-align: center;" align="center">'+add_text+'</div><br>'
1637
+ end
1638
+
1639
+ time = Time.now.to_s.split(' ')[0]
1640
+ time2 = Time.now.to_s.split(' ')[1]
1641
+
1642
+ data2 = Hash.new
1643
+ data2['_wpnonce'] = noko.xpath('//*[@id="_wpnonce"]').to_s.split('value="')[1].split('"')[0]
1644
+ data2['_wp_http_referer'] = '/wp-admin/post.php?post='+noko.xpath('//*[@id="post_ID"]').to_s.split('value="')[1].split('"')[0]+'&action=edit'
1645
+ data2['user_ID'] = 1
1646
+ data2['action'] = 'editpost'
1647
+ data2['originalaction'] = 'editpost'
1648
+ data2['post_author'] = 1
1649
+ data2['post_type'] = 'post'
1650
+ data2['original_post_status'] = 'draft'
1651
+ data2['referredby'] = @url+'/wp-admin/edit.php'
1652
+ data2['post_ID'] = noko.xpath('//*[@id="post_ID"]').to_s.split('value="')[1].split('"')[0]
1653
+ data2['post_title'] = title
1654
+ data2['content'] = vv2
1655
+ data2['hidden_post_status'] = 'draft'
1656
+ data2['post_status'] = 'draft'
1657
+ data2['hidden_post_visibility'] = 'public'
1658
+ data2['visibility'] = 'public'
1659
+ data2['meta-box-order-nonce'] = noko.xpath('//*[@id="meta-box-order-nonce"]').to_s.split('value="')[1].split('"')[0]
1660
+ data2['closedpostboxesnonce'] = noko.xpath('//*[@id="closedpostboxesnonce"]').to_s.split('value="')[1].split('"')[0]
1661
+ data2['samplepermalinknonce'] = noko.xpath('//*[@id="samplepermalinknonce"]').to_s.split('value="')[1].split('"')[0]
1662
+ data2['_ajax_nonce-add-category'] = noko.xpath('//*[@id="_ajax_nonce-add-category"]').to_s.split('value="')[1].split('"')[0]
1663
+ data2['_ajax_nonce-add-meta'] = noko.xpath('//*[@id="_ajax_nonce-add-meta"]').to_s.split('value="')[1].split('"')[0]
1664
+ data2['mm'] = time.split('-')[1]
1665
+ data2['jj'] = time.split('-')[2]
1666
+ data2['aa'] = time.split('-')[0]
1667
+ data2['hh'] = time2.split('-')[0]
1668
+ data2['mn'] = time2.split('-')[1]
1669
+ data2['ss'] = time2.split('-')[2]
1670
+ data2['hidden_mm'] = data2['mm']
1671
+ data2['cur_mm'] = data2['mm']
1672
+ data2['hidden_jj'] = data2['jj']
1673
+ data2['cur_jj'] = data2['jj']
1674
+ data2['hidden_aa'] = data2['aa']
1675
+ data2['cur_aa'] = data2['aa']
1676
+ data2['hidden_hh'] = data2['hh']
1677
+ data2['cur_hh'] = data2['hh']
1678
+ data2['hidden_mn'] = data2['mn']
1679
+ data2['cur_mn'] = data2['mn']
1680
+ data2['original_publish'] = '공개'
1681
+ data2['publish'] = '공개'
1682
+ data2['post_format'] = 0
1683
+ data2['post_category[]'] = 0
1684
+ data2['post_category[]'] = category_value
1685
+ data2['newcategory'] = '새 카테고리 이름'
1686
+ data2['newcategory_parent'] = -1
1687
+ data2['_thumbnail_id'] = -1
1688
+ data2['advanced_view'] = 1
1689
+ data2['comment_status'] = 'open'
1690
+ data2['ping_status'] = 'open'
1691
+ data2['post_author_override'] = 1
1692
+ if tag_setting
1693
+ data2['tax_input[post_tag]'] = search
1694
+ end
1695
+
1696
+ puts data2
1697
+
1698
+ begin
1699
+ if proxy_check
1700
+ begin
1701
+ http = HTTP.via(proxy_ip.split(':')[0], proxy_ip.split(':')[1].to_i).cookies(@cookie).post(@url+'/wp-admin/post.php', :form => data2)
1702
+ rescue
1703
+ puts proxy_ip.to_s+' proxy error 프록시 없이 업로드'
1704
+ http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => data2)
1705
+ end
1706
+ else
1707
+ http = HTTP.cookies(@cookie).post(@url+'/wp-admin/post.php', :form => data2)
1708
+ end
1709
+ rescue
1710
+ puts '워드프레스 포스팅중 http error 10초후 재시도'
1711
+ sleep(10)
1712
+ retry
1713
+ end
1714
+ puts http.to_s
1715
+
1716
+ end
1717
+
1718
+ def change_url(url)
1719
+ begin
1720
+ http = HTTP.post('https://linkchanger-vfllz.run.goorm.io/action', :json => {'url' => url})
1721
+ rescue
1722
+ puts '링크체인저 http 일시적 error 10 초후 재시도'
1723
+ sleep(10)
1724
+ retry
1725
+ end
1726
+
1727
+ json = JSON.parse(http.to_s)
1728
+ return json['result']
1729
+ end
1730
+ end
1731
+
1732
+
1733
+ Soonje.new.launch