05-09 08:16
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

파이썬으로 네이버 로그인 + 카페 글쓰기 code 본문

카테고리 없음

파이썬으로 네이버 로그인 + 카페 글쓰기 code

벤치마킹 2019. 3. 18. 22:18

니즈: 네이버 카페에 같은 내용을 포스팅을 하고 싶은데 노가다가 싫다

아래 그림 처럼.. 이 블로그에 글을 붙여야하는데 복붙이 싫어서 ..다시 시작했다. 






요구 사항: 네이버 자동 로그인 이후에 특정 카페에 제목 + 내용을 원하는것 
복잡해서 그냥 코드로 대체 하고 callback url 은 간단한.. localhost jsp 로 등록 한다 

# Token 정보 가져와서 caffe 글쓰기.. code
#!/usr/bin/env python3

# -*- coding: utf-8 -*-
import json
import os
import re
import urllib.request
import time
import random
import datetime

from bs4 import BeautifulSoup
from requests import get
from selenium import webdriver
from urllib.error import HTTPError
from urllib.parse import urlencode

DRIVER_DIR = 'F:\work\chromedriver.exe'

def get_naver_token():
chromedriver_path = os.environ.get('CHROMEDRIVER_PATH')
chromedriver_path = DRIVER_DIR
print(chromedriver_path )


naver_cid = "zzzzzzzzzzzzzzzzzzzzzzzzz"
naver_csec = "xxxxx"
naver_redirect = "http://localhost:8080/callback.jsp"

driver = webdriver.Chrome(DRIVER_DIR)
driver.get('https://nid.naver.com/nidlogin.login')

id = 'IDIDID' #ID 직접 입력
pw = 'PWPPWPWPWPW' #비번은 직접 입력
driver.execute_script("document.getElementsByName('id')[0].value=\'" + id + "\'")
# time.sleep(1)
driver.execute_script("document.getElementsByName('pw')[0].value=\'" + pw + "\'")
# time.sleep(1)

driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/span[1]/a').click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="login_maintain"]/span[1]').click()
time.sleep(1)


state = "REWERWERTATE"

req_url = 'https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s' % (naver_cid, naver_redirect, state)
driver.get(req_url)

time.sleep(1)
########################## # XXX: 최초 1회만 반드시 필요하고 이후엔 불필요함

'''
driver.find_element_by_xpath('//*[@id="profile_optional_list"]/span/label').click()
time.sleep(1)

driver.find_element_by_xpath('//*[@id="content"]/div[4]/div[2]/button/span').click()
##########################
'''

redirect_url = driver.current_url
temp = re.split('code=', redirect_url)
code = re.split('&state=', temp[1])[0]
driver.quit()

print(redirect_url)


url = "https://nid.naver.com/oauth2.0/token?"
print(url)

data = "grant_type=authorization_code" + "&client_id=" + naver_cid + "&client_secret=" + naver_csec + "&redirect_uri=" + naver_redirect + "'&code=" + code + "&state=" + state
print(data)

request = urllib.request.Request(url, data=data.encode("utf-8"))
request.add_header('X-Naver-Client-Id', naver_cid)
request.add_header('X-Naver-Client-Secret', naver_redirect)
response = urllib.request.urlopen(request)
rescode = response.getcode()

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

if len(token) == 0:
return None
print(token)
return token


def naver_cafe_post(subject, content):
token = get_naver_token()
time.sleep(1)

header = "Bearer " + token # Bearer 다음에 공백 추가
clubid = '29415004'
menuid = '59'
url = "https://openapi.naver.com/v1/cafe/" + clubid + "/menu/" + menuid + "/articles"

subject = urllib.parse.quote(subject)
content = urllib.parse.quote(content)

data = urlencode({'subject': subject, 'content': content}).encode()
request = urllib.request.Request(url, data=data)
request.add_header("Authorization", header)
try:
response = urllib.request.urlopen(request)

except HTTPError as e:
print("url open failed", e, subject, content)
return

rescode = response.getcode()
if rescode == 200:
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)

if __name__ == "__main__":

subject = "글제목"
contents = "카페 글내용"

token = get_naver_token()

for id in CID:
naver_cafe_post(token , subject, contents, id)
print("done")



Comments