이력

  • 2020.02.02 포스팅

안녕하세요.
많이 늦었죠? ㅎㅎ, 쓰기가 너무 귀찮아요..ㅋㅋ
사실 요즘에는 쿠팡 상품도 안올리고 있어요. 귀찬쓰..
아무튼 오늘도 시작하겠습니다. 과정이 길게 느껴질수도 있는데,
어렵지는 않아요. 하나하나 따라 하시면 금방하실 수 있어요.

이번 포스트에서 설명할 내용

  • 네이버 블로그 API 이용해서 글 올리기

네이버 블로그 API 글쓰기 절차

    1. 네이버 블로그 API 신청 ( = 애플리케이션 등록)
    1. API 정보 확인 하기 (Client ID, Client Secret 확인)
    1. 파이썬으로 블로그 API 활용해 글 올리기

1. 네이버 블로그 API 신청 ( = 애플리케이션 등록)

  • API를 사용하려면 우선 API 사용신청을 해야 겠죠? 아래의 링크를 타고 들어가서 오픈 API 이용신청을 누르세요.
  • 링크 : https://developers.naver.com/products/blog/ 신청누르기
  • 그러면 이제 신청화면이 나옵니다. 이름은 원하는대로 설정하시면 됩니다. 사용 API는 수정하실께 없어요.
  • 이미 우리가 사용할 네아로, 블로그가 설정되어 있으니까요. 로그인 오픈 API 서비스 환경은 PC 웹을 선택하시면 됩니다. API 신청 설정하기
  • PC 웹을 선택 하시면 서비스 URL, 네이버아이디로로그인 CallBack URL을 설정하는 메뉴가 나옵니다.
  • 우리가 실질적으로 사용할 URL은 네아로(네이버아이디로로그인) CallBack URL 이에요. 설정은 아래의 그림과 같이 하시면 됩니다. URL 설정하기
  • 간단하게 설명을 드리면, 우리가 어떤 URL로 접속을 했을때 서비스를 받을 수 있는지 설정을 한거에요.
  • 서비스 URL은 어차피 사용을 안하기 때문에 채우기만 했습니다. 중요한 것은 네아로 CallBackURL 입니다.
  • 우리가 네아로 API를 호출하면, API 호출을 하기 위한 값(토큰)을 받게 되는데요.
  • 그 토큰을 저기에 적은 “http://localhost:8080/” 로 받겠다는 의미입니다. localhost는 본인의 컴퓨터의 주소, 8080은 포트를 말합니다.
  • 우리는 각자 본인의 PC로 개발을 하고 있으니까, 본인 PC의 8080 포트로 받도록 설정을 합것입니다.
  • 8080에 큰 의미는 없습니다^^(일반적으로 많이 쓰이는 포트이긴한데, 그것까지 아실 정도면 이 글을 안보셔도 될 분들이실꺼 같아요..ㅎ)

이렇게 설정을 하고 신청을 하시면 블로그 API를 사용하기 위한 신청은 끝났습니다.

2. API 정보 확인 하기 (Client ID, Client Secret 확인)

  • 겁내 쉽습니다. 그냥 들어가서 확인하시면 되요.
  • API 등록(애플리케이션 등록)을 하셨으면 “내 애플리케이션” 목록에서 등록하신 애플리케이션을 확인하실 수 있습니다.
  • 만약에 “Test"라는 이름으로 등록했다면 아래의 그림과 같이 나오겠죠? 저기서 Client ID, Client Secret을 확인하시면 됩니다.
  • 쿠팡 API랑 비슷하죠 ㅎㅎ?. 사실 API사용은 다 똑같아요. 각자 본인의 스타일대로 만드는게 아니라, 항상 일정한 표준에 맞게 만들어집니다.
  • 그래야 쓰기가 쉽고, 사람들도 많이 써서 활용도 많이 되고 하죠 ㅎㅎ API 정보확인

3. 파이썬으로 블로그 API 활용해 글 올리기

  • API를 활용하기 위한 정보도 알았겠다. 이제 사용하기만 하면됩니다. 코딩 Time~
  • 저는 간단하게 사용하는 방법만 알려드릴껀데요. 여러가지 사용방법은 아래의 블로그 API 명세를 보시면 확인할 수 있습니다.
  • 블로그 API 명세 : https://developers.naver.com/docs/blog/post/

