First Commmit
This commit is contained in:
commit
81cbc09238
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.DS_Store
|
||||
.idea/*
|
||||
*/.idea/*
|
||||
*/__pycache__/*
|
||||
268
TheChanges/dohl.py
Normal file
268
TheChanges/dohl.py
Normal file
@ -0,0 +1,268 @@
|
||||
import random,re
|
||||
|
||||
class 주역점치기:
|
||||
def __init__(self):
|
||||
self.sangaji = 50
|
||||
self.taegeuk = 1
|
||||
self.hyores = self.doit()
|
||||
self.byunhyo = self.checkbyunhyo()
|
||||
self.detail = self.interprete()
|
||||
|
||||
def 괘명(self,value):
|
||||
db = [{'name': '중천건(乾)', '上卦': '乾(天),☰', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '九五', '上九']},
|
||||
{'name': '택천쾌(夬)', '上卦': '兌(澤),☱', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '九五', '上六']},
|
||||
{'name': '화천대유(大有)', '上卦': '離(火),☲', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '六五', '上九']},
|
||||
{'name': '뢰천대장(大壯)', '上卦': '震(雷),☳', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '六五', '上六']},
|
||||
{'name': '풍천소축(小畜)', '上卦': '巽(風),☴', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '九五', '上九']},
|
||||
{'name': '수천수(需)', '上卦': '坎(水),☵', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '九五', '上六']},
|
||||
{'name': '산천대축(大畜)', '上卦': '艮(山),☶', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '六五', '上九']},
|
||||
{'name': '지천대(泰)', '上卦': '坤(地),☷', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '六五', '上六']},
|
||||
{'name': '천택리(履)', '上卦': '乾(天),☰', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '九五', '上九']},
|
||||
{'name': '중택태(兌)', '上卦': '兌(澤),☱', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '九五', '上六']},
|
||||
{'name': '화택규(睽)', '上卦': '離(火),☲', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '六五', '上九']},
|
||||
{'name': '뢰택귀매(歸妹)', '上卦': '震(雷),☳', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '六五', '上六']},
|
||||
{'name': '풍택중부(中孚)', '上卦': '巽(風),☴', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '九五', '上九']},
|
||||
{'name': '수택절(節)', '上卦': '坎(水),☵', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '九五', '上六']},
|
||||
{'name': '산택손(損)', '上卦': '艮(山),☶', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '六五', '上九']},
|
||||
{'name': '지택림(臨)', '上卦': '坤(地),☷', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '六五', '上六']},
|
||||
{'name': '천화동인(同人)', '上卦': '乾(天),☰', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '九五', '上九']},
|
||||
{'name': '택화혁(革)', '上卦': '兌(澤),☱', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '九五', '上六']},
|
||||
{'name': '중화리(離)', '上卦': '離(火),☲', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '六五', '上九']},
|
||||
{'name': '뢰화풍(豊)', '上卦': '震(雷),☳', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '六五', '上六']},
|
||||
{'name': '풍화가인(家人)', '上卦': '巽(風),☴', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '九五', '上九']},
|
||||
{'name': '수화기제(旣濟)', '上卦': '坎(水),☵', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '九五', '上六']},
|
||||
{'name': '산화비(賁)', '上卦': '艮(山),☶', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '六五', '上九']},
|
||||
{'name': '지화명이(明夷)', '上卦': '坤(地),☷', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '六五', '上六']},
|
||||
{'name': '천뢰무방(无妄)', '上卦': '乾(天),☰', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '九五', '上九']},
|
||||
{'name': '택뢰수(隨)', '上卦': '兌(澤),☱', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '九五', '上六']},
|
||||
{'name': '화뢰서합(噬嗑)', '上卦': '離(火),☲', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '六五', '上九']},
|
||||
{'name': '중뢰진(震)', '上卦': '震(雷),☳', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '六五', '上六']},
|
||||
{'name': '풍뢰익(益)', '上卦': '巽(風),☴', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '九五', '上九']},
|
||||
{'name': '수뢰준(屯)', '上卦': '坎(水),☵', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '九五', '上六']},
|
||||
{'name': '산뢰이(頤)', '上卦': '艮(山),☶', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '六五', '上九']},
|
||||
{'name': '지뢰복(復)', '上卦': '坤(地),☷', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '六五', '上六']},
|
||||
{'name': '천풍구(姤)', '上卦': '乾(天),☰', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '九五', '上九']},
|
||||
{'name': '택풍대과(大過)', '上卦': '兌(澤),☱', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '九五', '上六']},
|
||||
{'name': '화풍정(鼎)', '上卦': '離(火),☲', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '六五', '上九']},
|
||||
{'name': '뢰풍항(恒)', '上卦': '震(雷),☳', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '六五', '上六']},
|
||||
{'name': '중풍손(巽)', '上卦': '巽(風),☴', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '九五', '上九']},
|
||||
{'name': '수풍정(井)', '上卦': '坎(水),☵', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '九五', '上六']},
|
||||
{'name': '산풍고(蠱)', '上卦': '艮(山),☶', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '六五', '上九']},
|
||||
{'name': '지풍승(升)', '上卦': '坤(地),☷', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '六五', '上六']},
|
||||
{'name': '천수송(訟)', '上卦': '乾(天),☰', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '九五', '上九']},
|
||||
{'name': '택수곤(困)', '上卦': '兌(澤),☱', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '九五', '上六']},
|
||||
{'name': '화수미제(未濟)', '上卦': '離(火),☲', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '六五', '上九']},
|
||||
{'name': '뢰수해(解)', '上卦': '震(雷),☳', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '六五', '上六']},
|
||||
{'name': '풍수환(渙)', '上卦': '巽(風),☴', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '九五', '上九']},
|
||||
{'name': '중수감(坎)', '上卦': '坎(水),☵', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '九五', '上六']},
|
||||
{'name': '산수몽(蒙)', '上卦': '艮(山),☶', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '六五', '上九']},
|
||||
{'name': '지수사(師)', '上卦': '坤(地),☷', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '六五', '上六']},
|
||||
{'name': '천산둔(遯)', '上卦': '乾(天),☰', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '九五', '上九']},
|
||||
{'name': '택산함(咸)', '上卦': '兌(澤),☱', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '九五', '上六']},
|
||||
{'name': '화산려(旅)', '上卦': '離(火),☲', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '六五', '上九']},
|
||||
{'name': '뢰산소과(小過)', '上卦': '震(雷),☳', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '六五', '上六']},
|
||||
{'name': '풍산점(漸)', '上卦': '巽(風),☴', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '九五', '上九']},
|
||||
{'name': '수산건(蹇)', '上卦': '坎(水),☵', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '九五', '上六']},
|
||||
{'name': '중산간(艮)', '上卦': '艮(山),☶', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '六五', '上九']},
|
||||
{'name': '지산겸(謙)', '上卦': '坤(地),☷', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '六五', '上六']},
|
||||
{'name': '천지비(否)', '上卦': '乾(天),☰', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '九五', '上九']},
|
||||
{'name': '택지췌(萃)', '上卦': '兌(澤),☱', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '九五', '上六']},
|
||||
{'name': '화지진(晉)', '上卦': '離(火),☲', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '六五', '上九']},
|
||||
{'name': '뢰지예(豫)', '上卦': '震(雷),☳', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '六五', '上六']},
|
||||
{'name': '풍지관(觀)', '上卦': '巽(風),☴', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '九五', '上九']},
|
||||
{'name': '수지비(比)', '上卦': '坎(水),☵', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '九五', '上六']},
|
||||
{'name': '산지박(剝)', '上卦': '艮(山),☶', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '六五', '上九']},
|
||||
{'name': '중지곤(坤)', '上卦': '坤(地),☷', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '六五', '上六']}
|
||||
]
|
||||
for i in range(len(db)):
|
||||
if value == db[i]['value']:
|
||||
name = db[i]['name']
|
||||
上卦 = db[i]['上卦']
|
||||
下卦 = db[i]['下卦']
|
||||
res = {'name': name, '下卦': 下卦, '上卦': 上卦}
|
||||
return res
|
||||
|
||||
def explain(self):
|
||||
res = self.detail
|
||||
symbols = {'본괘':[],'지괘':[]}
|
||||
guoiname = {}
|
||||
for i in range(len(res)):
|
||||
symbols['본괘'].append(res[i]['symbol'])
|
||||
symbols['지괘'].append(res[i]['jigoui_symbol'])
|
||||
guoiname['본괘'] = self.괘명(symbols['본괘'])
|
||||
guoiname['지괘'] = self.괘명(symbols['지괘'])
|
||||
if guoiname['본괘'] == guoiname['지괘']:
|
||||
guoiname['지괘'] = ''
|
||||
if self.byunhyo == 0:
|
||||
guoiname['설명'] = guoiname['본괘']['name'] + "의 단사로 점의 답을 얻는다. 괘사뿐 아니라 단전, 대상을 모두 포함하여 판단한다."
|
||||
if self.byunhyo == 1:
|
||||
guoiname['설명'] = guoiname['본괘']['name'] + "의 변효의 효사를 해석한다."
|
||||
if self.byunhyo == 2:
|
||||
guoiname['설명'] = guoiname['본괘']['name'] + "의 두 변효의 효사를 해석한다. 위쪽 효사가 주동적 의미"
|
||||
if self.byunhyo == 3:
|
||||
guoiname['설명'] = guoiname['본괘']['name'] + "과 " + guoiname['지괘']['name'] + "의 괘사로 점을 판단한다."
|
||||
if self.byunhyo == 4:
|
||||
guoiname['본괘'] = ''
|
||||
guoiname['설명'] = guoiname['지괘']['name'] + "의 불변효의 괘사로 판단한다. 아랫쪽이 주동한다."
|
||||
if self.byunhyo == 5:
|
||||
guoiname['본괘'] = ''
|
||||
guoiname['설명'] = guoiname['지괘']['name'] + "의 불변호의 괘사로 판단한다."
|
||||
if self.byunhyo == 6:
|
||||
guoiname['본괘'] = ''
|
||||
guoiname['설명'] = guoiname['지괘']['name'] + "의 단사로 판단한다. 건괘 곤괘의 경우는 용구, 용육의 효사를 따름"
|
||||
return guoiname
|
||||
|
||||
def interprete(self):
|
||||
res = self.hyores
|
||||
if self.byunhyo == 0:
|
||||
for i in range(len(res)):
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
res[i]['hyosaCheck'] = ""
|
||||
if self.byunhyo == 1:
|
||||
for i in range(len(res)):
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
if res[i]['number'] in [6, 9]:
|
||||
res[i]['hyosaCheck'] = "主"
|
||||
else:
|
||||
res[i]['hyosaCheck'] = ""
|
||||
if self.byunhyo == 2:
|
||||
j = 0
|
||||
for i in range(len(res)):
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
if res[i]['number'] in [6, 9]:
|
||||
res[i]['hyosaCheck'] = "Y"
|
||||
j = j + 1
|
||||
if j == 2:
|
||||
res[i]['hyosaCheck'] = "主"
|
||||
else:
|
||||
res[i]['hyosaCheck'] = ""
|
||||
if self.byunhyo == 3:
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['jigoui_shape'] = 'xxxxxxx'
|
||||
res[i]['jigoui_symbol'] = re.sub("六$","九",res[i]['symbol'])
|
||||
elif res[i]['number'] == 9:
|
||||
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
|
||||
res[i]['jigoui_symbol'] = re.sub("九$","六",res[i]['symbol'])
|
||||
else:
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
res[i]['hyosaCheck'] = ""
|
||||
if self.byunhyo == 4:
|
||||
j = 0
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['jigoui_shape'] = 'xxxxxxx'
|
||||
res[i]['jigoui_symbol'] = re.sub("六$","九",res[i]['symbol'])
|
||||
res[i]['hyosaCheck'] = ""
|
||||
elif res[i]['number'] == 9:
|
||||
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
|
||||
res[i]['jigoui_symbol'] = re.sub("九$","六",res[i]['symbol'])
|
||||
res[i]['hyosaCheck'] = ""
|
||||
else:
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
res[i]['hyosaCheck'] = "Y"
|
||||
j = j + 1
|
||||
if j == 1 :
|
||||
res[i]['hyosaCheck'] = "主"
|
||||
if self.byunhyo == 5:
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['jigoui_shape'] = 'xxxxxxx'
|
||||
res[i]['jigoui_symbol'] = re.sub("六$","九",res[i]['symbol'])
|
||||
res[i]['hyosaCheck'] = ""
|
||||
elif res[i]['number'] == 9:
|
||||
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
|
||||
res[i]['jigoui_symbol'] = re.sub("九$","六",res[i]['symbol'])
|
||||
res[i]['hyosaCheck'] = ""
|
||||
else:
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
res[i]['hyosaCheck'] = "主"
|
||||
if self.byunhyo == 6:
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['jigoui_shape'] = 'xxxxxxx'
|
||||
res[i]['jigoui_symbol'] = re.sub("六$","九",res[i]['symbol'])
|
||||
elif res[i]['number'] == 9:
|
||||
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
|
||||
res[i]['jigoui_symbol'] = re.sub("九$","六",res[i]['symbol'])
|
||||
else:
|
||||
res[i]['jigoui_shape'] = res[i]['shape']
|
||||
res[i]['jigoui_symbol'] = res[i]['symbol']
|
||||
for i in range(len(res)):
|
||||
chg = {'初六':'初六','上六':'上六','初九':'初九','上九':'上九','二六':'六二','二九':'九二','三六':'六三','三九':'九三','四六':'六四','四九':'九四','五六':'六五','五九':'九五'}
|
||||
res[i]['symbol'] = chg[res[i]['symbol']]
|
||||
res[i]['jigoui_symbol'] = chg[res[i]['jigoui_symbol']]
|
||||
return res
|
||||
|
||||
def checkbyunhyo(self):
|
||||
res = 0
|
||||
for i in range(len(self.hyores)):
|
||||
if self.hyores[i]['number'] in [6,9]:
|
||||
res = res + 1
|
||||
return res
|
||||
|
||||
def doit(self):
|
||||
res = []
|
||||
prefix = ['初', '二', '三', '四', '五', '上']
|
||||
for i in range(6):
|
||||
res.append(self.decidehyo())
|
||||
res[i]['symbol'] = prefix[i] + res[i]['symbol']
|
||||
return res
|
||||
|
||||
def decidehyo(self):
|
||||
objList = self.sambyun()
|
||||
#number = (49 - (r1 + r2 + r3))//4
|
||||
db = [{'name':'소양','shape':'=======','number': 7,'symbol':'九','values': [[9, 4, 8], [9, 8, 4], [5, 8, 8]]},
|
||||
{'name':'소음','shape':'=== ===','number': 8,'symbol':'六','values': [[5, 4, 8], [5, 8, 4], [9, 4, 4]]},
|
||||
{'name':'노양','shape':'ㅁㅁㅁㅁㅁ','number': 9,'symbol':'九','values': [[5, 4, 4]]},
|
||||
{'name':'노음','shape':'xxx xxx','number': 6,'symbol':'六','values': [[9, 8, 8]]}]
|
||||
for i in range(len(db)):
|
||||
for j in range(len(db[i]['values'])):
|
||||
if objList == db[i]['values'][j]:
|
||||
hyoname = db[i]['name']
|
||||
shape = db[i]['shape']
|
||||
number = db[i]['number']
|
||||
symbol = db[i]['symbol']
|
||||
res = {'name': hyoname, 'shape': shape, 'number': number, 'symbol':symbol, 'remains': objList}
|
||||
return res
|
||||
|
||||
def sambyun(self):
|
||||
hyo = self.sangaji - self.taegeuk
|
||||
res = []
|
||||
for i in range(3):
|
||||
res.append(self.byun(hyo))
|
||||
hyo = hyo - res[i]
|
||||
return res
|
||||
|
||||
def byun(self,hyo):
|
||||
tmp = random.randrange(1, 6)
|
||||
randmin = (hyo // 2) - tmp
|
||||
randmax = (hyo // 2) + tmp
|
||||
left = random.randrange(randmin, randmax)
|
||||
right = hyo - left
|
||||
human = 1
|
||||
right = right - human
|
||||
left_tmp = left % 4
|
||||
if left_tmp == 0:
|
||||
left_tmp = 4
|
||||
human = human + left_tmp
|
||||
right_tmp = right % 4
|
||||
if right_tmp == 0:
|
||||
right_tmp = 4
|
||||
human = human + right_tmp
|
||||
return human
|
||||
|
||||
|
||||
주역점치기 = 주역점치기()
|
||||
if __name__ == '__main__':
|
||||
res = 주역점치기.detail
|
||||
for i in reversed(res):
|
||||
print(i)
|
||||
rres = 주역점치기.explain()
|
||||
print(rres)
|
||||
113
TheChanges/main.py
Normal file
113
TheChanges/main.py
Normal file
@ -0,0 +1,113 @@
|
||||
import random
|
||||
|
||||
def byun(hyo):
|
||||
randmin = (hyo//2) - 10
|
||||
randmax = (hyo//2) + 10
|
||||
left = random.randrange(randmin, randmax)
|
||||
right = hyo - left
|
||||
human = 1
|
||||
right = right - human
|
||||
left_tmp = left % 4
|
||||
if left_tmp == 0:
|
||||
left_tmp = 4
|
||||
human = human + left_tmp
|
||||
right_tmp = right % 4
|
||||
if right_tmp == 0:
|
||||
right_tmp = 4
|
||||
human = human + right_tmp
|
||||
return human
|
||||
|
||||
def decidehyo(r1,r2,r3):
|
||||
objList = [r1, r2, r3]
|
||||
number = (49 - (r1 + r2 + r3))//4
|
||||
db = [{'name':'소양','values': [[9, 4, 8], [9, 8, 4], [5, 8, 8]]},
|
||||
{'name':'소음','values': [[5, 4, 8], [5, 8, 4], [9, 4, 4]]},
|
||||
{'name':'노양','values': [[5, 4, 4]]},
|
||||
{'name':'노음','values': [[9, 8, 8]]}]
|
||||
hyoname = ''
|
||||
for i in range(len(db)):
|
||||
for j in range(len(db[i]['values'])):
|
||||
if objList == db[i]['values'][j]:
|
||||
hyoname = db[i]['name']
|
||||
shape = {'소양':'=======', '소음': '=== ===',
|
||||
'노양': 'ㅁㅁㅁㅁㅁ', '노음': 'xxx xxx'}
|
||||
res = {'name': hyoname, 'remains': objList, 'shape': shape[hyoname], 'number': number}
|
||||
return res
|
||||
|
||||
def findbyunhyo(res):
|
||||
tmp = 0
|
||||
for i in range(len(res)):
|
||||
tmp = tmp + res[i]['number']
|
||||
no = 55 - tmp
|
||||
byunhyo = [{'chhyo':0,'noar':[1,12,13]},
|
||||
{'chhyo':1,'noar':[2,11,14]},
|
||||
{'chhyo':2,'noar':[3,10,15]},
|
||||
{'chhyo':3,'noar':[4,9,16]},
|
||||
{'chhyo':4,'noar':[5,8,17]},
|
||||
{'chhyo':5,'noar':[6,7,18,19]}]
|
||||
for i in range(len(byunhyo)):
|
||||
if no in byunhyo[i]['noar']:
|
||||
chhyo = byunhyo[i]['chhyo']
|
||||
return chhyo
|
||||
|
||||
def finalizeHyo(res,bynhyo):
|
||||
numberlist = [res[0]['number'],res[1]['number'],res[2]['number'],res[3]['number'],res[4]['number'],res[5]['number']]
|
||||
enablech = numberlist.count(6) + numberlist.count(9) #可變之爻
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['shape'] = '=== ==='
|
||||
if res[i]['number'] == 9:
|
||||
res[i]['shape'] = '======='
|
||||
if enablech in [1, 2]:
|
||||
if res[bynhyo]['number'] in [6,9]:
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['shape'] = '======='
|
||||
if res[i]['number'] == 9:
|
||||
res[i]['shape'] = '=== ==='
|
||||
if enablech in [3, 4, 5]:
|
||||
if res[bynhyo]['number'] in [6, 9]:
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['shape'] = '======='
|
||||
if res[i]['number'] == 9:
|
||||
res[i]['shape'] = '=== ==='
|
||||
if enablech == 6:
|
||||
for i in range(len(res)):
|
||||
if res[i]['number'] == 6:
|
||||
res[i]['shape'] = '======='
|
||||
if res[i]['number'] == 9:
|
||||
res[i]['shape'] = '=== ==='
|
||||
return res
|
||||
|
||||
if __name__ == '__main__':
|
||||
res = []
|
||||
for i in range(6):
|
||||
# 제1변
|
||||
sangaji = 50
|
||||
taegeuk = 1
|
||||
hyo = sangaji - taegeuk
|
||||
remains1 = byun(hyo)
|
||||
#제2변
|
||||
hyo = hyo - remains1
|
||||
remains2 = byun(hyo)
|
||||
#제3변
|
||||
hyo = hyo - remains2
|
||||
remains3 = byun(hyo)
|
||||
res.append(decidehyo(remains1,remains2,remains3))
|
||||
#res.reverse()
|
||||
#for i in range(len(res)):
|
||||
# print(res[i])
|
||||
|
||||
for i in reversed(res):
|
||||
print(i)
|
||||
|
||||
byunhyo = findbyunhyo(res)
|
||||
print('宜變之爻 : ' + str(byunhyo + 1))
|
||||
|
||||
rres = finalizeHyo(res, byunhyo)
|
||||
for i in reversed(rres):
|
||||
print(i)
|
||||
|
||||
|
||||
|
||||
56
auto_sshfs_mount/main.py
Executable file
56
auto_sshfs_mount/main.py
Executable file
@ -0,0 +1,56 @@
|
||||
#!/usr/local/bin/python
|
||||
import socket,os
|
||||
|
||||
def get_ip():
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(("8.8.8.8", 80))
|
||||
res = s.getsockname()[0]
|
||||
return res
|
||||
|
||||
def check_mount(fpath):
|
||||
check_mnt = os.path.ismount(fpath)
|
||||
if check_mnt == True:
|
||||
if fpath == '/Users/maddiekorea/BUNTUPAD':
|
||||
destpath = fpath + "/data"
|
||||
if fpath == '/Users/maddiekorea/IMAC':
|
||||
destpath = fpath + "/Parallels"
|
||||
check_dir = os.path.isdir(destpath)
|
||||
if check_dir == True:
|
||||
res = True
|
||||
else:
|
||||
res = False
|
||||
else:
|
||||
res = False
|
||||
return res
|
||||
|
||||
def brew_backup():
|
||||
cmd = "d=`date +%Y-%m-%d`; "
|
||||
cmd = cmd + 'f="/Users/maddiekorea/BUNTUPAD/data/imac/macbookair_brew_list_"$d".txt"; '
|
||||
cmd = cmd + '/opt/homebrew/bin/brew list > $f; /usr/bin/bzip2 -f $f;'
|
||||
return cmd
|
||||
|
||||
if __name__ == '__main__':
|
||||
ip = get_ip()
|
||||
print(ip)
|
||||
mount_points = [{'mount_point': '/Users/maddiekorea/BUNTUPAD',
|
||||
'cmd': '/usr/local/bin/sshfs -o volname=BUNTUPAD,follow_symlinks,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,idmap=user,auto_xattr,dev,suid,defer_permissions,noappledouble,noapplexattr maddiekorea@192.168.0.10:/home/maddiekorea /Users/maddiekorea/BUNTUPAD',
|
||||
'umount': '/usr/sbin/diskutil unmount /Users/maddiekorea/BUNTUPAD'},
|
||||
{'mount_point': '/Users/maddiekorea/IMAC',
|
||||
'cmd': '/usr/local/bin/sshfs -o volname=IMAC,follow_symlinks,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,idmap=user,auto_xattr,dev,suid,defer_permissions,noappledouble,noapplexattr maddiekorea@192.168.0.3:/Users/maddiekorea /Users/maddiekorea/IMAC',
|
||||
'umount': '/usr/sbin/diskutil unmount /Users/maddiekorea/IMAC'}]
|
||||
if ip == '192.168.0.77' :
|
||||
for i in range(len(mount_points)):
|
||||
if check_mount(mount_points[i]['mount_point']) == False:
|
||||
os.system(mount_points[i]['umount'])
|
||||
os.system(mount_points[i]['cmd'])
|
||||
print(mount_points[i]['mount_point'] + " is Mounted.")
|
||||
else:
|
||||
print(mount_points[i]['mount_point'] + " is already Mounted.")
|
||||
#os.system(brew_backup())
|
||||
#print("brew list back-uped.")
|
||||
else:
|
||||
#print("You're not in Home.")
|
||||
for i in range(len(mount_points)):
|
||||
if check_mount(mount_points[i]['mount_point']) == True:
|
||||
os.system(mount_points[i]['umount'])
|
||||
print(mount_points[i]['cmd'] + " is unMounted.")
|
||||
22
automations/main.py
Normal file
22
automations/main.py
Normal file
@ -0,0 +1,22 @@
|
||||
import pandas
|
||||
from sendmail import *
|
||||
|
||||
if __name__ == '__main__':
|
||||
df = pandas.read_excel("./스마트스토어_전체주문발주발송관리_20220915_0938.xls")
|
||||
df_playauto = pandas.read_excel("./아트박스_주문파일취합_2202_0908.xlsx")
|
||||
df_artbox = pandas.read_excel("./플레이오토_주문용파일취합_2022_0908.xlsx")
|
||||
print(df)
|
||||
print(df_playauto)
|
||||
print(df_artbox)
|
||||
|
||||
to = 'maddiekorea@gmail.com'
|
||||
title = "Test"
|
||||
contents = """6...7"""
|
||||
attachments = "/Users/maddiekorea/PycharmProjects/automations/플레이오토_주문취합_다운로드파일_필드전체적용_샘플.xlsx"
|
||||
|
||||
mail = sendmail(to, title, contents, attachments)
|
||||
mail.smtprun()
|
||||
|
||||
|
||||
|
||||
|
||||
92
automations/makePrdDB.py
Normal file
92
automations/makePrdDB.py
Normal file
@ -0,0 +1,92 @@
|
||||
import pandas, pymysql, json, re, os
|
||||
|
||||
def makejson(text):
|
||||
textlist = text.split("\n")
|
||||
return textlist
|
||||
|
||||
def escapestring(text):
|
||||
res = re.sub(r"\'","\\'",text)
|
||||
return res
|
||||
|
||||
def makeOptContent(optgroup,options):
|
||||
optlist = options.split("\n")
|
||||
optgrplist = optgroup.split("\n")
|
||||
res = []
|
||||
for i in range(len(optlist)):
|
||||
valuelist = optlist[i].split(",")
|
||||
optCont = {}
|
||||
for j in range(len(optgrplist)):
|
||||
optCont[optgrplist[j]] = re.sub(r"\'", "’", valuelist[j])
|
||||
#optCont[optgrplist[j]] = valuelist[j]
|
||||
res.append(optCont)
|
||||
return res
|
||||
|
||||
def makeOPtPrice(price,optprice):
|
||||
opp = optprice.split("\n")
|
||||
res = []
|
||||
for i in range(len(opp)):
|
||||
_opp = int(opp[i]) + int(price)
|
||||
res.append(_opp)
|
||||
return res
|
||||
|
||||
def getXlsfiles():
|
||||
fpath = "/Users/maddiekorea/Desktop/스마트스토어/"
|
||||
xlslist = os.listdir(fpath)
|
||||
xlslist.sort()
|
||||
for i in range(len(xlslist)):
|
||||
xlslist[i] = fpath + xlslist[i]
|
||||
return xlslist
|
||||
|
||||
if __name__ == '__main__':
|
||||
files = getXlsfiles()
|
||||
for index in range(len(files)):
|
||||
df = pandas.read_excel(files[index], header=1, skiprows=[2, 3, 4], usecols=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 19, 20])
|
||||
df = df.fillna("")
|
||||
for row in df.iterrows():
|
||||
try:
|
||||
db = pymysql.connect(host='127.0.0.1', port=3306, user='maddiekorea', password='mad(#lin',
|
||||
db='conteenew_catalogue', charset='utf8', unix_socket="/tmp/mysql.sock")
|
||||
cursor = db.cursor()
|
||||
dispSql = """INSERT INTO `conteenew_catalogue`.`dispPrds` VALUES (0,'{0}','','','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')
|
||||
""".format(row[1]['상품번호'], row[1]['카테고리코드'], row[1]['판매자 상품코드'], row[1]['브랜드'],
|
||||
escapestring(row[1]['상품명']), row[1]['상품상태'], row[1]['판매가'], row[1]['부가세'],
|
||||
row[1]['재고수량'], row[1]['옵션형태'], row[1]['대표이미지'],
|
||||
json.dumps(makejson(row[1]['추가이미지']), ensure_ascii=False))
|
||||
cursor.execute(dispSql)
|
||||
db.commit()
|
||||
db.close()
|
||||
if row[1]['옵션형태'] == "조합형":
|
||||
optcontent = makeOptContent(row[1]['옵션명'], row[1]['옵션값'])
|
||||
optprice = makeOPtPrice(row[1]['판매가'], row[1]['옵션가'])
|
||||
stock = makejson(row[1]['옵션 재고수량'])
|
||||
for i in range(len(optcontent)):
|
||||
try:
|
||||
db = pymysql.connect(host='127.0.0.1', port=3306, user='maddiekorea', password='mad(#lin',
|
||||
db='conteenew_catalogue', charset='utf8',
|
||||
unix_socket="/tmp/mysql.sock")
|
||||
cursor = db.cursor()
|
||||
skuSql = """INSERT INTO `conteenew_catalogue`.`skuEntries` VALUES (0,'{0}','','','{1}','{2}','{3}','{4}','{5}','{6}')
|
||||
""".format(row[1]['상품번호'], row[1]['판매자 상품코드'], row[1]['브랜드'],
|
||||
escapestring(row[1]['상품명']), json.dumps(optcontent[i], ensure_ascii=False),
|
||||
optprice[i], stock[i])
|
||||
cursor.execute(skuSql)
|
||||
db.commit()
|
||||
db.close()
|
||||
except:
|
||||
print(skuSql)
|
||||
else:
|
||||
try:
|
||||
db = pymysql.connect(host='127.0.0.1', port=3306, user='maddiekorea', password='mad(#lin',
|
||||
db='conteenew_catalogue', charset='utf8', unix_socket="/tmp/mysql.sock")
|
||||
cursor = db.cursor()
|
||||
skuSql = """INSERT INTO `conteenew_catalogue`.`skuEntries` VALUES (0,'{0}','','','{1}','{2}','{3}','{4}','{5}','{6}')
|
||||
""".format(row[1]['상품번호'], row[1]['판매자 상품코드'], row[1]['브랜드'], escapestring(row[1]['상품명']),
|
||||
json.dumps({'원래없음': re.sub(r"\'", "’", row[1]['상품명'])}, ensure_ascii=False),
|
||||
row[1]['판매가'], row[1]['재고수량'])
|
||||
cursor.execute(skuSql)
|
||||
db.commit()
|
||||
db.close()
|
||||
except:
|
||||
print(skuSql)
|
||||
except:
|
||||
print(dispSql)
|
||||
132
automations/mergeorders.py
Normal file
132
automations/mergeorders.py
Normal file
@ -0,0 +1,132 @@
|
||||
import pandas, os, random
|
||||
from datetime import date, timedelta, datetime
|
||||
|
||||
class mergeNewOrders:
|
||||
def __init__(self):
|
||||
self.queuedir = "/Users/maddiekorea/PycharmProjects/automations/new_orders"
|
||||
self.queuefiles = self.getQueue()
|
||||
self.currentfile = "/Users/maddiekorea/PycharmProjects/automations/now/current.xlsx"
|
||||
self.proccessed = "/Users/maddiekorea/PycharmProjects/automations/proccessed"
|
||||
self.objfiles = {'smartstore':self.getSmartStoreOrderfile(),'playauto':self.getPlayAutoOrderfile(),'artbox':self.getArtBoxOrderfile()}
|
||||
self.resfileformat = ['상품주문번호','주문번호','배송방법','택배사','송장번호','발송일','구매자명','수취인명','주문상태','결제일','상품번호','상품명','옵션정보','수량','옵션가격','상품가격','상품별 할인액','판매자 부담 할인액','상품별 총 주문금액','발주확인일','발송기한','발송처리일','송장출력일','배송비 형태','배송비 묶음번호','배송비 유형','배송비 합계','제주/도서 추가배송비','배송비 할인액','판매자 상품코드','판매자 내부코드1','판매자 내부코드2','수취인연락처1','수취인연락처2','통합배송지','구매자연락처','우편번호','배송메세지','출고지','결제수단','수수료 과금구분','수수료결제방식','네이버페이 주문관리 수수료','매출연동 수수료','매출연동 수수료 구분','정산예정금액','개인통관고유부호','주문일시','마지막 유입경로','유입채널','원주문코드','원주문GR시퀀스','작가코드','SKU코드','쇼핑몰상품코드','공급사']
|
||||
self.ordernumCount = 0
|
||||
|
||||
def getQueue(self):
|
||||
xlsx_list = [file for file in os.listdir(self.queuedir) if file.endswith(r'.xlsx') or file.endswith(r'.xls')]
|
||||
return xlsx_list
|
||||
|
||||
def getSmartStoreOrderfile(self):
|
||||
smstorelist = [item for item in self.queuefiles if "스마트스토어" in item]
|
||||
if len(smstorelist) != 1:
|
||||
return ''
|
||||
else:
|
||||
return self.queuedir + "/" + smstorelist[0]
|
||||
|
||||
def getPlayAutoOrderfile(self):
|
||||
plAutolist = [item for item in self.queuefiles if "플레이오토" in item]
|
||||
if len(plAutolist) != 1:
|
||||
return ''
|
||||
else:
|
||||
return self.queuedir + "/" + plAutolist[0]
|
||||
|
||||
def getArtBoxOrderfile(self):
|
||||
artBoxlist = [item for item in self.queuefiles if "아트박스" in item]
|
||||
if len(artBoxlist) != 1:
|
||||
return ''
|
||||
else:
|
||||
return self.queuedir + "/" + artBoxlist[0]
|
||||
|
||||
def smartstorehandle(self):
|
||||
file = self.objfiles['smartstore']
|
||||
df = pandas.read_excel(file,header=1)
|
||||
df['유입채널'] = "네이버"
|
||||
df['원주문코드'] = df['주문번호']
|
||||
df['원주문GR시퀀스'] = df['상품주문번호']
|
||||
df['작가코드'] = df['판매자 상품코드']
|
||||
df['SKU코드'] = ''
|
||||
df['쇼핑몰상품코드'] = df['상품번호']
|
||||
df['공급사'] = ''
|
||||
df = df.astype({'상품주문번호':'str','주문번호':'str','상품번호':'str','배송비 묶음번호':'str','우편번호':'str','원주문코드':'str','원주문GR시퀀스':'str','쇼핑몰상품코드':'str'})
|
||||
df['우편번호'] = df.apply(lambda x: x['우편번호'].zfill(5), axis=1)
|
||||
return df
|
||||
|
||||
def playautohandle(self):
|
||||
file = self.objfiles['playauto']
|
||||
df = pandas.read_excel(file)
|
||||
rdf = pandas.DataFrame(columns = self.resfileformat)
|
||||
rdf['주문번호'] = df['묶음번호']
|
||||
rdf['배송방법'] = '택배,등기,소포'
|
||||
rdf['결제일'] = df['결제완료일']
|
||||
df['유입채널'] = df.apply(lambda x: self.makeChannelname(x['쇼핑몰(계정)']), axis=1)
|
||||
rdf['유입채널'] = df["유입채널"]
|
||||
rdf['쇼핑몰상품코드'] = df['쇼핑몰 상품코드']
|
||||
rdf['상품명'] = df['온라인 상품명']
|
||||
rdf['옵션정보'] = df['옵션']
|
||||
rdf['수량'] = df['주문수량']
|
||||
df['_주문자명'] = df.apply(lambda x: self.makeChannelname(x['주문자(ID)']), axis=1)
|
||||
rdf['구매자명'] = df['_주문자명']
|
||||
rdf['수취인명'] = df['수령자명']
|
||||
df = df.astype({'배송메세지':'str','기타메세지':'str'})
|
||||
df['_배송메세지'] = df[['배송메세지', '기타메세지']].apply(' '.join, axis=1)
|
||||
rdf['배송메세지'] = df['_배송메세지']
|
||||
rdf['배송메세지'] = rdf.apply(lambda x: x['배송메세지'].replace("nan",""), axis=1)
|
||||
df['우편번호'] = df.apply(lambda x: self.postcodeNormal(x['우편번호']), axis=1)
|
||||
rdf['우편번호'] = df['우편번호']
|
||||
rdf['통합배송지'] = df['주소']
|
||||
rdf['상품별 총 주문금액'] = df['금액']
|
||||
rdf['배송비 합계'] = df['배송비']
|
||||
rdf['주문일시'] = df['주문일']
|
||||
rdf['발송일'] = df['발송예정일']
|
||||
rdf['송장번호'] = df['배송번호']
|
||||
rdf['주문상태'] = df['주문상태']
|
||||
rdf['배송비 유형'] = df['배송방법']
|
||||
rdf['수취인연락처1'] = df['수령자 휴대폰번호']
|
||||
rdf['구매자연락처'] = df['주문자 휴대폰번호']
|
||||
rdf['출고지'] = df['배송처']
|
||||
rdf['원주문GR시퀀스'] = df['쇼핑몰 주문번호']
|
||||
rdf['원주문코드'] = rdf.apply(lambda x: self.getOrgOrdNum(x['원주문GR시퀀스']), axis=1)
|
||||
rdf['상품주문번호'] = rdf.apply(lambda x: self.fakeOrderNo(), axis=1)
|
||||
rdf = rdf.astype({'쇼핑몰상품코드': 'str','상품주문번호':'str','주문번호':'str'})
|
||||
rdf['결제일'] = pandas.to_datetime(rdf['결제일'], format='%Y-%m-%d %H:%M:%S', errors='raise')
|
||||
rdf['주문일시'] = pandas.to_datetime(rdf['주문일시'], format='%Y-%m-%d %H:%M:%S', errors='raise')
|
||||
return rdf
|
||||
|
||||
def makeChannelname(self,chstring):
|
||||
strs = chstring.split('/')
|
||||
res = strs[0]
|
||||
return res
|
||||
|
||||
def postcodeNormal(self,postcodes):
|
||||
res = str(postcodes).replace("-","")
|
||||
return res
|
||||
|
||||
def merge(self):
|
||||
df = self.smartstorehandle()
|
||||
df2 = self.playautohandle()
|
||||
df = pandas.concat([df,df2])
|
||||
return df
|
||||
|
||||
def getOrgOrdNum(self,noStr):
|
||||
tmp = noStr.split(" ")
|
||||
res = tmp[0]
|
||||
return res
|
||||
|
||||
def fakeOrderNo(self):
|
||||
now = datetime.now()
|
||||
mo = str(now.month).zfill(2)
|
||||
y = now.year + 7000
|
||||
y = str(y).zfill(4)
|
||||
d = str(now.day).zfill(2)
|
||||
h = str(now.hour).zfill(2)
|
||||
m = str(now.minute).zfill(2)
|
||||
ordernum = self.ordernumCount
|
||||
end = str(ordernum).zfill(4)
|
||||
self.ordernumCount = self.ordernumCount + 1
|
||||
res = str(y)+str(mo)+str(d)+str(h)+str(m)+str(end)
|
||||
return res
|
||||
|
||||
if __name__ == '__main__':
|
||||
mergeOrders = mergeNewOrders()
|
||||
df = mergeOrders.merge()
|
||||
df.to_excel("./test.xlsx")
|
||||
#print(mergeOrders.fakeOrderNo())
|
||||
BIN
automations/new_orders/test.xlsx
Normal file
BIN
automations/new_orders/test.xlsx
Normal file
Binary file not shown.
BIN
automations/new_orders/스마트스토어_다운로드_암호해제본_샘플.xls
Normal file
BIN
automations/new_orders/스마트스토어_다운로드_암호해제본_샘플.xls
Normal file
Binary file not shown.
BIN
automations/new_orders/플레이오토_주문취합_다운로드파일_필드전체적용_샘플.xlsx
Normal file
BIN
automations/new_orders/플레이오토_주문취합_다운로드파일_필드전체적용_샘플.xlsx
Normal file
Binary file not shown.
BIN
automations/now/now.xlsx
Normal file
BIN
automations/now/now.xlsx
Normal file
Binary file not shown.
BIN
automations/plto.xlsx
Normal file
BIN
automations/plto.xlsx
Normal file
Binary file not shown.
52
automations/sendmail.py
Normal file
52
automations/sendmail.py
Normal file
@ -0,0 +1,52 @@
|
||||
import smtplib, os
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.base import MIMEBase
|
||||
from email import encoders
|
||||
|
||||
class sendmail:
|
||||
def __init__(self,recipient,title,contents,attachment):
|
||||
self.sender = 'conteenew@gmail.com'
|
||||
self.smtpserver = 'smtp.gmail.com'
|
||||
self.smtpserverport = 587
|
||||
self.serverpass = 'gzfscocayuutidxo'
|
||||
self.recipient = recipient
|
||||
self.title = title
|
||||
self.contents = contents
|
||||
self.attachment = attachment
|
||||
self.cc = 'maddie@conteenew.com'
|
||||
|
||||
def smtprun(self):
|
||||
smtp = smtplib.SMTP(self.smtpserver, self.smtpserverport)
|
||||
smtp.ehlo()
|
||||
smtp.starttls()
|
||||
smtp.login(self.sender, self.serverpass)
|
||||
smtp.sendmail(self.sender, self.recipient, self.message().as_string())
|
||||
|
||||
def message(self):
|
||||
msg = MIMEMultipart()
|
||||
msg['From'] = self.sender
|
||||
msg['To'] = self.recipient
|
||||
msg['Subject'] = self.title
|
||||
msg['Cc'] = self.cc
|
||||
msg.attach(MIMEText(self.contents, 'plain'))
|
||||
attlist = self.attachment.split(",")
|
||||
for i in range(len(attlist)):
|
||||
attached_file = open(attlist[i], 'rb').read()
|
||||
att = MIMEBase('application', "octet-stream")
|
||||
att.set_payload(attached_file)
|
||||
encoders.encode_base64(att)
|
||||
att.add_header('Content-Disposition', 'attachment', filename=os.path.basename(self.attachment))
|
||||
msg.attach(att)
|
||||
return msg
|
||||
|
||||
#if __name__ == '__main__':
|
||||
# #사용법
|
||||
# to = 'maddiekorea@gmail.com'
|
||||
# title = "Test"
|
||||
# contents = """6...7"""
|
||||
# #첨부는 쉼표로 여러개 넣을 수 있다.
|
||||
# attachments = "/Users/maddiekorea/PycharmProjects/automations/플레이오토_주문취합_다운로드파일_필드전체적용_샘플.xlsx"
|
||||
#
|
||||
# mail = sendmail(to,title,contents,attachments)
|
||||
# mail.smtprun()
|
||||
BIN
automations/test.xlsx
Normal file
BIN
automations/test.xlsx
Normal file
Binary file not shown.
BIN
automations/test11.xlsx
Normal file
BIN
automations/test11.xlsx
Normal file
Binary file not shown.
BIN
automations/tmp/스마트스토어_전체주문발주발송관리_20220915_0938.xls
Normal file
BIN
automations/tmp/스마트스토어_전체주문발주발송관리_20220915_0938.xls
Normal file
Binary file not shown.
BIN
automations/tmp/아트박스_주문파일취합_2202_0908.xlsx
Normal file
BIN
automations/tmp/아트박스_주문파일취합_2202_0908.xlsx
Normal file
Binary file not shown.
BIN
automations/tmp/플레이오토_주문용파일취합_2022_0908.xlsx
Normal file
BIN
automations/tmp/플레이오토_주문용파일취합_2022_0908.xlsx
Normal file
Binary file not shown.
13
bigQuery_exercise/config/skb-home-ga4-44e5a11751e6.json
Normal file
13
bigQuery_exercise/config/skb-home-ga4-44e5a11751e6.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "service_account",
|
||||
"project_id": "skb-home-ga4",
|
||||
"private_key_id": "44e5a11751e6e66c28d750defc71529a59c4e24d",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC8omPC2i//wCML\nsx1TULfoFk2QtZWwYeXfCohGDvlEokk63oWAUZcR235xgzb8RON+vhGjXxQvSxtF\nsHGxgv+XKpR6PzpHU59UfJ2H5KtSROYwUvU2C+HxRxjlFMUcBGWa2EaFdtVs+nhg\nM9Lh2XG4Ps4u7BG6cWDA94xaSOSR1E+Ep/CeYS2bMX8K4cslL62wsGOkQPFQDHbP\nwKa7Kpz/yF9GDyxnW2qgUH9cUFqhqYAoaDC50cKf/DmbIeZhW93ILnia1ju7Hz+G\npUOrFt1v8/BbZD/LliZTenAz7Nnpmh8G66sNO4mVHNuauoSg+aNTpq6/L+Afzmto\nJJ599AINAgMBAAECggEAFphkF0nP8JRpDkR3CY0UbmxHf8NEijN718b48l1mTeqb\nl33io2+Ch0zRvVKgokC1OHAXiEiCEDUwr90WDVOZ/pdG4ErVFgil//aKXyYMwIbI\nxPaW8VGkj6R6zqv5fWTob88iyWdl4s8w3qMuikej59Q8GeJEsF7W3l54tTLgkDgX\nWBkrTsOLnRoAXaBt/AiNHW5jNOqhJFg+LBJZrEM3ZtzJjH/AMKFWk0kPbdsAmf0v\n9MzgR+mDQQpWbX9We6Y/YmVd2P3vHlgZVDA0t+PuUPMD/fgCDm3uPckDE85iE/IF\ncwW3oQkkrqanCAwXYwXd0Np/1CNWCPOQavdZ+fn9eQKBgQD+CbUiiUW7r1fN0JdN\nCYFBcqvkj1CZNjF0UTVRZVjQnBtDht4CvfdPJyEN0cCKQ+KqBq4ZSHkwSujikKFV\nSHVJ939pdcA+PC3OUtFdTWQW0mWIoANUG015gLG0/YdnjzoGQiHZQVNcs7vGg3RH\nQIjKxmdw2Dk2IlObHDwGBij9VQKBgQC+F10qv0XwvQrgxxXEHaMFSJdm4hJpd4ZJ\njOJMIJQWATxHeerwLGLenDJD9njPBXuSyJE8eHx6ed+YsPIAtwursIFliNT+eSfl\nXiN9GK6BWtUp4O3zp97uIpC+YbIw4pHQlYfJX/D062E09gpUEeHWkEDTXAV869vV\nfR34+dgx2QKBgFEKccF5v0g3kLA0yf+md5iUZ2e7nH+z/STZP0QfK60pD72ECdEg\nHwQePHo3HtA9BdMt3F5uc1LHovGcKAuX2OrmzLus984izo4Sd33nUXXCWuex/D3Z\nk+ad+pL9ijOsSltyv2+aWmipYc7bYr3URY9Cqf8iy2WMn9VMtY1Ka8sdAoGAVoOF\nqIXjC/zNrZ2OH3KplicCmRV88bkvSdwvxhvxqc4oJBOtxF8/JDeMfPf45aeGJTjZ\nON9RL+C1zeWCTqcATcSIL7DF14dGjBJ7Ll0EVuUDLQss4P7e7ByZKbyG/86uNHNJ\nmHHs1VsnI5Zy/u4gjambh1ZTPRaPN6u4726uYYkCgYAgCpzWVH3aPd504xCkknCA\n1dNQtihR8EoCOYNAi7Wcp4ovG2duBAsIYFW/1NZEuAQW3RKeat8E+TceInEteMP4\nYGMM+SOBurTAYWk2zkGfUwPx3IqQPe4c2CL6gxhjPa+t82WvkFTwTI0xG66wNLb/\nRqeHunq3ic57NNRmVCGE+w==\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "ucomp01@skb-home-ga4.iam.gserviceaccount.com",
|
||||
"client_id": "109878041240859967176",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://oauth2.googleapis.com/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/ucomp01%40skb-home-ga4.iam.gserviceaccount.com",
|
||||
"universe_domain": "googleapis.com"
|
||||
}
|
||||
20
bigQuery_exercise/main.py
Normal file
20
bigQuery_exercise/main.py
Normal file
@ -0,0 +1,20 @@
|
||||
# 샘플 Python 스크립트입니다.
|
||||
import pandas
|
||||
import glob
|
||||
from google.cloud import bigquery
|
||||
from google.oauth2 import service_account
|
||||
|
||||
if __name__ == '__main__':
|
||||
key_path = glob.glob("./config/*.json")[0]
|
||||
credentials = service_account.Credentials.from_service_account_file(key_path)
|
||||
client = bigquery.Client(credentials=credentials, project=credentials.project_id)
|
||||
sql = f"""SELECT * FROM `skb-home-ga4.analytics_319633764.events_20230906` LIMIT 10"""
|
||||
query_job = client.query(sql)
|
||||
df = query_job.to_dataframe()
|
||||
print(df)
|
||||
|
||||
|
||||
#skb-home-ga4.analytics_319633764
|
||||
#skb-biz-ga4.analytics_320354291
|
||||
#skb-cds-ga4.analytics_259129513
|
||||
#skb-bds-ga4.analytics_259510316
|
||||
32
bingWallpeper/main.py
Normal file
32
bingWallpeper/main.py
Normal file
@ -0,0 +1,32 @@
|
||||
import re,os,json,requests,urllib.request
|
||||
|
||||
URL = "http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"
|
||||
dir_path = os.environ['HOME'] + '/Pictures/Bing_Pic_of_the_Day/'
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
image_data = json.loads(requests.get(URL).text)
|
||||
image_url = 'http://www.bing.com' + image_data['images'][0]['url']
|
||||
_image_name_arr = image_url.split("&")
|
||||
__image_name_arr = _image_name_arr[0].split("?")
|
||||
image_name = re.sub(r'^id\=',"",__image_name_arr[1])
|
||||
|
||||
if not os.path.exists(dir_path):
|
||||
os.makedirs(dir_path)
|
||||
|
||||
file_path = dir_path + image_name
|
||||
|
||||
if os.path.exists(file_path) is False:
|
||||
urllib.request.urlretrieve(image_url, filename=file_path)
|
||||
image_desc = image_data['images'][0]['copyright']
|
||||
command = 'gsettings set org.gnome.desktop.background picture-uri file://' + file_path
|
||||
os.system(command)
|
||||
notify = 'notify-send -u critical "Wallpaper for the Day updated!" "' + image_desc + '"'
|
||||
os.system(notify)
|
||||
else:
|
||||
notify = 'notify-send -u critical "Bing Wallpaper" "Wallpaper for the day has been updated already!"'
|
||||
os.system(notify)
|
||||
except:
|
||||
notify = 'notify-send -u critical "Bing Wallpaper" "Wallpaper can\'t be updated!"'
|
||||
os.system(notify)
|
||||
|
||||
BIN
brandTermExtract/20230420_통합상품_키워드.xlsx
Normal file
BIN
brandTermExtract/20230420_통합상품_키워드.xlsx
Normal file
Binary file not shown.
BIN
brandTermExtract/_tmpTest.xlsx
Normal file
BIN
brandTermExtract/_tmpTest.xlsx
Normal file
Binary file not shown.
BIN
brandTermExtract/branddic_20230420.xlsx
Normal file
BIN
brandTermExtract/branddic_20230420.xlsx
Normal file
Binary file not shown.
BIN
brandTermExtract/branddic_blacklist_20230420.xlsx
Normal file
BIN
brandTermExtract/branddic_blacklist_20230420.xlsx
Normal file
Binary file not shown.
BIN
brandTermExtract/data.feather
Normal file
BIN
brandTermExtract/data.feather
Normal file
Binary file not shown.
BIN
brandTermExtract/dic.xlsx
Normal file
BIN
brandTermExtract/dic.xlsx
Normal file
Binary file not shown.
BIN
brandTermExtract/dic_edited.xlsx
Normal file
BIN
brandTermExtract/dic_edited.xlsx
Normal file
Binary file not shown.
84
brandTermExtract/main.py
Normal file
84
brandTermExtract/main.py
Normal file
@ -0,0 +1,84 @@
|
||||
import pandas, re
|
||||
# ⌃R을(를) 눌러 실행하거나 내 코드로 바꿉니다.
|
||||
# 클래스, 파일, 도구 창, 액션 및 설정을 어디서나 검색하려면 ⇧ 두 번을(를) 누릅니다.
|
||||
|
||||
|
||||
def load_excel(filename):
|
||||
df = pandas.read_excel(filename, engine="openpyxl")
|
||||
df = df[['po_idx_통합', 'po_idx_공구', 'po_idx_할인', 'po_idx_심쿵', 'po_title_통합', 'po_keyword_통합']]
|
||||
df.to_feather("./data.feather")
|
||||
return df
|
||||
|
||||
def getblacketedDics(terms, list):
|
||||
terms = re.sub(r"\s","",terms).lower()
|
||||
s = re.findall(r"\[(.*?)\]", terms)
|
||||
for i in range(len(s)):
|
||||
list.append(s[i])
|
||||
return s
|
||||
|
||||
def getblacketedTerm(terms, diclist):
|
||||
terms = re.sub(r"\s","",terms).lower()
|
||||
s = re.findall(r"\[(.*?)\]", terms)
|
||||
res = ''
|
||||
for i in range(len(s)):
|
||||
if s[i] in diclist:
|
||||
res = res + str(s[i])
|
||||
res = res + ","
|
||||
res = re.sub(r"\,$","",res)
|
||||
return res
|
||||
|
||||
def getblandTerm(terms, diclist):
|
||||
terms = re.sub(r"\s","",terms).lower()
|
||||
s = re.findall(r"\[(.*?)\]", terms)
|
||||
res = ''
|
||||
for i in range(len(s)):
|
||||
if s[i] not in diclist:
|
||||
res = res + str(s[i])
|
||||
res = res + ","
|
||||
res = re.sub(r"\,$","",res)
|
||||
return res
|
||||
|
||||
def load_branddic():
|
||||
dicfilename = "./branddic_20230420.xlsx"
|
||||
df = pandas.read_excel(dicfilename, engine="openpyxl")
|
||||
return df[0].values.tolist()
|
||||
|
||||
def load_brandblackdic():
|
||||
dicfilename = "./branddic_blacklist_20230420.xlsx"
|
||||
df = pandas.read_excel(dicfilename, engine="openpyxl")
|
||||
return df[0].values.tolist()
|
||||
|
||||
if __name__ == '__main__':
|
||||
datadf = pandas.read_feather("./data.feather")
|
||||
#diclist = load_branddic()
|
||||
diclist = load_brandblackdic()
|
||||
|
||||
#datadf['branddic'] = datadf.apply(lambda x:getblacketedTerm(x['po_title_통합'], diclist), axis=1)
|
||||
datadf['branddic'] = datadf.apply(lambda x: getblandTerm(x['po_title_통합'], diclist), axis=1)
|
||||
datadf.to_excel("./_tmpTest.xlsx")
|
||||
#print(datadf.info())
|
||||
#print(dic)
|
||||
|
||||
|
||||
|
||||
# https://www.jetbrains.com/help/pycharm/에서 PyCharm 도움말 참조
|
||||
#df = load_excel("./20230420_통합상품_키워드.xlsx")
|
||||
#상품명 다른 케이스 리뷰
|
||||
#sdf = df[(df['po_title_통합'] != df['po_title_공구']) & (df['po_title_공구'].notnull())]
|
||||
#sdf = sdf[['po_idx_통합','po_title_통합','po_title_공구']]
|
||||
#print(sdf)
|
||||
#sdf.to_excel("./tmpTest.xlsx")
|
||||
#통합명만 써도 됨...
|
||||
#
|
||||
#print(df.info())
|
||||
|
||||
#Build 기본 사전 데이터 밑 데이터
|
||||
#df = pandas.read_feather("./data.feather")
|
||||
#diclist = []
|
||||
#df['blacked'] = df.apply(lambda x: getblacketedDics(x['po_title_통합'], diclist), axis=1)
|
||||
#df.to_excel("./tmpTest.xlsx")
|
||||
#diclist = list(set(diclist))
|
||||
#dicdf = pandas.DataFrame(diclist)
|
||||
#dicdf.to_excel("./dic.xlsx")
|
||||
#print(dicdf)
|
||||
#엑셀로 받아 사전을 빌드하여 branddic이름으로 저장.
|
||||
BIN
brandTermExtract/tmpTest.xlsx
Normal file
BIN
brandTermExtract/tmpTest.xlsx
Normal file
Binary file not shown.
0
conteenew_python_apps/artwork/__init__.py
Normal file
0
conteenew_python_apps/artwork/__init__.py
Normal file
Binary file not shown.
BIN
conteenew_python_apps/artwork/__pycache__/app.cpython-39.pyc
Normal file
BIN
conteenew_python_apps/artwork/__pycache__/app.cpython-39.pyc
Normal file
Binary file not shown.
2
conteenew_python_apps/artwork/app.py
Normal file
2
conteenew_python_apps/artwork/app.py
Normal file
@ -0,0 +1,2 @@
|
||||
import falcon.asgi
|
||||
app = falcon.asgi.App()
|
||||
129
conteenew_python_apps/bid/bid_controller.py
Normal file
129
conteenew_python_apps/bid/bid_controller.py
Normal file
@ -0,0 +1,129 @@
|
||||
import subprocess,json,re,pymysql,datetime,requests
|
||||
|
||||
ini_path = "/var/www/conteenew_python_apps/bid/"
|
||||
|
||||
ini_srcs = [
|
||||
{'srcName':'강남구청','scriptName':'bid_gangnam.py','status':'active'},
|
||||
{'srcName':'나라장터','scriptName':'bid_naramarket.py','status':'active'},
|
||||
{'srcName':'ebiz4u','scriptName':'bid_ebiz4u.py','status':'active'},
|
||||
{'srcName':'s2b','scriptName':'bid_s2b.py','status':'active'},
|
||||
{'srcName':'스타빌','scriptName':'bid_starbill.py','status':'inactive'}
|
||||
]
|
||||
|
||||
bid_db = pymysql.connect(
|
||||
user='teen',
|
||||
passwd='tkatjdehd1!',
|
||||
host='localhost',
|
||||
db='bid',
|
||||
charset='utf8'
|
||||
)
|
||||
|
||||
timeNow = datetime.datetime.now()
|
||||
|
||||
print('Start at ' + timeNow.strftime('%Y-%m-%d %H:%M:%S') + '=========================================')
|
||||
|
||||
cursor_chkoutdated = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
chkoutdated_sql = 'UPDATE `bid_data` SET `bid_status` = 5 where `bid_applyDateTo` <= "' + timeNow.strftime('%Y-%m-%d %H:%M:%S') + '"'
|
||||
cursor_chkoutdated.execute(chkoutdated_sql)
|
||||
bid_db.commit()
|
||||
print(chkoutdated_sql)
|
||||
|
||||
term_cursor = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
sql = "select * from bid_crwlTerms"
|
||||
term_cursor.execute(sql)
|
||||
termdb = term_cursor.fetchall()
|
||||
terms = []
|
||||
for i in range(len(termdb)):
|
||||
term = termdb[i]['term']
|
||||
terms.append(term)
|
||||
|
||||
command = []
|
||||
for i in range(len(ini_srcs)):
|
||||
if ini_srcs[i]['status'] == "active":
|
||||
for j in range(len(terms)):
|
||||
cmd = {}
|
||||
cmd['cmd'] = ini_path + ini_srcs[i]['scriptName']
|
||||
cmd['term_opt'] = '"' + terms[j] + '"'
|
||||
command.append(cmd)
|
||||
|
||||
res = []
|
||||
for i in range(len(command)):
|
||||
cmd = 'python3 ' + command[i]['cmd'] + ' ' + command[i]['term_opt']
|
||||
print(cmd)
|
||||
data = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True,encoding='utf-8')
|
||||
data = re.sub("\'",'\"',data)
|
||||
data = json.loads(data)
|
||||
if len(data) == 0: pass
|
||||
elif data[0]['type'] == "검색/등록된 정보가 없습니다.": pass
|
||||
elif data[0]['type'] == "검색된 데이터가 없습니다.": pass
|
||||
else:
|
||||
for j in range(len(data)):
|
||||
res.append(data[j])
|
||||
|
||||
for i in range(len(res)):
|
||||
cursor_count = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
count_sql = 'select count(*) AS COUNT from `bid_data` where bid_url="' + res[i]['detailurl'] + '"'
|
||||
cursor_count.execute(count_sql)
|
||||
counts = cursor_count.fetchall()
|
||||
dup = counts[0]['COUNT']
|
||||
|
||||
if res[i]['src'] == "강남구청":
|
||||
timeEnd = datetime.datetime.strptime(res[i]['applyDateTo'], "%Y-%m-%d")
|
||||
elif res[i]['src'] == "나라장터":
|
||||
if res[i]['applyDateTo'] == "-":
|
||||
timeEnd = datetime.datetime.strptime("9999/12/31 11:59", "%Y/%m/%d %H:%M")
|
||||
elif res[i]['applyDateTo'] == "":
|
||||
timeEnd = datetime.datetime.strptime("1999/12/31 11:59", "%Y/%m/%d %H:%M")
|
||||
elif res[i]['applyDateTo'] == "공개이전":
|
||||
timeEnd = datetime.datetime.strptime("9999/12/31 11:59", "%Y/%m/%d %H:%M")
|
||||
else:
|
||||
timeEnd = datetime.datetime.strptime(res[i]['applyDateTo'], "%Y/%m/%d %H:%M")
|
||||
elif res[i]['src'] == "이비즈포유":
|
||||
timeEnd = datetime.datetime.strptime(res[i]['applyDateTo'], "%Y-%m-%d %H:%M")
|
||||
elif res[i]['src'] == "s2b":
|
||||
timeEnd = datetime.datetime.strptime(res[i]['applyDateTo'], "%Y-%m-%d %H:%M")
|
||||
else: pass
|
||||
|
||||
if dup == 0:
|
||||
if timeNow < timeEnd:
|
||||
cursor_insert = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
value = "'','" + res[i]['src'] + "','" + res[i]['term'] + "','" + \
|
||||
res[i]['type'] + "','" + res[i]['budget'] + "','" + \
|
||||
res[i]['commitDate'] + "','" + res[i]['dept'] + "','" + \
|
||||
res[i]['name'] + "','" + res[i]['detailurl'] + "','" + \
|
||||
res[i]['applyDateFrom'] + "','" + str(timeEnd) + \
|
||||
"',NULL,0,NOW(),NULL,NULL"
|
||||
insert_sql = "INSERT INTO `bid_data` VALUES(" + value + ")"
|
||||
cursor_insert.execute(insert_sql)
|
||||
bid_db.commit()
|
||||
print(insert_sql)
|
||||
else:
|
||||
cursor_check = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
check_sql = 'select * from bid_data where `bid_url`="' + res[i]['detailurl'] + '"'
|
||||
cursor_check.execute(check_sql)
|
||||
getdata = cursor_check.fetchall()
|
||||
if datetime.datetime.strptime(getdata[0]['bid_applyDateTo'], '%Y-%m-%d %H:%M:%S') < timeNow:
|
||||
cursor_update = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
update_sql = "UPDATE `bid_data` SET `bid_status` = 5 where idx=" + str(getdata[0]['idx'])
|
||||
cursor_update.execute(update_sql)
|
||||
bid_db.commit()
|
||||
print(update_sql)
|
||||
elif (timeEnd != getdata[0]['bid_applyDateTo']) or (res[i]['name'] != getdata[0]['bid_name']):
|
||||
cursor_update = bid_db.cursor(pymysql.cursors.DictCursor)
|
||||
update_sql = 'UPDATE `bid_data` SET `bid_applyDateTo` = "' + str(timeEnd) + \
|
||||
'", `bid_name` ="' + res[i]['name'] + \
|
||||
'" where idx=' + str(getdata[0]['idx'])
|
||||
cursor_update.execute(update_sql)
|
||||
bid_db.commit()
|
||||
print(update_sql)
|
||||
else:
|
||||
print("pass")
|
||||
|
||||
bid_db.close()
|
||||
|
||||
#mailcheckurl = 'http://office.conteenew.com/functions/mail/bid_alert.php'
|
||||
#resp = requests.get(mailcheckurl)
|
||||
#resp.raise_for_status()
|
||||
#html = resp.text
|
||||
|
||||
print('END' + ' =========================================')
|
||||
79
conteenew_python_apps/bid/bid_ebiz4u.py
Normal file
79
conteenew_python_apps/bid/bid_ebiz4u.py
Normal file
@ -0,0 +1,79 @@
|
||||
import requests, sys, bs4, urllib3, datetime, re
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
requests.packages.urllib3.disable_warnings()
|
||||
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':HIGH:!DH:!aNULL'
|
||||
try:
|
||||
requests.packages.urllib3.contrib.pyopenssl.util.ssl_.DEFAULT_CIPHERS += ':HIGH:!DH:!aNULL'
|
||||
except AttributeError:
|
||||
# no pyopenssl support used / needed / available
|
||||
pass
|
||||
|
||||
|
||||
term = sys.argv[1].encode('euc-kr')
|
||||
#term = urllib.parse.quote_plus(term)
|
||||
|
||||
#startdate = datetime.datetime.now()
|
||||
#enddate = datetime.datetime.now() + relativedelta(months=2)
|
||||
|
||||
#startdate = startdate.strftime('%Y-%m-%d')
|
||||
#enddate = enddate.strftime('%Y-%m-%d')
|
||||
|
||||
#startdate = urllib.parse.quote_plus(startdate)
|
||||
#enddate = urllib.parse.quote_plus(enddate)
|
||||
|
||||
|
||||
url = "https://www.ebiz4u.co.kr/bid/bidding.do?"
|
||||
|
||||
data = {
|
||||
"page": "",
|
||||
"cmd": "listPublic",
|
||||
"subcmd": "doPortalList",
|
||||
"srchAspUrl": "",
|
||||
"srchRfqNm": term,
|
||||
"srchOrgNm": "",
|
||||
"srchFrDt": "",
|
||||
"srchToDt": ""
|
||||
}
|
||||
|
||||
resp = requests.get(url, params=data, verify=False)
|
||||
resp.raise_for_status()
|
||||
resp.encoding='EUC-KR'
|
||||
html = resp.text
|
||||
|
||||
bs = bs4.BeautifulSoup(html, 'html.parser')
|
||||
trs = bs.select('table.tbl_list tr')
|
||||
|
||||
res = []
|
||||
|
||||
for i in range(len(trs) - 1):
|
||||
srcCode = trs[i + 1]
|
||||
tdsele = {}
|
||||
tdsele["src"] = "이비즈포유"
|
||||
tdsele["term"] = sys.argv[1]
|
||||
tdsele["type"] = ""
|
||||
tdsele["budget"] = ""
|
||||
tdsele["commitDate"] = ""
|
||||
tdsele["dept"] = srcCode.select('span.subject')[0].getText().strip()
|
||||
tdsele["name"] = srcCode.select('td')[0].getText().strip()
|
||||
pat = "^" + tdsele["dept"]
|
||||
tdsele["name"] = re.sub(pat,"",tdsele["name"])
|
||||
targetUrl = srcCode.select('a')[0].get('href')
|
||||
targethead = "https://www.ebiz4u.co.kr/bid/bidding.do?cmd=viewPublic&subcmd=vwIndexOnPortal&rfqNo="
|
||||
targetfoot = "&aspId="
|
||||
target = targetUrl.split("'")
|
||||
tdsele["detailurl"] = targethead + target[1] + targetfoot + target[3]
|
||||
tdsele["dept"] = tdsele["dept"] + " " + srcCode.select('td')[1].getText().strip()
|
||||
timepat1 = srcCode.select('span.time')[0].getText().strip()
|
||||
timepat2 = srcCode.select('span.time')[1].getText().strip()
|
||||
tdsele["applyDateFrom"] = srcCode.select('td')[2].getText().strip()
|
||||
pat = timepat1 + "$"
|
||||
tdsele["applyDateFrom"] = re.sub(pat,"",tdsele["applyDateFrom"])
|
||||
tdsele["applyDateFrom"] = tdsele["applyDateFrom"] + " " + timepat1
|
||||
tdsele["applyDateTo"] = srcCode.select('td')[3].getText().strip()
|
||||
pat = timepat2 + "$"
|
||||
tdsele["applyDateTo"] = re.sub(pat,"",tdsele["applyDateTo"])
|
||||
tdsele["applyDateTo"] = tdsele["applyDateTo"] + " " + timepat2
|
||||
res.append(tdsele)
|
||||
|
||||
print(res)
|
||||
60
conteenew_python_apps/bid/bid_gangnam.py
Normal file
60
conteenew_python_apps/bid/bid_gangnam.py
Normal file
@ -0,0 +1,60 @@
|
||||
import requests, sys, bs4, re
|
||||
|
||||
term = sys.argv[1]
|
||||
|
||||
url = "https://www.gangnam.go.kr/contract/list.do?pgno=1&mid=ID05_041501&saup_field1_gb=3&saup_dept_cd=&keyfield=SAUP_NM&keyword=" \
|
||||
+ term + "&srch_start_amt=&srch_end_amt="
|
||||
|
||||
headers = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3",
|
||||
"Cache-Control": "max-age=0",
|
||||
"Connection": "keep-alive",
|
||||
"Cookie": "JSESSIONID=baa_dI1wLJEFZeosbLHVxg-w1SGjCSDe5m77JFC1Oz5l8ZsbtJq0c4hVTuY_; WMONID=REfZ-vn3O8b; _ga=GA1.3.110539796.1632479167; siteContractModal=1; JSESSIONID=baa_dI1wLJEFZeosbLHVxg-w1SGjCSDe5m77JFC1Oz5l8ZsbtJq0c4hVTuY_; _gid=GA1.3.817966770.1633006424",
|
||||
"Host": "www.gangnam.go.kr",
|
||||
"Referer": "https://www.gangnam.go.kr/contract/list.do?pgno=4&mid=ID05_041501&saup_field1_gb=3&saup_dept_cd=&keyfield=SAUP_NM&keyword=&srch_start_amt=&srch_end_amt=",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"Sec-Fetch-User": "?1",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:92.0) Gecko/20100101 Firefox/92.0"
|
||||
}
|
||||
|
||||
resp = requests.get(url, headers=headers)
|
||||
resp.raise_for_status()
|
||||
html = resp.text
|
||||
|
||||
bs = bs4.BeautifulSoup(html, 'html.parser')
|
||||
|
||||
trs = bs.select('table.table tr')
|
||||
|
||||
res=[]
|
||||
|
||||
for i in range(len(trs) - 1):
|
||||
tds = trs[i + 1].select('td')
|
||||
tdsele = {}
|
||||
for j in range(len(tds)):
|
||||
if j == 0:
|
||||
tdsele["src"] = "강남구청"
|
||||
tdsele["term"] = term
|
||||
tdsele["type"] = tds[j].getText().strip()
|
||||
elif j == 1:
|
||||
tdsele["commitDate"] = tds[j].getText().strip()
|
||||
elif j == 2:
|
||||
tdsele["name"] = re.sub("\,|\'","",tds[j].getText().strip())
|
||||
tdsele["detailurl"] = "https://www.gangnam.go.kr" + tds[j].select('a')[0].get('href')
|
||||
elif j == 3:
|
||||
tdsele["budget"] = tds[j].getText().strip()
|
||||
tdsele["budget"] = re.sub("원","",tdsele["budget"])
|
||||
tdsele["budget"] = re.sub("\,", "", tdsele["budget"])
|
||||
elif j == 4:
|
||||
tdsele["dept"] = tds[j].getText().strip()
|
||||
elif j == 5:
|
||||
applyperiod = tds[j].getText().strip().split("~ ")
|
||||
tdsele["applyDateFrom"] = applyperiod[0]
|
||||
tdsele["applyDateTo"] = applyperiod[1]
|
||||
res.append(tdsele)
|
||||
|
||||
print(res)
|
||||
68
conteenew_python_apps/bid/bid_naramarket.py
Normal file
68
conteenew_python_apps/bid/bid_naramarket.py
Normal file
@ -0,0 +1,68 @@
|
||||
import requests, sys, bs4, urllib, re, datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
term = sys.argv[1].encode('euc-kr')
|
||||
term = urllib.parse.quote_plus(term)
|
||||
|
||||
startdate = datetime.datetime.now() - relativedelta(months=1)
|
||||
enddate = datetime.datetime.now() + relativedelta(months=3)
|
||||
|
||||
startdate = startdate.strftime('%Y/%m/%d')
|
||||
enddate = enddate.strftime('%Y/%m/%d')
|
||||
|
||||
startdate = urllib.parse.quote_plus(startdate)
|
||||
enddate = urllib.parse.quote_plus(enddate)
|
||||
|
||||
url = "http://www.g2b.go.kr:8101/ep/tbid/tbidList.do"
|
||||
dataa = "?searchType=1&bidSearchType=1&taskClCds=1&bidNm=" + str(term) + "&searchDtType=1" + \
|
||||
"&fromBidDt=" + startdate + "&toBidDt=" + enddate + \
|
||||
"&fromOpenBidDt=&toOpenBidDt=&exceptEnd=Y&radOrgan=1&instNm=&instSearchRangeType=&refNo=&area=&areaNm=&industry=&industryCd=&budget=&budgetCompare=UP&detailPrdnmNo=&detailPrdnm=&procmntReqNo=&intbidYn=1®Yn=Y&recordCountPerPage=30"
|
||||
url = url + dataa
|
||||
|
||||
headers = {
|
||||
"Content-Type": 'application/x-www-form-urlencoded',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
|
||||
'Accept-Encoding': 'gzip, deflate',
|
||||
'Accept-Language': 'ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Connection': 'keep-alive',
|
||||
#'Cookie' : 'ipmsperf_uuid=-1514895482682589748; JSESSIONID=25JThTdcFN12QpYxCYV6fcm4sTLBlZDBsLLc7hdvkHJfR0TbCbvN!-308104413; _KONEPS_PAGE=%3C%21%23%25%3ElistUrl%3C%40%25%7E%3E%2Fgtob%2Fall%2Fpr%2Festimate%2FreqEstimateOpenG2BList.do%3FbsnsDivCdSchs%3D0000%26cmd%3Dmain%26deadlineFromDt%3D2021%252F09%252F28%26deadlineToDt%3D2021%252F10%252F27%26estmtReqInsttNo%3D%26estmtSbjctSch%3D%25C8%25AB%25BA%25B8%26examinInstNm%3D%26instGuBun%3D%26insttCd%3D%26orderBy%3D1%26recordCountPerPage%3D10%3C%21%23%25%3EtbidListUrl%3C%40%25%7…tbidList.do%3Farea%3D%26areaNm%3D%26bidNm%3D%25C8%25AB%25BA%25B8%26bidSearchType%3D1%26budget%3D%26budgetCompare%3DUP%26detailPrdnm%3D%26detailPrdnmNo%3D%26fromBidDt%3D2021%252F08%252F29%26fromOpenBidDt%3D%26industry%3D%26industryCd%3D%26instNm%3D%26instSearchRangeType%3D%26intbidYn%3D1%26procmntReqNo%3D%26radOrgan%3D1%26recordCountPerPage%3D30%26refNo%3D%26regYn%3DY%26searchDtType%3D1%26searchType%3D1%26taskClCds%3D1%26toBidDt%3D2021%252F09%252F28%26toOpenBidDt%3D; ccsession=20210928194351000037c437c4cd36',
|
||||
'Host': 'www.g2b.go.kr:8101',
|
||||
'Referer': 'http://www.g2b.go.kr:8101/ep/tbid/tbidFwd.do?bidSearchType=1',
|
||||
'Upgrade-Insecure-Requests': '1',
|
||||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:92.0) Gecko/20100101 Firefox/92.0'
|
||||
}
|
||||
|
||||
resp = requests.get(url, headers=headers)
|
||||
resp.raise_for_status()
|
||||
resp.encoding='EUC-KR'
|
||||
html = resp.text
|
||||
|
||||
|
||||
bs = bs4.BeautifulSoup(html, 'html.parser')
|
||||
|
||||
trs = bs.select("table.table_list_tbidTbl tr")
|
||||
|
||||
res=[]
|
||||
|
||||
for i in range(len(trs) - 1):
|
||||
tds = trs[i + 1].select('td')
|
||||
tdsele = {}
|
||||
for j in range(len(tds)):
|
||||
if j == 0:
|
||||
tdsele["src"] = "나라장터"
|
||||
tdsele["term"] = sys.argv[1]
|
||||
tdsele["type"] = tds[j].getText().strip()
|
||||
tdsele["budget"] = ""
|
||||
tdsele["commitDate"] = ""
|
||||
elif j == 3:
|
||||
tdsele["name"] = tds[j].getText().strip()
|
||||
tdsele["detailurl"] = tds[j].select('a')[0].get('href').strip()
|
||||
elif j == 4:
|
||||
tdsele["dept"] = tds[j].getText().strip()
|
||||
elif j == 7:
|
||||
applyperiod = tds[j].getText().strip().split("(")
|
||||
tdsele["applyDateFrom"] = applyperiod[0]
|
||||
tdsele["applyDateTo"] = re.sub("\)","",applyperiod[1])
|
||||
res.append(tdsele)
|
||||
|
||||
print(res)
|
||||
58
conteenew_python_apps/bid/bid_s2b.py
Normal file
58
conteenew_python_apps/bid/bid_s2b.py
Normal file
@ -0,0 +1,58 @@
|
||||
import requests, sys, bs4, urllib, datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
term = sys.argv[1].encode('euc-kr')
|
||||
term = urllib.parse.quote_plus(term)
|
||||
|
||||
startdate = datetime.datetime.now() - relativedelta(months=2)
|
||||
enddate = datetime.datetime.now() + relativedelta(months=1)
|
||||
|
||||
startdate = startdate.strftime('%Y%m%d')
|
||||
enddate = enddate.strftime('%Y%m%d')
|
||||
|
||||
url = "https://www.s2b.kr/S2BNCustomer/stmo001.do"
|
||||
|
||||
dataa = "forwardName=list&pageNo=1&tender_num=&tender_step_code=&page_flag=&tender_sep1=1" + \
|
||||
"&tender_name=" + term + "&company_name_s=&tender_sep2=1" + \
|
||||
"&tender_date_start=" + startdate + "&tender_date_end=" + enddate + \
|
||||
"&tender_item=0001&city="
|
||||
|
||||
url = url + "?" + dataa
|
||||
|
||||
resp = requests.get(url)
|
||||
resp.raise_for_status()
|
||||
resp.encoding='EUC-KR'
|
||||
html = resp.text
|
||||
|
||||
bs = bs4.BeautifulSoup(html, 'html.parser')
|
||||
|
||||
trs = bs.select('table.td_dark_line tr')
|
||||
|
||||
newArr = []
|
||||
|
||||
for i in range(len(trs)):
|
||||
if i > 5:
|
||||
if i%2 == 0:
|
||||
txtSrc = bs4.BeautifulSoup(str(trs[i - 1]) + str(trs[i]), 'html.parser')
|
||||
newArr.append(txtSrc)
|
||||
|
||||
res = []
|
||||
|
||||
for i in range(len(newArr)):
|
||||
cnts = newArr[i].select('td')
|
||||
tdsele = {}
|
||||
tdsele["src"] = "s2b"
|
||||
tdsele["term"] = sys.argv[1]
|
||||
tdsele["type"] = cnts[2].getText().strip()
|
||||
tdsele["budget"] = ""
|
||||
tdsele["commitDate"] = ""
|
||||
tdsele["dept"] = cnts[6].getText().strip()
|
||||
tdsele["name"] = cnts[3].getText().strip()
|
||||
urlinfo = "https://www.s2b.kr/S2BNCustomer/stmo001.do?forwardName=view&tender_num=" + cnts[1].getText().strip()
|
||||
tdsele["detailurl"] = urlinfo
|
||||
tdsele["applyDateFrom"] = cnts[7].getText().strip()
|
||||
tdsele["applyDateTo"] = cnts[8].getText().strip()
|
||||
if tdsele["name"] != "":
|
||||
res.append(tdsele)
|
||||
|
||||
print(res)
|
||||
29
conteenew_python_apps/bid/bid_starbill.py
Normal file
29
conteenew_python_apps/bid/bid_starbill.py
Normal file
@ -0,0 +1,29 @@
|
||||
import requests, sys, bs4, urllib, locale
|
||||
|
||||
term = sys.argv[1]
|
||||
|
||||
url = "https://www.starbill.co.kr/comp/starbill/bidList.do"
|
||||
|
||||
data = {
|
||||
"pageIndex": 1,
|
||||
"bidDiv": 1,
|
||||
"searchCondition": "title",
|
||||
"searchKeyword": term
|
||||
}
|
||||
|
||||
headers = {
|
||||
"Accept": "text/html, application/xhtml+xml, image/jxr, */*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "ko",
|
||||
"Connection": "Keep-Alive",
|
||||
"Cookie": "JSESSIONID=33E5B26D4F4D7A9F93CC3F20914D4083; compNum=; _ga=GA1.3.1852339941.1633070307; _gid=GA1.3.1739891785.1633070307",
|
||||
"Host": "www.starbill.co.kr",
|
||||
"Referer": "https://www.starbill.co.kr/comp/main.do",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
|
||||
}
|
||||
|
||||
resp = requests.post(url, params=data, headers=headers)
|
||||
resp.raise_for_status()
|
||||
html = resp.text
|
||||
|
||||
print(html)
|
||||
BIN
conteenew_python_apps/color_profiles/AdobeRGB1998.icc
Executable file
BIN
conteenew_python_apps/color_profiles/AdobeRGB1998.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/AnimePalette.icc
Executable file
BIN
conteenew_python_apps/color_profiles/AnimePalette.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/AppleRGB.icc
Executable file
BIN
conteenew_python_apps/color_profiles/AppleRGB.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/BlackWhite.icc
Executable file
BIN
conteenew_python_apps/color_profiles/BlackWhite.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/BlacklightPoster.icc
Executable file
BIN
conteenew_python_apps/color_profiles/BlacklightPoster.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/CIERGB.icc
Executable file
BIN
conteenew_python_apps/color_profiles/CIERGB.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/CoatedFOGRA27.icc
Executable file
BIN
conteenew_python_apps/color_profiles/CoatedFOGRA27.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/CoatedFOGRA39.icc
Executable file
BIN
conteenew_python_apps/color_profiles/CoatedFOGRA39.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/CoatedGRACoL2006.icc
Executable file
BIN
conteenew_python_apps/color_profiles/CoatedGRACoL2006.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/CobaltCarmine.icc
Executable file
BIN
conteenew_python_apps/color_profiles/CobaltCarmine.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/ColorMatchRGB.icc
Executable file
BIN
conteenew_python_apps/color_profiles/ColorMatchRGB.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/ColorNegative.icc
Executable file
BIN
conteenew_python_apps/color_profiles/ColorNegative.icc
Executable file
Binary file not shown.
27
conteenew_python_apps/color_profiles/D50.camp
Executable file
27
conteenew_python_apps/color_profiles/D50.camp
Executable file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<cam:ColorAppearanceModel
|
||||
ID="http://schemas.microsoft.com/windows/2005/02/color/D50.camp"
|
||||
xmlns:cam="http://schemas.microsoft.com/windows/2005/02/color/ColorAppearanceModel"
|
||||
xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
|
||||
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
|
||||
<cam:ProfileName>
|
||||
<wcs:Text xml:lang="en-US">WCS profile for ICC viewing conditions</wcs:Text>
|
||||
</cam:ProfileName>
|
||||
<cam:Description>
|
||||
<wcs:Text xml:lang="en-US">Appropriate for a print in a D50 viewing booth</wcs:Text>
|
||||
</cam:Description>
|
||||
<cam:Author>
|
||||
<wcs:Text xml:lang="en-US">Microsoft Corporation</wcs:Text>
|
||||
</cam:Author>
|
||||
|
||||
<cam:ViewingConditions>
|
||||
<cam:WhitePointName>D50</cam:WhitePointName>
|
||||
<cam:Background X="19.3" Y="20.0" Z="16.5" />
|
||||
<cam:Surround>Average</cam:Surround>
|
||||
<cam:LuminanceOfAdaptingField>31.8</cam:LuminanceOfAdaptingField>
|
||||
<cam:DegreeOfAdaptation>1</cam:DegreeOfAdaptation>
|
||||
</cam:ViewingConditions>
|
||||
|
||||
</cam:ColorAppearanceModel>
|
||||
|
||||
27
conteenew_python_apps/color_profiles/D65.camp
Executable file
27
conteenew_python_apps/color_profiles/D65.camp
Executable file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<cam:ColorAppearanceModel
|
||||
ID="http://schemas.microsoft.com/windows/2005/02/color/D65.camp"
|
||||
xmlns:cam="http://schemas.microsoft.com/windows/2005/02/color/ColorAppearanceModel"
|
||||
xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
|
||||
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
|
||||
<cam:ProfileName>
|
||||
<wcs:Text xml:lang="en-US">WCS profile for sRGB viewing conditions</wcs:Text>
|
||||
</cam:ProfileName>
|
||||
<cam:Description>
|
||||
<wcs:Text xml:lang="en-US">Default profile for a sRGB monitor in standard viewing conditions</wcs:Text>
|
||||
</cam:Description>
|
||||
<cam:Author>
|
||||
<wcs:Text xml:lang="en-US">Microsoft Corporation</wcs:Text>
|
||||
</cam:Author>
|
||||
|
||||
<cam:ViewingConditions>
|
||||
<cam:WhitePointName>D65</cam:WhitePointName>
|
||||
<cam:Background X="19.0" Y="20.0" Z="21.78" />
|
||||
<cam:Surround>Average</cam:Surround>
|
||||
<cam:LuminanceOfAdaptingField>16.0</cam:LuminanceOfAdaptingField>
|
||||
<cam:DegreeOfAdaptation>1</cam:DegreeOfAdaptation>
|
||||
</cam:ViewingConditions>
|
||||
|
||||
</cam:ColorAppearanceModel>
|
||||
|
||||
BIN
conteenew_python_apps/color_profiles/DCDM_X'Y'Z'.icc
Executable file
BIN
conteenew_python_apps/color_profiles/DCDM_X'Y'Z'.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/DCI_P3.icc
Executable file
BIN
conteenew_python_apps/color_profiles/DCI_P3.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/EuroscaleCoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/EuroscaleCoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/EuroscaleUncoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/EuroscaleUncoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/FilmSceneUniversalPD.icc
Executable file
BIN
conteenew_python_apps/color_profiles/FilmSceneUniversalPD.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/GoldBlue.icc
Executable file
BIN
conteenew_python_apps/color_profiles/GoldBlue.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/GoldCrimson.icc
Executable file
BIN
conteenew_python_apps/color_profiles/GoldCrimson.icc
Executable file
Binary file not shown.
21
conteenew_python_apps/color_profiles/Graphics.gmmp
Executable file
21
conteenew_python_apps/color_profiles/Graphics.gmmp
Executable file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<gmm:GamutMapModel
|
||||
ID="http://schemas.microsoft.com/windows/2005/02/color/Graphics.gmmp"
|
||||
xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
|
||||
xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
|
||||
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
|
||||
<gmm:ProfileName>
|
||||
<wcs:Text xml:lang="en-US">Charts and graphs</wcs:Text>
|
||||
</gmm:ProfileName>
|
||||
<gmm:Description>
|
||||
<wcs:Text xml:lang="en-US">Appropriate for ICC saturation rendering intent workflows</wcs:Text>
|
||||
</gmm:Description>
|
||||
<gmm:Author>
|
||||
<wcs:Text xml:lang="en-US">Microsoft Corporation</wcs:Text>
|
||||
</gmm:Author>
|
||||
|
||||
<gmm:DefaultBaselineGamutMapModel>HueMap</gmm:DefaultBaselineGamutMapModel>
|
||||
|
||||
</gmm:GamutMapModel>
|
||||
|
||||
BIN
conteenew_python_apps/color_profiles/GreenRed.icc
Executable file
BIN
conteenew_python_apps/color_profiles/GreenRed.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/JapanColor2001Coated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/JapanColor2001Coated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/JapanColor2001Uncoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/JapanColor2001Uncoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/JapanColor2002Newspaper.icc
Executable file
BIN
conteenew_python_apps/color_profiles/JapanColor2002Newspaper.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/JapanColor2003WebCoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/JapanColor2003WebCoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/JapanColor2011Coated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/JapanColor2011Coated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/JapanWebCoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/JapanWebCoated.icc
Executable file
Binary file not shown.
21
conteenew_python_apps/color_profiles/MediaSim.gmmp
Executable file
21
conteenew_python_apps/color_profiles/MediaSim.gmmp
Executable file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<gmm:GamutMapModel
|
||||
ID="http://schemas.microsoft.com/windows/2005/02/color/MediaSim.gmmp"
|
||||
xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
|
||||
xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
|
||||
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
|
||||
<gmm:ProfileName>
|
||||
<wcs:Text xml:lang="en-US">Proofing - simulate paper/media color</wcs:Text>
|
||||
</gmm:ProfileName>
|
||||
<gmm:Description>
|
||||
<wcs:Text xml:lang="en-US">Appropriate for ICC absolute colorimetric rendering intent workflows</wcs:Text>
|
||||
</gmm:Description>
|
||||
<gmm:Author>
|
||||
<wcs:Text xml:lang="en-US">Microsoft Corporation</wcs:Text>
|
||||
</gmm:Author>
|
||||
|
||||
<gmm:DefaultBaselineGamutMapModel>HPMinCD_Absolute</gmm:DefaultBaselineGamutMapModel>
|
||||
|
||||
</gmm:GamutMapModel>
|
||||
|
||||
BIN
conteenew_python_apps/color_profiles/PAL_SECAM.icc
Executable file
BIN
conteenew_python_apps/color_profiles/PAL_SECAM.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/Pastel8Hues.icc
Executable file
BIN
conteenew_python_apps/color_profiles/Pastel8Hues.icc
Executable file
Binary file not shown.
21
conteenew_python_apps/color_profiles/Photo.gmmp
Executable file
21
conteenew_python_apps/color_profiles/Photo.gmmp
Executable file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<gmm:GamutMapModel
|
||||
ID="http://schemas.microsoft.com/windows/2005/02/color/Photo.gmmp"
|
||||
xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
|
||||
xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
|
||||
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
|
||||
<gmm:ProfileName>
|
||||
<wcs:Text xml:lang="en-US">Photography</wcs:Text>
|
||||
</gmm:ProfileName>
|
||||
<gmm:Description>
|
||||
<wcs:Text xml:lang="en-US">Appropriate for ICC perceptual rendering intent workflows</wcs:Text>
|
||||
</gmm:Description>
|
||||
<gmm:Author>
|
||||
<wcs:Text xml:lang="en-US">Microsoft Corporation</wcs:Text>
|
||||
</gmm:Author>
|
||||
|
||||
<gmm:DefaultBaselineGamutMapModel>SGCK</gmm:DefaultBaselineGamutMapModel>
|
||||
|
||||
</gmm:GamutMapModel>
|
||||
|
||||
BIN
conteenew_python_apps/color_profiles/Photoshop4DefaultCMYK.icc
Executable file
BIN
conteenew_python_apps/color_profiles/Photoshop4DefaultCMYK.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/Photoshop5DefaultCMYK.icc
Executable file
BIN
conteenew_python_apps/color_profiles/Photoshop5DefaultCMYK.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/ProPhoto.icm
Executable file
BIN
conteenew_python_apps/color_profiles/ProPhoto.icm
Executable file
Binary file not shown.
21
conteenew_python_apps/color_profiles/Proofing.gmmp
Executable file
21
conteenew_python_apps/color_profiles/Proofing.gmmp
Executable file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<gmm:GamutMapModel
|
||||
ID="http://schemas.microsoft.com/windows/2005/02/color/Proofing.gmmp"
|
||||
xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
|
||||
xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
|
||||
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'>
|
||||
|
||||
<gmm:ProfileName>
|
||||
<wcs:Text xml:lang="en-US">Proofing and line art</wcs:Text>
|
||||
</gmm:ProfileName>
|
||||
<gmm:Description>
|
||||
<wcs:Text xml:lang="en-US">Appropriate for ICC relative colorimetric rendering intent workflows</wcs:Text>
|
||||
</gmm:Description>
|
||||
<gmm:Author>
|
||||
<wcs:Text xml:lang="en-US">Microsoft Corporation</wcs:Text>
|
||||
</gmm:Author>
|
||||
|
||||
<gmm:DefaultBaselineGamutMapModel>HPMinCD_Relative</gmm:DefaultBaselineGamutMapModel>
|
||||
|
||||
</gmm:GamutMapModel>
|
||||
|
||||
BIN
conteenew_python_apps/color_profiles/RSWOP.icm
Executable file
BIN
conteenew_python_apps/color_profiles/RSWOP.icm
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/RedBlueYelllow.icc
Executable file
BIN
conteenew_python_apps/color_profiles/RedBlueYelllow.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/SMPTE-C.icc
Executable file
BIN
conteenew_python_apps/color_profiles/SMPTE-C.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/SiennaBlue.icc
Executable file
BIN
conteenew_python_apps/color_profiles/SiennaBlue.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/Smokey.icc
Executable file
BIN
conteenew_python_apps/color_profiles/Smokey.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/TealMagentaGold.icc
Executable file
BIN
conteenew_python_apps/color_profiles/TealMagentaGold.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/TotalInkPreview.icc
Executable file
BIN
conteenew_python_apps/color_profiles/TotalInkPreview.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/TurquoiseSepia.icc
Executable file
BIN
conteenew_python_apps/color_profiles/TurquoiseSepia.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/USNewsprintSNAP2007.icc
Executable file
BIN
conteenew_python_apps/color_profiles/USNewsprintSNAP2007.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/USSheetfedCoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/USSheetfedCoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/USSheetfedUncoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/USSheetfedUncoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/USWebCoatedSWOP.icc
Executable file
BIN
conteenew_python_apps/color_profiles/USWebCoatedSWOP.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/USWebUncoated.icc
Executable file
BIN
conteenew_python_apps/color_profiles/USWebUncoated.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/UncoatedFOGRA29.icc
Executable file
BIN
conteenew_python_apps/color_profiles/UncoatedFOGRA29.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/VideoHD.icc
Executable file
BIN
conteenew_python_apps/color_profiles/VideoHD.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/VideoHD16-235.icc
Executable file
BIN
conteenew_python_apps/color_profiles/VideoHD16-235.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/VideoNTSC.icc
Executable file
BIN
conteenew_python_apps/color_profiles/VideoNTSC.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/VideoNTSC16-235.icc
Executable file
BIN
conteenew_python_apps/color_profiles/VideoNTSC16-235.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/VideoPAL.icc
Executable file
BIN
conteenew_python_apps/color_profiles/VideoPAL.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/VideoPAL16-235.icc
Executable file
BIN
conteenew_python_apps/color_profiles/VideoPAL16-235.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/WebCoatedFOGRA28.icc
Executable file
BIN
conteenew_python_apps/color_profiles/WebCoatedFOGRA28.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/WebCoatedSWOP2006Grade3.icc
Executable file
BIN
conteenew_python_apps/color_profiles/WebCoatedSWOP2006Grade3.icc
Executable file
Binary file not shown.
BIN
conteenew_python_apps/color_profiles/WebCoatedSWOP2006Grade5.icc
Executable file
BIN
conteenew_python_apps/color_profiles/WebCoatedSWOP2006Grade5.icc
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user