카카오스토리

카카오스토리 API는 카카오스토리 서비스에서 제공하는 API를 말합니다. 카카오계정으로 로그인을 하는 앱에서 사용할 수 있고, 카카오스토리 사용자에 대해서만 사용할 수 있습니다.

현재 제공되는 카카오스토리 API는 다음과 같습니다.

  • 사용자 확인: 해당 사용자가 카카오스토리 사용자인지 아닌지를 판별할 수 있습니다.
  • 프로필 요청: 카카오스토리를 사용하는 사용자에 한해 카카오스토리의 프로필 정보를 얻어 옵니다.
  • 포스팅: 로그인된 자신의 카카오스토리에 포스팅합니다.
  • 내스토리 요청: 하나 또는 여러개의 내스토리 정보를 얻어 옵니다.
  • 내스토리 삭제: 내스토리 정보를 삭제합니다.

카카오스토리 API를 사용할 때 필요한 버튼은 여기를 참조하세요.

사용자 확인

카카오스토리 사용자 확인은 해당 로그인한 사용자가 카카오스토리를 사용하는 사용자인지 아닌지를 판별해 주는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

[Request]

GET /v1/api/story/isstoryuser HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}

사용자 토큰을 헤더에 담아 GET으로 요청합니다.
예를 들면,

curl -v -X GET https://kapi.kakao.com/v1/api/story/isstoryuser \
  -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

[Response]

요청이 성공하면 응답 바디에 JSON 객체로 아래 값을 포함합니다.

설명 타입
isStoryUser 카카오스토리 사용자인지의 여부. true일 경우 카카오스토리 가입자. Boolean

예를 들면,

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
  "isStoryUser":true
}

프로필 요청

카카오스토리 프로필 요청은 사용자 중에 카카오스토리를 사용하는 사용자에 한해 카카오스토리의 프로필 정보를 얻어 올 수 있는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

[Request]

GET /v1/api/story/profile HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}

사용자 토큰을 헤더에 담아 GET으로 요청합니다. 사용자 토큰과 함께 아래 파라미터의 값을 선택적으로 추가할 수 있습니다.

설명 필수
secure_resource 이미지 url을 https로 반환할지 여부. true/false X


예를 들면,

curl -v -X GET https://kapi.kakao.com/v1/api/story/profile \
  -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

[Response]

요청이 성공하면 응답 바디에 JSON 객체로 아래 값을 포함합니다.

설명 타입
nickName 카카오스토리 별명. String
profileImageURL 카카오스토리 프로필 이미지 URL. 480px * 480px ~ 1024px * 1024px 크기 String
thumbnailURL 카카오스토리 썸네일 프로필 이미지 URL. 160px * 213px 크기(160*213 크기의 범위내에서 이미지 비율에 맞게 변경) String
bgImageURL 카카오스토리 배경 이미지 URL. 480px * 480px ~ 1024px * 1024px 크기 String
permalink 카카오스토리 permanent link. 내 스토리를 방문할 수 있는 웹 page의 URL String
birthday 카카오스토리 생일. MMdd 형태로 년도 정보는 제공하지 않는다. String
birthdayType 카카오스토리 생일 타입. enum 형태로 양력, 음력을 표현한다. "SOLAR" or "LUNAR"

예를 들면,

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
  "nickName":"홍길동",
  "profileImageURL":"http://xxx.kakao.com/.../aaa.jpeg",
  "thumbnailURL":"http://xxx.kakao.com/.../bbb.jpeg",
  "bgImageURL":"http://xxx.kakao.co.kr/.../ccc.jpg",
  "permalink": "https://story.kakao.com/XXXXX",
  "birthday":"1231",
  "birthdayType":"SOLAR"
}

포스팅

포스팅은 사용자중에 카카오스토리를 사용하는 사용자에 한해, 자신의 카카오스토리에 포스팅할 수 있는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

포스팅할 수 있는 타입은 아래 세가지 입니다.

  • story_note.png 글(Note) : 글을 작성하여 포스팅합니다.
  • story_photo.png 사진(Photo) : 사진을 올리고, 사진에 맞는 이야기를 작성한 후 포스팅합니다.
  • story_link.png 링크(Link) : 스크랩할 URL로 부터 해당 페이지의 정보를 얻은 후, 그 정보를 바탕으로 포스팅합니다.

모든 타입의 포스팅에 필요한 요소는 여기서 설명하고 각 타입별로 필요한 요소는 각 세션에서 설명합니다.

