캘린더 API 기본 튜토리얼(PHP)

목차

개요

PHP로 Daum캘린더API의 기본적인 기능을 구현한 예제입니다. PHP에서의 API활용에 집중하실 수 있도록 UI적인 요소들은 가급적 단순하게 작성했습니다.

이 예제는 크게 카테고리 기능과 일정 기능으로 나뉘어져 있습니다. OAuth 인증에 대한 자세한 내용은 OAuth 튜토리얼을 참조하시고, 여기서는 인증 후 얻어낸 Access Token으로 각 기능을 수행하는 과정들을 중심으로 설명합니다.

요구사항

전체과정

카테고리 기능

먼저 카테고리 기능의 기본적인 과정은 아래와 같습니다.

(1)사용자는 index.php로 가서 (2)인증이 안 되었으면 OAuth 인증을 받고, (3)callback.php를 거쳐 다시 (4)index.php로 돌아옵니다. OAuth 인증이 된(access token 발급된)상태에서는 바로 카테고리 조회가 되고, (5)추가할 수 있는 폼과 (6)해당 카테고리마다 수정 링크를 보실 수 있습니다.

index.php

Oauth 인증을 받으면 아래와 같은 화면이 나옵니다.

① 메뉴 - 카테고리 기능, 일정 기능을 선택할 수 있다.
② 카테고리 추가 - 새로운 카테고리를 추가하고 싶으면 여기서 입력하고 [추가]버튼을 누릅니다.
③ 인증 받은 사용자의 카테고리 목록이 나오고, 수정할 수 있는 링크가 달립니다.

editCategory.php

각 카테고리 마다 오른쪽에 달려있는 [수정] 링크를 누르면 아래와 같은 화면이 나옵니다.

수정할 내용을 누르고, [수정]버튼을 누르면 카테고리의 내용이 수정됩니다. 일정기능도 이와 유사하게 수정 가능합니다.

일정 기능

일정 기능도 카테고리 기능에서의 과정과 거의 유사합니다. (1)사용자가 index.php로 가서 (2)인증이 안 되었으면 OAuth 인증을 받고,
(3)callback.php를 거쳐 다시 (4)index.php로 돌아옵니다. 그리고 (5)"2. 일정 기능" 이랑 링크를 클릭하면, (6) 일정을 추가할 수 있는 폼,
(7)수정 링크, (8)삭제 링크가 있어서 각 기능을 수행해 보실 수 있습니다.

event.php

① 메뉴 - 카테고리 기능, 일정 기능을 선택할 수 있다.
② 일정 추가 - 새로운 일정를 추가하고 싶으면 여기서 입력하고 [추가]버튼을 누릅니다.
③ 인증 받은 사용자의 일정 목록이 나오고, 수정/삭제할 수 있는 링크가 달립니다.

소스코드

이 예제를 소스코드 수준에서 이해하시려면 반드시 OAuth 튜토리얼(PHP)부터 이해 하시기 바랍니다.

여기에서는 이 예제와 관련된 주요 코드들에 대해서만 설명합니다. 전체 코드는 다운로드에서 받으실 수 있습니다.

Access Token 지정

OAuth 인증 기반의 API를 호출하려면, 호출 전에 아래와 같이 Access Token/Secret 을 지정해야 합니다.

// 이전 단계에서 얻어서 Session에 저장해 둔 Access Token을 지정
$oauth->setToken($_SESSION['access_token'],$_SESSION['access_token_secret']);

파라미터 없는 API 호출/처리

Access Token이 지정된 후에는 다음과 같이 API를 호출할 수 있습니다. 아래의 코드는 카테고리 전체를 얻어오는 코드입니다.

// category 전체를 JSON 형식으로 얻을 수 있도록 호출하는 코드
$oauth->fetch($api_url."/calendar/category/index.json");
 
// 호출 후 나온 JSON 문자열을 파싱하여 PHP 객체로 변환
$categories = json_decode($oauth->getLastResponse());

fetch() 메소드로 호출로 나오는 결과는 getLastResponse()로 얻을 수 있습니다. JSON 문자열은 json_decode() 함수를 이용하면 PHP 객체로 변환이 되고, $categories에 카테고리 목록이 들어갑니다.

이렇게 얻어낸 카테고리 목록은 아래와 같이 처리할 수 있습니다.

$msg = "<ul>";
foreach($categories as $category) {
	$msg.= "<li>";
	$msg.= "<span style=\"background-color:".$category->color."; color:white;\">".$category->name."</span>";
	$msg.= "<a href=\"editCategory.php?category_id=".$category->id."\">수정</a>";
	$msg.= "</li>";
}
$msg.="</ul>";

echo $msg;

그리고 그 결과 화면은 전체과정의 index.php의 ③에서 보실 수 있습니다.

파라미터 있는 경우 API 호출

카테고리 추가(addCategory.php)를 하는 경우, 추가할 카테고리의 속성들을 API 호출시 파라미터로 넘겨야 합니다.

$parameters = array("name" => $name, "color" => $color, "description" => $description);
$oauth->fetch($api_url."/calendar/category/create.json", $parameters, "POST");

위와 같이 fetch() 메소드 호출시, 연관배열(associative array)로 만든 $parameters를 2번째 인자로 넘깁니다. 그러면 해당 파라미터 값들을 싣고 호출해서 처리할 수 있습니다.

일정, 카테고리 결합한 정보 처리

이 예제에서 일정, 카테고리 정보를 조합하기 위해서 우선 아래와 같이 카테고리ID값을 key로 하는 $categoryMap을 구성했습니다.

$categories = getCategories(); 	// lib.php에 정의
$categoryMap = array();

foreach($categories as $category) {
	// 카테고리ID를 key로 해서 상세정보를 얻을 수 있는 category Map 구성
	$categoryMap[$category->id] = $category;
}

이 후, 일정 정보에 있는 카테고리ID값을 key로 카테고리 정보를 $categoryMap에서 가져오도록 했습니다.

$events = getEvents();	  // lib.php에 정의

$msg = "<ul>";
foreach($events as $event) {

	// 해당 일정의 카테고리 상세 정보를 가져옴
	$category = $categoryMap[$event->category_id];
	$msg.= "<li>";
	$msg.= "<span style=\"background-color:".$category->color."; color:white;\">".$category->name."</span>";
	$msg.= " [".$event->title."] ";
	$msg.= date("Y-m-d", $event->start_at/1000)." ~ ";
	$msg.= date("Y-m-d", $event->end_at/1000).": ";
	$msg.= " <a href=\"./editEvent.php?id=".$event->id."\">수정</a> ";
	$msg.= "<a href=\"./deleteEvent.php?id=".$event->id."\" onclick=\"return confirm('정말 삭제하시겠습니까?')\">삭제</a> ";
	$msg.= "</li>";	
}
$msg.="</ul>";

echo $msg;

다운로드

데모

아래 화면에서 예제를 직접 테스트 해보실 수 있습니다.
http://dna.daum.net/examples/calendar/php/index.php