요즘 페이스북에 팬페이지를 개설후 많은 이벤트와 홍보 페이지를 작성하고있다.
자연스레 페북의 API를 많이 사용하게 되는데 사용하면 할수록 편하게 잘 만들어놨다는 생각이 든다.
간단한 플러그인부터 FQL, GRAPHI API 등..덕분에 공부할건 더 늘어나는데..;;;

페북 관련 글은 처음 남기는데.. 순서대로라면 뭔가 페북의 사용법과 OAuth부터 시작해야 되겟지만.ㅡㅡa..
일단 내가  얼마전 처리한부분부터 글을 남겨야겠다..;;
얼마전에 팬페이지에 이벤트를 하나 개설했는데 사용자의 like 여부를 체크후에 응모 가능을 판단해달라는 요구사항이 있었다.

페북에선 아래방법으로 팬페이지 "좋아요" 체크기능을 제공해준다.
1. REST API 의 page.isFan
2. FB.api의 pages.isFan 메소드
3. FQL을 통한 page_fan 테이블 조회.

아래 설명한 내용은  위의 3번을 토대로 작성한것이다.
우선 먼저 해야할 작업으론 페북에 APP를 생성해야한다. [개설하기
이 생성된 APP를 통해 사용자의 정보를 조회할수 있다.
<body>
	<DIV id=fb-root></DIV>
	<SPAN id=status>	
	<SCRIPT src="http://connect.facebook.net/ko_KR/all.js#xfbml=1">    
	<SCRIPT type=text/javascript>	
		FB.init({		
			appId  : '새로 개설한 APP ID',		
			status : true, // check login status		
			cookie : true, // enable cookies to allow the server to access the session	
			xfbml  : true  // parse XFBML	
		});	
		// 회원 로그인 상태체크.	
		FB.getLoginStatus(handleSessionResponse);	
		
		// like 이벤트가 발생할때 호출된다.	
		FB.Event.subscribe('edge.create', function(response) {		
			document.getElementById("status").innerHTML = "LIKE!!!!";
		});		
		
		// unlike 이벤트가 발생할때 호출된다.	
		FB.Event.subscribe('edge.remove', function(response) {		
			document.getElementById("status").innerHTML = "UNLIKE!!!!";	
		});			
		
		function handleSessionResponse(response) {		
			// 로그인하지 않았다면 로그인 유도		
			if (!response.session) {		  			
				alert("페북 로그인을 해주세요~!");			
				FB.login(handleSessionResponse);			
				return;		
			}            
			
			//FQL를 사용 page_fan테이블을 조회하여 현재 사용자의 LIKE 명단에 있는지 조회한다. 
			// page_id 는 팬페이지의 고유ID..	    
			FB.api (			
				{				
					method: 'fql.query',				
					query: "SELECT uid, page_id, type FROM page_fan "+                       
						"WHERE page_id = ???????????? AND uid= "+FB.getSession().uid		
				},	
	
				function(response) {                                
					//LIKE 한 사용자가 아니라면 response.length 는 "0"을 반환한다.				
					if( response.length ) {					
						document.getElementById("status").innerHTML = "LIKE!!!!";			
					} else { 					
						document.getElementById("status").innerHTML = "UNLIKE!!!!";
					}			
				}		
			);	
		}    	
	</SCRIPT>
	<fb:like layout="button_count" send="false" href="http://cspark.net"></fb:like>
</body>

이외에도 FQL을 통해서 각 데이터 테이블을 조회한다면 좀더 쉽게 페북의 데이터들을 조회할수 있다.
참고 : FQL API http://developers.facebook.com/docs/reference/fql/
  1. duki 2011.07.13 16:55

    안녕하세요^^
    FQL 검색을 통해 블로그에 오게 되었습니다.
    페이스북앱을 처음 사용해 보는데, 간단하게라도 코드를 어디에 업로드 해서 연결하는지에 대해서 설명해 주실 수 있을까요?

  2. eqzero 2011.07.13 22:45 신고

    안녕하세요~ ^^;
    음 현재 페이스북의 경우 기존의 FBML을 지원하지 않기로 함으로 인해 팬페이지에서 별도의
    페이지를 작성해야할경우 IFRAME방식으로 지원하고 있습니다.
    위의 소스도 마찬가지로 별도의 호스팅 서버에 미리 페이지를 생성해놓고 아이프레임으로 등록을 한것이지요.

    일단 별도의 호스팅을 통한 페이지를 생성하시고 저위 앱생성 링크를 통해 앱을 생성하시는데요
    앱을 생성하실때 설정메뉴들 보시면 캔버스 설정 탭이 있습니다. 그 항목들에서 "Canvas Type" 은 IFRAME으로 하시구요 "Canvas URL"은 호스팅 도메인주소를 "Tab URL"에는 전체 페이지 풀 도메인 경로를 적어주시면됩니다.

    이후 앱페이지 보기 로 가셔서 왼쪽메뉴에 "내 페이지에 추가" 를 선택하시면 해당 앱을 추가할수 있는 팬페이지 목록이 나오실겁니다.^^; 거기에 등록하시면 이제 팬페이지로 가시면 메뉴 항목에 아이프레임으로 등록하신 앱메뉴가 보이실거에요..

  3. 문의 2011.09.07 18:19

    문의좀 드립니다..
    혹시 페이지 좋아요한 사람들 목록은 어떻게 뽑는지요? ^^;;
    SELECT uid, page_id, type FROM page_fan WHERE page_id =페이지아이디
    이렇게는 안되는군요.. ㅠㅠ

    • eqzero 2011.09.15 00:05 신고

      안녕하세요~ 추석연휴라 이제야 글을봤네요.(_ _);
      결론부터 말씀드리면 현재 제가 알기론 FQL에서는 전체 fan(LIKE한 사용자) 목록은 뽑을수가 없습니다.

      우선 먼저 알아두셔야할게 FQL 사용하실때 where절에서 반드시 들어가야할 컬럼이 존재합니다. 그것이 바로 "Indexable"으로 지정된 컬럼인데요. FQL사용시에는 반드시 이 Indexable으로 설정된 컬럼이 하나 이상이 존재해야합니다.(이는 각 FQL 테이블 정보를 조회화면에서 확인이 가능합니다.) - 만약 Indexable컬럼을 지정하지 않는다면 error_code : 604 를 만나게됩니다.ㅡ,.ㅡa

      근데 현재 pages의 like fan목록을 조회할수 있는 테이블인 "page_fan"에서는 uid가 이 "Indexable" 설정 컬럼입니다. 이말은 반드시 사용자 아이디가 들어가야 한다는거죠.
      아마도 FB에서 어떤 연유에 의해서 전체 사용자 목록은 제공하지 않는거같습니다.
      GRAPHI API를 확인해봐도 유사한 기능은 안보이네요;;

      혹시나 방법을 찾게된다면 말씀부탁드리며 또는 제가 찾게된다면 글 남기겠습니다.(_ _);

  4. 문의 2011.10.07 14:58

    포스팅 하신 내용 잘 보았습니다. 문의 드릴게 있는데요. 초보라 자료를 찾아보아도 잘모르겠네요.
    다름이 아니라 페이스북에 앱을 만들고 그 URL을 http://내버서/a.asp 로 설정하고 a.asp파일에 위 소스를
    넣고 필요한 부분에 정보를 넣은후 제 페이지에서 해당 화면을 클릭해서 보게 되면 아무것도 나타나지 않습니다.
    소스 대로라면 Like 나 Unlike 라는 문구가 SPAN 에 각 경우에 따라 나타나야 한다는 것으로 이해했는데요.
    혹 선행되어야 하는 작업이라는가 환경의 영향 같은 것을 받는지요???
    제페이지에 Like 한 사람만 a.asp 화면을 볼수 있도록 하고 싶은데요 다른 방법은 없는건지요?
    두서 없는 질문 죄송합니다. 아무쪼록 소중한 답변 부탁드립니다..ㅠㅠ

    • eqzero 2011.10.09 02:42 신고

      안녕하세요 ^^;
      요즘 갈수록 페이스북이 개발자문서쪽에 많은 변화가 있네요. 한달전에 사용했던게 갑자기 기능제한이되는 상황들이 종종 발생하네요..;;
      혹시 새로 생성하신 페이지에 접근을 팬페이지 관리자로 접근하셨다면 개인 사용자로 전환후에 한번 확인해보시기바랍니다.
      개인사용자로 로그인했음해도 불구하고 화면이 보이지 않는다면 APP설정이 잘못되었을 가능성이 높습니다.
      APP설정의 Basic탭에서는 페이지탭 항목에 url이 올바른지 확인해주시고 Advanced탭에서 캔버스설정부분을 확인해보시기바랍니다.
      말씀하신 a.asp파일내용에 내용을 다 지우고 간단한 문구만 작성하셔서 다시 한번 확인해보시기 바랍니다.

+ Recent posts