설명 필수 타입
permission 포스팅 할 스토리를 전체 공개할지 친구 공개할지 여부.
F : 친구에게만 공개, A : 전체 공개, M : 나만 보기
기본값은 A.
X String
enable_share 친구 공개시에 친구가 해당포스팅을 공유할 수 있는지 여부.
전체 공개인 경우는 공유여부 선택불가. 무조건 공유가능.
기본값은 false.
X Boolean
android_exec_param Android 앱 실행 URL에 같이 붙여줄 파라미터.
기본 URL "kakao[appkey]://kakaostory" 뒤에 파라미터로 붙게 된다.
X String
ios_exec_param iOS 앱 실행 URL에 같이 붙여줄 파라미터.
기본 URL "kakao[appkey]://kakaostory" 뒤에 파라미터로 붙게 된다.
X String
android_market_param Android 앱 마켓 URL에 같이 붙여줄 파라미터.
기본 URL "market://details?id=[android package name]" 뒤에 파라미터로 붙게 된다.
X String
ios_market_param iOS 앱 마켓 URL에 같이 붙여줄 파라미터.
기본 URL "https://itunes.apple.com/app/id[앱스토어ID]" 뒤에 파라미터로 붙게 된다.
X String
  • 스토리 상세보기 하단에 포스팅 출처 앱 이름 클릭시 해당 실행 URL이 존재하지 않으면 마켓 URL로 이동 합니다.
  • 마켓 URL을 설정하지 않으면, 앱 미설치 기기에서 링크 클릭시 반응이 없습니다.
    • 예를 들어 Android 앱만 존재하여 설정 > 일반 > 플랫폼 > iOS 에 설정을 하지 않은 경우, 아이폰 카카오스토리에서 앱이동 버튼을 클릭하여도 반응이 없습니다.

글(Note) 포스팅

[Request]

POST /v1/api/story/post/note HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}
Content-Type: application/x-www-form-urlencoded;charset=utf-8

사용자 토큰과 함께 공통 파라미터 + 아래 파라미터의 값들을 POST로 요청합니다.

설명 필수 타입
content 포스팅에 들어갈 내용.
길이제한은 2048자.
사용자가 작성한 내용일 수도 있고, 앱에서 넣어주는 내용일 수도 있다.
O String

예를 들어,
"This cafe is really awesome!"이라는 내용을 전체 공개로 포스팅하고, 앱 버튼 클릭시 연결하는 URL을 Android, iOS 모두 kakao[appkey]://kakaostory?cafe_id=1234 로 하고 싶다면 아래와 같이 수행할 수 있습니다.

curl -v -X POST https://kapi.kakao.com/v1/api/story/post/note \
 -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
 --data-urlencode 'content=This cafe is really awesome!' \
 --data-urlencode 'android_exec_param=cafe_id=1234' \
 --data-urlencode 'ios_exec_param=cafe_id=1234'

[Response]

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
    "id":"AAAAAAA.BBBBBBBBBBB"
}

성공일 경우, HTTP StatusCode 200에 해당 포스팅의 id가 반환됩니다.

사진(Photo) 포스팅

1. 사진 포스팅을 하기 위해서 먼저 이미지 업로드 API를 호출합니다.
업로드 성공하면, 응답으로 받는 이미지 파일의 URI를 스토리 포스팅 API에 파라미터로 포함시켜 포스팅하시면 됩니다.
업로드 이미지 크기는 10MB 이하, 갯수는 10개 이하로 제한됩니다. 단, gif 파일은 1개 이하로 제한됩니다.

스토리 포스팅에 임의의 이미지 URL을 전달 할 수 없습니다. 반드시 업로드 API를 이용하여 업로드한 이미지만 사용할 수 있습니다.

[Request]

POST /v1/api/story/upload/multi HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}
Content-Type: multipart/form-data; boundary=---------------------------012345678901234567890123456

사용자 토큰을 헤더에, 업로드할 파일의 바이너리를 file 필드에 담아 POST로 요청합니다.

설명 필수 타입
file
(multi지원)
또는 file로 시작하는 이름. 예) file[0], file[1], file1 등
업로드할 파일의 바이너리.
Content-Disposition에 filename도 같이 있어야 함 (multipart 표준참고)
O binary
---------------------------012345678901234567890123456
Content-Disposition: form-data; name="file"; filename="your_image.jpg"
Content-Type: image/jpeg

...
---------------------------012345678901234567890123456

예를 들면,

