PHP로 Google Analytics 데이터를 수신하여 일별 통계를 차트로 보여주고 싶어서 Open Flash Chart를 찾았는데
Open Flash Chart 2가 있어서 이것을 써 보기로 했다.

Open Flash Chart 예제
구현
먼저 컨트롤러인 chart.php를 보면 다음과 같다.
차트를 개발할 땐 실제 데이터를 사용하기 보다 아래와 같이 예제 데이터를 생성하고 하는 것이 좋다.
require_once "OpenFlashChart/open-flash-chart.php";
// Google Analytics 예제 데이터
$dateList = array (
"20090501" => array ("pageviews" => 100,"visits" => 50, "visitors" => 10),
"20090502" => array ("pageviews" => 101,"visits" => 52, "visitors" => 10),
...
"20090520" => array ("pageviews" => 200,"visits" => 80, "visitors" => 22)
);
// 데이터를 날짜로 변경
function toDate($str) {
$str = strval($str);
return date("M/d", mktime(0, 0, 0, substr($str,4,2), substr($str,6,2), substr($str,0,4)) );
}
$pvValue = array(); // 페이지뷰 값
$visitValue = array(); // 방문 값
$visitorValue = array(); // 방문자 값
$x_axis_label = array();
$i = 0;
$maxY = 0;
foreach ( $dateList as $dimension=>$value ) {
if ($i % 5 == 0) { // X 축 레이블은 모든 값이 아닌 5씩 건너 뛴다.
array_push($x_axis_label, toDate($dimension));
} else {
array_push($x_axis_label, "");
}
$pv = intval($value["pageviews"]);
$visit = intval($value["visits"]);
$visitor = intval($value["visitors"]);
array_push( $pvValue, $pv);
array_push( $visitValue, $visit );
array_push( $visitorValue, $visitor );
// 최대 Y 값
$maxY = max($maxY, $pv, $visit, $visitor);
$i++;
}
// 페이지 뷰 선
$pvLine = new line();
$pvLine->set_key("페이지뷰",10);
$pvLine->set_values( $pvValue );
// 방문 선
$visitLine = new line();
$visitLine->set_colour("#00ffff");
$visitLine->set_key("방문",10);
$visitLine->set_values( $visitValue );
// 방문자 선
$visitorLine = new line();
$visitorLine->set_colour("#ff0000");
$visitorLine->set_key("방문자",10);
$visitorLine->set_values( $visitorValue );
// X 축
$x_axis = new x_axis();
$x_axis->set_range(0,count($dateList));
$x_axis->set_labels_from_array( $x_axis_label );
// Y 축
$y_axis = new y_axis();
$y_axis->set_range(0,$maxY, round($maxY / 5));
// 차트 생성
$chart = new open_flash_chart();
$chart->set_title( new title( "일별 통계" ) );
$chart->set_bg_colour( "#ffffff" );
$chart->add_element( $pvLine );
$chart->add_element( $visitLine );
$chart->add_element( $visitorLine );
$chart->set_x_axis( $x_axis );
$chart->set_y_axis( $y_axis );
$smarty->assign("chart", $chart);
...
$smarty->assign("content_tpl", "chart.tpl");
$smarty->display("layout.tpl");
이제 smarty를 사용한 뷰에 해당하는 chart.tpl을 보면 다음과 같다.
<script type="text/javascript" src="js/json2.js"></script>
<script type="text/javascript" src="js/swfobject2.js"></script>
...
{if $chart}
<div id="my_chart"></div>
<script type="text/javascript">
swfobject.embedSWF("/swf/open-flash-chart.swf", "my_chart", "100%", "200", "9.0.0");
</script>
{/if}
...
{if $chart}
<script type="text/javascript">
function open_flash_chart_data() {ldelim}
var chartData = {$chart->toString()};
return JSON.stringify(chartData);
{rdelim}
</script>
{/if}
참고