코드의 흐름

  • a. 네아로 API를 호출해 블로그 API 호출을 위한 토큰을 얻는다.
  • b. a에서 받은 토큰으로 블로그 API를 호출한다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# coding: utf-8
 
import sys
import os
import urllib.request
import requests
import json
import re
from selenium import webdriver
from urllib.parse import urlencode

__author__ = "Jaejin Jang<jaejin_me@naver.com>"

class naverMgr:
	def __init__(self, **kwargs):
		self.options = webdriver.ChromeOptions()
		self.options.add_argument('headless')
		self.options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36")
		self.webdriverpath = os.getcwd() + r"\chromedriver.exe"

	def get_logintoken(self, id, pw, cid, csec, cburl):
		driver = webdriver.Chrome(self.webdriverpath, options=self.options)
		driver.implicitly_wait(5)

		driver.get('https://nid.naver.com/nidlogin.login')
		driver.execute_script("document.getElementsByName('id')[0].value=\'"+ id + "\'")
		driver.execute_script("document.getElementsByName('pw')[0].value=\'"+ pw + "\'")
		driver.find_element_by_xpath('//*[@id="label_login_chk"]').click()
		driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()
		driver.implicitly_wait(10)
		
		state = "TEST" #아무거나 상관없음
		req_url = 'https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s' % (cid, cburl, state)
		response = requests.request(method='GET', url=req_url, headers={ "Content-Type": "application/json;charset=UTF-8" })

		driver.get(req_url)
		driver.implicitly_wait(5)

		# 첫 실행시 블로그글쓰기 권한 체크위해를 위한 코드
		try:
			driver.find_element_by_xpath('//*[@id="profile_optional_list"]/span/label').click()
			driver.find_element_by_xpath('//*[@id="content"]/div[4]/div[2]/button').click()
		except:
			pass
		
		redirect_url = driver.current_url
		temp = re.split('code=', redirect_url)
		code = re.split('&state=', temp[1])[0]
		driver.quit()
		
		url = 'https://nid.naver.com/oauth2.0/token?'
		data = 'grant_type=authorization_code' + '&client_id=' + cid + '&client_secret=' + csec + '&redirect_uri=' + cburl + '&code=' + code + '&state=' + state
		request = urllib.request.Request(url, data=data.encode("utf-8"))
		request.add_header('X-Naver-Client-Id', cid)
		request.add_header('X-Naver-Client-Secret', cburl)

		response = urllib.request.urlopen(request)
		rescode = response.getcode()
		
		if rescode == 200:
			response_body = response.read()
			js = json.loads(response_body.decode('utf 8'))
			token = js['access_token']
			return token
		else:
			print("Error Code:", rescode)
			return ""

	def write_product(self, blogtoken, title, contents):
		blogheader = "Bearer " + blogtoken # Bearer 다음에 공백 추가
		blogwriteapi = "https://openapi.naver.com/blog/writePost.json"
		blogdata = {'title': title, 'contents': contents}
		blogheaders = {'Authorization': blogheader }

		response = requests.post(blogwriteapi, headers=blogheaders, data=blogdata)
		rescode = response.status_code
		return rescode

if __name__ == '__main__':
	id = ''
	pw = ''
	client_id = ''
	client_secret = ''
	callback_url = 'http://localhost:8080/'

	nav = naverMgr()
	token = nav.get_logintoken(id, pw, client_id, client_secret, callback_url)

	title = '제목'
	contents = '내용'
	ret = nav.write_product(token, title, contents)
	if (ret == 200):
		print('성공')
	else:
		print('실패')

	pass
  • 테스트한 결과 정상적으로 업로드 잘 되네요.

테스트 결과 테스트 결과

다음 포스트에서 설명할 내용

  • 다음 포스트에서는 쿠팡의 리뷰 가져오기는 알려드릴 예정입니다.
  • 혹시나 알려줬으면~ 하는게 있으시면 댓글로 달아 주세요. 모두에게 중요하다 싶은게 있으면 같이 업로드 하겠습니다!