curl -v -X POST https://kapi.kakao.com/v1/api/story/upload/multi \
  -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -F "file=@/aaaa/bbbb/cccc/0.jpg" \
  -F "file=@/aaaa/bbbb/dddd/0.jpg"

PHP

<?php
   $uploadfile1="your_example_image_1.jpg";
   $uploadfile2="your_example_image_2.jpg";
   $ch = curl_init("https://kapi.kakao.com/v1/api/story/upload/multi");
   curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
   curl_setopt($ch, CURLOPT_POSTFIELDS, array('file[0]'=>"@$uploadfile1", 'file[1]'=>"@$uploadfile2"));
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $postResult = curl_exec($ch);
   curl_close($ch);
   print "$postResult";
?>

Python

import requests

upload_photo_url = 'https://kapi.kakao.com/v1/api/story/upload/multi'
post_photo_url = 'https://kapi.kakao.com/v1/api/story/post/photo'

files = {'file': open('your_picture.jpeg', 'rb')}

token = 'YOUR TOKEN HERE'
headers = {'Authorization': 'Bearer {0}'.format(token)}

upload_result = requests.post(upload_photo_url, headers=headers, files=files)

post_photo_payload = {'image_url_list': upload_result.text}
post_result = requests.post(post_photo_url, headers=headers, data=post_photo_payload)

print post_result

Java

import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;

public class MultiUploadTest {

    private final static String STORY_UPLOAD_MULTI_URL
            = "https://kapi.kakao.com/v1/api/story/upload/multi";

    private final static String ACCESS_TOKEN = "[YOUR ACCESS TOKEN]";

    public static void main(String[] args) {
        String uploadedImageUrlList = uploadMulti(
                new File[]{
                        new File("/root/sample1.png"),
                        new File("/root/sample2.png")
                });

        System.out.println(uploadedImageUrlList);

        // result
        // [
        //   "/M9qi0/hygv5qpDce/jQiFgjJYUWkXoskTO8m8F0/img.png?width=160&height=160",
        //   "/cpYIJ1/hygwaZyfQl/4PjHIHrS1SlwmZWd17Vje0/img.png?width=314&height=306"
        // ]
    }

    public static String uploadMulti(File[] files) {

        if (files.length == 0)
            return null;

        String CRLF = "\r\n";
        String TWO_HYPHENS = "--";
        String BOUNDARY = "---------------------------012345678901234567890123456";
        HttpsURLConnection conn = null;
        DataOutputStream dos = null;
        FileInputStream fis = null;

        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int MAX_BUFFER_SIZE = 1 * 1024 * 1024;

        // Request
        try {
            URL url = new URL(STORY_UPLOAD_MULTI_URL);
            conn = (HttpsURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" +
                                      BOUNDARY);
            conn.setRequestProperty("Authorization", "Bearer " + ACCESS_TOKEN);
            conn.setRequestProperty("Cache-Control", "no-cache");

            dos = new DataOutputStream(conn.getOutputStream());

            for (File f : files) {
                dos.writeBytes(TWO_HYPHENS + BOUNDARY + CRLF);
                dos.writeBytes("Content-Disposition: form-data; name=\"file\";" +
                                " filename=\"" + f.getName() + "\"" + CRLF);
                dos.writeBytes(CRLF);
                fis = new FileInputStream(f);
                bytesAvailable = fis.available();
                bufferSize = Math.min(bytesAvailable, MAX_BUFFER_SIZE);
                buffer = new byte[bufferSize];
                bytesRead = fis.read(buffer, 0, bufferSize);
                while (bytesRead > 0) {
                    dos.write(buffer, 0, bufferSize);
                    bytesAvailable = fis.available();
                    bufferSize = Math.min(bytesAvailable, MAX_BUFFER_SIZE);
                    bytesRead = fis.read(buffer, 0, bufferSize);
                }
                dos.writeBytes(CRLF);
            }

            // finish delimiter
            dos.writeBytes(TWO_HYPHENS + BOUNDARY + TWO_HYPHENS + CRLF);

            fis.close();
            dos.flush();
            dos.close();

        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            if (fis != null) try { fis.close(); } catch (IOException ignore) { }
            if (dos != null) try { dos.close(); } catch (IOException ignore) { }
        }

        // Response
        InputStream inputStream = null;
        BufferedReader reader = null;
        try {
            inputStream = new BufferedInputStream(conn.getInputStream());
            reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                builder.append(line).append("\n");
            }
            reader.close();
            return builder.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try { reader.close(); } catch (IOException ignore) {}
            }
            if (inputStream != null) {
                try { inputStream.close(); } catch (IOException ignore) {}
            }
            conn.disconnect();
        }

        return null;
    }
}

