First Commmit

This commit is contained in:
김용성 2023-11-03 14:49:12 +09:00
commit 81cbc09238
215 changed files with 52633 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.DS_Store
.idea/*
*/.idea/*
*/__pycache__/*

268
TheChanges/dohl.py Normal file
View 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
View 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
View 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
View 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
View 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
View 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())

Binary file not shown.

BIN
automations/now/now.xlsx Normal file

Binary file not shown.

BIN
automations/plto.xlsx Normal file

Binary file not shown.

52
automations/sendmail.py Normal file
View 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

Binary file not shown.

BIN
automations/test11.xlsx Normal file

Binary file not shown.

View 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
View 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
View 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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
brandTermExtract/dic.xlsx Normal file

Binary file not shown.

Binary file not shown.

84
brandTermExtract/main.py Normal file
View 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이름으로 저장.

Binary file not shown.

View File

@ -0,0 +1,2 @@
import falcon.asgi
app = falcon.asgi.App()

View 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' + ' =========================================')

View 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)

View 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)

View 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&regYn=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)

View 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)

View 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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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>

View 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>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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>

Binary file not shown.

Binary file not shown.

View 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>

Binary file not shown.

Binary file not shown.

View 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>

Binary file not shown.

View 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>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More