초보개발자 문의 - 카스 연동 참고할만한 사이트

안녕하세요. 카스 연동을 처음 시도해보는 초보 개발잡니다.

카스 api에 나와있는 샘플이라던지 개발가이드 문서등은 살펴보았는데
아직 이해하기에 어려움이 있네요

실제로 카스와 연동해서 구현한 사이트가 있다면
실제 코드를 보면서 이해하기가 훨씬 수월할거 같은데요.

여기 모이신 개발자 중에서 참고할 만한 사이트 추천해 주실분 있으신가요?

(제가 구현하려는건 ’ 카카오스토리 복수개의 내스토리 정보 요청’ 입니다만
꼭 이 기능이 아닌 다른 기능이 구현된 사이트라도 확인해 보고 싶습니다)

@sonokong

가장 간단히 REST API를 테스트하는 방법은…

첫번째로…
카카오 계정으로 로그인 데모를 통해서 access token을 얻습니다.

두번째로 서버와 통신하는 쪽의 코드를 추가합니다.

  1. APM이 설치되어 있다면 아래 PHP 샘플 코드를 복사/붙여 넣기를 하신 다음 소스에 보시면 access token을 넣는 곳에 붙여 넣습니다.
    주석이 많이 되어 있는데 블럭 하나씩 풀어 가면서 테스트 해보세요.
    php로 rest api 호출하기 샘플 코드

  2. JDK가 설치되어 있다면 아래 Java 샘플 코드를 복사/붙여 넣기를 하신 다음 소스에 보시면 access token을 넣는 곳에 붙여 넣습니다.
    주석이 많이 되어 있는데 블럭 하나씩 풀어 가면서 테스트 해보세요.
    Java로 REST API 호출 샘플 코드

답변주셔서 감사합니다.

덕분에 액세스 토큰 까지는 얻는데 성공했습니다.

그런데 제가 연동할 사이트가 C# (asp.net) 으로 되어 있다보니
링크해 주신 java 나 php로는 ㅅ매플 테스트가 어렵네요.

c# 관련자료가 있다면 다시 부탁드려도 될까요?

@sonokong
C#…으로된 자료는 없네요. 만들어 드리고는 싶지만 개발환경이 없어서^^;;

@sonokong

돌려볼 환경이 없어 테스트 안해봐서 모르겠습니다만,
대략 아래와 같이 작성하면 될거 같은데… 참고해 보세요.

WebRequest request = WebRequest.Create("https://kapi.kakao.com/v1/api/story/mystories");
// 특정 아이디 부터 가져오고 싶을 때는 
// https://kapi.kakao.com/v1/api/story/mystories?last_id=[mystory id]
request.Headers.Add("Authorization", "Bearer [로그인을 통해 받은  access token 값]");
Stream dataStream = request.GetRequestStream();
dataStream.Close();

WebResponse response = request.GetResponse();
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();

https://msdn.microsoft.com/ko-kr/library/debx8sh9(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-27

tom 님의 조언에 따라 아래와 같이 코딩하여 진행을 해보았습니다…

