본문 바로가기

프로그램 개발일지

[Python] 네이버 블로그 자동 포스팅 만들기 - requests로 글쓰기 1편

반응형
 

Instagram

 

www.instagram.com

 

 

 

파이썬에 입문을 하고나면 셀레니움을 자주 사용하게 된다. (아님말고)

 

웹 자동화를 쉽게 할 수 있고, 안되는게 거의 없어서 아주아주 유용하고 좋긴한데 ...? !

 

여러가지 단점들이 존재하고 ..... 권태기에 빠지게 된다.

 

 

 

그렇게 새로운 사랑을 하게 되는데..... 그 대상이 바로 ..... requests !!!!!!!!!!!!!!!!!

 

전애인 (셀레니움)의 단점들을 전부 카바 한다. 후후

 

 

 

 

 

다만, 완벽해서인지 까다롭고 어렵다 ^^ ...

 

 

 

 

 

 

아무튼 블로그 첫포스팅에서 셀레니움을 사용해서 블로그 글을 작성했었는데 

 

1편:

 

[Python] 네이버 블로그 자동 포스팅 만들기 - 1

프로그램 개발 의뢰가 들어왔다.... 바로 GPT를 이용해 네이버 블로그에 자동으로 글을 올려야 한다는 의뢰 .... !!  코딩을 전문적으로 배운적이 없고 경력도 없어서 어떤게 정석인진 모르겠으

myworld1004.tistory.com

 

2편:

 

[Python] 네이버 블로그 자동 포스팅 만들기 - 2

1편:  [Python] 네이버 블로그 자동 포스팅 만들기 - 1프로그램 개발 의뢰가 들어왔다.... 바로 GPT를 이용해 네이버 블로그에 자동으로 글을 올려야 한다는 의뢰 .... !!  코딩을 전문적으로 배운적

myworld1004.tistory.com

 

3편:

 

[Python] 네이버 블로그 자동 포스팅 만들기 - 3 / openai api

1편: [Python] 네이버 블로그 자동 포스팅 만들기 - 1프로그램 개발 의뢰가 들어왔다.... 바로 GPT를 이용해 네이버 블로그에 자동으로 글을 올려야 한다는 의뢰 .... !!  코딩을 전문적으로 배운적

myworld1004.tistory.com

 

 

 

이번엔 requests로 블로그 글을 작성해보려고 한다.

 

 

 

 

 

 

 

 

 

먼저 임포트. 

우리가 사용할 requests 모듈을 불러와 준다.

 

 

import requests

 

 

 

 

 

그 다음 다른걸 하기전에 먼저 웹에서 어떤 행동들을 할때 서버와 무슨 정보를 주고 받는지를 알아내야한다.

 

탐정이 되는것.

그게 바로 requests에서의 핵심이다.

 

 

 

 

 

대부분의 사건단서는 현장에 있는 법.

 

네이버 로그인 페이지로 들어가보자.

 

 

 

 

네이버 로그인창

 

 

일단 개발자 도구 -> 네트워크 탭을 누른 상태로 로그인을 해보자

(개발자 도구 키는법은 다들 아시죠 .. ?)

 

 

 

 

로그인 버튼을 누르면 어떤 이상한 문자들이 우측 네트워크탭에 주르르르륵 뜰텐데

 

 

 

네이버 로그인 네트워크탭

 

 

로그인버튼을 누르자마자 서버에 요청한 항목인

nidlogin.login을 클릭해서 상세정보를 확인해보자.

 

딱 봐도 이름부터 로그인.로그인 인게 로그인과 관련된 네트워크 요청일 확률이 매우높다.

 

 

 

 

네트워크 페이로드

 

 

 

 

payload탭에는 이 네트워크요청을 할 때 어떤 값들을 포함해서 요청을 했는지를 알려준다.

네이버 로그인에는 위와 같은 보기만해도 머리가 아픈 값들을 매우 많이 포함해서 보내고 있다.

 

 

 

 

requests로 네이버로그인을 구현하려면 저 값들이 다 어디서 오는지 찾아내고, 어떻게 생성되는지 확인하고

그걸 그대로 구현해낸 뒤 requests를 해야 한다.

 

 

 

 

그러니까 우리는.

네이버 로그인은 그냥 셀레니움을 쓰자.

 

 

 

 

https://blog.naver.com/블로그이름?Redirect=Write&

 

 

 

위 링크로 가보자.

 

글쓰기 창이 나올텐데

 

 

 

블로그글쓰기

 

 

제목과 본문을 대충 써놓고 발행을 해보자.

물론 개발자도구, 네트워크 탭을 켜 놓은 상태여야한다 !

 

 

 

 

 

 

블로그네트워크

 

 

 

발행버튼을 누른 순간 가장 먼저 나온애들중

 

RabbitWrite.naver가 눈에 띈다. 이름에 write가 들어갔으니 글을 쓸때 중요한 요청인가보다.

 

 

 

 

 

 

