티스토리 뷰

네이버의 OpenAPI를 이용하여 네이버 카페에 글을 올리는 등의 작업을 위해서는 액세스 토큰 획득이 선행돼야 한다.

애플리케이션 등록 등의 사전 작업은 네이버 개발자 센터의 내용을 참고하면 된다(아래 링크)

https://developers.naver.com/docs/common/openapiguide/appregister.md

 

사전 준비 사항 - Open API 가이드

사전 준비 사항 네이버 오픈API를 사용하려면 먼저 네이버 개발자 센터에서 애플리케이션을 등록하고 클라이언트 아이디와 클라이언트 시크릿을 발급받아야 합니다. 클라이언트 아이디와 클라

developers.naver.com

여기에서는 액세스 토큰을 획득하기 위한 파이써너 코드를 게시한다.

 

    def GetAccessToken(self, params=None):
#       Reference Link : https://junbenchmarking.tistory.com/373
        
        naver_redirect = cConstants.REDIRECTURI_NAVER
        invalidParam = False
        if not params:
            naver_cid = d.get('ClientID')
            naver_csec = d.get('ClientSecret')
            id =  #ID  직접 입력
            pw =  #비번은 직접 입력
            state = cConstants.NAVERSTATE
        else:
            naver_cid = params.get('Navercafe_cid')
            naver_csec = params.get('Navercafe_csed')
            id = params.get('Navercafe_id')
            pw = params.get('Navercafe_pw')
            state = params.get('Navercafe_state')
            if not naver_cid:
                print('[!!!] No cID')
                invalidParam = True
            if not naver_csec:
                print('[!!!] No cSEC')
                invalidParam = True
            if not id:
                print('[!!!] No ID')
                invalidParam = True
            if not pw:
                print('[!!!] No PW')
                invalidParam = True
            if not state:
                state = "SOMESTATE"
        if invalidParam:
            self.AccessToken = None
            return
        webDriver = bWebControl.GetWebDriver()
        webDriver = bWebControl.AccessPage(webDriver, cConstants.URL_NAVERLOGIN)
        if not webDriver: return;

        webDriver.execute_script("document.getElementsByName('id')[0].value=\'" + id + "\'")
        # time.sleep(1)
        webDriver.execute_script("document.getElementsByName('pw')[0].value=\'" + pw + "\'")
        # time.sleep(1)
        param11 = {
            'TagType': "xpath",
            'TagValue': "//*[@id='log.login']"
        }
        elem11 = bWebControl.GetElement(webDriver, param11)
        bWebControl.TreatClick(webDriver, elem11, 3)

        code = None
        access_token = None

        # code get
        if not code:
            req_url1 = f'https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id={naver_cid}&redirect_uri={naver_redirect}&state={state}'
            print(req_url1)

        webDriver = bWebControl.AccessPage(webDriver, req_url1, 3)
        if not webDriver: return;
        try:
            param12 = {
                'TagType': "xpath",
                'TagValue': '//*[@class="btn_unit_on"]'
            }
            elem12 = bWebControl.GetElement(webDriver, param12)
            bWebControl.TreatClick(webDriver, elem12, 2)
        except Exception as e:
            #print("[?-92]", str(e))
            pass
 
 		resUrl = webDriver.current_url
        # 'https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=DyHjd5fFNiocraAuT5tR&redirect_uri=https://www.bilientsvc.net/NaverAPI/callback.php&state=SOMESTATE'
        index1 = resUrl.find("code=")
        tempUrl1 = resUrl[index1+5:]
        index2 = tempUrl1.find("&")
        naverCode = tempUrl1[0:index2]
        print("[Code]", naverCode)

        #access token 발급
        if not access_token:
            #login_token
            # base64 encode get
            clientConnect = naver_cid + ":" + naver_csec
            clidst_base64 = base64.b64encode(bytes(clientConnect, "utf8")).decode()
 
            req_url2 = f'https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id={naver_cid}&client_secret={naver_csec}&redirect_uri={naver_redirect}&code={naverCode}&state={state}'
        webDriver = bWebControl.AccessPage(webDriver, req_url2)
        if not webDriver: return;
        response1 = webDriver.page_source
        #print(response1)

        param13 = {
            'TagType': "html",
            'TagValue': "body"
        }
        elem1 = bWebControl.GetElement(webDriver, param13)
        response11 = elem1.text
        
        index1 = response11.find('{')
        index2 = response11.find('}')
        response2 = response11[index1:]
        json1 = json.loads(response2)
        print(json1)
        # json1 = { 'access_token', 'refresh_token', 'token_type', 'expires_in'}
        try:
            self.AccessToken = json1['access_token']   
        except:
            self.AccessToken = '---'

        webDriver.quit()


        code = None
        access_token = None

        # code get


        return 1

 

반응형