서론
티스토리(Tistory) API를 활용하여 코딩을 샘플로 해보려고 마음을 먹은 뒤, 제가 제일 익숙한 C#으로 작업을 하기로 생각했습니다. 파이썬으로도 쉽게 구현 가능하여 추후에 파이썬으로도 구현하는 방법을 포스팅하도록 하겠습니다. 우선 저는 C#용 TistoryAPISharp과 Selenium을 기본적으로 사용하여 샘플을 구현하였습니다.
1. TistoryAPISharp 설치하기

💡
프로젝트 마우스 우클릭 → Manage Nuget Packages를 선택해주세요.

💡
TistoryAPISharp을 검색하여 Install 해주세요.
2. Selenium 설치하기

💡
Authorize Code를 읽어오는 등의 동작 구현을 위해 저는 Selenium을 사용하기로 했습니다.
위와 동일하게 Selenium.WebDriver와 Selenium.WebDriver.ChromeDriver을 Manage Nuget Packages를 통해 Install 해줍니다.
💡
Selenium 동작을 위해서 크롬 브라우저가 설치되어있어야 합니다.
3. 티스토리 API 연결하기
💡
티스토리 API를 연결하기 위해서는 Authorize Code와 Access Token을 읽어와야 합니다.
3-1. Authorize Code 가져오기
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
private string GetTistoryAuthorizeCode()
{
string code = "";
var _driverService = ChromeDriverService.CreateDefaultService();
_driverService.HideCommandPromptWindow = true;
var _options = new ChromeOptions();
_options.AddArgument("headless");
using (IWebDriver driver = new ChromeDriver(_driverService, _options))
{
// Login Tistory
driver.Url = "https://accounts.kakao.com/login?continue=https%3A%2F%2Fkauth.kakao.com%2Foauth%2Fauthorize%3Fis_popup%3Dfalse%26ka%3Dsdk%252F1.39.10%2520os%252Fjavascript%2520sdk_type%252Fjavascript%2520lang%252Fko-kr%2520device%252FMacIntel%2520origin%252Fhttps%25253A%25252F%25252Fwww.tistory.com%26auth_tran_id%3Dfazrebo4cehb8aef3eeb03fa312b81795386484f051kjmiil9v%26response_type%3Dcode%26state%3DaHR0cHM6Ly93d3cudGlzdG9yeS5jb20v%26redirect_uri%3Dhttps%253A%252F%252Fwww.tistory.com%252Fauth%252Fkakao%252Fredirect%26client_id%3Db8aef3eeb03fa312b81795386484f051";
Thread.Sleep(3000);
var element = driver.FindElement(By.XPath("//*[@id=\"id_email_2\"]"));
element.SendKeys("티스토리 아이디");
Thread.Sleep(2000);
element = driver.FindElement(By.XPath("//*[@id=\"id_password_3\"]"));
element.SendKeys("티스토리 비밀번호");
Thread.Sleep(2000);
element = driver.FindElement(By.XPath("//*[@id=\"login-form\"]/fieldset/div[8]/button[1]"));
element.Click();
Thread.Sleep(3000);
// Get Authorize Code
string url = $"https://www.tistory.com/oauth/authorize?client_id={"App Id"}&redirect_uri={"서비스 URL"}&response_type=code";
driver.Url = url;
Thread.Sleep(3000);
string pageSource = driver.PageSource;
if (pageSource.Split(new[] { "code=" }, StringSplitOptions.None).Length <= 1)
throw new Exception("Authorize Code를 가져올 수 없습니다.");
code = pageSource.Split(new[] { "code=" }, StringSplitOptions.None)[1].Split(new[] { "&state" }, StringSplitOptions.None)[0];
}
return code;
}
💡
Authorize Code를 읽어오는 함수입니다. 동작을 위해서 Selenium using문을 추가해주세요.
💡
_driverService.HideCommandPromptWindow = true;
는 CommandPrompt 창을 띄우지 않기 위해 true로 세팅합니다.💡
_options.AddArgument("headless");
은 크롬창이 뜨지 않은 상태로 동작하기 위해서 headless로 세팅합니다.
함수 세부 코드 설명
var element = driver.FindElement(By.XPath("//*[@id=\"id_email_2\"]"));
element.SendKeys("티스토리 아이디");
Thread.Sleep(2000);
element = driver.FindElement(By.XPath("//*[@id=\"id_password_3\"]"));
element.SendKeys("티스토리 비밀번호");
Thread.Sleep(2000);
element = driver.FindElement(By.XPath("//*[@id=\"login-form\"]/fieldset/div[8]/button[1]"));
element.Click();
Thread.Sleep(3000);
💡
Authorize Code를 읽어오기에 앞서서 티스토리 로그인이 되어야합니다. 때문에 티스토리 아이디와 티스토리 비밀번호를 전달하여 로그인합니다.
💡
중간에 Sleep을 통해 2초~3초 딜레이하는 이유는 접속하는 시간을 기다려야하기 때문입니다.
// Get Authorize Code
string url = $"https://www.tistory.com/oauth/authorize?client_id={"App Id"}&redirect_uri={"서비스 URL"}&response_type=code";
driver.Url = url;
Thread.Sleep(3000);
string pageSource = driver.PageSource;
if (pageSource.Split(new[] { "code=" }, StringSplitOptions.None).Length <= 1)
throw new Exception("Authorize Code를 가져올 수 없습니다.");
code = pageSource.Split(new[] { "code=" }, StringSplitOptions.None)[1].Split(new[] { "&state" }, StringSplitOptions.None)[0];
💡
App Id와 서비스 URL을 url에 정확하게 입력한 뒤 Authorize Code를 가져옵니다.
💡
Authorize Code는
“code=”
부터 “&state”
전까지 입니다.💡
App Id와 서비스 URL 등이 무엇인지 모르는 분들은 아래 링크 글을 참조해주세요.
티스토리(Tistory) API Access Token 가져오기
티스토리(Tistory) 를 시작한 뒤에 개발자다 보니까 Open API 를 사용해보고 싶다는 생각이 들었습니다. 처음에 Open API 등록부터 절차에 대해서 모른 상태에서는 조금 복잡할 수 있지만, 차근차근 따라하면 누구나 티스토리 Open API를 사용할 수 있습니다. 티스토리(Tistory) API Access Token을 가져오는 방법에 대해서 포스팅했습니다. 이후에 티스토리(Tistory) API를 통해 다양한 동작을 수행하는 방법에 대해서도 포스팅을 이어가도록 하겠습니다.

