본문 바로가기

카테고리 없음

소싱기 제작 #4 썸네일 다운로드 및 벤치마킹 상품 구분

안녕하세요. 부업아빠입니다.

 

이번 강의는 많은 분들이 궁금해하시면서 조금 어렵게 느껴질수도 있을것 같은데요. 쇼핑페이지에서 썸네일 이미지를 다운로드하는 방법과 엑셀에 저장된 정보들을 기반으로 원치 않는 상품들은 셀 배경에 회색처리하는 방법을 알아보겠습니다.

 

 

(12178라인)

먼저 썸네일 이미지 다운받는 방법입니다.

L1 라벨의 첫째줄에 보시면 해당 쇼핑몰 페이지의 전체요소를 info라는 변수에 가져왔습니다. 전체요소를 문서로 펼쳐본다면 보통 200페이지가 넘는 막대한 분량이 나옵니다. 여기서 1위 상품의 썸네일 주소를 찾아보겠습니다. 

본 게시글 하단에 첨부드린 info변수 문서파일을 여시고 Ctrl+F를 눌러 검색어창에 imageurl 텍스트를 넣어봅니다. 검색된 부분부터 뒤로 어느정도 긁어보시면 imageUrl":"https://shopping-phinf.pstatic.net/main_1490064/14900649206.20191213104654.jpg","additionalImageCount 이런 텍스트가 보이실겁니다. 여기서 http부터 .jpg 까지가 이미지주소입니다. 이 부분만 가져오기 위해서 아래처럼 3토막으로 나눠보겠습니다.

 

2번에 해당하는 이미지주소를 가져오기 위헤 먼저 1번을 변수명 search1으로, 3번을 변수명 search2로 지정하겠습니다. 

 

(12201라인) StringGetPos, searchStart, info,%search1%    

위의 코드를 해석하면 info변수 (HTML소스내용 전체)에서 search1변수가 시작되는 지점, 즉 "imageUrl":" 텍스트의 시작지점인 첫번째 쌍따옴표의 위치(Pos)를 찾아 searchStart라는 변수에 저장하겠다는 의미입니다.

 

(12202라인) StringGetPos, searchEnd, info,%search2%

