SMS로 XE 게시판에 글쓰기 XpressEngine
2009.09.18 13:42 Edit
nateon 메신져에서 핸드폰 SMS가 수신될 때 알려주는 기능이 있습니다. 이 기능을 이용하여 간단히 서버에서 문자를 받고, 받은 SMS를 XE API(XML-RPC)로 게시판 글쓰기 구현해 보았습니다.
nateon-lib 다운로드
네이트온 클라이언트 라이브러리http://code.google.com/p/nateon-lib/
nateon 클라이언트 라이브러리인 nateon.jar 파일을 다운로드 받아 java classpath에 저장합니다.
SMS 수신부분 SmsReceiver.java 만들기
실제 SMS를 수신하는 부분입니다. SMS를 받을 떄 execute.sh 쉘스크립트에 arguments로 보낸사람, 받는사람, 메세지를 전달하여 실행합니다.
import java.io.*;
import rath.nateon.*;
import rath.nateon.event.*;
public class SmsReceiver
{
public static void execShell(String from, String to, String msg) throws IOException{
String[] cmd ={"/path/to/shell script/execute.sh",from,to,msg};
Process process = new ProcessBuilder(cmd).start();
}
public static void main( String[] args ) throws Exception
{
final NateOnMessenger nateon = new NateOnMessenger(args[0], args[1]);
nateon.setAutoAccept(true);
nateon.addNateOnListener( new NateOnAdapter() {
public void loginComplete( NateUser me ) { }
public void smsReceived( String to, String from, String msg )
throws IOException
{
SmsReceiver:execShell(from,to,msg);
}
public void channelMessage( ChatChannel channel, String from, String font, String msg )
{
try {
channel.sendMessage( "there is no user" );
} catch( IOException e ) {
e.printStackTrace();
}
}
});
nateon.login();
}
}
execute.sh 만들기
간단히 인수를 전달하는 파일입니다. 단지 예제로 sendXEBoard.php를 실행했지만, 로그 등 다른 작업을 추가하시면 됩니다.
#!/bin/sh
/path/to/php/bin/php sendXEBoard.php "$1" "$2" "$3"
XE로 글등록 부분 sendXEBoard.php 만들기
XE API로 글을 등록하는 부분입니다. PHP 소켓으로 simple XML-RPC 프로토콜로 보냅니다.
글쓴이는 보낸사람 핸드폰번호 뒷자리로 비밀번호는 보낸사람 핸드폰번호로 글제목과 내용은 메세지로 등록 합니다.
<?
$config=array();
$config['path']='XE 웹설치 경로/index.php' //'/xe/index.php';
$config['host']='도메인';
$config['board_mid']='게시판 mid';
$config['port']='80';
list($dummy,$form,$to,$msg) = $argv;
$content = sprintf('<?xml version="1.0" encoding="utf-8" ?>
<methodCall>
<params>
<mid><![CDATA[%s]]></mid>
<content><![CDATA[%s]]></content>
<document_srl><![CDATA[]]></document_srl>
<title><![CDATA[%s]]></title>
<tags><![CDATA[sms]]></tags>
<allow_comment><![CDATA[Y]]></allow_comment>
<allow_trackback><![CDATA[Y]]></allow_trackback>
<nick_name><![CDATA[%s]]></nick_name>
<password><![CDATA[%s]]></password>
<email_address><![CDATA[]]></email_address>
<homepage><![CDATA[]]></homepage>
<act><![CDATA[procBoardInsertDocument]]></act>
<module><![CDATA[board]]></module>
</params>
</methodCall>',$config['board_mid'],$msg,$msg,substr($form,-4),$form);
$header = sprintf(
"POST %s HTTP/1.1\r\n".
"Host: %s\r\n".
"Content-Type: application/xml\r\n".
"Content-Length: %s\r\n\r\n".
"%s\r\n",
$config['path'],
$config['host'],
strlen($content),
$content);
$fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
if($fp){
fputs($fp, $header);
fclose($fp);
}
?>
최종 SmsReceiver 실행!
java SmsReceiver 네이트온계정 비밀번호 &
SmsReceiver를 실행하게 되면 네이트온 메신져 클라이언트가 실행된다고 보시면 됩니다. 즉 SmsReceiver로 실행한 계정은 일반 PC에 설치된 네이트온은 사용하지 못하게 됩니다. 전 회사에서 네이트온이 되지 않기 때문에 과감히 실행했습니다;
오...감사..감사.ㅎㅎ