네이버에서 제공해주는 openapi를 이용해서 카페에 글쓰기를 할 수 있다.

관련예제는 여기링크를 클릭하면 볼 수는 있다.

글쓰는 순서

1. login api를 이용해서 접근 토큰 정보를 가져온다.

2. 포스팅한다.


아래의 내용을 따라하기전에 우선 Naver openapi를 사용하기 위한

사전 준비사항을 완료해야한다. --> 링크

특히 사용 API에 카페를 반드시 추가해야한다.


순서는 간단하지만 막상 따라해보려는데 첫줄에서 막힌다.

token = "YOUR_ACCESS_TOKEN"

어떻게 받아와야되나 ??

이를 확인하기 위해서 로그인 API 명세를 찾아본다.

 

아... 나는 파이썬으로 다 하려고 했는데 없다.

하지만 뒤져보면 다 나온다.

Selenium을 이용하면 받아올 수 있다.

이와 관련된 기본적인 세팅은 이준범님의 블로그에 가면 잘 나와있으니 따라하면됨
(https://beomi.github.io/2017/02/27/HowToMakeWebCrawler-With-Selenium/)


이 정보들을 바탕으로 로그인을 한다.

아래의 코드에서 로그인 관련, OAUTH관련 중요 정보는 설정에서 가져오거나 직접 입력하거나 알아서 한다.


# Token 정보 가져오는 코드

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import os
import re
import urllib.request

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


def get_naver_token(): chromedriver_path = os.environ.get('CHROMEDRIVER_PATH') naver_id = os.environ.get('NAVER_ID') naver_pw = os.environ.get('NAVER_PW') naver_cid = os.environ.get('NAVER_CLIENT_ID') naver_csec = os.environ.get('NAVER_CLIENT_SECRET') naver_redirect = os.environ.get('NAVER_BLOG_REDIRECT') driver = webdriver.Chrome(chromedriver_path) # driver = webdriver.PhantomJS() driver.implicitly_wait(3) driver.get('https://nid.naver.com/nidlogin.login') driver.find_element_by_name('id').send_keys(naver_id) driver.find_element_by_name('pw').send_keys(naver_pw) driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click() 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) ########################## # XXX: 최초 1회만 반드시 필요하고 이후엔 불필요함 driver.find_element_by_xpath('//*[@id="confirm_terms"]/a[2]').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?'
data = 'grant_type=authorization_code' + '&client_id=' + naver_cid + '&client_secret=' + naver_csec + '&redirect_uri=' + naver_redirect + '&code=' + code + '&state=' + state

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

Access token 정보를 가져왔다.

잠시 숨을 고르고 아래에 이어서 카페 글쓰기를 시도하면 된다. (스크롤을 내려야함)




위의 코드를 이용해서 토큰을 가져왔다면 그 다음에는 카페 글쓰기 api를 사용하면 된다.

반가운 Python 예제 코드다.


그런데 또 막힌다.

    clubid = 'xxxxxx'    
    menuid = 'x'


이건 직접 찾아봐야한다.

Chrome의 검사 기능을 이용해서 찾을 수 있다. (다른 웹브라우저에서도 알아서 찾아볼 수 있음)

아래 같이 카페에 로그인해서 게시판에 들어가고

마우스 우클릭해서 '검사' 기능을 사용하면

오른쪽에 정보를 찾을 수 있다.


샘플코드대로 했는데,,,

한글이 다 깨진다.

그러면 urlencode를 사용한 아래의 코드로 수행하면된다.


def naver_cafe_post(subject, content):
    token = get_naver_token()
    header = "Bearer " + token  # Bearer 다음에 공백 추가
    clubid = 'xxxxxx'    
    menuid = 'x'
    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)


그냥 텍스트를 가지고 하면 잘 되는데

기존에 사용했던 방식으로 HTML 태그를 붙이니까 에러가 난다.

대충 형태는 아래와 같은 모양이었다.

<font color="red"> xxxx </font>

이럴 때는 쌍따옴표를 제거하면 된다.

 <font color=red> xxxx </font>


그런데 또 안된다????????

열이 받아서 때려치울라고 하던 찰나 '%' 문자가 눈에 띈다.

content로 사용할 문자열에 그냥 '%'가 있으면 에러가 나서 아래 처럼 역슬래쉬를 추가해줘야 한다.

content = content.replace('%', '\%')


꺠지지도 않고 잘 포스팅 된다.

편리하다.



반응형

개인적으로 gmail 계정이 2개라서 이를 등록해서 사용하려 설정을 추가함

아래의 설정을 변경하면 2개 이상의 여러 계정에 대해서 사용 가능

