1

주제: BlogAPI 중 mt.getPostCategories??

맥에서 ecto를 블로그툴로 사용하려 하고 있습니다.

작성된 글을  ecto로 불러오는 중 에러가 나서 콘솔출력을 보니 다음과 같더군요.

<methodName>mt.getPostCategories</methodName>
<params>
    <param>
        <value><string>13</string></value>
    </param>
    <param>
        <value><string>userid</string></value>
    </param>
    <param>
        <value><string>password</string></value>
    </param>
</params>
</methodCall>

에 대한 응답으로

Response:
Status            : 200
X-Powered-By      : PHP/5.2.6
Expires           : Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control     : no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Keep-Alive        : timeout=15, max=99
Pragma            : no-cache
Server            : Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
Content-Type      : text/xml
Date              : Mon, 01 Dec 2008 04:20:20 GMT
Content-Length    : 198
Connection        : Keep-Alive

<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
  <params>
    <param>
    <value>
             <struct>
             <member>
                   <name>0</name>
                   <value><string></string></value>
             </member>
             </struct></value>
    </param></params>
</methodResponse>

이 부분에서 ecto가 에러를 냅니다. 그 이유가 뭔지는 모르겠지만, 서버형 텍스트큐브의 경우 mt.getPostCategories의 response 는

<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
  <params>
     <param>
            <value>
            <array>
            <data>
                 <value>
                 <struct>
                 <member>       
                       <name>categoryId</name>
                       <value><string>4871</string></value>
                  </member>
                  <member>
                        <name>categoryName</name>
                        <value><string>music</string></value>
                  </member>
                  <member>
                         <name>isPrimary</name><value>
                         <boolean>1</boolean></value></member>
                  </struct></value></data>
             </array></value>
     </param></params></methodResponse>

와 같이 옵니다.

둘간의 차이는 서버형의 경우 response가 structure의 array 형태로 오는 것 같고, 설치형은 그냥 보내는 것 같습니다. 서버형의 경우 ecto가 에러 없이 잘 동작합니다.

이 차이 때문에 클라이언트가 에러를 내는 것일까요?

2

답글: BlogAPI 중 mt.getPostCategories??

코드를 보진 않았지만 해당 함수의 Movable Type API 명세를 보니
텍스트큐브닷컴 쪽의 return이 맞는 것으로 보이는군요.
텍스트큐브(설치형) Movable Type API 구현을 살펴봐야 할 것 같습니다.

ps) 그러고보니 return value가 없는 점도 이상하네요.

천천히 그러나 확실하게 나아가는 길
email:minkyu.shim@gmail.com
blog:www.shimminkyu.com

3

답글: BlogAPI 중 mt.getPostCategories??

그동네 리스판스 요구가 구려서 아마 XMLRPC 리턴쪽을 좀 많이 고친 기억이 있군요. 함수들 리턴도 전부 다시 검증하였습니다.
특히 stuct와 array를 PHP에서 구분하기 쉬운편은 아니라 트릭도 약간 썼구요.

~~~

서비스 이야깁니다. smile

4

답글: BlogAPI 중 mt.getPostCategories??

서비스쪽 코드는 설치형으로 넘어오는 프로세스가 없나요?

천천히 그러나 확실하게 나아가는 길
email:minkyu.shim@gmail.com
blog:www.shimminkyu.com

5

답글: BlogAPI 중 mt.getPostCategories??

source 중에...  library/model/blog.api.php를 보면 mt.getPostCategory(...)의 return으로 category id의 array만 리턴하는 것으로 되어 있습니다. (source line 894 version 1.7.6)

function mt_getPostCategories()
{
        $params = func_get_args();
        $result = api_login( $params[1], $params[2] );
        if( $result )
        {
                return $result;
        }

        $post = new Post();
        $post->open( intval( $params[0] ) );

        $cat = array( $post->category );
        $post->close();


        return $cat;
}

그런데, mt.getPostCategories()의 정의(http://www.sixapart.com/developers/xmlrpc/movable_type_api/mtgetpostcategories.html)에 따르면 return값은

{string categoryName, string categoryId, Boolean isPrimary}의 structure array로 정의 되어 있네요.

source 를

function mt_getPostCategories()
{
        $params = func_get_args();
        $result = api_login( $params[1], $params[2] );
        if( $result )
        {
                return $result;
        }

        $post = new Post();
        $post->open( intval( $params[0] ) );

        $catId = array($post->category);
        $catName = api_getCategoryNameById( $post->category );

        $post->close();

        $returnCat = array(0);
        $returnCat[0] = array( "categoryId" = $catId, 
                                            "categoryName" = $catName,
                                            "isPrimary" = 1);


        return $returnCat;
}

와 같이 리턴 값을 변경하니 에러 없이 잘 진행 됩니다....

계층으로 되어 있는 하위 분류의 경우는 어떻게 처리되는지 몰라서... 안되는군요.

VentiAmericano (2008-12-02 20:05:27)에 의해 마지막으로 수정

6

답글: BlogAPI 중 mt.getPostCategories??

mt에서 하위카테고리라는 개념은 없습니다.
"여행" 아래에 "아시아" 라고 있다면 "여행/아시아"라고 "아시아"항목을 출력하면 전혀 문제없습니다.

gendoh (2008-12-03 10:36:47)에 의해 마지막으로 수정

7

답글: BlogAPI 중 mt.getPostCategories??

코드에서 isPrimary는 boolean입니다. true로 표기해 주세요.

8

답글: BlogAPI 중 mt.getPostCategories??

감사합니다. 하위 개념은 없는 거 였군요...

9

답글: BlogAPI 중 mt.getPostCategories??

넵. true..

php program에 익숙하지 않아 data type에 대한 개념이 없습니다. ^^

10

답글: BlogAPI 중 mt.getPostCategories??

http://dev.textcube.org/ticket/1176
에서 진행하였습니다.

리턴되는 XML이 완전 오류였더군요. ^^; 감사합니다.