구글스프레드시트를 이용하여 주기적으로 트윗을 전송하는 봇을 만들어보자.
먼저 https://docs.google.com/spreadsheets/d/1Cbg_6pYN04XtDHpDLtxAP3ExQEBL8PYBXBQ1E5_Sq30/copy
에서 스프레드시트를 복사한 후에 시작!
Step 1: Create a Twitter account for your Bot
Step 2: Create a Twitter App for your Bot
스프레드시트가 트위터와 소통할 트위터 앱을 만듭니다.
http://apps.twitter.com 로 이동하여 "Create New App" 버튼을 이용해 트위터 앱을 만든다. name, description, website 항목을 필수 입력하고, Callback 필드는 일단 비워둔다.
위의 정보를 제대로 입력하지 않은 경우 아래의 에러가 발생할 수 있다.
Error starting OAuth flow: <?xml version="1.0" encoding="UTF-8"?>< hash> <error>Desktop applications only support the oauth_callback value 'oob'</error> <request>/oauth/request_token</request>< /hash>
Step 3: Complete App Setup and Enter Keys into the Spreadsheet
해당 앱의 정보를 스프레드시트에 입력합니다.
앞서 만든 트위터 앱 관리 페이지에는 Details, Settings, Keys and Access Tokens, 그리고 Permissions 이상 4개의 탭이 있다.
먼저 Details 탭의 access level 이 "Read and Write"로 되어 있는지 확인해보고, 만약 그렇지 않다면 Permissions 탭에서 이를 수정한다.
다음 Keys and Access Tokens 탭으로 이동하여, "Create my access token"을 클릭한다.
Step 4: Locate your Google Spreadsheet's "Project Key"
스프레드시트의 ID를 알기위해 "Tools -> Script Editor..." 로 이동하여 스크립트 편집기(Script Editor)를 연다. 스크립트 편집기에서 "File -> Project Properties" 에서 프로젝트 키를 확인한 후 스프레드시트에 집어넣는다.
Step 5: Add "Callback" Value to Twitter App
앞서 프로젝트 키를 삽입하면 자동으로 Callback URL 이 생성된다. 만약 실수로 삭제하였다면 그 구성은 다음과 같으니 참조바란다.
https://script.google.com/macros/d/<YOUR PROJECT KEY HERE>/usercallback
이제 다시 트위터 앱 설정 페이지로 돌아가, "Callback URL" 필드에 해당 값을 복사해서 넣는다.
Step 6: Select a Data Sheet and Generate a Preview of its Output
스텝6의 드롭 다운 메뉴를 이용하여 사용할 데이터를 선택한다. 그리고 스프레드시트 상단의 "Bot" 메뉴를 통해 "Generate Preview" 를 실행한다. (여기나와있는 4개의 데이터 옵션은 언제든 변경할 수 있으나 선택 후 반드시 "Generate Preview"를 실행해야 한다. 그리고 각각의 설정방법이 상이하다).
그리고 아래와 같이 권한을 요청하게 되고, 이를 허용하면 된다.
Step 7: Test Twitter Authorization
다시 "Bot" 메뉴에서 "Send a Test Tweet" 를 통해 테스트해보자.
Step 8: Set Post Timing
포스팅 주기 설정도 가능하다.
'프로그래밍 Programming' 카테고리의 다른 글
구글스프레드시트를 이용한 트위터 봇 만들기 (3) - “Select from Rows” and “Select from Columns” Setup (0) | 2015.08.19 |
---|---|
구글스프레드시트를 이용한 트위터 봇 만들기 (2) - "Markov" Setup (0) | 2015.08.17 |
[django] More comprehensive tests (0) | 2015.07.28 |
[django] Writing our first test (0) | 2015.07.25 |
[django] Use generic views: Less code is better (0) | 2015.07.18 |