인터넷에서 보고 복붙한 쿠팡 상품 자동등록 프로그램입니다.

조회수 389회

import datetime import hmac import hashlib import os import time import requests import json import urllib.request import secrets from urllib.parse import urlencode from wordpress_xmlrpc import Client from wordpress_xmlrpc import WordPressPost from wordpress_xmlrpc.methods import posts

class coupangMgr: DOMAIN = "https://api-gateway.coupang.com"

# HMAC 인증정보 생성
def generateHmac(self, method, url, secretKey, accessKey):
    path, *query = url.split("?")
    os.environ["TZ"] = "GMT+0"
    datetime = time.strftime('%y%m%d') + 'T' + time.strftime('%H%M%S') + 'Z'
    message = datetime + method + path + (query[0] if query else "")
    signature = hmac.new(bytes(secretKey, "utf-8"), message.encode("utf-8"), hashlib.sha256).hexdigest()
    return "CEA algorithm=HmacSHA256, access-key={}, signed-date={}, signature={}".format(accessKey, datetime,
                                                                                          signature)

def get_productsdata(self, request_method, authorization, keyword, limit):
    URL = "/v2/providers/affiliate_open_api/apis/openapi/products/search?keyword=" + urllib.parse.quote(
        keyword) + "&limit=" + str(limit)
    url = "{}{}".format(self.DOMAIN, URL)
    response = requests.request(method=request_method, url=url, headers={"Authorization": authorization,
                                                                         "Content-Type": "application/json;charset=UTF-8"})
    retdata = json.dumps(response.json(), indent=4).encode('utf-8')
    jsondata = json.loads(retdata)
    data = jsondata['data']
    productdata = data['productData']
    return productdata

