/* -------------- */ /* Youtube init */ /* -------------- */ var YOUTUBE_API_KEY = "AIzaSyD1XMItkVAhnWjukgcJszeOjgYfHBDhchk"; var YOUTUBE_LOADED = false; function handleYoutubeLoad() { gapi.client.setApiKey(YOUTUBE_API_KEY); gapi.client.load("youtube", "v3", function(){ YOUTUBE_LOADED = true; }); } /* --------------- */ /* Facebook init */ /* --------------- */ // Load the Facebook SDK asynchronously (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')); // Called once the Facebook SDK has loaded window.fbAsyncInit = function() { FB.init({ appId : '1456420244613043', cookie : true, // enable cookies to allow the server to access // the session xfbml : true, // parse social plugins on this page version : 'v2.0' // use version 2.0 }); $("#loading").hide(); $("#fblogin").show(); $("#fbbutton").click(checkLoginState); checkLoginState(); }; // This function is called when someone finishes with the Login // Button. See the onlogin handler attached to it in the sample // code below. function checkLoginState() { $("#fbstatus").html('Logging into Facebook...'); FB.getLoginStatus(function(response) { statusChangeCallback(response); }); } // This is called with the results from from FB.getLoginStatus(). function statusChangeCallback(response) { // The response object is returned with a status field that lets the // app know the current login status of the person. // Full docs on the response object can be found in the documentation // for FB.getLoginStatus(). if (response.status === 'connected') { // Logged into your app and Facebook. $("#fbbutton").hide(); FB.api('/me', function (response) { checkPermissionsById(response.id); }); } else if (response.status === 'not_authorized') { // The person is logged into Facebook, but not your app. $("#fbbutton").show(); $('#fbstatus').html('Please log into this app:'); } else { // The person is not logged into Facebook, so we're not sure if // they are logged into this app or not. $("#fbbutton").show(); $('#fbstatus').html('Please log into Facebook:'); } } function checkPermissionsById(user_id) { $("#fbstatus").html("Checking Facebook permissions..."); FB.api('/' + user_id + '/permissions', function (response) { var groups_granted = false; $.each(response.data, function (i, val) { if (val.permission === 'user_groups' && val.status === 'granted') groups_granted = true; }); if (groups_granted) facebookOk(); else { $('#fbstatus').html('You have not granted SpaceRadio the ' + 'permission to see your groups. Please log out of ' + 'Facebook and try again.'); $("#fbbutton").show(); } }); } function facebookOk() { $("#fblogin").hide(); $("#choosegroup").show(); $("#groupname").on("input", findGroup); findGroup(); } /* ------------------------------------------ */ /* Process facebook group and extract links */ /* ------------------------------------------ */ var groups = []; function findGroup() { var group_name = $("#groupname").val(); var group_status = $("#groupstatus"); var group_results = $("#groupresults"); group_status.html("Searching for \"" + group_name + "\""); group_results.html(""); if (groups.length != 0) filterGroups(groups, group_name); else FB.api("/me/groups", function (response) { groups = response.data; filterGroups(response.data, group_name); }); } function filterGroups(group_list, group_name) { var found = false; var group_results = $("#groupresults"); var group_status = $("#groupstatus"); $.each(group_list, function(i,val) { if (val.name.indexOf(group_name) >= 0) { var link = $("", { text: val.name, click: function () { processGroupFeed(val.name, val.id); }, href: "#" }); link.appendTo(group_results).wrap("
  • "); found = true; } }); if (!found) group_status.html("No result for \"" + group_name + "\""); } function processGroupFeed(group_name, group_id) { $("#choosegroup").hide(); $("#feedvideos").show(); $("#feedstatus").text("Processing group \"" + group_name + "\""); $("#feedstatuspage").text("Fetching page 1"); $("#feedstatus").show(); FB.api(group_id + "/feed", function (response) { extractYoutube(response, [], 2); }); return false; } ytregex = { expr: new RegExp("(youtube[.]com/watch[?]v=|youtu[.]be/)([a-zA-Z0-9_-]+)", "g"), group: 2 }; function addUnique(string, array) { for (var i = 0; i < array.length; i++) { if (string === array[i]) return; } array.push(string); } function matchRegex(string, regex, array) { var match = regex.expr.exec(string); while (match != null) { if (match.length > regex.group) addUnique(match[regex.group], array); match = regex.expr.exec(string); } } function extractYoutube(response, links, pageNum) { for (var i = 0; i < response.data.length; i++) { var post = response.data[i]; matchRegex(post.message, ytregex, links); matchRegex(post.source, ytregex, links); if (post.comments && post.comments.data) { $.each(post.comments.data, function (i, val) { matchRegex(val.message, ytregex, links); }); } } if (response.paging && response.paging.next) { $("#feedstatuspage").text("Fetching page " + pageNum); $.getJSON(response.paging.next, function (response) { extractYoutube(response, links, pageNum+1); }); } else { $("#feedstatus").text("Found " + links.length + " links to youtube videos:"); processLinks(links); } } /* ---------------------------------------- */ /* Retrieve video information and display */ /* ---------------------------------------- */ function processLinks(links) { if (YOUTUBE_LOADED) { getYoutubeInfo(links, 0, 25, []); } else { showLinks(links); } } function showLinks(links) { $("#feedstatuspage").text("Could not retrieve video information from youtube"); videolist = $("#videolist"); videolist.detach(); for (var i = 0; i < links.length; i++) { var link = "http://youtu.be/" + links[i]; videolist.append("
  • " + link + "
  • "); } videolist.appendTo("#feedvideos"); } function getYoutubeInfo(links, i, step, items) { var end = Math.min(i + step, links.length); $("#feedstatuspage").text("Getting video information for videos " + i + " to " + end + "..."); var request = gapi.client.youtube.videos.list({ "part": "id,snippet", "id": links.slice(i, end).join() }); request.execute(function(response) { if (response.hasOwnProperty("items")) { for (var j = 0; j < response.items.length; j++) { items.push(response.items[j]); } } if (end < links.length) { getYoutubeInfo(links, end, step, items); } else { showYoutubeLinks(items, links.length); } }); } function showYoutubeLinks(items, total) { $("#feedstatuspage").hide(); $("#feedstatus").text("Found " + items.length + "/" + total + " videos on youtube:"); videolist = $("#videolist"); videolist.detach(); for (var i = 0; i < items.length; i++) { var link = "http://youtu.be/" + items[i].id; videolist.append("
  • " + items[i].snippet.title + "
  • "); } videolist.appendTo("#feedvideos"); }