[Response]

요청이 성공하면 응답 바디에 업로드된 이미지들의 path가 크기와 함께 반환됩니다.

예를 들면,

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
[
    "/aaaaa/bBbbbBbbbB/CCcCcC1ccCCcCCCCCCcc1c/img.png?width=150&height=150",
    "/aaaaaa/bBbbbbbBbBb/dDdDDDDDddddDdddddDDDDDd/img.jpg?width=1080&height=1920"
]

2. 이미지 업로드 결과와 이미지와 함께 올리고자하는 내용을 선택적으로 추가하여 사진 포스팅 API를 호출합니다.

[Request]

POST /v1/api/story/post/photo HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}
Content-Type: application/x-www-form-urlencoded;charset=utf-8

사용자 토큰과 함께 공통 파라미터 + 아래 파라미터의 값들을 POST로 요청합니다.

설명 필수 타입
image_url_list 이미지 업로드 결과로 포스팅에 들어갈 이미지들.
이미지 업로드 요청 후 받은 응답을 그대로 사용한다.
O Json array object기반의 String
content 포스팅에 들어갈 이미지에 대한 내용.
길이제한은 2048자.
사용자가 작성한 내용일 수도 있고, 앱에서 넣어주는 내용일 수도 있다.
X String

예를 들어,
위 예제에서 올린 이미지와 함께 "This cafe is really awesome!"이라는 내용을 친구 공개, 친구 공유 허용으로 포스팅하고 아래와 같이 수행할 수 있습니다.

curl -v -X POST https://kapi.kakao.com/v1/api/story/post/photo \
 -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
 -d 'permission=F' \
 -d 'enable_share=true' \
 --data-urlencode 'content=This cafe is really awesome!' \
 --data-urlencode 'image_url_list=['/aaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbb/img.jpg?width=6200&height=3100','/aaaaaaaaaaaaaaaaa/dddddddddddddddddddddd/img.jpg?width=6200&height=3100']'

[Response]

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
    "id":"AAAAAAA.CCCCCCCCCCC"
}

성공일 경우, HTTP StatusCode 200에 해당 포스팅의 id가 반환됩니다.

1. 링크 포스팅을 하기 위해서 먼저 해당 링크로 부터 정보를 얻어오는 API를 호출합니다. 정보를 성공적으로 얻어오면, 응답 결과로 미리보기를 제공할 수 있습니다.

[Request]

GET /v1/api/story/linkinfo HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}

사용자 토큰과 함께 아래 파라미터의 값을 GET으로 요청합니다.

설명 필수 타입
url 스크랩 하고 싶은 url로 해당 url로부터 정보를 얻어오게 됨. O String

예를 들어, https://developers.kakao.com 을 스크랩하고 싶다면

curl -v -X GET https://kapi.kakao.com/v1/api/story/linkinfo?url=http://bit.ly/1wwLqDl \
     -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

[Response]

요청이 성공하면 응답 바디에 JSON 객체로 아래 값을 포함합니다.

설명 타입
url 스크랩 한 주소의 URL. shorten URL의 경우 resolution한 실제 URL String
requested_url 요청시의 URL 원본. resolution을 하기 전의 URL String
host 요청한 주소의 Host 명 String
title 웹페이지 타이틀 String
image 해당 웹 페이지의 대표 이미지 주소. 최대 3개. String
description 해당 웹 페이지의 설명 String
section 해당 웹 페이지의 섹션 정보 String
type 해당 웹 페이지가 포함하는 콘텐츠의 타입 정보. 예) website, video, music 등 String

예를 들어,

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
  "url":"https://developers.kakao.com/",
  "requested_url":"http://bit.ly/1wwLqDl",
  "host":"developers.kakao.com",
  "title":"Kakao Developers_",
  "image":["http://dn-l1-story.kakao.co.kr/dn/bc995u/hydnh8wbKi/dz59YCCjyZSXNmDgTPpPa0/img.jpg?height=630&width=1200"],
  "description":"더 나은 세상을 꿈꾸고 그것을 현실로 만드는 이를 위하여 카카오에서 앱 개발 플랫폼 서비스를 시작합니다.",
  "section":"",
  "type":"website"
}

2. 얻어온 스크랩 정보와 함께 올리고자 하는 내용을 선택적으로 추가하여 링크 포스팅 API를 호출합니다.

[Request]

POST /v1/api/story/post/link HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}
Content-Type: application/x-www-form-urlencoded;charset=utf-8

