Tistory API for Laravel

1 minute read

Tistory API for Laravel

Version: Beta-0.0.1

라라벨용 티스토리 API입니다.
티스토리 API는 OAuth2.0인증을 사용하지만 아쉽게도 API Key를 이용하여 인증 토큰을 얻지 않고 Authorize 권한인증을 통해 Redirect된 웹 화면에서 별도의 로그인 과정을 거쳐야 access token을 발급 받을 수 있습니다.
로그인 과정을 웹페이지에서 진행하여야 하기 때문에 백그라운드에서 API를 사용하려면 웹 크롤러의 사용이 필수입니다.
이 패키지는 PHP 개발환경(Laravel)에서도 자동으로 티스토리에 포스팅해보고자 웹 크롤러 및 라라벨 프레임워크를 활용하여 자동 로그인과 자동 포스팅을 구현했습니다.

요구사항

  • 기본적으로 PHP, Composer, Laravel(혹은 Lumen) 프레임워크 등의 설치가 필요합니다.
    • PHP 7.4 버전 이상
    • Laravel 7 ~ 8 버전
    • composer 2.0 이상
  • 이 패키지는 php-webdriver/php-webdriver 패키지를 사용합니다.
    • Google Chrome 브라우저가 설치되어 있어야 합니다.
    • Google Chrome 버전에 맞는 Chrome Driver를 설치해야 합니다.
  • Linux의 경우, 해당 패키지에 artisan console 명령어로 Chrome Driver를 실행 시키는 명령이 존재합니다.
    • 리눅스 Screen 패키지가 필요합니다.
    • 라라벨 스케줄링 기능을 활용하여, 원하는 시간에 자동으로 실행할 수 있게 설정하시면 됩니다.
  • Windows의 경우, Chome Driver를 수동으로 실행 시키거나, 스케줄러 등록을 하시면 됩니다.
    • 추후 Windows도 Chrome Driver를 실행 시킬 수 있는 Artisan 명령어도 구현할 예정입니다.

주의사항

Windows환경에서 WSL을 사용하시는 경우, Xlaunch(VcXsrv)와 같은 가상 X 윈도우 서버 프로그램이 필요합니다.

VcXsrc

설치

  1. 패키지 설치
composer require meteormin/laravel-tistory-api

php artisan vendor:publish --provider="meteormin\TistoryApi\TistoryServiceProvider"
  1. 크롬 버전 확인
#for Linux
google-chrome --version

# windows는 Chrome 브라우저에서 설정 > Chrome 정보
# or
# Chrome 브라우저 주소창에 > chrome://settings/help 
  1. 크롬 드라이버 설치
  • https://chromedriver.chromium.org/downloads
  • 버전은 xx.x.xxxx.xx 형식인데 마지막 마이너 버전은 상관 없으니, 현재 버전에 맞는 드라이버가 없다고 당황하지 마십시오.
    • 가능한 경우: Driver Version: 92.0.4515.107 > Chrome Version: 92.0.4515.159
    • 불가능한 경우: Driver Version: 92.0.4515.107 > ChromeVersion: 92.0.4415.101
  1. .env 파일 설정
TISTORY_APP_ID={티스토리에서 발급해준 APP ID}
TISTORY_API_KEY={티스토리에서 발급해준 API KEY}
TISTORY_BLOG_NAME={본인 블로그이름} # 블로그이름 = https://{블로그이름}.tistory.com
KAKAO_ACCOUNT={카카오톡로그인ID}
KAKAO_PASSWORD={카카오톡패스워드}

사용법

Login

<?php
// login
$client = \Meteormin\TistoryApi\Tistory\TistoryClient::login();

Post

<?php

// login
$client = \Meteormin\TistoryApi\Tistory\TistoryClient::login();

// https://www.tistory.com/apis/post
// 글 관련 API 모듈 가져오기
$post = $client->apis()->post();

// GET https://www.tistory.com/apis/post/list
// 작성한 포스트 리스트를 가져옵니다.
$post->list();

// POST https://www.tistory.com/apis/post/write
// 글 작성 시, \meteormin\TistoryApi\Tistory\Data\TistoryPost 객체를 사용합니다.
$data = \meteormin\TistoryApi\Tistory\Data\TistoryPost::newInstance();
$data->setTitle('...');
$data->setContent('...');
$response = $post->write($data);

// 읽기: GET https://www.tistory.com/apis/post/{postId}
$post->read($postId);

// 파일첨부: POST https://www.tistory.com/apis/post/attach
$post->attach($filename,$fileContent);

// 수정: POST https://www.tistory.com/apis/post/modify
// 글 작성과 마찬가지로 TistoryPost 객체를 사용합니다.
$post->modify($data);

// 요청의 성공여부 체크
if($post->isSuccess()){
    // success!
}else{
    // fail...
    // 에러 내용을 확인 할 수 있습니다.
    $post->getError();
}

// 해당 메서드는 Response객체(Illuminate\Http\Response)를 가지고 올 수 있습니다.
// 이 패키지는 내부적으로 Laravel Http 파사드를 사용합니다.
$post->getResponse();

Laravel Tistory API

Readme Card