티스토리 뷰

서론


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

1. TistoryAPISharp 설치하기


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

💡
TistoryAPISharp을 검색하여 Install 해주세요.

2. Selenium 설치하기


💡
Authorize Code를 읽어오는 등의 동작 구현을 위해 저는 Selenium을 사용하기로 했습니다. 위와 동일하게 Selenium.WebDriverSelenium.WebDriver.ChromeDriverManage Nuget Packages를 통해 Install 해줍니다.
💡
Selenium 동작을 위해서 크롬 브라우저가 설치되어있어야 합니다.

3. 티스토리 API 연결하기


💡
티스토리 API를 연결하기 위해서는 Authorize CodeAccess 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를 통해 다양한 동작을 수행하는 방법에 대해서도 포스팅을 이어가도록 하겠습니다.
https://joel-helloworld.tistory.com/59

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);
}
💡
위에서 구현한 함수를 통해 tistoryApiAccess Token을 Set합니다.
💡
이제 티스토리 API를 사용할 사전 준비가 완료되었습니다.

마무리


티스토리(Tistory) API를 C#으로 활용하여 구현하기 위해 필요한 사전 준비에 대해서 포스팅을 작성하였습니다. 다음 포스팅에서는 보다 본격적으로 티스토리(Tistory) API를 통해서 글 가져오기, 글 작성, 글 수정 등을 구현하는 방법에 대해서 포스팅하겠습니다.


Uploaded by N2T

댓글