편집 기록

편집 기록
  • 프로필 유동욱님의 편집
    날짜2021.12.01

    KeyError 문제


    # coding: utf-8
    
    import hmac
    import hashlib
    import os
    import time
    import requests
    import json
    import urllib.request
    from selenium import webdriver
    import secrets
    from urllib.parse import urlencode
    from wordpress_xmlrpc import Client
    from wordpress_xmlrpc import WordPressPost
    from wordpress_xmlrpc.methods import posts
    
    __author__ = "wdgg<>"
    
    
    class cupangMgr:
        DOMAIN = "https://api-gateway.coupang.com"
    
        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 = '아이패드'  # 검색할 키워드, 쿠팡에서 검색하는거랑 결과가 동일합니다.
        limit = 1  # 몇개의 정보를 가져올지 설정. 상위부터 가져옵니다.
        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 = cupangMgr()
        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("", "", "")
                postx = WordPressPost()
                postx.title = '<p><span style="color:#ececec; background:#e81949; padding:9px 12px 7px 12px; border-radius:30px;">구매하기</span></p>' + 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; font-size:24px;"><strong>바로 구매하기</strong></span></a></p>
                <p><span style="font-family: Helvetica;"><br></span></p>
                <h2><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><span style="font-family: Helvetica; font-size: 19px; color: rgb(243, 121, 52);">▶ 상품사진</span></a></h2>
                <p><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><img src="''' + strProductImage + '''"></a></p>
                <p><span style="font-family: Helvetica;">이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.</span></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(5)
                i = i + 1
    

    이걸로 결국 워드프레스에 자동 포스팅 잘 실행하고 있었는데요, 갑자기 아래와 같은 에러가 발생합니다.. 어떻게 해결해야 할까요

    Traceback (most recent call last):
      File "C:\Users\13mile\PycharmProjects\pythonProject\3.py", line 56, in <module>
        productdata = test.get_productsdata(method, authorization, keyword, limit)  # API 호출
      File "C:\Users\13mile\PycharmProjects\pythonProject\3.py", line 40, in get_productsdata
        data = jsondata['data']
    KeyError: 'data'
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2021.12.01

    KeyError 문제


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

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

    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 = '아이패드' # 검색할 키워드, 쿠팡에서 검색하는거랑 결과가 동일합니다. limit = 1 # 몇개의 정보를 가져올지 설정. 상위부터 가져옵니다. 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 = cupangMgr()
    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("http://***/xmlrpc.php", "**", "**")
            postx = WordPressPost()
            postx.title = '<p><span style="color:#ececec; background:#e81949; padding:9px 12px 7px 12px; border-radius:30px;">구매하기</span></p>' + 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; font-size:24px;"><strong>바로 구매하기</strong></span></a></p>
            <p><span style="font-family: Helvetica;"><br></span></p>
            <h2><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><span style="font-family: Helvetica; font-size: 19px; color: rgb(243, 121, 52);">▶ 상품사진</span></a></h2>
            <p><a href="''' + strProductUrl + '''" rel="noopener noreferrer" target="_blank"><img src="''' + strProductImage + '''"></a></p>
            <p><span style="font-family: Helvetica;">이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.</span></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(5)
            i = i + 1
    

    쿠팡 상품을 워드프레스에 자동으로 포스팅하는 코드인데 잘 작동되다가 갑자기 아래와 같은 에러가 발생합니다. 어떻게 해결해야 할까요..

    C:\PycharmProjects\pythonProject1\venv\Scripts\python.exe C:/PycharmProjects/pythonProject1/test.py Traceback (most recent call last): File "C:\PycharmProjects\pythonProject1\test.py", line 59, in productdata = test.get_productsdata(method, authorization, keyword, limit) # API 호출 File "C:\PycharmProjects\pythonProject1\test.py", line 42, in get_productsdata data = jsondata['data'] KeyError: 'data'

    Process finished with exit code 1