if __name__ == '__main__':
    method = 'GET'  # 정보를 얻는것이기 때문에 GET
    keyword = 'roket'  # 검색할 키워드, 쿠팡에서 검색하는거랑 결과가 동일합니다.
    limit = 20  # 몇개의 정보를 가져올지 설정. 상위부터 가져옵니다.
    access_key = '***'  # API access key
    secret_key = '***'  # API secret key
    URL = "/v2/providers/affiliate_open_api/apis/openapi/products/search?keyword=" + urllib.parse.quote(
        keyword) + "&limit=" + str(limit)

    test = coupangMgr()
    authorization = test.generateHmac(method, URL, secret_key, access_key)  # HMAC 생성
    productdata = test.get_productsdata(method, authorization, keyword, limit)  # API 호출
    productCount = len(productdata)
    i = 0
    while i < productCount:
        print(productdata[i]['productId'])
        print(productdata[i]['productName'])
        print(productdata[i]['productPrice'])
        print(productdata[i]['productImage'])
        print(productdata[i]['productUrl'])
        print(productdata[i]['keyword'])
        print(productdata[i]['rank'])
        print(productdata[i]['isRocket'])
        print(productdata[i]['isFreeShipping'])
        print(datetime.datetime.now())
        strProductId = str((productdata[i]['productId']))
        strProductName = (productdata[i]['productName'])
        strProductPrice = str((productdata[i]['productPrice']))
        strProductImage = (productdata[i]['productImage'])
        strProductUrl = (productdata[i]['productUrl'])
        strKeyword = (productdata[i]['keyword'])
        strRank = str((productdata[i]['rank']))
        strIsRocket = bool(productdata[i]['isRocket'])
        strIsFreeShipping = bool(productdata[i]['isFreeShipping'])
        if strIsRocket == True:
            strIFRocket = '로켓배송 가능 상품이라 로켓배송 지역이면, 로켓배송으로 빠르게 배송 받아보실 수 있습니다.'
        else:
            strIFRocket = '로켓배송 가능한지는 아래 배송도착일 확인 링크에서 확인 가능합니다.'

        if strIsFreeShipping == True:
            strIFFreeship = '배송비는 무료이며,'
        else:
            strIFFreeship = '배송비는 아래 배송도착일 확인 링크에서 확인 가능하며,'

            client = Client("https://***/xmlrpc.php", "***", "***")
            postx = WordPressPost()
            postx.title = '가성비 노트북 ' + strProductName
            postx.slug = strProductName
            postx.content = '''<p><span style="font-family: Helvetica;">오늘 소개해드릴 상품은 가성비 좋은 노트북 ''' + strProductName + ''' 입니다.</span></p>
            <p><span style="font-family: Helvetica;">이 상품은 쿠팡에서 ''' + strKeyword + ''' 조회시 추천 순위 ''' + strRank + '''위 입니다.</span></p>
            <p><span style="font-family: Helvetica;">''' + strKeyword + ''' 인기순위, ''' + strKeyword + ''' 가격정보는 아래 본문에서 확인 가능합니다.</span></p>
            <p><span style="font-family: Helvetica; color: rgb(40, 50, 78);">(업데이트 날짜 : ''' + time.strftime(
                '%y-%m-%d') + ''')</span></p>
            <p><span style="font-family: Helvetica;">상품별 추천순위, 판매가격, 배송비, 로켓배송 가능여부, 상품사진을 확인 하실 수 있습니다.</span></p>
            <p><span style="font-family: Helvetica;"><br></span></p>
            <h1><span style="font-family: Helvetica; font-size: 19px; color: rgb(209, 72, 65);">''' + strProductName + '''</span></h1>
            <p><span style="font-family: Helvetica;"><br></span></p>
            <h2><span style="font-family: Helvetica; font-size: 19px; color: rgb(243, 121, 52);">▶ 판매가격</span></h2>
            <p><span style="font-family: Helvetica;">가격은 <span style="color: rgb(44, 130, 201);">''' + strProductPrice + '''원</span> 입니다.</span></p>
            <p><span style="font-family: Helvetica;">(아래 링크에서 현재 가격을 확인 하세요.)</span></p>
            <p><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><span style="font-family: Helvetica;"><strong>★ 현재가격 보기 ★</strong></span></a></p>
            <p><span style="font-family: Helvetica;"><br></span></p>
            <h2><span style="font-family: Helvetica; font-size: 19px; color: rgb(243, 121, 52);">▶ 배송비, 로켓배송</span></h2>
            <p><span style="font-family: Helvetica;">''' + strIFFreeship + ''',</span></p>
            <p><span style="font-family: Helvetica;">''' + strIFRocket + '''</span></p>
            <p><span style="font-family: Helvetica;">(배송비, 로켓배송 가능 여부가 변동될 수 있으니 아래 링크에서 확인하세요.)</span></p>
            <p><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><span style="font-family: Helvetica;"><strong>★ 배송비, 로켓배송 보기 ★</strong></span></a></p>
            <p><span style="font-family: Helvetica;"><br></span></p>
            <h2><span style="font-family: Helvetica; font-size: 19px; color: rgb(243, 121, 52);">▶ 상품 상세정보, 구매후기</span></h2>
            <p><span style="font-family: Helvetica;">추가적인 상품정보, 상품사진 및 구매후기는 아래 상품정보 상세보기에서 확인 가능합니다.</span></p>
            <p><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><span style="font-family: Helvetica;"><strong>★ 상품정보 상세보기 ★</strong></span></a></p>
            <p><span style="font-family: Helvetica;"><br></span></p>
            <h2><span style="font-family: Helvetica; font-size: 19px; color: rgb(243, 121, 52);">▶ 상품사진</span></h2>
            <p><img src="''' + strProductImage + '''"></p>
            <p><br></p>'''
            postx.terms_names = {
                'post_tag': [strKeyword + ' 추천', strKeyword + ' 순위', strKeyword + ' 비교', strKeyword + ' 가격비교'],
                'category': ['Coupangs']
            }
            postx.post_status = 'publish'
            client.call(posts.NewPost(postx))
            time.sleep(10)
            i = i + 1

아래와 같은 에러가 발생합니다. 어떻게 수정해야 할까요 ? 시크릿키, 액세스키, 도메인 계정정보는 입력한 전제입니다.

C:\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/PycharmProjects/pythonProject/test.py Traceback (most recent call last): File "C:\PycharmProjects\pythonProject\test.py", line 16, in class coupangMgr: File "C:\PycharmProjects\pythonProject\test.py", line 50, in coupangMgr test = coupangMgr() NameError: name 'coupangMgr' is not defined

Process finished with exit code 1

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 음... 설마 싶긴 한데요 if __name__ == '__main__': 있는 라인부터 마지막 라인까지 전부 들여쓰기를 한 단계 줄여보세요. 엽토군 2021.11.28 23:28
  • 감사합니다~ 알려주신 방법으로 에러는 해결되었습니다. 그런데 실제로 포스팅이 안되고 있네요 ㅜㅜ 왜일까요 알 수 없는 사용자 2021.11.29 10:16
  • 거기서부터는 또 다른 문제인거 같네요 잘 모르겠습니다. 엽토군 2021.11.29 10:48

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)