npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

naverblog-api

v1.0.1-beta2

Published

naver blog api

Readme

naverblog-api

네이버 블로그 정보를 가져오기 위한 모듈입니다.

custom-naverblog 프로젝트를 위해 만들어졌습니다.

NOTE: CORS 문제로 인해 웹 사이트 내의 자바스크립트 코드에서는 사용이 불가능합니다. 이 문제를 회피하기 위해선 사용할 API 서버를 준비한 후, 서버에서 이 모듈을 사용하도록 한 뒤, 알맞은 API를 준비하고 CORS 헤더를 추가하여 문제를 해결 하고 나서, 원래 이 모듈을 사용하려 했던 웹 사이트의 코드를 해당 API 서버를 통해 요청하도록 변경해야 합니다.

위 NOTE 에서 말한 API 서버와 웹 사이트의 예시는 각각 custom-naverblog-servercustom-naverblog-front 를 참고해 주시기 바랍니다

Install

yarn:

yarn add naverblog-api

Example

apply 를 사용하지 않을 경우의 예시

import {
  getBlogInfo,
  getCategoryList,
  getPost,
} from 'naverblog-api';


getBlogInfo('okms00909')
  .then((blogInfo) => {
    console.log(blogInfo);
  });

getCategoryList('okms00909')
  .then((categoryList) => {
    console.log(categoryList);
  });

getPost('okms00909', 221338769113)
  .then((postData) => {
    console.log(postData);
  });

apply 를 사용할 경우의 예시

import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    console.log(blog.blogInfo);

    console.log(blog.categoryList);

    blog.getPost(221338769113)
      .then((postData) => {
        console.log(postData);
      });
  });

NOTE: 위 예시의 okms00909 는 블로그 아이디 (블로그 주인의 네이버 아이디, 이하 blogId) 이며, 221338769113 는 블로그 글의 번호입니다(이하 postId). 따라서 getPost('okms00909', 221338769113)https://blog.naver.com/okms00909/221338769113 의 글을 가져오는 함수를 의미합니다.

API

API의 종류는 다음과 같습니다. (apply 하지 않았을 경우 기준)

  • getBlogInfo
  • getCategoryList
  • getPostList
  • getPost
  • getComments
  • getResourceFilePath (Resource 용)

apply 할 경우 해당 블로그에 대한 getBlogInfogetCategoryList 의 결과는 위 apply 를 사용할 경우의 예시와 같이 Promise 로 전달받은 인자의 blogInfocategoryList 프로퍼티로 들어가게 되며, 나머지 getPostList, getPost, getComments 함수는 첫번째 blogId 인자가 자동으로 바인딩 됩니다.


getBlogInfo (blogInfo)

블로그 정보를 가져오는 함수입니다.

apply 하지 않았을 경우:

import { getBlogInfo } from 'naverblog-api';

getBlogInfo('okms00909')
  .then((blogInfo) => {
    console.log(blogInfo);
  });

apply 했을 경우:

import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    console.log(blog.blogInfo);
  });

결과:

{
  "blogId": "okms00909",
  "blogNo": "{blogNo}",
  "blogName": "프로메타의 서식지",
  "nickName": "PROMETA",
  "titleImage": "{imageUrl}",
  "profileImage": "{imageUrl}",
  "subscriberCnt": 63,
  "visitorCnt": {
    "today": 0,
    "total": 11938
  }
}

getCategoryList (categoryList)

블로그의 카테고리 목록을 가져오는 함수입니다.

apply 하지 않았을 경우:

import { getCategoryList } from 'naverblog-api';

getCategoryList('okms00909')
  .then((categoryList) => {
    console.log(categoryList);
  });

apply 했을 경우:

import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    console.log(blog.categoryList);
  });

결과:

{
  "categoryList": [{
    "name": "전체보기",
    "id": 0,
    "postCnt": 65,
    "childs": []
  }, {
    "name": "개발 현황",
    "id": 43,
    "postCnt": 28,
    "childs": []
  }, {
    "name": "잡담",
    "id": 44,
    "postCnt": 20,
    "childs": [{
      "name": "기타",
      "id": 47,
      "postCnt": 10,
      "childs": []
    }]
  }, "..."],
  "memoCategoryList": [],
  "postCnt": 65,
  "memoCnt": 0
}

getPostList

블로그의 글 목록을 가져오는 함수입니다.

인자는 blogId, categoryNo, pageNo 이며, 각각 블로그 아이디, 카테고리 아이디(getCategoryList 의 결과를 참고), 글 목록의 페이지 번호(아래 결과를 참고) 입니다.

apply 하지 않았을 경우:

import { getPostList } from 'naverblog-api';

// categoryNo: 0 (`전체보기`)
// pageNo: 1 (첫 페이지)
getPostList('okms00909', 0, 1)
  .then((postList) => {
    console.log(postList);
  });

apply 했을 경우:

import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    blog.getPostList(0, 1)
      .then((postList) => {
        console.log(postList);
      });
  });

NOTE: pageNo 는 0 이 아닌 1 부터 시작합니다. 또한, categoryNo 는 블로그의 카테고리마다 다르지만, 0 은 언제나 전체보기 입니다.

결과: (길이상 텍스트는 {text} 와 같이 생략하였습니다)

{
  "postList": [{
    "title": "{title}",
    "id": "{postId}",
    "category": {
      "id": 43,
      "name": "개발 현황"
    },
    "thumbnail": {
      "type": "image",
      "image": "{imageUrl}"
    },
    "addDate": "2018-08-14T07:23:27.114Z",
    "commentCnt": 1,
    "brief": "{brief}"
  }, "..."],
  "currentPage": 1,
  "totalPage": 7,
  "totalCnt": 65
}

