서론
티스토리(Tistory) API를 활용하여 코딩을 샘플로 해보려고 마음을 먹은 뒤, 제가 제일 익숙한 C#으로 작업을 하기로 생각했습니다. 파이썬으로도 쉽게 구현 가능하여 추후에 파이썬으로도 구현하는 방법을 포스팅하도록 하겠습니다. 우선 저는 C#용 TistoryAPISharp과 Selenium을 기본적으로 사용하여 샘플을 구현하였습니다.
1. TistoryAPISharp 설치하기
2. Selenium 설치하기
3. 티스토리 API 연결하기
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;
}
함수 세부 코드 설명
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];
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]; ;
}
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);
}
마무리
티스토리(Tistory) API를 C#으로 활용하여 구현하기 위해 필요한 사전 준비에 대해서 포스팅을 작성하였습니다. 다음 포스팅에서는 보다 본격적으로 티스토리(Tistory) API를 통해서 글 가져오기, 글 작성, 글 수정 등을 구현하는 방법에 대해서 포스팅하겠습니다.
Uploaded by N2T