페이로드를 봤더니 아니나 다를까, 글쓸때 필요했던 정보들을 가공해서 서버에 전송하는 게 틀림없다.

 

 

 

 

 

 

 

헤더탭

 

 

 

헤더탭도 확인하자.

서버에 requests를 때릴때 헤더탭에 있는 정보를 넘겨주지 않으면

프로그램이라고 판단하고 거부하는 경우가 많고,

 

어떤 요청들은 헤더에 토큰을 넣어서 보내거나 하는 경우가 있어서 꼭 살펴봐야한다.

 

 

 

 

다행히 블로그글을 쓸때는 어떤 비밀스런 값들을 헤더에 넣고 보내지 않아도 되는거 같다.

 

 

우리가 필요한건

 

User-Agent, Referer, Cookie, Content-Type

이 4개다.

 

 

 

 

 

 

url은 Request Url, 메소드는 아래 POST다.

 

 

 

{
    "documentId": "",
    "document": {
        "version": "2.8.0",
        "theme": "default",
        "language": "ko-KR",
        "id": "01J0AES1E2798A61B1K77YV6W1",
        "di": {
            "dif": false,
            "dio": [{
                "dis": "N",
                "dia": {
                    "t": 0,
                    "p": 0,
                    "st": 74,
                    "sk": 11
                }
            }, {
                "dis": "N",
                "dia": {
                    "t": 0,
                    "p": 0,
                    "st": 74,
                    "sk": 11
                }
            }]
        },
        "components": [{
            "id": "SE-2db1acb9-6090-4823-830c-5bdda26959a0",
            "layout": "default",
            "title": [{
                "id": "SE-8f71fff0-a222-4ffb-94a6-37906c870c46",
                "nodes": [{
                    "id": "SE-43692b55-c4c4-485a-831f-4173c87b14de",
                    "value": "제목스",
                    "@ctype": "textNode"
                }],
                "@ctype": "paragraph"
            }],
            "subTitle": null,
            "align": "left",
            "@ctype": "documentTitle"
        }, {
            "id": "SE-01c5f6c7-a5e3-4863-bc5e-614c39add7de",
            "layout": "default",
            "value": [{
                "id": "SE-32743609-0626-4275-ab62-341b38adc42b",
                "nodes": [{
                    "id": "SE-28d2d6a5-56cd-441a-896f-92e05e84a7de",
                    "value": "본문스",
                    "@ctype": "textNode"
                }],
                "@ctype": "paragraph"
            }],
            "@ctype": "text"
        }]
    }
}

 

 

우리가 보내야할 data값중 일부이다.

처음 document의 id값과 components안에 있는 id 값들이 수상하다.

뭔가 변수들일 느낌이 팍 온다.

 

 

 

 

두번째 id값은 uuid에 SE-를 붙인거 같고,

첫번째 id값은 아마 글쓰기 요청 이전에 생성된 값 같다.

이런건 보통 이전 네트워크 요청 흔적들에서 찾아낼 수 있다.

 

 

 

 

{
    "configuration": {
        "openType": 2,
        "commentYn": true,
        "searchYn": true,
        "sympathyYn": true,
        "scrapType": 2,
        "outSideAllowYn": true,
        "twitterPostingYn": false,
        "facebookPostingYn": false,
        "cclYn": false
    },
    "populationMeta": {
        "categoryId": 1,
        "logNo": null,
        "directorySeq": 14,
        "directoryDetail": null,
        "mrBlogTalkCode": null,
        "postWriteTimeType": "now",
        "tags": "",
        "moviePanelParticipation": false,
        "greenReviewBannerYn": false,
        "continueSaved": false,
        "noticePostYn": false,
        "autoByCategoryYn": false,
        "postLocationSupportYn": false,
        "postLocationJson": null,
        "prePostDate": null,
        "thisDayPostInfo": null,
        "scrapYn": false,
        "autoSaveNo": 1718337971504
    },
    "editorSource": "AkX6PyIpc6c+bp5MRWKyfg=="
}

 

이것도 우리가 보내야할 데이터인데

autoSaveNo, editorSource 이 두개가 범인같다.

 

이것도 역시 이전 네트워크 요청들에서 찾아낼 수 있다.

 

 

 

 

 

 

 

 

 

2편으로 gogoogogogo

 

[Python] 네이버 블로그 자동 포스팅 만들기 - requests로 글쓰기 2편

1편: [Python] 네이버 블로그 자동 포스팅 만들기 - requests로 글쓰기 1편파이썬에 입문을 하고나면 셀레니움을 자주 사용하게 된다. (아님말고) 웹 자동화를 쉽게 할 수 있고, 안되는게 거의 없어서

myworld1004.tistory.com

 

 

 

 

 

 

 

[종합 매크로] 업데이트 / 공지사항

BETA버전        현재 지원하는 매크로:- 뽐뿌 렌탈업체 오토 게시물 /패킷버전- 네이버 플레이스 크롤링 /패킷버전- 네이버 카페 댓글 매크로 /패킷버전 (로그인->크롬)      사용법 안내: 

myworld1004.tistory.com

 

반응형