사용자 토큰과 함께 공통 파라미터 + 아래 파라미터의 값들을 POST로 요청합니다.

설명 필수 타입
link_info linkinfo의 결과값 O String
content 스크랩 정보와 함께 선택적으로 들어갈 내용.
길이제한은 2048자.
사용자가 작성한 내용일 수도 있고, 앱에서 넣어주는 내용일 수도 있다.
X String

예를 들어,
위 예제에서 얻어온 정보와 함께 "better than expected!"이라는 내용을 전체 공개 포스팅 하고 싶다면 아래와 같이 수행할 수 있습니다.

curl -v -X POST https://kapi.kakao.com/v1/api/story/post/link \
-H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
--data-urlencode 'link_info={
                             "url":"https://developers.kakao.com/",
                             "requested_url":"http://bit.ly/1wwLqDl",
                             "host":"developers.kakao.com",
                             "title":"Kakao Developers_",
                             "image":["http://dn-l1-story.kakao.co.kr/dn/bc995u/hydnh8wbKi/dz59YCCjyZSXNmDgTPpPa0/img.jpg?height=630&width=1200"],
                             "description":"더 나은 세상을 꿈꾸고 그것을 현실로 만드는 이를 위하여 카카오에서 앱 개발 플랫폼 서비스를 시작합니다.",
                             "section":"",
                             "type":"website"
                            }' \
--data-urlencode 'content=better than expected!'

[Response]

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
    "id":"AAAAAAA.DDDDDDDDDDD"
}

성공일 경우, HTTP StatusCode 200에 해당 포스팅의 id가 반환됩니다.

내스토리 정보 요청

사용자중에 카카오스토리를 사용하는 사용자에 한해, 자신이 올린 스토리의 정보를 가지고 올 수 있습니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

결과에는 아래의 정보가 포함되어 있습니다.

설명 타입
id 포스팅 결과로 받는 스토리별 고유 아이디 String
url 해당 내스토리로 갈 수 있는 web url String
media_type 스토리 타입. "NOTE" "PHOTO" "NOT_SUPPORTED"
created_at 스토리 생성시각 String
RFC3339 internet date/time format.
content 스토리 구성중 텍스트에 해당하는 글 내용. String
media media_type이 PHOTO 스토리인 경우만 제공. 크기별로 이미지 URL로 구성된 객체의 array
comment_count 댓글수 signed i32
like_count 느낌수 signed i32
comments 댓글 내용과 댓글 작성자. 하나의 내스토리 정보 요청인 경우만 제공 "text" 와 "writer"로 구성된 json
"writer" : "display_name"와 "profile_thumbnail_url"로 구성
likes 느낌 내용과 느낌 작성자. 하나의 내스토리 정보 요청인 경우만 제공 "emotion" 과 "actor"로 구성된 json
"emotion" : "LIKE" "COOL" "HAPPY" "SAD" "CHEER_UP" "NOT_DEFINED"
"actor" : "write"와 같은 구성 요소.
permission 스토리 공개 범위 "PUBLIC" "FRIEND" "ONLY_ME"

하나의 내스토리 정보 요청

얻고자 하는 내스토리 id를 지정하고, 내스토리 API를 호출합니다.

[Request]

GET /v1/api/story/mystory HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}

사용자 토큰과 함께 아래 파라미터의 값을 GET으로 요청합니다.

설명 필수 타입
id 정보를 원하는 내스토리 아이디 O String

예를 들어,
앞선 사진 포스팅 정보를 얻고자 하면

curl -v -X GET https://kapi.kakao.com/v1/api/story/mystory?id=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
     -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

[Response]

요청이 성공하면 응답 바디에 JSON 객체로 카카오스토리-내스토리-정보값을 포함합니다.

예를 들어,
앞선 사진 포스팅 정보를 얻으면

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
    "id": "AAAAAAA.CCCCCCCCCCC",
    "url": "http://story-web.kakao.com/AAAAAAA/CCCCCCCCCCC",
    "media_type": "PHOTO",
    "created_at": "2014-06-13T07:58:20Z",
    "comment_count": 1,
    "like_count": 1,
    "content": "This cafe is really awesome!",
    "media": [
        {
            "original":"http://xxx.kakao.co.kr/.../img.png?width=150&height=150",
            "xlarge":"http://xxx.kakao.co.kr/.../img_xl.jpg?width=150&height=150",
            "large":"http://xxx.kakao.co.kr/.../img_l.jpg?width=150&height=150",
            "medium":"http://xxx.kakao.co.kr/.../img_m.jpg?width=150&height=150",
            "small":"http://xxx.kakao.co.kr/.../img_s.jpg?width=150&height=150"
        }
    ],
      "comments": [
        {
          "text": "여기 위치가 어디?",
          "writer": {
            "display_name": "한여름",
            "profile_thumbnail_url": "http://xxxx.kakao.co.kr/.../ABCDEFG.jpeg"
          }
        }
      ],
      "likes": [
        {
          "emotion": "COOL",
          "actor": {
            "display_name": "여바다",
            "profile_thumbnail_url": "http://xxxx.kakao.co.kr/.../1234566.jpeg"
          }
        }
      ]
}