thumbnailtype 값은 imagevideo 가 있지만, thumbnailtype 에 관계없이 이미지입니다. (video 일 경우 영상 자체가 thumbnail 로 들어가는 것이 아니라 영상의 미리보기 이미지가 thumbnail 값으로 들어가게 됩니다.)


getPost

블로그의 글을 가져오는 함수입니다.

apply 하지 않았을 경우:

import { getPost } from 'naverblog-api';

getPost('okms00909', 221338769113)
  .then((postData) => {
    console.log(postData);
  });

apply 했을 경우:

import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    blog.getPost(221338769113)
      .then((postData) => {
        console.log(postData);
      });
  });

결과: (길이상 텍스트는 {text} 와 같이 생략하였습니다)

{
  "title": "{title}",
  "contentHTML": "{html}",
  "addDate": "2018-08-14T07:23:00.000Z",
  "relatedPost": { // 연관 포스트
    "posts": [{
      "title": "{title}",
      "id": "{postId}",
      "addDate": "2018-08-13T15:00:00.000Z",
      "commentCnt": 1,
      "thumbnail": {
        "type": "image",
        "image": "{imageUrl}"
      }
    }, "..."],
    "prevPostInfo": {
      "title": "{title}",
      "id": "{postId}",
      "addDate": "2018-08-05T15:00:00.000Z",
      "commentCnt": 0,
      "thumbnail": {
        "type": "image",
        "image": "{imageUrl}"
      }
    },
    "nextPostInfo": null
  }
}

NOTE: contentHTML 을 위한 CSS 는 하단의 Resource:resource/post-style.css 를 참고 바랍니다.


getComments

블로그 글의 댓글을 가져오는 함수입니다.

apply 하지 않았을 경우:

  • getComments 를 따로 사용:
import { getComments } from 'naverblog-api';

getComments('okms00909', null, 221338769113)
  .then((comments) => {
    console.log(comments);
  });

NOTE: 두번째 인자는 null 입니다!

  • getPost 에 이어서 사용:
import { getPost } from 'naverblog-api';

getPost('okms00909', 221338769113)
  .then(postData => postData.getComments())
  .then((comments) => {
    console.log(comments);
  });

apply 했을 경우:

  • getComments 를 따로 사용:
import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    blog.getComments(221338769113)
      .then((comments) => {
        console.log(comments);
      });
  });
  • getPost 에 이어서 사용:
import { apply } from 'naverblog-api';

apply('okms00909')
  .then((blog) => {
    blog.getPost(221338769113)
      .then(post => post.getComments())
      .then((comments) => {
        console.log(comments);
      });
  });

결과:

[{
    "isSecret": true,
    "author": {
      "id": "{id}"
    },
    "addDate": "{date}",
    "childs": [{
      "isSecret": true,
      "author": {
        "id": "{id}"
      },
      "addDate": "{date}",
      "childs": []
    }]
  }, {
    "isSecret": false,
    "author": {
      "id": "{id}",
      "name": "{name}",
      "profile": "{imageUrl}"
    },
    "addDate": "{date}",
    "childs": [{
      "isSecret": false,
      "author": {
        "id": "{id}",
        "name": "{name}",
        "profile": "{imageUrl}"
      },
      "addDate": "{date}",
      "childs": [],
      "contents": "{text}"
    }],
    "contents": "{text}"
  }, {
    "isSecret": false,
    "author": {
      "id": "{id}",
      "name": "{name}",
      "profile": "{imageUrl}"
    },
    "addDate": "{date}",
    "childs": [{
      "isSecret": false,
      "author": {
        "id": "{id}",
        "name": "{name}",
        "profile": "{imageUrl}"
      },
      "addDate": "{date}",
      "childs": [],
      "contents": "{text}",
      "sticker": {
        "id": "line_characters_in_love-15",
        "image": "{imageUrl}"
      }
    }],
    "contents": "{text}"
  }
]

isSecrettrue 인 댓글은 비밀 댓글 을 나타냅니다.

댓글에 스티커가 있을 경우 sticker 프로퍼티가 생성되며, 스티커 이미지는 sticker.image 에 들어갑니다.

NOTE: contents 내의 줄바꿈은 <br> 을 이용합니다. (ex: asd<br>asd)


getResouceFilePath

하단의 Resource 단락과 관련있는 함수입니다.

resource 폴더 내의 파일을 가져오는 기능을 가지고 있으며, 파일 목록은 Resource 단락을 참고 바랍니다.

사용 예시 (post-style.css)

import { getResourceFilePath } from 'naverblog-api';

// 결과 : {resource 폴더 내 post-style.css 파일의 절대경로}
getResourceFilePath('post-style.css');

NOTE: resource 폴더 내에 없는 파일을 불러오려 할 경우, null 이 반환됩니다.


Resource

resource/post-style.css

getPost 의 결과 중 contentHTML 을 그대로 사용하면 CSS가 적용되지 않기에 기존의 네이버 블로그에서 사용하는 CSS를 적용해야 하는데, 이 파일의 내용은 잘 변경되지 않는 반면, 파일의 위치가 수시로 변경(네이버측의 블로그 업데이트로 인해) 됩니다.

따라서 resource/post-style.css 에 해당 CSS 파일(블로그 글 내용 HTML의 CSS)을 넣어놓았으니, 이 파일을 이용하시기 바랍니다. (코드 내에서 사용하려는 경우, API 단락의 getResouceFilePath 를 참고 바랍니다)

만약 해당 파일의 업데이트가 필요할 경우(네이버블로그가 업데이트되었을 경우), issue 를 등록해 주시거나 PR 을 넣어주세요

License

MIT