OpenSocialTutorial-3

IDtail.com API

Jump to: navigation, 찾기

[편집] 주인 정보 가져오기

주인이란, 현재 보고 있는 어플리케이션을 설치한 사람을 말합니다. 방문자와 주인은 모두 사람의 속성을 핸들링하는 것이므로 비슷한 방식으로 호출이 됩니다.

조금 긴 예제로 사용방법을 살펴보겠습니다.

<Module>
 <ModulePrefs title="My Friends List">
   <Require feature="opensocial-0.7"/>
 </ModulePrefs>
 <Content type="html">
   <![CDATA[
   <div id="content"></div>
   <script type="text/javascript" >

	gadgets.util.registerOnLoadHandler( init );

	function init() {
		var req = opensocial.newDataRequest();
		var ownerReq = req.newFetchPersonRequest('OWNER');
		req.add( ownerReq, 'pageOwner' );
		req.send( onDataLoad );
	}

	function getValue( obj, name )
	{
		var v = obj.getField( opensocial.Person.Field[name] );
		return v != undefined ? v : '';
	}
	function onDataLoad(dataResponse) { /* dataResponse methods: hadError get */
		var cont = document.getElementById('content');

		if( dataResponse.hadError() ) {
			cont.innerHTML = "Error in fetching data";
			return;
		}
		
		var owner = dataResponse.get('pageOwner').getData(); 
		/* js/opensocial/opensocialreference/person.js Person Object */

		var c;
		c = '<h1>Owner\'s Information</h1>';
		c += '<ol>';
		c += '<li>ID:' + owner.getId() + '</li>';
		c += '<li>NAME:' + owner.getDisplayName() + '</li>';
		c += '<li>PROFILE_URL:' + getValue( owner, 'PROFILE_URL' ) + '</li>';
		c += '<li>GENDER:' + getValue( owner, 'GENDER' ) + '</li>';
		c += '<li>JOB:' + getValue( owner, 'JOB' ) + '</li>';
		c += '<li>SCHOOL:' + getValue( owner, 'SCHOOL' ) + '</li>';
		c += '<li>INTERESTS:' + getValue( owner, 'INTERESTS' ) + '</li>';
		c += '<li>ABOUT_ME:' + getValue( owner, 'ABOUT_ME' ) + '</li>';
		c += '</ol>';

		cont.innerHTML = c;
	}
	</script>
	]]>
 </Content>
</Module>

모든 어플리케이션은 비동기적으로 요청을 처리합니다. 어떤 데이터를 나타내기 위해서 ajax등을 이용해서 데이터를 가져올 것이며, 데이터가 도착하면 원하는 동작을 수행하도록 하는 구조로 처리됩니다.

[편집] 요청

	var req = opensocial.newDataRequest();
	var ownerReq = req.newFetchPersonRequest('OWNER');
	req.add( ownerReq, 'pageOwner' );
	req.send( onDataLoad );
  • 비동기적인 호출을 하기 위해서 request 개체를 하나 만들어야합니다.
  • opensocial.newDataRequest를 통해 생성되며, 실제 요청할 내용이 사람에 대한 것이므로 newFetchPersonRequest를 통해 요청 개체를 만듭니다.
  • 이때 'OWNER'를 요청하는 요청개체를 만듭니다. 이런 요청이 저장될 이름을 지정하여 추후에 접근할 수 있도록 add 명령은 두 번째 인자인 'pageOwner' 와 같은 값을 갖습니다.
  • 요청을 수행하고 데이터가 전달되면 실행될 함수를 지정하는 것이 send에 지정되어야할 인자입니다. (onDataLoad)

[편집] 결과

		var cont = document.getElementById('content');

		if( dataResponse.hadError() ) {
			cont.innerHTML = "Error in fetching data";
			return;
		}
		
		var owner = dataResponse.get('pageOwner').getData(); 
		/* js/opensocial/opensocialreference/person.js Person Object */
  • cont 는 결과를 출력할 영역을 나타냅니다. 대개 태그의 id와 다른 이름으로 변수를 만드는 것이 좋습니다.(IE에서 충돌 문제 발생 가능) 먼저 인자로 넘어오는 dataResponse 개체에 오류가 있는지 확인합니다.
  • 처음 요청시에 지정한 'pageOwner' 를 인자로 넘겨 원하는 데이터 개체를 가져오게 되며, 실제 값을 얻기 위해 getData를 수행합니다.
  • owner 개체는 원하는 정보가 필드별로 지정되어 있습니다. 필드명은 내부적으로 사용될 수 있으므로 되도록 enum 값을 통해 접근하는 것이 좋습니다.
  • 예를 들어 owner.getField( opensocial.Person.Field.NAME ); 과 같이 상수 값인 opensocial.Person.Field.NAME 를 이용하여 필드명을 지정해주면 해당 속성이 나오게 됩니다.
  • 만약 현재 접근한 사람인 방문자가 주인이라면, 속성은 모두 검출되지만, 그렇지 않은 경우 공개된 정보만을 가져오게 됩니다.
  • 필드명은 아예 존재하지 않을 수 있기 때문에 undefine와 비교하여 적절한 처리를 해주어야합니다.

이전 페이지 | 다음 페이지