저번글에서 소개 · GitBook (tistory.github.io) 를 이용해서 code,access_token을 얻고 이 토큰을 이용해서 axios를 이용해서 get 방식으로 블로그 정보와 카테고리 정보를 얻어오는 방법을 작성했습니다.

이번 글에서는 토큰과 글 작성 · GitBook (tistory.github.io) 를 이용해서 post 방식으로 블로그 글 작성을 진행해 보도록 하겠습니다.

오픈 API 가이드 글작성에 필요한 파라미터들입니다. 

작성 테스트를 진행하던 중 무슨 파라미터인가 알기 가장 어려웠던게 category 파라미터였습니다. 몇 번 테스트 해본 결과

category 파라미터는 get방식에서 작업했던 카테고리 · GitBook (tistory.github.io)에서 얻어온 id값이었습니다. 

  • blogName: Blog Name (필수) title: 글 제목 (필수) content: 글 내용 visibility: 발행상태 (0: 비공개 - 기본값, 1: 보호, 3: 발행) 
  • category: 카테고리 아이디 (기본값: 0)

나머지는 특이사항이 없었던 듯하고 가이드의 설명을 보면서 파라미터 값을 변경하시고 테스트해보면 바로 확인이 가능했습니다.블로그 내용 작성 폼은 만들지 않고 바로 post 방식으로 진행하겠습니다.

category는 저번 글에서 얻어온 "1102530" 를 사용합니다.

 

가이드의 파라미터형을 axios에서 사용하기 편하도록 변경했습니다. 나열해서 기존 get방식 Url방식으로 사용하셔도 동자합니다. 메뉴는 공통부분을 통일해서 전역변수로 옮겼습니다. axios get과 데이터를 주고 받는 방식은 동일하고 axios.post 방식으로 바뀌었고 파라미터 유형이 많아져서, dict 방식으로 파라미터 전송방식을 변경했습니다.

 

추가코드

const menu = `<a href=/>홈</a>|<a href=/set_code>로컬에코드입력</a>
|<a href="/get/blog/info">블로그정보얻기</a>
|<a href="/apis/category/list">카테고리정보얻기</a>
|<a href="/apis/post/write">블로그작성</a>
`;

app.get('/apis/post/write', async (req, res) => {
  const loc = `https://www.tistory.com/apis/post/write`;

  const title = "Post 연동한 타이틀";
  const content = `본문/////${title}`;
  const tag = 'tag, javascript, 티스토리';

  const postData = {
    'access_token': access_token,
    'output': output,
    'blogName': "a3040",
    'title': title,
    'content': content,
    'visibility': 3, //visibility: 발행상태 (0: 비공개 - 기본값, 1: 보호, 3: 발행)
    'category': '1102530', //  카테고리 · GitBook (tistory.github.io)에서 얻어온 id값
    // 'published':published, published: 발행시간 (TIMESTAMP 이며 미래의 시간을 넣을 경우 예약. 기본값: 현재시간)
    // 'slogan':slogan, slogan: 문자 주소
    'tag': tag,
    // 'acceptComment':acceptComment, acceptComment: 댓글 허용 (0, 1 - 기본값)
    // 'password':password,acceptComment: 댓글 허용 (0, 1 - 기본값)
  }

  let view_html = `${menu}`;

  try {
    const awaitRes = await axios.post(loc, postData);
    console.log(awaitRes.data);

    const dataToString = JSON.stringify(awaitRes.data);
    view_html += `${dataToString}`;
  } catch (error) { console.error(error); }

  res.send(`${view_html}`);
});

실행화면 입니다. code획득 > access_token을 얻은 후에 나머지 작업들이 가능합니다. "블로그작성" 클릭

"블로그작성" 클릭 후 상황입니다.

api가이드에 나와었었던 것처럼 등록된 블로그 uri가 반환됩니다. 반환된 uri로 접속해봅니다.

방금 작성한 블로그가 잘 보입니다. 파라미터 매핑도 정확하게 되어있습니다.

이상으로 node에서 express를이용해서 tistory open api 사용에 대해서 마치도록 하겠습니다. python으로 되어 있는 예제가 많아서 javascript로 한번 작성해 보았습니다.

 

