http://dev.textcube.org/ticket/1176
에서 진행하였습니다.
리턴되는 XML이 완전 오류였더군요. ^^; 감사합니다.
아직 로그인하지 않았습니다. 로그인 또는 회원 등록을 해 주시기 바랍니다.
TNF : Tatter Network Foundation forum » 질문과 답변 / 사용자 지원 » BlogAPI 중 mt.getPostCategories?? » 새 댓글 쓰기
입력을 마치기 전에 (필수) 로 명기된 부분은 모두 적어 주셔야 합니다.
http://dev.textcube.org/ticket/1176
에서 진행하였습니다.
리턴되는 XML이 완전 오류였더군요. ^^; 감사합니다.
넵. true..
php program에 익숙하지 않아 data type에 대한 개념이 없습니다. ^^
감사합니다. 하위 개념은 없는 거 였군요...
코드에서 isPrimary는 boolean입니다. true로 표기해 주세요.
mt에서 하위카테고리라는 개념은 없습니다.
"여행" 아래에 "아시아" 라고 있다면 "여행/아시아"라고 "아시아"항목을 출력하면 전혀 문제없습니다.
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;
}
와 같이 리턴 값을 변경하니 에러 없이 잘 진행 됩니다....
계층으로 되어 있는 하위 분류의 경우는 어떻게 처리되는지 몰라서... 안되는군요.
서비스쪽 코드는 설치형으로 넘어오는 프로세스가 없나요?
그동네 리스판스 요구가 구려서 아마 XMLRPC 리턴쪽을 좀 많이 고친 기억이 있군요. 함수들 리턴도 전부 다시 검증하였습니다.
특히 stuct와 array를 PHP에서 구분하기 쉬운편은 아니라 트릭도 약간 썼구요.
~~~
서비스 이야깁니다.
코드를 보진 않았지만 해당 함수의 Movable Type API 명세를 보니
텍스트큐브닷컴 쪽의 return이 맞는 것으로 보이는군요.
텍스트큐브(설치형) Movable Type API 구현을 살펴봐야 할 것 같습니다.
ps) 그러고보니 return value가 없는 점도 이상하네요.
맥에서 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가 에러 없이 잘 동작합니다.
이 차이 때문에 클라이언트가 에러를 내는 것일까요?