이 기사에서는 PHP를 사용하여 Profile Badge Generator, RSS Publisher 및 Twitter 푸시(push) 애플리케이션에 대한 스크립트를 작성한다. 오픈 소스 Apache 웹 서버와 DB2 Express-C 데이터베이스 서버를 개발 환경으로 사용한다. 이 기사의 끝에 있는 참고자료에서 이러한 제품에 대한 다운로드 정보를 볼 수 있다.
IBM DB2 pureXML 데이터베이스와 상호 작용하는 애플리케이션을 작성하는 이 시리즈의 마지막 세 번째 기사에서는 유명한 PHP 언어를 사용하여 웹을 통해 데이터베이스의 상태 업데이트를 게시 및 결합하는 스크립트를 작성한다.
먼저 Profile Badge를 HTML로 작성할 수 있는 페이지를 사용자에게 제공한다. 이 페이지를 통해 사용자는 블로그나 웹 사이트에 붙여 넣을 HTML 코드를 생성할 수 있다. 이 페이지는 pureXML 데이터베이스에서 최신 상태 업데이트를 가져와서 사전 정의된 형식으로 표시한다. 사용자는 크기 및 색상 스키마를 선택하여 배지의 디자인을 사용자 정의하고 표시할 업데이트의 수를 정의할 수 있다. 그런 다음 데이터베이스의 최신 상태 업데이트를 RSS 피드로 게시하는 PHP 스크립트를 작성한다. 마지막으로 각 업데이트 옆의 Post to Twitter 단추를 사용하여 데이터베이스의 모든 상태 업데이트를 사용자에게 표시하는 스크립트를 작성한다. 사용자가 이 단추를 누르면 Twitter API가 지정된 포스트를 이용하여 업데이트를 해당 사용자의 Twitter 스트림에 추가한다.
코드를 작성하기 전에 먼저 개발 환경을 마련해야 한다. 가장 먼저 수행할 작업은 웹 서버(여기에서는 오픈 소스 Apache 웹 서버)를 설치하는 것이다. 그런 다음 PHP를 설치한 후 Apache 및 DB2와 함께 작동하도록 구성해야 한다. 이제 Apache를 다운로드하고 설치하자.
자주 사용하는 웹 브라우저를 열고 Apache HTTP Server 다운로드 페이지(참고자료의 링크 참조)로 이동한다. 아래로 스크롤하여 best available version에 해당하는 버전 아래에서 Win32 Binary without Crypto 다운로드를 찾는다. 이 기사의 집필 시점에 사용할 수 있었던 최신 버전은 2.2.14였다.
파일을 편한 위치(예: Windows® 바탕 화면)에 저장한 후 .msi 파일을 실행하여 설치 유틸리티를 시작한다.
Next를 클릭한 다음 License Agreement를 읽고 I accept the terms in the license agreement 옵션을 선택한 후 Next를 클릭한다. 다음 화면에서 Read This First 문서가 표시된다. Next를 클릭하여 계속 진행한다.
지금은 개발 환경을 마련하는 중이므로 Server Information 화면에서 입력한 값은 별로 중요하지 않다. 로컬 주소를 사용하여 Apache 설치에 액세스할 것이므로 원하는 도메인 및 이메일 주소를 입력한다. Install Apache HTTP Server 2.2 programs and shortcuts for option 아래에서 All Users, on Port 80, as a Service 옵션(권장 옵션)을 선택한다. 필자는 이 화면에서 Figure 1과 같이 선택했다. 위 작업이 완료되었으면 Next를 클릭한다.
그림 1. Apache Server Information
이제 Typical 또는 Custom 중에서 설치 유형을 선택하라는 메시지가 표시된다. 설치된 Apache 서버의 구성 요소를 변경하지 않으려면 안전하게 Typical을 선택한다. Next를 눌러서 진행한다.
Destination Folder 화면에서는 기본 옵션 C:\Program Files\Apache Software Foundation\Apache2.2\를 사용한다.
이제 설치 작업을 시작할 준비가 완료되었다. Ready to Install the Program 화면에서 Install을 클릭하여 설치를 시작한다.
몇 분 이내에 설치 작업이 완료되어야 한다. 설치 작업이 완료되면 그림 2와 같은 화면이 표시된다. Finish를 눌러서 설치 프로그램을 닫는다.
그림 2. 설치 완료
성공적으로 설치되었으면 Apache가 시스템에서 실행되고 있어야 한다. 실행 중인지 여부를 확인하는 가장 쉬운 방법은 시스템 트레이에 그림 3과 같이 Apache 로고 위에 재생 단추가 겹쳐져 있는 작은 아이콘이 표시되는지 보는 것이다.
그림 3. Apache 시스템 트레이 아이콘
Apache가 작동되고 있는지 다시 한번 확인하기 위해 자주 사용하는 웹 브라우저를 열고 주소 표시줄에 URL http://localhost/index.html을 입력한다. Apache가 성공적으로 설치되었으면 그림 4와 같이 "It works!"라는 메시지가 표시된다.
그림 4. It works!
설치한 Apache가 작동 중이면 이제 PHP를 설치하자.
최신 PHP Windows 바이너리를 다운로드해야 한다(참고자료의 링크 참조). 이 경우에는 여러 가지 옵션이 있지만 이 기사에서 필요한 옵션은 PHP 버전 5.2.x(집필 당시 5.2.11이 최신 버전이었음)의 VC6 x86 Thread Safe 버전이다(그림 5 참조). PHP 5.3은 아직까지 PECL(PHP Extension Community Library)을 지원하지 않으므로 사용해서는 안 된다. 이에 따라 해당하는 Zip 파일을 선택한다. (Installer 또는 Debug Pack을 다운로드해서는 안 된다.)
그림 5. PHP Windows 바이너리 다운로드 페이지
이 파일을 편한 위치에 저장한다. 다운로드가 완료되면 Zip 아카이브의 내용을 C:\php 폴더에 추출한다. 이 폴더에는 여러 개의 lib 및 php dll 파일과 PEAR 및 기타 폴더가 포함되어 있다. 그림 6에서는 이 폴더의 컨텐츠를 보여 준다.
그림 6. C:\php 폴더의 내용
이제 시스템 경로를 수정하여 PHP 설치 폴더를 추가해야 한다. Windows 제어판에서 시스템을 연다. 그런 다음 고급 탭을 클릭한다(그림 7 참조).
그림 7. 시스템 속성
환경 변수를 클릭하여 또 다른 대화 상자를 연다. 시스템 변수 아래에서 Path 변수를 찾아서 선택한 다음 편집을 클릭한다(그림 8 참조).
그림 8. 환경 변수
시스템 변수 편집 대화 상자에서 ;c:\php 값을 변수 값 필드에 추가한다(그림 9 참조).
그림 9. 시스템 변수 편집
열려 있는 세 창에서 모두 OK를 클릭하여 창을 닫는다. C:\php 폴더에서 php.ini-recommended 파일을 찾는다. 이 파일을 복사한 후 붙여 넣으면서 파일 이름을 php.ini로 변경한다. 이제 PHP용 DB2 확장을 다운로드해야 한다(참고자료의 링크 참조). 먼저 PHP용 PECL 확장의 아카이브를 다운로드한 후 원하는 위치에 추출한다. 이제 파일을 추출한 폴더를 열고 php_ibm_db2.dll 파일을 찾는다. 이 파일을 복사해서 C:\php\ext 폴더에 붙여 넣는다. 이제 DB2 확장을 사용할 수 있게 되었으므로 이 확장을 사용하도록 PHP를 구성해야 한다.
자주 사용하는 텍스트 편집기에서 C:\php\php.ini 파일을 열고 extension_dir = "./"이라는
행을 찾는다. 이 행을 extension_dir = "c:\php\ext"로 변경한다. 이제 이 파일의 동적 확장 섹션을 찾는다. 이 섹션의
마지막 행은 ;extension=php_zip.dll이다. DB2 확장을 사용하기 위해 이 행 아래에 extension=php_ibm_db2.dll이라는
행을 추가한다. 확장 섹션에서 ;extension=php_curl.dll이라는 행을 찾아서 행의 맨 앞에 있는 주석
문자인 세미콜론을 제거하여 extension=php_curl.dll로 변경한다.
이 파일을 저장한다. 이제 PHP 구성이 완료되었다. 다음으로 수행할 작업은 Apache를 구성하여 PHP를 찾을 위치를 지정하는 것이다. C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf에 있는 Apache 구성 파일을 연다. 자주 사용하는 텍스트 편집기에서 이 파일을 연 후 파일의 맨 아래에 Listing 1의 행을 추가한다.
Listing 1. PHP용 Apache 구성 - httpd.conf 파일
LoadModule php5_module "c:/php/php5apache2_2.dll" AddType application/x-httpd-php .php PHPIniDir "C:/php" |
httpd.conf 파일을 저장하고 텍스트 편집기를 닫는다. 이제 시스템 트레이에 있는 Apache 아이콘을 클릭하고 Apache2.2>Restart를 선택한다. 그러면 웹 서버가 중지된 후 다시 시작된다. 정상적으로 다시 시작될 경우 웹 서버는 모든 구성이 올바르게 설정된 PHP 및 DB2 확장과 함께 실행되어야 한다.
이제 간단한 테스트를 통해 PHP 및 DB2 확장이 실제로 작동 중인지 확인해 보자. 텍스트 편집기를 다시
한번 열고 <?php phpinfo(); ?>라는 컨텐츠가 담긴 새 파일을 작성한다.
이 파일을 test.php라는 이름으로 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs 폴더에 저장한다. 그런 다음 웹 브라우저를 열고 http://localhost/test.php로 이동한다. 그림 10과 유사한 PHP 애플리케이션 정보 페이지가 표시되어야 한다.
그림 10. PHP 정보 페이지
이 페이지가 표시된다는 것은 PHP가 작동 중이라는 것만을 의미한다. 그렇다면 DB2 확장은 어떻게 확인해야 할까? 이 페이지를 스크롤해서 중간 정도까지 내려가면 그림 11과 같이 ibm_db2라는 제목의 섹션이 표시되어야 한다. 이 섹션이 표시되면 DB2 확장이 성공적으로 로드된 것이다.
그림 11. ibm_db2 확장 정보
PHP와 PHP용 DB2 확장을 설치하고 구성했으므로 이제 PHP에서 DB2 데이터베이스 작업을 시작할 수 있는 준비가 완료되었다. 다음 섹션에서는 DB2 데이터베이스에 연결하여 모든 기능이 정상적으로 작동하는지 테스트한 다음 PHP를 사용하여 일부 데이터를 검색한다.
이제 DB2 데이터베이스에 대한 연결을 테스트해 보자. 텍스트 편집기를 열고 Listing
2의 컨텐츠를 추가하여 새 파일을 작성한다. 이 파일을 test_db.php라는 이름으로 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
폴더에 저장한다. 필요한 경우, $db, $user 및
$pass 변수를 이 시리즈의 Part 1에서 DB2 작업을 수행할 때 사용했던 값으로
변경한다. $user는 사용자의 테이블이 있는 스키마이다.
Listing 2. test_db.php
<?php
$db = 'MBLOG';
$user = 'MBLOG';
$pass = 'password';
$host = 'localhost';
$port = 50000;
$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$db; " .
"HOSTNAME=$host;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$pass; ";
$conn = db2_connect($settings, '', '');
if(!$conn) {
echo "Connection failed<br />";
echo db2_conn_errormsg($conn);
}
$sql = "SELECT * FROM status_updates";
$result = db2_exec($conn, $sql);
echo "<ul>";
while($row = db2_fetch_array($result)) {
echo "<li>$row[0]</li>";
}
echo "</ul>";
?>
|
웹 브라우저에서 이 스크립트를 열기 위해 http://localhost/test_db.php로 이동한다. 그림 12의 목록과 유사하게 날짜 및 시간 소인과 메시지가 연결되어 있는 목록이 표시되어야 한다.
그림 12. PHP를 사용하여 DB2에서 데이터 검색하기
이 데이터는 어디선가 본 기억이 날 것이다. 그렇다. 이 시리즈의 Part 1에서 작성한 DB2 데이터베이스의 데이터이다. 이제 PHP를 실행하여 데이터베이스의 데이터를 가져오는 작업을 마쳤으므로 한 단계 더 나아가서 PHP를 사용하여 더 멋진 기능을 구현해 볼 때가 왔다. 다음 섹션에서는 웹 사이트 또는 블로그에 간단히 붙여넣는 작업만으로 마이크로블로그 업데이트를 해당 페이지에 추가할 수 있는 HTML 코드를 사용하여 Profile Badge를 생성할 수 있는 PHP 스크립트를 작성한다.
이전 섹션에서는 PHP를 사용하여 DB2 데이터베이스에서 데이터를 검색했다. 그림
12를 보면 데이터가 데이터베이스에 XML로 저장되어 있음에도 불구하고 SELECT
명령문을 사용하여 데이터베이스의 모든 데이터를 검색했을 때 XML 형식이 리턴되지 않고
date_created 및 text 태그 값이 함께 연결된 문자열이 리턴된다는 것을 알 수 있다. 물론
깔끔한 형식의 HTML 배지를 작성하려면 이러한 각 필드를 개별적으로 검색해야 한다.
가장 먼저 작성할 항목은 DB2 보기이다. 이 보기에서는 SQL/XML을 사용하여 pureXML 데이터베이스의 데이터를 PHP에서 쉽게 구문 분석할 수 있는 개별 열로 구별한다. 원하는 경우, XQuery로도 이 작업을 수행할 수 있다.
DB2 Command Editor 애플리케이션을 연다(Start>Programs>IBM DB2>DB2COPY1 (Default)>Command Line Tools>Command Editor). MBLOG 데이터베이스를 대상으로 선택한 다음 아래 Listing 3의 코드를 편집기 영역에 입력한다.
Listing 3. updates 보기 작성하기
CREATE VIEW updates(date_created, text) AS
SELECT t.date_created, t.text FROM status_updates su,
XMLTABLE('$u/update' passing su.data as "u"
columns date_created varchar(100) path 'date_created',
text varchar(500) path 'text') as t;
|
이제 편집기 영역의 맨 위 왼쪽에 있는 녹색 Play 단추를 눌러 명령문을 실행한다. 응답
영역에 성공 메시지가 표시되어야 한다. 계속 진행하기 전에 보기가 올바르게 작동하는지 확인한다. 편집기
영역에서 명령문을 select date_created, text from updates;라는 명령문으로
변경한다.
이제 그림 13과 같은 결과가 표시되어야 한다.
그림 13. Updates 보기를 실행한 결과
위 SELECT 명령문은 status_updates 테이블의 데이터를 date_created
및 text라는 개별 열로 검색한다. PHP에서도 비슷한 SELECT 명령문을 사용하여
훨씬 쉽게 DB2 데이터 작업을 수행할 수 있다.
이제 Profile Badge Generator를 시작하자. 가장 먼저 작성할 PHP 스크립트는 Badge Generator를 위한 양식이다. 이 양식은 사용자에게 배지에 적용할 색(흰색, 노란색 또는 회색)과 크기(와이드 또는 일반)를 묻는다. 사용자가 Generate 단추를 클릭하면 배지의 모습과 배지를 블로그나 웹 사이트에 붙여넣을 때 사용할 수 있는 HTML 코드가 표시된다.
가장 먼저 작성해야 하는 파일은 generate.php이며 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs 폴더에 저장해야 한다. Listing 4에서는 이 스크립트의 컨텐츠를 보여 준다.
Listing 4. generate.php
<html>
<head>
<?php
if(isset($_GET['size']) && isset($_GET['color'])) {
if($_GET['size'] == "wide") $size = 'width="400" height="150"';
else $size = 'width="200" height="300"';
?>
<title>Your Profile Badge is Ready!</title></head>
<body><h1>Your Profile Badge is Ready!</h1>
<iframe src="badge.php" frameborder="1" scrolling="auto" <?php echo
$size; ?>
marginheight="0" marginwidth="0"
style="background-color: <?php echo $_GET['color']; ?>;">
Older browser see this message as iframes aren't supported.
</iframe><br /><br />
Paste the following code into your blog or Website HTML code in order to add
the Profile Badge to that page:<br />
<textarea readonly="readonly" cols="40" rows="5">
<iframe src="http://localhost/badge.php" frameborder="1" scrolling="auto"
<?php echo $size; ?>
marginheight="0" marginwidth="0"
style="background-color: <?php echo $_GET['color']; ?>;">
Older browser see this message as iframes aren't supported.
</iframe>
</textarea>
<?php
} else {
?>
<title>Generate Profile Badge</title></head>
<body><h1>Generate Profile Badge</h1>
<form method="get" action="generate.php">
<strong>Color:</strong><br />
<input type="radio" name="color" value="white" /> White
<input type="radio" name="color" value="yellow" /> Yellow
<input type="radio" name="color" value="silver" /> Grey
<br /><br /><strong>Size:</strong><br />
<input type="radio" name="size" value="wide" /> Wide
<input type="radio" name="size" value="narrow" /> Narrow
<br /><br /><input type="submit" value="Generate!" />
</form>
<?php
}
</body></html>
?>
|
양식을 아직 제출하지 않은 경우에는 양식이 표시되면서 Profile Badge의 색상과 크기를
선택하도록 요청하는 메시지가 표시된다. 사용자가 양식을 이미 제출한 경우에는 Profile Badge
IFRAME이 표시되고 맨 아래에 포함된 다른 페이지에 IFRAME을
포함할 HTML 코드가 표시된다. 이 작업을 직접 수행하려면 먼저 실제 배지를 작성해야 한다. Listing
5의 코드를 새 파일 badge.php에 추가한 다음 generate.php와 같은 폴더에 저장한다.
Listing 5. badge.php
<?php
$db = 'MBLOG';
$user = 'MBLOG';
$pass = 'password';
$host = 'localhost';
$port = 50000;
$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$db; " .
"HOSTNAME=$host;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$pass; ";
$conn = db2_connect($settings, '', '');
if(!$conn) {
echo "Connection failed<br />";
echo db2_conn_errormsg($conn);
}
?>
<style type="text/css">
.update { border-bottom: 1px solid black; padding: 5px; }
</style>
<?php
$sql = "SELECT text, date_created FROM updates order by date_created desc";
$result = db2_exec($conn, $sql);
if(!$result) echo db2_stmt_errormsg();
else {
echo '<div class="updates">';
while($row = db2_fetch_array($result)) {
if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
echo '<div class="update">'
.'<div class="update_text">'.$row[0].'</div>'
.'<div class="update_date"><em>'.$row[1].'
</em></div>'
.'</div>';
}
}
echo "</div>";
}
?>
|
이 스크립트는 DB2 데이터베이스에 연결한 다음 이 섹션의 시작 부분에서 작성한 DB2 보기에서
상태 업데이트를 검색한다. text 및 date_created
필드에 데이터가 있는지 확인한 다음 데이터를 표시한다. 이 스크립트는 다른 페이지의 IFRAME
태그에서 호출되어 해당 페이지 내에 표시되므로 블로그나 웹 사이트에 쉽게 추가할 수 있다.
웹 브라우저를 열고 http://localhost/generate.php로 이동한다. 그림
14와 같은 페이지가 표시되어야 한다.
그림 14. Generate Profile Badge 페이지
색상과 크기를 선택하고 Generate! 단추를 누른다. 선택한 항목에 따라 그림 15와 같은 페이지가 표시된다.
그림 15. Profile Badge 결과 페이지
물론 사용자가 이 Profile Badge의 양식과 기능을 향상시킬 수 있다. 회사 로고나 생성 프로그램 페이지에 대한 링크를 추가하고, 데이터의 표시 형식을 지정하고, 표시할 업데이트 항목의 수를 필터링하는 등의 작업도 수행할 수 있다.
이 섹션에서는 PHP를 사용하여 마이크로블로그 애플리케이션에 대한 RSS 피드를 생성한다. 텍스트 편집기에서 새 파일을 작성한 후 rss.php라는 이름으로 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs 폴더에 저장한다. Listing 6에서는 이 파일의 컨텐츠를 보여 준다.
Listing 6. rss.php
<?php
header("Content-type: text/rss+xml");
header("Pragma: no-cache");
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<rss version="2.0">';
echo '<channel>';
echo ' <title>Microblog RSS Feed</title>';
echo ' <description>An RSS Feed of Microblog Status'.
'Updates</description>';
echo ' <link>http://localhost/rss.php</link>';
echo ' <language>en-us</language>';
echo ' <generator>DB2 Microblog</generator>';
$database = 'MBLOG';
$user = 'JOE LENNON';
$password = 'password';
$hostname = 'localhost';
$port = 50000;
$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
"HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;" .
"UID=$user;PWD=$password;";
$conn = db2_connect($settings, '', '');
$sql = "select text, date_created from updates order by date_created desc";
$result = db2_exec($conn, $sql);
while($row = db2_fetch_array($result)) {
if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
$pub_date = $row[1];
$pub_date = str_replace('T', '-', $pub_date);
$pub_date = str_replace(':', '-', $pub_date);
$date_array = explode("-", $pub_date);
$timestamp = mktime($date_array[3], $date_array[4],
$date_array[5], $date_array[1], $date_array[2],
$date_array[0]);
$rss_date = date(DATE_RSS, $timestamp);
echo '<item>';
echo ' <title>'.htmlentities($row[0]).'</title>';
echo ' <description>'.htmlentities($row[0]).'</description>';
echo ' <pubDate>'.$rss_date.'</pubDate>';
echo ' <link>http://localhost/generator.php</link>';
echo '</item>';
}
}
echo '</channel>';
echo '</rss>';
?>
|
이 스크립트는 DB2 데이터베이스에서 항목을 가져와서 표준 RSS 2.0 형식으로 XML 문서를 생성한다. 피드를 보려면 RSS 호환 웹 브라우저 또는 RSS Feed Reader 애플리케이션을 열고 URL http://localhost/rss.php로 이동한다. 그림 16과 같은 보기가 표시되어야 한다.
그림 16. 작동 중인 RSS 피드
RSS 피드 생성 프로그램이 각 항목을 Profile Badge 생성 프로그램 페이지에 연결한다. 물론 웹 사이트의 페이지에 각 업데이트가 있는 경우에는 피드에서 해당 페이지에 대한 링크를 제공할 수 있다. 또한 실행될 때마다 데이터베이스의 데이터를 검색한다. 좀 더 효과적인 방법으로는 미리 정의된 간격에 따라 PHP 스크립트를 호출하는 크론 작업 또는 스케줄된 작업을 사용하여 RSS 피드를 생성한 후 rss.xml 파일에 저장하는 방법이 있다. 그런 다음 독자/구독자를 동적 rss.php 스크립트 대신 rss.xml 파일에 연결할 수 있다.
마지막으로 작성할 스크립트는 Twitter API를 사용하여 데이터베이스의 마이크로블로그 항목을 Twitter에 저장하는 스크립트이다. 이 스크립트에서는 먼저 사용자에게 데이터베이스의 모든 업데이트 목록을 제공한다. 그리고 각 업데이트의 옆에는 Push to Twitter 링크가 있다. 이 링크를 클릭하면 Twitter API가 해당 항목을 새 Twitter 업데이트로 추가한다.
먼저 텍스트 편집기에서 새 파일을 작성하여 twitter.php라는 이름으로 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs 폴더에 저장한다. Listing 7에서는 이 파일의 컨텐츠를 보여 준다.
Listing 7. twitter.php
<?php
if(isset($_GET['text'])) {
$ch = curl_init("http://www.twitter.com/statuses/update.xml?status=".
urlencode(stripslashes(urldecode($_GET['text']))));
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_USERPWD, "joelennon:password");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);
$res_info = curl_getinfo($ch);
curl_close($ch);
if($res_info['http_code'] == '200') {
echo '<h1>Yippee! Your update was posted to Twitter!</h1>';
} else {
echo '<h1>Whoops! Something seemed to go wrong when posting '.
'to Twitter...</h1>';
}
} else {
$database = 'MBLOG';
$user = 'JOE LENNON';
$password = 'password';
$hostname = 'localhost';
$port = 50000;
$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
"HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;" .
"UID=$user;PWD=$password;";
$conn = db2_connect($settings, '', '');
$sql = "select text, date_created from updates order by ".
"date_created";
$result = db2_exec($conn, $sql);
echo '<h1>Push to Twitter</h1>';
echo '<ul>';
while($row = db2_fetch_array($result)) {
if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
echo '<li><strong>'.htmlentities($row[0]).'</strong>'.
' (<a href="twitter.php?text='.htmlentities($row[0]).'">Push to '.
'Twitter</a>)<br /><em>Posted '.$row[1].'</em></li>';
}
}
echo '</ul>';
}
?>
|
이 스크립트에서 사용자가 페이지를 처음 열면 상태 업데이트 목록이 표시되며, 각 항목에는
Push to Twitter 링크가 있다. 사용자가 링크를 클릭하면 스크립트가 PHP의 cURL 확장(이
기사에서 PHP를 구성할 때 활성화함)을 통해 Twitter API를 사용하여 해당 업데이트를 Twitter에
게시한다. CURL_USERPWD 값을 사용자의 Twitter 계정으로 변경해야
한다. 웹 브라우저에서 http://localhost/twitter.php로 이동한다. 그러면 그림
17과 같은 페이지가 표시된다.
그림 17. Twitter에 업데이트 올리기
Push to Twitter 링크 중 하나를 클릭하면 해당 업데이트가 Twitter에 게시된다. 성공 응답 메시지가 스크립트에 수신되면 그림 18과 같은 메시지가 표시된다.
그림 18. 업데이트된 Twitter 상태
이제 남은 작업은 Twitter 페이지에서 새 게시물을 확인하는 것이다. 필자는 필자의 페이지(http://twitter.com/joelennon)를 방문하여 업데이트가 성공적으로 게시되었는지 확인했다(그림 19 참조).
그림 19. Twitter에 게시된 업데이트
이 스크립트에는 향상시킬 부분이 많이 남아 있다. 입문자의 경우 업데이트가 Twitter에 이미 게시되었는지 여부를 확인할 방법이 없다. 이상적으로, 사용자에게 업데이트가 이미 게시되었음을 알려주거나 아니면 아무 것도 표시하지 않을 수 있다. 또 다른 방법으로는 이 시리즈의 Part 2에서 작성한 Flex 애플리케이션을 확장하여 업데이트를 Twitter와 마이크로블로그 애플리케이션에 동시에 게시하는 옵션을 사용자에게 제공하는 방법이 있다.
IBM DB2 pureXML과 Flex를 마이크로블로깅 애플리케이션을 작성하는 방법을 설명하는 시리즈의 마지막 기사인 이 세 번째 기사에서는 마이크로블로그 데이터를 사용하여 유용한 스크립트를 생성하는 방법을 자세히 살펴보았다. 먼저 Apache 웹 서버와 PHP를 설치한 다음 IBM DB2 지원을 위한 PHP 확장을 설치했다. 그런 다음 블로그나 웹 페이지에 삽입할 깔끔한 HTML 코드를 작성하는 Profile Badge 생성 프로그램을 PHP로 작성했다. 그런 다음 RSS를 사용하여 마이크로블로그 업데이트를 정리한 후 마지막으로 사용자가 cURL 및 Twitter API를 사용하여 마이크로블로그 상태 업데이트를 Twitter에 게시할 수 있도록 애플리케이션과 Twitter를 통합했다.
이 시리즈에서는 IBM DB2 Express-C, DB2 pureXML, SQL/XML, XQuery, pureXML Web Services, IBM Data Studio, IBM WebSphere Application Server Community Edition, Adobe Flex, Apache, PHP, RSS 피드 및 Twitter API 등의 다양한 주제를 다루었다. 앞으로 이러한 기술에 대한 경험을 풍부하게 쌓아서 한층 더 향상된 애플리케이션을 작성할 수 있기를 바란다.
| 설명 | 이름 | 크기 | 다운로드 방식 |
|---|---|---|---|
| Article source code | xmlflexpt3.source.zip | 5KB | HTTP |
교육
- Flex 마이크로블로깅 애플리케이션에서 pureXML 활용하기,
Part 1: 웹 서비스에서 DB2 pureXML 활용하기(Joe Lennon, developerWorks, 2009년 10월): 세 부분으로 구성된 이 시리즈의 첫 번째 기사에서는 IBM DB2 Express-C와
IBM Data Studio를 사용하여 샘플 마이크로블로깅 애플리케이션의 데이터베이스를 설정한다.
- Flex 마이크로블로깅 애플리케이션에서 pureXML 활용하기,
Part 2: Flex를 사용하여 애플리케이션 사용자 인터페이스 빌드하기(Joe Lennon, developerWorks, 2009년 10월): 세 부분으로 구성된 이 시리즈의 두 번째 기사에서는
DB2 지원 웹 서비스를 연결하는 사용자 인터페이스에 대한 Flex와 ActionScript를 자세히 살펴본다.
-
Use DB2 native XML with PHP(Hardeep Singh 및
Amir Malik, developerWorks, 2005년 10월): DB2에서 기본 XML 기능을 통해 얻을 수 있는 효과에 대해 알아보자.
- Implement a Facebook
photo album using the Flex SDK(Joe Lennon, developerWorks, 2008년 11월): 이 기사에서는 사용자의 Facebook 사진 앨범을 슬라이드
쇼 형태로 보여주는 Facebook 애플리케이션을 Adobe Flex에서 개발하는 방법을 학습한다.
- Integrating Flex applications
with IBM Mashup Center(Ronald C. Leung, developerWorks, 2009년 6월): 이 기사에서는 IBM Mashup Center에서 Adobe Flex 애플리케이션을
사용할 수 있는 방법을 학습한다.
- Getting Started with IBM DB2
Express-C: DB2 Express-C의 홈 페이지를 살펴보자.
- Finally! Bring native XML data into
your relationship data using DB2 Express-C(Eric Long, developerWorks, 2007년 8월): DB2 Express-C의 새 기능을 통해 SQL/XML 및 XQuery를
사용하여 원시 XML 문서를 저장, 쿼리 및 조작하는 방법을 익힐 수 있다.
- DB2 9 pureXML Guide: 이 IBM Redbook에서는
pureXML 데이터 저장소, 하이브리드 데이터베이스 설계 및 관리에 대해 설명한다.
- DB2 9: pureXML Overview and Fast Start에서
Linux®, UNIX® 및 Windows용 DB2 9의 하이브리드 XML 데이터 서비스를 소개하는 Redbook을 검토할 수 있다.
- DB2 pureXML Cookbook: Master the
Power of the IBM Hybrid Data Server(Matthias Nicola 및 Pav Kumar-Chatterjee): 이 책은 IBM의 최고 전문가가 저술하였으며 데이터베이스 전문가가
우수한 XML 솔루션을 신속하게 빌드하기 위해 필요한 실용적인 솔루션과 검증된 샘플 코드를 이 책에서 확인할 수 있다.
- Overview of IBM DB2 pureXML(Monash Research Publication, 2008년 10월): DBMS2에 대한 개요를 읽어보자.
- DB2 Web Services - The Big
Picture(Grant Hutchison, developerWorks, 2002년 8월): 웹 서비스에 맞추어 총체적으로 DB2와 데이터를 관리하는 방법을 학습할 수 있다.
-
Access DB2 with Web services: Creating Web services on Windows to access
DB2(Quentin Presley, developerWorks, 2003년 3월): 이 기사에서는 웹 서비스를 통해 DB2 데이터를 액세스하는 방법을 학습할 수 있다. 또한 이
기사에는 Windows 플랫폼에서 WebSphere Studio V5의 Application Developer 구성을 사용하여 DB2 데이터를 처리하기 위한 웹 서비스를 개발하고 테스트하는
방법이 설명되어 있다.
- Integrated Data Management:
Managing data across its lifecycle(Holly Hayes, developerWorks, 2009년 6월): 이 개요 기사에서는 Integrated Data Management의 전망과 현실을 살펴보고
사용자가 데이터 아키텍트이건, 개발자, 테스터, DBA 또는 데이터 스튜어드이건 관계없이 IBM 솔루션을 사용하여 새롭게 부각되는 기회에 빠르게 대응하고, 서비스
품질을 개선하고, 위험을 완화하고, 비용을 줄이는 방법을 확인할 수 있다.
- IBM XML 인증: XML 및 관련 기술에 대한 IBM 인증 개발자가 되는 방법을 찾아볼 수 있다.
- XML Technical library: developerWorks XML 영역에서 다양한 기술 관련 기사와 팁, 튜토리얼, 표준 및 IBM Redbook을 볼 수 있다.
- developerWorks 기술 행사 및 웹 캐스트: 이들 세션에 참가하여 최신 기술에 대한 정보를 얻을 수 있다.
- developerWorks
팟캐스트: 소프트웨어 개발자의 흥미로운 인터뷰와 토론을 확인할 수 있다.
제품 및 기술 얻기
- Apache HTTP Server 다운로드 페이지:
Apache HTTP (Web) Server의 소스 코드 구현을 다운로드할 수 있다. 최신 버전은 2.2.13이다.
- Windows binaries for PHP Point: PHP Point를
위한 최신 Windows 바이너리를 다운로드할 수 있다. 이 기사에서는 PHP 버전 5.2.11을 사용했다. PHP 5.3은 아직까지 PECL을 지원하지 않으므로 사용해서는 안 된다.
- PHP용 DB2 확장: 예제
애플리케이션을 작성하려면 이 확장을 다운로드하고 설정한다.
- Twitter API wiki: 이 리소스에서는 문서,
OAuth FAQ 및 예제, 메일링 목록, 토론 그룹 및 기타 커뮤니티 리소스를 볼 수 있다.
- DB2 Express-C에서
중소 규모 비즈니스에 맞는 애플리케이션 개발을 위한 우수한 기반인 IBM DB2 데이터베이스 서버 무료 버전을 얻을 수 있다.
- IBM 시험판 제품을
다운로드하거나 IBM SOA Sandbox의 온라인 시험판을 살펴보고
DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere®의 애플리케이션 개발 도구 및
미들웨어 제품을 사용해 볼 수 있다.
토론
- 포럼에 참여하기.
- XML 영역 토론 포럼: 여러 XML 관련 토론에 참여해 볼 수 있다.
- developerWorks 포럼 & 블로그를 통해 developerWorks 커뮤니티에 참여하자.
Joe Lennon는 아일랜드 코크 출신의 소프트웨어 개발자로 24살 이다. Joe는 Apress의 근간 서적인 Beginning CouchDB의 저자이며 IBM developerWorks에 몇 건의 기술 관련 기사와 튜토리얼을 기고했다. Joe는 여유가 있을 때면 축구를 하거나 전기 기구를 고치며 Xbox 360에 몰두하기도 한다.