gist 링크의 설정 확인


직접 설정한  .muttrc 설정

 % vim ~/.muttrc

# Folder hooks
folder-hook 'account.com.gmail.news' 'source ~/.mutt/account.com.gmail.news'
folder-hook 'account.com.gmail.mail' 'source ~/.mutt/account.com.gmail.mail'

# Default account
source ~/.mutt/account.com.gmail.news

# Macros for switching accounts
macro index <f2> '<sync-mailbox><enter-command>source ~/.mutt/account.com.gmail.news<enter><change-folder>!<enter>'
macro index <f3> '<sync-mailbox><enter-command>source ~/.mutt/account.com.gmail.mail<enter><change-folder>!<enter>'

# Fetch mail shortcut
bind index G imap-fetch-mail

F2 키를 누르면 1번 설정인 news관련 계정으로 로그인해서 메일 확인

F3 키를 누르면 2번 설정인 mail 관련 계정으로 로그인해서 메일 확인


아래와 같이 계정 관련 파일을 생성해주고 2개의 파일에

account.com.gmail.mail
account.com.gmail.news

각 계정에 대한 설정을 해주면 완료

<
 % cd ~/.mutt
% ls -al

total 16
drwx------ 7 byungwoo staff 224 12 22 11:06 .
drwxr-xr-x+ 112 byungwoo staff 3584 12 26 18:43 ..
-rw-r--r-- 1 byungwoo staff 506 12 22 11:05 account.com.gmail.mail
-rw-r--r-- 1 byungwoo staff 510 12 22 11:06 account.com.gmail.news
drwx------ 4 byungwoo staff 128 12 22 10:29 cache
drwxr-xr-x 2 byungwoo staff 64 12 22 11:05 com.gmail.mail
drwxr-xr-x 2 byungwoo staff 64 12 22 11:06 com.gmail.news

설치하고 나서는 설정파일에 세팅만 하면 끝이난다.


F2, F3키를 이용해서 각 계정으로 이동 가능

반응형

웹 브라우저를 이용해서 gmail을 사용하기가 불편해서 찾아보았다.

mutt라고 하는 툴이 있었는데 설명글이 맘에 들어서 우선 설치해보았다.

"All mail clients suck. This one just sucks less." -me, circa 1995


다른 이메일 클라이언트에 비해서 편리한데

개인적인 경험으로는 엄청나게 편리하다.

참고로 대부분의 메일들이 html로 꾸며져 있어서 html의 Tag들도 같이 보인다.

html 파일 형식에 익숙하면 그런대로 볼만함


다운로드해서 설치하는 방법은 여기를 참고하면되는데

Mac에서는 brew를 이용해서 편리하게 할 수 있다.

 % brew install mutt

 % mkdir -p ~/.mutt/cache


설치하고 나서는 설정파일에 세팅만 하면 끝이난다.

vim이나 nano를 이용해서 설정파일에 설정해준다.

vim을 사용했다.


 % vim ~/.muttrc
set imap_user = "$gmail_id@gmail.com"
set imap_pass = "$gmail_password"
set smtp_url = "smtp://$gmail_id@smtp.gmail.com:587/"
set smtp_pass = "$gmail_password"
set from = "$gmail_id@gmail.com"
set realname = "사용자이름"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed = "+[Gmail]/Drafts"
set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies
set certificate_file = ~/.mutt/certificates
set move = no
set smtp_authenticators = "gssapi:login"


설정 완료 후에 mutt 실행

 % mutt


아래와 같이 실행이 되는데 사용법도 간단한다.
상단 탭에 단축 키 확인해서 사용하면 끝.



더 상세한 설정을 원한다면 아래의 링크 확인하시면됩니다.

https://www.thegeekdiary.com/how-to-install-and-configure-mutt-in-centos-rhel/

...


다 설정했음에도 불구하고 로그인이 실패한다면 아래의 링크에서
보안 수준을 확인 해보시면 해결 될 것입니다.

https://myaccount.google.com/lesssecureapps






반응형
반응형


출처


1. Git manual


2. Stackoverflow(local log 조회)


3. Stackoverflow(remote log 조회)



Local에서 작업중인 경우 조회하는 방법

# 전체 이력 및 수정했던 사항 조회해서 파일에 기록
% git --no-pager log -p  > git_history_dump



다른 repository의 Log 조회하는 방법 (예시: Selenium-Requests)


# 다른 repository의 이력 및 변경사항 조회해서 파일에 기록
% git clone --bare https://github.com/cryzed/Selenium-Requests Selenium-Requests
% cd Selenium-Requests
% git log -p  > git_history_dump



반응형

+ Recent posts