복수개의 내스토리 정보 요청

가장 최근에 작성된 내스토리 복수개를 요청하거나 지정한 스토리보다 이전에 작성된 내스토리 복수개를 요청할 수 있습니다. 대략 18개 정도의 정보를 한꺼번에 받을 수 있습니다. 지정한 아이디의 내스토리는 결과에 포함되지 않습니다.

[Request]

GET /v1/api/story/mystories HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}

사용자 토큰과 함께 아래 파라미터의 값을 GET으로 요청합니다.

설명 필수 타입
last_id 정보를 원하는 마지막 내스토리 아이디.
설정한 포스트 아이디 바로 전 내스토리로부터 복수개의 내스토리 정보 반환.
설정한 이 포스트 아이디에 해당하는 내스토리 정보는 포함되지 않음.
기본값은 가장 최근 작성된 스토리 아이디.
X String

예를 들어,
앞선 사진 포스팅 이전의 내스토리들의 정보를 얻고자 하면

curl -v -X GET https://kapi.kakao.com/v1/api/story/mystories?last_id=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
     -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

[Response]

요청이 성공하면 응답 바디에 JSON 객체로 카카오스토리-내스토리-정보가 Array로 포함합니다.

예를 들어,

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
[
    {
        "id": "AAAAAAA.BBBBBBBBBBB",
        "url": "http://story-web.kakao.com/AAAAAAA/BBBBBBBBBBB",
        "media_type": "NOT_SUPPORTED",
        "created_at": "2014-06-13T07:58:26Z",
        "comment_count": 3,
        "like_count": 4,
        "content": "better than expected!"
    },
    {
        "id": "AAAAAAA.CCCCCCCCCCC",
        "url": "http://story-web.kakao.com/AAAAAAA/CCCCCCCCCCC",
        "media_type": "PHOTO",
        "created_at": "2014-06-13T07:58:20Z",
        "comment_count": 1,
        "like_count": 1,
        "content": "This cafe is really awesome!",
        "media": [
            {
                "original":"http://xxx.kakao.com/.../img.png?width=150&height=150",
                "xlarge":"http://xxx.kakao.com/.../img_xl.jpg?width=150&height=150",
                "large":"http://xxx.kakao.com/.../img_l.jpg?width=150&height=150",
                "medium":"http://xxx.kakao.com/.../img_m.jpg?width=150&height=150",
                "small":"http://xxx.kakao.com/.../img_s.jpg?width=150&height=150"
            }
        ]
    },
    {
        "id": "AAAAAAA.DDDDDDDDD",
        "url": "http://story-web.kakao.com/AAAAAAA/DDDDDDDDD",
        "media_type": "NOTE",
        "created_at": "2014-06-13T07:58:17Z",
        "comment_count": 0,
        "like_count": 10,
        "content": "A Rainbow - William Wordsworth\n\n..."
    },
    ...
]

내스토리 삭제

사용자중에 카카오스토리를 사용하는 사용자에 한해, 자신이 올린 스토리를 삭제할 수 있습니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

삭제하고자 하는 내스토리 id를 지정하고, 내스토리 삭제 API를 호출합니다.

[Request]

DELETE /v1/api/story/delete/mystory HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {access_token}

사용자 토큰과 함께 아래 파라미터의 값을 DELETE로 요청합니다.

설명 필수 타입
id 삭제할 내스토리 아이디 O String

예를 들어,
앞선 사진 포스팅을 삭제하고자 하면

curl -v -X DELETE https://kapi.kakao.com/v1/api/story/delete/mystory?id=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
     -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

[Response]

요청이 성공하면 Http Status가 200으로 오고, 응답 바디는 없습니다.

HTTP/1.1 200 OK
Content-Length: 0
Content-type: application/json;charset=UTF-8

Last Modified : 2017-07-31