블로그 API
블로그 API는 다음(Daum) 블로그 서비스를 외부에서 이용하는데 있어서 필요한 기능들을 제공합니다. 개발자 분들은 API를 이용해서 글을 등록할수 있고, 동영상을 업로드 할수 있습니다.
요청 방법(Request Method) #
- XML-RPC요청 방식을 통해 제공 가능합니다.
- REST 요청 방식을 통해 제공 가능합니다.
인증 요청 변수 (Request Parameters) #
- 공통 인증 변수: 모든 API 서비스 요청시 공통적으로 넣어야 할 변수는 아래와 같습니다.
인증 파라미터 #
- 인증에 사용되는 공통 파라미터를 설명합니다.
| 요청 변수 | 값 | 설명 |
| apikey | 40 byte hexadecimal string (필수) | 모든 오픈 API 호출에 공통으로 사용되는 인증키 입니다. Daum 회원이면, apikey를 발급 받을 수 있습니다. 오픈 API는 검색, UCC, 디앤샵 API로 구분됩니다. 나중에 다른 API가 추가될 수 도 있습니다. 각 API별로 Daum 회원은 하나의 apikey 만을 발급받을 수 있습니다. 그리고, 이 apikey로는 허가된 API만 호출 할 수 있습니다. 예) apikey=4125603e35da5d8820b07dc7b19050dbc838336b |
| apid | 20 byte hexadecimal string | 오픈 API를 이용하여 어플리케이션 이나 웹 사이트를 작성한 개발자 분들은 프로그램 등록을 할 수 있습니다. apid 는 등록된 프로그램에 대해서 오픈 API 인증 시스템에서 제공한 프로그램 아이디 입니다. 일부 오픈 API는 apid 파라미터를 필수로 요구하는 경우가 있습니다. 등록된 프로그램은 이 DNA 사이트를 통해서 홍보되며, 개발자 본인의 의사에 따라 다른 사용자가 다운받아 설치할 수 있게 됩니다. 예) apid=ba8c53ab7970189d93a7 |
서명 인증 파라미터 #
- 서명된 오픈 API는 인증키가 다른 사용자에 의해서 도용 되는 것을 보호해 줍니다.
- 서명은 필수적인 파라미터가 아닙니다. 그러나, 일부 오픈 API는 반드시 서명을 요구합니다.
- 서명에 사용되는 파라미터를 설명합니다.
| 이름 | 값 | 설명 |
| ts | YYYYMMDDhhmmss | 오픈 API를 호출하는 시간. UTC Time 으로 변환되서 전달되어야 합니다. 서명 값(sig)을 전달할 때 반드시 포함되어야 합니다. 예, ts=20060501153010 |
| nonce | 16 byte hexadecimal string | 랜덤한 8byte binary 값. ts 와 함께 서명의 재 사용여부를 확인하는데 사용됩니다. 서명 값(sig)을 전달할 때 반드시 포함되어야 합니다. 예, nonce=bd149ae021feb132 |
| sigalg | "hmacsha1" | 서명에 사용하는 알고리즘 이름. "hmacsha1" 으로 고정되어 있습니다. 실제 사용하는 알고리즘은 RFC 2014 에 정의되어 있는 HMACSHA-1 입니다. 서명 값(sig)을 전달할 때 반드시 포함되어야 합니다. |
| sig | 40 byte hexadecimal string | 오픈 API 호출 URL 전체에 대해서 서명키로 서명한 값. 예) sig=b45de8a31aed6e58b831dd72087bb4ed71fcaf98 |
- 서명 값 만들기 & 소스 예제 코드 : HowToSign
- 샘플 URL
http://apis.daum.net/blog/XMLRPC.do?apid=search_plugin&apikey=12345&sig=abcde
블로그 글 및 댓글 쓰기 #
블로그 글쓰기 ( Deprecated ) daum.blog.openapi.newPost.execute #
- XML-RPC 요청주소
- method
- daum.blog.openapi.newPost.execute
- Request Parameters
- String subject // 글 제목
- String body // 글 내용
- String tag // 이 글에 대한 태그, 태그가 여러개일 경우 구분자 , 로 구분한다.
- String "" // 빈값 처리 (vector 객체순서 준수)
- String "" // 빈값 처리 (vector 객체순서 준수)
- String "" // 빈값 처리 (vector 객체순서 준수)
- String "" // 빈값 처리 (vector 객체순서 준수)
- String cateid // 글을 입력하는 카테고리 ID를 넣습니다. (전체는 기본 "0")
- string regdt // 글 등록일 (yyyy-MM-dd'T'HH:mm:ss'Z')
- Response Elements
- String articleno /* 등록된 글 번호. */ || null /* 실패 */
예제 방식 #
<?xml version="1.0" encoding="UTF-8"?> <methodcall> <methodname>daum.blog.openapi.newPost.execute</methodname> <params> <param><value>subject</value></param> <param><value>body</value></param> <param><value>tag</value></param> </params> </methodcall>
블로그 글쓰기&파일첨부 daum.blog.openapi.newPost.execute #
- 파일첨부는 파일 URL을 입력하는 방식입니다.
- Hashtable로 값을 받기 때문에 null 대신 ""을 권장합니다.
- XML-RPC 요청주소
- method
- daum.blog.openapi.newPost.execute
- Request Parameters
- vector : articleList (본문내용 1개)
- Hashtable : String subject | 글 제목
- Hashtable : String body | 글 내용
- Hashtable : String tag | 이 글에 대한 태그, 태그가 여러개일 경우 구분자 , 로 구분한다.
- Hashtable : String cateid | 글을 입력하는 카테고리 ID를 넣습니다. (전체는 기본 "0")
- Hashtable : string regdt | 글 등록일 (yyyy-MM-dd'T'HH:mm:ss'Z')
- Hashtable : articleopen | 전체공개:A, 통하는블로그공개:F, 비공개:H
- Hashtable : scrapopen | 전체공개:A, 부분공개:P, 비공개:H
- vector : attachFile (첨부파일 n개)
- Hashtable : String size | 파일사이즈
- Hashtable : String filename | 파일 이름
- Hashtable : String url | URL
- Hashtable : String source | 소스
- Hashtable : String conttype | 첨부타입 (파이 pi, 파일 fi, 동영상 vi)
- vector (articleList 와 attachFile를 담고있음)
- articleList.toArray()
- attachFile.toArray()
- vector : articleList (본문내용 1개)
- Response Elements
- String articleno /* 등록된 글 번호. */ || null /* 실패 */
- String articleno /* 등록된 글 번호. */ || null /* 실패 */
블로그 글수정 daum.blog.openapi.modifyPost.execute #
- XML-RPC 요청주소
- method
- daum.blog.openapi.modifyPost.execute
- Request Parameters
- String articleno //글 번호
- String subject // 글 제목
- String body // 글 내용
- String tag // 이 글에 대한 태그, 태그가 여러개일 경우 구분자 , 로 구분한다.
- Response Elements
- String articleno /* 수정된 글 번호. */ || null /* 실패 */
예제 방식 #
<?xml version="1.0" encoding="UTF-8"?>
<methodcall>
<methodname>daum.blog.openapi.modifyPost.execute</methodname>
<params>
<param><value>123456</value></param>
<param><value>subject</value></param>
<param><value>body</value></param>
<param><value>tag</value></param>
</params>
</methodcall>
블로거 뉴스 송부 daum.blog.openapi.newPost.executeNewsReporter #
- XML-RPC 요청주소
- method
- daum.blog.openapi.newPost.executeNewsReporter
- Request Parameters
- String : subject // 글제목
- String : body // 글 내용
- String : tag // 태그
- String newsCateId // 블로그가 만든뉴스 카테고리(분류) ID
- Response Elements
- String : articleno /* 성공 글 번호 */ || null /* 실패 */
- String : articleno /* 성공 글 번호 */ || null /* 실패 */
블로그 댓글 쓰기 daum.blog.openapi.newComment.execute #
- XML-RPC 요청주소
- method
- daum.blog.openapi.newComment.execute
- Request Parameters
- string : blogid (블로그 아이디 )
- string : articleNum (글번호 )
- string : writerId (작성자 아이디 )
- string : writerDaumId (작성자 다음아이디)
- string : password (작성자비밀번호)
- string : writerDaumName (작성자 다음이름)
- string : contents (댓글 내용)
- string : regdt (글작성날짜 (yyyy-MM-dd'T'HH:mm:ss'Z'))
- Response Elements
- String : true / false로 넘겨옴
- String : true / false로 넘겨옴
블로그 정보 조회 #
블로그 개설여부 확인 daum.blog.openapi.checkBlog.execute #
- XML-RPC 요청주소
- method
- daum.blog.openapi.checkBlog.execute
- Request Parameters
- 없음
- Response Elements
- 블로그가 있으면 "http://blog.daum.net/blogname" 없으면 ""
- 블로그가 있으면 "http://blog.daum.net/blogname" 없으면 ""
블로그명 중복체크 daum.blog.openapi.checkBlogName.execute #
- XML-RPC 요청주소
- method : daum.blog.openapi.checkBlogName.execute
- Request Parameters
- String blogName(블로그이름)
- Response Elements
- String : 없으면 "notexist", 있으면 "exist"
- String : 없으면 "notexist", 있으면 "exist"
블로그 목록보기 #
- REST 요청주소
- Request Parameters (필수)
- String : blogname //내 블로그 이름 (필수)
- int : listScale // 한페이지에 나오는 글의 갯수(필수) ->없으면 20이 기본
- Request Parameters (선택)
- int : curPage 가고자 하는 페이지 번호(선택 : 이전,다음으로 페이지이동시)
- String : minno 2->1 페이지로 갈때 가장 작은 number
- String : maxno 2->3 페이지로 갈때 가장 큰 number
- Response Elements
- String : link //글 URL
- String : title //글 제목
- String : date // 글 쓴 날짜
- String : nickname // 별명
- String : scrap //스크랩 여부
- maxno : 한페이지중 가장 큰 articleno (페이징시 필요)
- minno :한페이지중 가장 작은 articleno (페이징시 필요)
블로그 글보기 #
- REST 요청주소
- Request Parameters
- String : blogname // 블로그이름
- String : articleno // 글번호
블로그 관리 #
블로그 개설 daum.blog.openapi.makeBlog.execute #
- XML-RPC 요청주소
- method
- daum.blog.openapi.makeBlog.execute
- Request Parameters
- String : blogName(블로그이름)
- String : blogTitle(제목)
- String : blogDesc(설명)
- Response Elements
- String : success /* 성공 */ || notlogin /* 로그인 실패 */ || existblog /*이미블로그가 존재하는 사용자 */ || existbloname /* 존재하는 블로그 /* || blacklistuser /* 블랙리스트 */ ||' fail /* 기타 */
- String : success /* 성공 */ || notlogin /* 로그인 실패 */ || existblog /*이미블로그가 존재하는 사용자 */ || existbloname /* 존재하는 블로그 /* || blacklistuser /* 블랙리스트 */ ||' fail /* 기타 */
블로그 댓글 목록 #
- REST 요청주소
- Request Parameters
- String : blogname // 블로그이름
- String : articleno // 글번호
- String : pageno // 페이저번호
- String : countperpage // 1페이지당 글갯수
- Response Elements
- String : no // 댓글번호
- String : parentno // 댓글의부모글
- String : description // 내용
- String : pubData // 댓글쓴 시간
- String : author //블로그별명
- String : open // 공개설정 (Y/N)
기타 정보 #
블로그가 만든뉴스 카테고리 (분류) ID #
미니알리미 구독리스트 #
미니알리미 내글에 대한 반응 #
오류 메시지 #
- 공통 오류 메시지는 다음과 같습니다.
오류는 다음과 같은 xml로 전달됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<apierror>
<code></code>
<message></message>
<dcode></code>
<dmessage></dmessage>
</apierror>
오류 xml 의 각 항목은 아래와 같은 값을 가집니다.
| 오류 코드 (code|dcode) | 오류(message) | 상세 오류(dmessage) | 설명 |
| 10 | | invalid request | 오픈 API 호출이 공통 호출 규약에 맞지 않은 경우에 전달된다. | |
| 10 | 11 | invalid request | apikey missing | apikey 파라미터가 없음 |
| 10 | 12 | invalid request | Missing auth parameter 'ts'. | ts 파라미터가 없음 |
| 10 | 13 | invalid request | Missing auth parameter 'nonce'. | nonce 파라미터가 없음 |
| 10 | 14 | invalid request | Missing auth parameter 'sigalg'. | sigalg 파라미터가 없음 |
| 10 | 15 | invalid request | Missing auth parameter 'sig'. | sig 파라미터가 없음 |
| 10 | 18 | invalid request | Missing parameter 'apid'. | apid 파라미터가 없음 |
| 20 | | unknown ap instance | 프로그램 인증 실패. | |
| 20 | 21 | unknown ap instance | invalid apikey | 유효하지 않은 apikey |
| 20 | 22 | unknown ap instance | unregistered apikey | 등록되지 않은 apikey |
| 20 | 23 | unknown ap instance | unregistered apid | 등록되지 않은 apid |
| 20 | 24 | unknown ap instance | Signature sigkey is not valid. | 유효하지 않은 서명키 |
| 20 | 25 | unknown ap instance | invalid apid | 유효하지 않은 apid |
| 20 | 26 | unknown ap instance | SignatureKey is not issued to this apikey. | apikey 해당하지 않는 서명키 |
| 20 | 27 | unknown ap instance | ts, nonce are reused. | ts,nonce 재사용 오류 |
| 20 | 28 | unknown ap instance | Unsupported Sign Algorithm. | 지원하지 않는 서명 알고리즘 |
| 30 | | unknown daumuser | apikey 소유자의 Daum 인증 실패. | |
| 40 | | access denied | 서비스 접근 거부 | |
| 40 | 41 | access denied | valid api call but traffic overed | 하루 api 호출 traffic 초과 |
| 40 | 42 | access denied | apikey does not match api category | 이 apikey 로 호출할 수 있는 api 가 아님 |
| 40 | 43 | access denied | unsigned call | 서명되지 않은 호출 |
| 40 | 44 | access denied | unregistered ip | 등록되지 않은 IP 주소 |
| 40 | 45 | access denied | apid doesnot use api | 프로그램이 이 api를 사용하고 있지 않음 |
| 404 | no such api | 해당 오픈 API 서비스가 없음 | |
| 500 | system error | 오픈 API 서비스 내부 시스템 에러. | |
| 504 | service timeout | 오픈 API 서비스 연결 실패. 서비스 시스템 과부하 또는 장애로 인한 서비스 연결 실패. | |
| 100 | | service api runtime error | 오픈 API 서비스 실행 오류. 101~299 값을 가지며, 각 API 에서 정의함. |
트래픽 제한 #
- 오픈 API는 하나의 apikey에 대해서 하루 5,000 회의 호출 만을 허용합니다.
- 트래픽 제어는 보안을 위한 측면이 크며, 증가 추이에 따라 트래픽 허용 수를 늘리는 정책을 사용할 예정입니다.
- 상용 서비스를 위해 또는 사용자 증가로 인하여 허용 traffic 수를 늘리고자 할때에는 어플리케이션 등록을 마치고, 해당 apid에 대해 별도로 traffic 을 조정할 수 있습니다.
샘플 코드 #
- PHP 코드
- JavaScript 코드



