4 min read

카카오톡 챗봇 이미지 출력

카카오톡 챗봇 이미지 출력

어제 대충 구상했던걸 오늘 만들어 보았다.
가장 먼저 만들었던 기능은 도움말이었다.
누가 만들었는지 뭐하려 만들었는지를 적당히 적어두었다.

replier.reply("유사 박성훈 봇\n박성훈이 하는 일+a를 위해서\n할짓없는 박성훈이 설계했습니다.");

replier.reply("💬봇의 전체 명령어\n
		봇 도움말 - 봇 만든이, 만든이유 등\n
		봇 명령어 - 봇의 전체 명령어 목록\n
		봇 [검색어] 콘 - 이모티콘 자동검색\n
		봇 주사위 - 주사위가챠를 해볼수 있음\n");

등으로 적절한 답변을 준비했다.
세번째는 주사위기능이었다
애들이 만들어달라길래 넣었다

나름 이쁘게 주사위모양으로 출력해준다.

​네번째가 이걸 만들려는 원인이 되었던 이모티콘 출력기능이다

if(message.indexOf("콘") != -1){
    message=message.replace(" 콘","");
    if(message == " 목록"){
        replier.reply("전체의 목록은\n");
    }else{
        replier.reply("검색어 ["+message+"] 의 이미지는");
        replier.reply("http://xxx.xxx.xxx.xxx/backend/test.php?q="+encodeURI(message));
    }
}

우선 콘을 출력해야하는지 확인하기 위해 if문을 씌웠고,
콘 부분을 잘라서 없애줬다. 봇 콘 목록으로 입력되면 목록을 저장해둔 홈페이지를 출력해줄 것이고(아직 안만듬)
그게 아닐 경우에는 가운데 메시지 [ex. 어흑 마이깟]을 잘라서
홈페이지에 GET방식으로 전달해준다.

​이미지를 띄워주는 서버 측에서는

<head>
    <meta charset="utf-8">
    <meta property="og:type" content="website">
    <meta property="og:description" content="자동 이모티콘 출력기"/>
    <meta property="og:title" content="유사-박성훈봇"/>
</head>

오픈 그래프라는 걸 사용하면 카카오톡이 위의 "자동 이모티콘 출력기"라는 글자와

"유사-박성훈봇"이라는 텍스트를 출력한다고 한다.

이것처럼.​

이미지도 메타태그로 넣는게 맞으나
메타태그로 넣으니까 변경을 못해서 콘을 바꿀수 없었기에
따로 <img>태그를 썼다.

<?php
$q = $_GET['q'];
$res = NULL;
$min = 99999;
$lev = 0;
$path = NULL;
function Findimage($dir){
    global $q, $res, $min, $lev, $path;

    $ffs = scandir($dir);

    unset($ffs[array_search('.', $ffs, true)]);
    unset($ffs[array_search('..', $ffs, true)]);

    // 디렉토리가 비어있는지 확인합니다. 
    if (count($ffs) < 1)
        return;
    foreach($ffs as $ff){
        // 재귀함수 : 파일이 아닌 디렉토리가 있으면, 스스로 자신을 호출하여 반복적으로 실행합니다
        if(is_dir($dir.'/'.$ff)) Findimage($dir.'/'.$ff);
        else {
            //echo $ff.'<br/>'; 
            $lev = levenshtein($q , $ff);
            if($lev < $min){
                $res = $ff;
                $min = $lev;
                $path = $dir;
            }
        }
    }
}

Findimage('DCcon');
echo '<img id="icon" src="'.$path.'/'.rawurlencode($res).'"/>';

?>

$q에 GET으로 보낸 [어흑 마이깟]을 가져오고
$res 등의 변수들은 초기화만 해뒀다.

scandir 명령어로 파일 목록을 가져와서, 폴더라면 재귀함수로 한번 더 탐색하는 방법으로 모든 이미지를 가져오고,
php 함수중 하나인 levenshtein함수를 이용해서 가장 비슷한 파일명을 고른다.

고른 값을 $res에 넣어주고, $path에 경로도 넣어서
img태그의 src 안에 넣어줘서 출력할수 있도록 한다.

이렇게 가장 기본적이고 꼭 필요한 기능을 모두 만들면

이렇게 이미지를 출력할 수 있게 된다.