개발 동기
운영하고 있는 페이스북 그룹에서 이벤트를 진행했습니다. 그룹의 정책문서를 읽은 분들을 추첨해서 제가 좋아하는 책들을 선물해드리는 이벤트였습니다.
예상 외로 많은 분들이 정책 문서 함께 읽기에 호응해주셔서 이 글을 쓰는 현 시점에서 1600명이 댓글로 참여를 해주셨습니다. 다른 수업에서 HTML을 파싱해서 추첨을 하는 툴을 이용했는데, 규모가 커짐에 따라서 이것을 사용하는 것이 까다롭게 되었습니다. 그래서 좀 더 근본적인 해결책을 찾아야 했습니다. 페이스북 API를 이용하기로 했습니다.
다루는 기술
이 수업에서는 특별한 서버 쪽 기술을 사용하지 않고, javascript만으로도 페이스북의 데이터를 가지고와서 당첨자를 선발하는 프로그램을 만들어볼 것입니다.
또 그렇게 만든 것을 다른 사람들도 사용할 수 있도록 서비스화 시킬 것입니다. 이 수업이 끝나면 페이스북 앱 만들기를 할 수 있는 기본적인 능력을 갖게 될 것입니다.
수업
소스코드
<!doctype html> <html> <head> <script> window.fbAsyncInit = function() { FB.init({ appId : '1913158312286929', cookie : true, xfbml : true, version : 'v2.8' }); FB.AppEvents.logPageView(); FB.getLoginStatus(function(response) { if(response.status === 'connected'){ console.log('logined'); FB.api('/me', {fields: 'last_name,first_name'}, function(response) { document.querySelector('#name').innerHTML = ', '+response.last_name+' '+response.first_name; console.log(response); }); } else { console.log('not logined'); } }); }; (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); function start(){ var src = document.querySelector('#src').value; list = [] function shuffle(a) { var j, x, i; for (i = a.length; i; i--) { j = Math.floor(Math.random() * i); x = a[i - 1]; a[i - 1] = a[j]; a[j] = x; } } function getData(next){ FB.api(next, {limit:10}, function(response) { for(var i=0; i<response.data.length; i++){ list.push(response.data[i]); } console.log(response); if(response.paging.next !== undefined){ getData(response.paging.next); } else { shuffle(list); console.log('끗', list); var code = ''; for(var i=0; i<list.length; i++){ code += '<tr><td>'+list[i].from.name+'</td><td>'+list[i].message+'</td></tr>'; } document.querySelector('#result').innerHTML = '<table>'+code+'</table>'; } }); } getData(src); } </script> </head> <body> hi<span id="name"></span> <fb:login-button scope="public_profile,email"> </fb:login-button> <p> <input type="text" id="src"> </p> <p> <input type="button" id="start" value="start" onclick="start();"> </p> <div id="result"></div> </body> </html>