3-2. Access Token 가져오기
private string GetTistoryAccessToken(string authorizeCode)
{
string url = "https://www.tistory.com/oauth/access_token";
WebClient wb = new WebClient();
wb.QueryString.Add("client_id", ""); // App Id
wb.QueryString.Add("client_secret", ""); // Secret Key
wb.QueryString.Add("redirect_uri", ""); // 서비스 URL
wb.QueryString.Add("code", authorizeCode); // Authorize Code
wb.QueryString.Add("grant_type", "authorization_code");
return wb.DownloadString(url).Split('=')[1]; ;
}
💡
Access Token을 가져오기 위해 위에서 구해온 Authorize Code를 전달합니다.
💡
App Id, Secret Key, 서비스 URL, Authorize Code를 URL에 함꼐 전달하여 Access Token을 가져옵니다.
3-3. 티스토리 API 연결
using TistoryAPISharp;
private void Form1_Load(object sender, EventArgs e)
{
var tistoryApi = new TistoryAPI();
string autorizeCode = GetTistoryAuthorizeCode();
string accessToken = GetTistoryAccessToken(autorizeCode);
tistoryApi.SetAccessToken(accessToken);
}
💡
위에서 구현한 함수를 통해 tistoryApi에 Access Token을 Set합니다.
💡
이제 티스토리 API를 사용할 사전 준비가 완료되었습니다.
마무리
티스토리(Tistory) API를 C#으로 활용하여 구현하기 위해 필요한 사전 준비에 대해서 포스팅을 작성하였습니다. 다음 포스팅에서는 보다 본격적으로 티스토리(Tistory) API를 통해서 글 가져오기, 글 작성, 글 수정 등을 구현하는 방법에 대해서 포스팅하겠습니다.
Uploaded by N2T