WebRequest request = WebRequest.Create(“https://kapi.kakao.com/v1/api/story/mystories”);
// 특정 아이디 부터 가져오고 싶을 때는
request.Method = “POST”;
request.Headers.Add(“Authorization”, “Bearer OqEvAUss-r-rk-cxkHtNCPL830nSyD이하토큰생략”);
Stream dataStream = request.GetRequestStream();
dataStream.Close();

            WebResponse response = request.GetResponse();  <---- 요부분 에러발생
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            Console.WriteLine(responseFromServer);
            reader.Close();
            dataStream.Close();
            response.Close();

그랬더니, 403번 에러가 발생합니다.
System.Net.WebException: 원격 서버에서 (403) 사용할 수 없음 오류를 반환했습니다. 위치: System.Net.HttpWebRequest.GetResponse() 위치: Sonokong.Controllers.HomeController.KakaoStory() 파일 D:\웹개발_프로젝트\Sonokong\Controllers\HomeController.cs:줄 88

위 테스트는 회사내 개발서버로 진행했구요.
host파일을 수정해서 '앱’신청할때 입력했던 도메인으로 연결되게끔 셋팅해둔 상태입니다.

토큰값은 …
{“access_token”:“OqEvAUss-r-rk-cxkHtNCPL830nSyDs_이하생략”,“token_type”:“bearer”,“refresh_token”:“zMf-gbW-F93yRZ0Rc6rEh이하생략”,“expires_in”:7199,“scope”:“story_publish story_read profile”}

이렇게 값을 받은것을 사용했습니다.

어디에 문제가 있는걸까요?

3번째 줄의 “request.Method = “POST”;” 항은
원래 없었던 거지만 , 디버깅을 하면 아래와 같은 오류 메시지가 발생했었습니다.

“verb-type으로 content-body를 보낼 수 없습니다”

전달방식을 GET → POST로 바꿔야 한다고해서
변경해준 것입니다.

참고로 댓글 남깁니다

@sonokong
제가 위에 소스 붙여 넣고 바로 GET으로 되게 수정을했어요.ㅜㅜ
/v1/api/story/mystories API는 GET 방식으로 호출하셔야 합니다^^
msdn 링크 드린 것도 살펴보면서 해보세요.
화이팅 하세요~

제가 위에 소스 붙여 넣고 바로 GET으로 되게 수정을했어요.ㅜㅜ
이 말씀이 무슨 말씀이신지… 잘 모르겠습니다.
젤 먼저 붙여주신 소스 그대로 하면 (GET방식)
“verb-type으로 content-body를 보낼 수 없습니다”
라고 오류가 뜹니다.

POST 방식으로 보내면 403번 오류가 나고요.
ㅎㅎㅎ 전 어떻게해야 하는걸까요?

안녕하세요. REST API로 카스를 연동해 보려는 초보 개발자 입니다.
사이트 개발언어는 C# 입니다. (씨샵 자료가 별로 없네요 ㅠ.ㅠ)

WebRequest request = WebRequest.Create(“https://kapi.kakao.com/v1/api/story/mystories”);
// 특정 아이디 부터 가져오고 싶을 때는
request.Headers.Add(“Authorization”, “Bearer OqEvAUss-r-rk-cxkHtNCPL8이하생략”);
Stream dataStream = request.GetRequestStream();
dataStream.Close();

            WebResponse response = request.GetResponse();
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            Console.WriteLine(responseFromServer);
            reader.Close();
            dataStream.Close();
            response.Close();

소스는 위와 같습니다.
이렇게 하고 디버깅을 했더니 아래와 같은 오류 메시지가 뜨네요

System.Net.ProtocolViolationException: 이 verb-type으로 content-body를 보낼 수 없습니다. 위치: System.Net.HttpWebRequest.CheckProtocol(Boolean onRequestStream) 위치: System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 위치: System.Net.HttpWebRequest.GetRequestStream() 위치:

구글링을 해보니 “이 verb-type으로 content-body를 보낼 수 없습니다” 이 메시지는 전송방식을 GET 방식으로 보낼때 뜨는 메시지라고 하던데요…
그래서 전송방식을 POST로 바꿔봤더니, 403번 오류가 발생하더군요 m.m

토큰만 정상적으로 받고 그 이후로는 이저리도 저러지도 못하고 있습니다.
이 어리석은 중생을 구제해 주시기 바랍니다… Plz Help me~

@sonokong
저희쪽에 닷넷 개발환경이 없어 정확한 답변을 하기가 힘드네요ㅠㅠ
추측으로 아래 처럼 수정해보시겠어요?

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://kapi.kakao.com/v1/api/story/mystories");
request.Method = "GET";
request.Headers.Add("Authorization", "Bearer [YOUR ACCESS TOKEN]");
HttpWebResponse response;
using (response = (HttpWebResponse)request.GetResponse()) {
  Console.WriteLine(((HttpWebResponse)response).StatusDescription);
  Stream dataStream = response.GetResponseStream();
  StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding("UTF-8"), true);
  string result = reader.ReadToEnd();
  Console.WriteLine(result);
} 

제가 참고한 사이트인데… 여기도 확인해 보세요.
http://carpedm20.blogspot.kr/2013/04/c-httpwebrequest-http.html

답변 주셔서 감사합니다.
알려주신 대로 테스트를 해봤더니

“System.Net.WebException: 원격 서버에서 (401) 권한이 없음 오류를 반환했습니다. 위치: System.Net.HttpWebRequest.GetResponse()”

401번 오류가 납니다.

이 문제가 계속 해결이 안되니… 제가 받는 토큰이 제대로 받은건가? 라는 의심도 드네요
OqEvAUss-r-rk-cxkHtNCPL830nSyDs_afpXz6wQQjMAAAFP3yhC2g

토큰까지 남겨 봅니다. 제대로 받은건지 확인 부탁드려요

권한오류라고 하니… 이게 틀린건가… 라는 생각이 들어서요

@sonokong
REST Key의 경우
간편한 참조 응답 코드를 확인해 보시면 아시겠지만… 에러 내용을 다음과 같습니다.

-401	사용자 토큰이 잘못되었을 경우. 주로 만료된 토큰에 대한 요청 

알려주신 토큰은 이미 만료되어 검색이 안되네요.
REST API의 경우 만료시간은 6시간 입니다.

안녕하세요. 지난달에 답글 달아주시고…오랫동안 손을 못대고 있다가
다시 오랜만에 작업을 시작하게 되었습니다.

다행스럽게도 이제 더이상 오류가 발생하지는 않습니다.
그렇지만 여전히 제자리 걸음이군요… 참 어렵네요 ^^;;

소수겠지만 닷넷개발자들도 있다는 사실…기억해 주셨음 합니다.

코드는 아래처럼 지난번에 올렸던거랑 별 차이는 업습니다.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(“https://kapi.kakao.com/v1/api/story/mystories”);
request.Method = “GET”;
request.Headers.Add(“Authorization”, “Bearer 2Oxe-ZdymHE_EKeaVrnVwHaCgVlKFx4mwyqYcqwQQjMAAAFQX8B4zQ”);
HttpWebResponse response;
string result;
using (response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.GetEncoding(“UTF-8”), true);
result = reader.ReadToEnd();
}

카카오 스토리 최신것부터 여러개를 불러올 생각인데
https://kapi.kakao.com/v1/api/story/mystories ← 여기 주소와 연결하는게 맞죠?

토큰은 방금 생성한것으로 테스트 했으니까 맞을거고요.

그런데… result의 값이 [] 입니다.

디버깅중에 조사식으로 값을 확인해 봐도 [] <— 이렇게 출력되고요
이걸 html 화면에 출력시키면 역시 [] ← 이렇게 출력됩니다.

값이 비어 있는걸까요? 카카오스토리의 내용은 없고… 어떻게 된걸까요?

제발~ 해결될수 있게 도와주세요 ㅠ,ㅠ

@sonokong
/v1/api/story/mystories 여기서 테스트 해보실 때도 결과 값이 없는지 확인해 보시겠어요?
그리고 로그인한 유저의 스토리가 공개로 되어 있는 것만 출력이 됩니다~

링크 걸어주신 주소가
https://kapi.kakao.com/v1/api/story/mystories ← 이거 아닌가요? (똑같은거 같은데…)
링크를 잘못 걸어주신건지…

그리고 저희팀 담당자랑 얘길 해보니까
‘카카오스토리’ 와 '카카오스토리채널’이 다르다고 하던데…
저흰 '채널’이거든요.

이것은 상관없는건가요?

@sonokong
이제까지…ㅠㅠ 카카오스토리 채널이라고 말씀 안하셔서 카카오스토리 목록 가져오는 것을 알려드렸던 것이고요.
뭔가 오해가 있으셨던거 같네요.
카카오스토리 채널 API는 내부적으로 결정된 다음에 저희쪽에서 API를 래핑해서 오픈하게 되는데 아직… 공개전입니다.
일정이 잡히면 공지하도록 하겠습니다.

감사합니다 ^^
저도 개발담당자라 몰랏습니다.
저희팀 담당자가 말해주기 전까지는요.

오랫동안 성실하게 답변해 주셔서 감사드립니다. ^^

1개의 좋아요