전체코드는 tistory_openapi/ex4 at master · a3040/tistory_openapi · GitHub를 참조하세요.

tistory openapi를 이용해서 code를 얻고 Access Token 발급 받는 것까지 진행했습니다. 이어서 access tokent을 이용해서 openapi에서 제공하는 블로그나 카테고리 정보를 얻거나 블로그에 글 작성, 댓글 작성등의 데이터 보내기를 수행할수 있습니다.
이번에는 데이터를 얻는 방법을 알아보도록 하겠습니다.

 

블로그 정보 · GitBook (tistory.github.io) 

를 이용해서 블로그 정보를 얻어보도록 하겠습니다. 

문서에 있는방법으로 데이터를 얻기위해서는 axios.get 방식을 사용했습니다. 그리고 페이지 이동을 위해 menu변수를 추가했습니다. 참고로 code와 access token을 얻은 후 /get/blog/info를 클랙해야 데이터를 얻어오는게 가능합니다.

 

const output='json';

app.get('/get/blog/info', async (req, res) => {
  const loc = `https://www.tistory.com/apis/blog/info?
  access_token=${access_token}
  &output=${output}`;

  let menu = `<a href=/>홈</a>|<a href=/set_code>로컬에코드입력</a>|<a href="/get/blog/info">블로그정보얻이</a>`;
  let view_html = `${menu}`;

  try{
    const awaitRes = await axios.get(loc);
    console.log( awaitRes.data );

    const dataToString = JSON.stringify( awaitRes.data );
    view_html += `${dataToString}`;
  }catch(error){console.error(error);}

  res.send(`${view_html}`);
});

app.get('/get_token', async (req, res) => {
  const tcode = req.query.code;
  code = tcode; //전역변수에 추가

  const loc = `https://www.tistory.com/oauth/access_token?
  client_id=${client_id}
  &client_secret=${client_secret}
  &redirect_uri=${redirect_uri}
  &code=${code}
  &grant_type=authorization_code`;

  let menu = `<a href=/>홈</a>|<a href=/set_code>로컬에코드입력</a>|<a href="/get/blog/info">블로그정보얻이</a>`;

  try{
    const awaitRes = await axios.get(loc);
    access_token = awaitRes.data.access_token;
  }catch(error){console.error(error);}

  const view_html = `${menu} ${access_token}`;
  res.send(`${view_html}`);
});

토큰을 얻은 상태의 실행결과입니다. 

토큰을 얻고 "블로그정보얻기"를 클릭한 상태입니다.

openapi사용 메뉴과 같은 정보가 조회됩니다.

바로 category 정보를 얻어보도록 하겠습니다.

카테고리 · GitBook (tistory.github.io) 

https://www.tistory.com/apis/category/list?
  access_token={access-token}
  &output={output-type}
  &blogName={blog-name}  <--- 블로그 정보에서 얻은 name 항목입니다

https://a3040.tistory.com/  이 주소의 경우 blogName = "a3040" 입니다.

app.get('/apis/category/list', async (req, res) => {
  const loc = `https://www.tistory.com/apis/category/list?access_token=${access_token}&output=${output}&blogName=a3040`;

  let menu = `<a href=/>홈</a>|<a href=/set_code>로컬에코드입력</a>|<a href="/get/blog/info">블로그정보얻기</a>|<a href="/apis/category/list">카테고리정보얻기</a>`; 
  let view_html = `${menu}`;

  try{
    const awaitRes = await axios.get(loc);
    console.log( awaitRes.data );

    const dataToString = JSON.stringify( awaitRes.data );
    view_html += `${dataToString}`; 
  }catch(error){console.error(error);}

  res.send(`${view_html}`);
});

데이터를 get으로 얻는 방식은 blog 정보 얻는 방식과 동일합니다. 수신후 처리방식도 동일합니다.블로그 글 관련, 댓글 관련 정보 등도 api에서 요구하는 변수를 더 추가하고 동일한 방법으로 얻을 수 있습니다. 카테고리얻기를 실행한 결과입니다.

tistory_openapi/ex3 at master · a3040/tistory_openapi · GitHub

다음 글에서는 axios의 post 방식을 통해 블로그에 글을 작성해보도록 하겠습니다

+ Recent posts