마찬가지로 search2변수가 시작되는 지점, 즉 ","additionalImageCount 의 시작 지점인 첫번째 쌍따옴표(")의 위치(Pos)를 찾아 searchEnd라는 변수에 저장하겠다는 의미입니다.

 

즉 A지점이 searchStart, B지점이 searchEnd변수가 됩니다.

이번엔 B지점을 Start변수, C지점을 End변수라고 가정했을때 변수를 어떻게 정의를 내릴수 있을까요. 이해를 위해서 거리적으로 정의를 내린다고 가정했을때. 그리고 A와 B사이의 거리가 14cm라면 Start(B) 변수는 A로부터 14cm 떨어진. A+14라고도 정의할 수 있습니다. 

 

(12203라인) Start:= searchStart+14

그래서 위와같이 정의할 수 있습니다. 여기서 14는 문자열의 길이단위(byte) 인데요. 숫자 영어 한글에 따라 한글자당 byte 수가 다릅니다. 저는 이걸 한번에 14라고 측정하기 어려워서 숫자를 조금씩 바꿔가며 맞는 답이 나올때까지 조금씩 수정하는 방식으로 만들었습니다. 

 

(12204라인) End:= searchEnd+1

같은 방식으로 숫자를 바꿔가며 확인했고 0이 아닌 +1이었을때 정확한 결과값이 나왔습니다.

 

(12205라인) Length := End - Start

그렇다면 위 그림에서와 같이 End길이에서 Start길이를 빼면 이미지주소의 길이가 나오겠죠. 지금까지 배운것과 이미지주소의 길이를 이용해서 이미지주소만 가져와보겠습니다.

 

(12206라인) StringMid, img, info, Start, Length

위의 코드를 해석하자면 info변수에서(HTML소스에서) Start지점을 찾고 (이미지주소 시작지점) 그 지점에서 이미지길이만큼 잘라내서 img 변수에 저장한다. 즉 이미지주소만 추출하여 img 변수로 만들었습니다. 맞게 되었는지는 위 코드의 다음줄에 msgbox %img% 코드를 넣어보시면 메세지 팝업으로 주소내용을 확인해보실 수 있습니다.

 

(12210라인) UrlDownloadToFile, %img%, %todaypath%\%imgname%.jpg

주소에 해당하는 이미지를 다운로드하는 명령입니다. img변수 즉 이미지주소를 우측의 경로와 파일명으로 다운로드 하겠다는 의미입니다. 예전에 경로 설정하였던 문서\★Listing\오늘날짜_카테고리명\파일명.jpg 형식으로 저장됩니다.

 

다음은 상품명 체크입니다. 내가 타겟으로 삼는 키워드들을 설정해놓구요. 상품명에 그 키워드가 있다면 해당 키워드만 엑셀상에서 붉게 보입니다. 좋은 키워드를 표시하기 보다는 피해야 할 키워드를 설정하여 곤란한 상황을 예방하는데 도움이 되고자 추가한 부분입니다. 

위의 이미지에서 보시면 어떻게 추가하시는지 감이 오실겁니다. 폴로라는 브랜드를 붉게 표시하고 싶다면 TitleCheck6 라벨에서 끝부분인 WordColor2("바른핏") 바로옆에 WordColor2("폴로")라고 써주면 되겠죠. 

라벨이 6개로 분류된 이유는 하나의 라벨에 너무 많은 키워드가 들어가면 명령 오류가 납니다. 5-60개 넘어가면 반드시 라벨을 추가해서 분리해주시구요. 

예를 들어 TitleCheck6 라벨도 언젠가 5~60개가 넘어갈텐데 그때는 TitleCheck5라벨에서 한것처럼 return 윗줄에 고서브 명령 추가해주시면 됩니다. 즉 지금 추가한다면 아래와 같겠죠.

TitleCheck6:
WordColor2("Barbie")WordColor2("바비")WordColor2("일상공감")WordColor2("걸어보게")WordColor2("바른핏")

gosub, TitleCheck7
return

 

TitleCheck7:

WordColor2("새로운키워드")

return

 

이런식으로 마지막라벨에서는 gosub 없이 return만 만나서 원래 위치로 돌아갈수 있도록 해주시면 됩니다. 

(12324 라인) If (InStr(Mallname1,"플래티넘") or InStr(Mallname1,"프리미엄") or InStr(Mallname1,"쿠팡") or InStr(Mallname1,"aliexpress") or InStr(dayTotal,"찜하기0") or InStr(dayTotal,"찜하기1") or InStr(dayTotal,"찜하기2") or InStr(dayTotal,"찜하기3") or InStr(dayTotal,"찜하기4") or InStr(dayTotal,"찜하기5") or InStr(dayTotal,"찜하기6") or InStr(dayTotal,"찜하기7") or InStr(dayTotal,"찜하기8") or InStr(dayTotal,"찜하기9") or InStr(dayTotal,"찜하기10"))

 

이번엔 쇼핑몰명(또는 스토어)/구매/리뷰/찜수 등을 통한 필터링입니다.

저는 쿠팡은 아이템위너 혹시 묶일까봐 가급적 안하고 있습니다. 알리익스프레스 제품들도 반응이 생각보다 좋지 않았습니다. HTML 요소에서 보면 쿠팡은 쿠팡 또는 플래티넘, 알리는 aliexpress 또는 프리미엄 이런식으로 표시가 되더군요. 그래서 엑셀에서 상품명이 기입된 셀에 위와 같은 몇가지 몰에 해당되는 키워드가 존재하면 셀배경 컬러를 회색으로 표시되도록 지정하였습니다. 특정키워드가 들어갔을때 무엇인가를 하겠다라는 조건문은 Ifinstring 이며 그 대상키워드를 여러개 쓸때는 위와같이 If (InStr(변수명,"키워드1") or InStr(변수명,"키워드2")) 이런식으로 사용해주시면 됩니다. 변수명 Mallname1은 웹페이지에서 쇼핑몰 부분 요소입니다. daTotal 변수는 등록일자/구매/리뷰 등이 표시된 요소 부분입니다. 저는 찜하기의 경우 11개 이상부터 확인하는데 이부분들은 여러분들께서 자유롭게 수정 가능하겠죠. 위 조건이 참이라면 바로 회색 처리하지 않고 다음라벨로 이동하여 한번 더 검토합니다. 아래를 보겠습니다.

 

storeCheck2:
X3 := ComObjActive("Excel.Application")
If (InStr(dayTotal,"구매") or InStr(dayTotal,"리뷰"))
{
gosub,storeCheck3 
return   
}
else
{
X3.range(X3.activecell.offset(0,-2), X3.activecell.offset(0,25)).Interior.Color := 14474460  ;옅은 회색
return
}
return

 

쿠팡인데 찜하기가 1개밖에 없어서 회색처리 대상이지만 구매나 리뷰가 있다면 storeCheck3 라벨로 이동하고, 없다면 최종적으로 회색처리 하겠다는 의미입니다. 구매나 리뷰가 있다 가정하고 storeCheck3  라벨로 이동해서 보겠습니다.

 

storeCheck3:
X3 := ComObjActive("Excel.Application")
If (InStr(Mallname1,"플래티넘") or InStr(Mallname1,"프리미엄") or InStr(Mallname1,"쿠팡") or InStr(Mallname1,"aliexpress"))
{
X3.range(X3.activecell.offset(0,-2), X3.activecell.offset(0,25)).Interior.Color := 14474460  ;옅은 회색
return   ;구매나 리뷰 있더라도 쿠팡이나 알리익스프레스면 회색처리
}
else
{
return ;찜하기10 이하라도 구매나 리뷰 있으면 회색처리 안하는걸로..
}
return

 

찜하기가 1이라 회색처리 대상이지만 벤치마킹할 가능성이 있기에 체크2라벨로 이동했고 구매나 리뷰가 있어서 마지막 검열인 체크3까지 왔습니다. 하지만 체크3에서 보이듯 구매나 리뷰가 있더라도 쿠팡이나 알리는 벤치마킹하지 않기로 하여 회색처리 됩니다. 쿠팡이나 알리가 아니라면 벤치마킹 후보로 즉 회색처리하지 않고 return을 만나서 돌아갑니다. 이런식으로 자유롭게 수정하셔서 다른 요소들에 대한 부분들도 조건을 걸어 필터링 해주시면 됩니다.

 

마지막으로 등록일자 체크입니다, 구매대행은 트렌디한/독특한/무거운/매니악한/한시적시즌성/인증 상품 등이 잘 팔리지만 최신성 또한 중요한 부분이라 생각합니다. 그래서 현재를 기준으로 등록한지 몇개월 이상 지난 제품은 스토어 체크처럼 엑셀의 해당라인을 회색처리하여 시각적으로 차등화합니다. 이 부분은 제가 직접 계산하고 테스트해보며 수식을 넣은거라 여러분께서 고쳐야할 부분만 말씀드리겠습니다.

 

(12399 라인) If (monthGap>4)  ; 5개월이상 차이나면 회색음영 (4개월차까지 벤치마킹)

(12412 라인) If (monthGap>4)  ;5개월이상 차이나면 회색

 

위의 두군데 빨간글씨만 수정해주시면 됩니다. 현재 8월 기점으로 6월 제품까지만 벤치마킹 하겠다면 4를 2로 바꿔주시면 되며 5월부터 그이상 과거 상품들(5월 포함)은 회색 처리됩니다.

 

여기까지인데 오늘은 조금 난해한 부분도 있죠. 저도 완전히 이해하면서 코드를 작성한게 아니기 때문에 이해시켜드리기에 어려운 코드는 가급적 여러분들께서 앞으로 수정하시는데에 필요한 부분만 말씀드리고 넘어가려 합니다. 흐름만 이해하고 차후 프로그램 쓰시면서 기능 수정되었으면 하는 부분 저에게 의견주시구요. 그때그때 개선해나가는것이 시간적으로 좋을것 같네요. 다음은 카테고리 벤치마킹 마지막 강의가 될것 같고 다음 강의 끝나면 카테고리 벤치마킹 파일은 프로그램으로 만드실 수 있을것 같습니다. 그럼 다음에 뵙겠습니다. ^^ 

 

 

 

 

부아소싱기 4강.ahk
0.35MB
info변수(html소스내용).docx
0.12MB