Как встраивать ленту Facebook в новые Сайты Google (с помощью скрипта приложений)?
Я читал, что вы можете создать скрипт Google Apps, который показывает ленту Facebook, а затем вставить его на сайт Google, но я не могу найти больше информации о том, как это сделать, и сам не могу понять,
Когда я пытаюсь создать веб-приложение Apps Script с фидом Facebook, я получаю сообщения об ошибках:
Uncaught DOMException: Failed to set the 'domain' property on 'Document': Assignment is forbidden for sandboxed iframes.
Это происходит от копирования "Facebook Javascript SDK" и "Фида страниц" от разработчиков Facebook в файл HTML и его развертывания в виде веб-приложения. Я полагаю, это как-то связано с тем, как Apps Script изолирует ваш код, но я не знаю, что мне здесь делать.
В связи с этим, даже если я пытаюсь сделать более простой сценарий приложений с использованием некоторого статического HTML, при попытке вставить его с диска на сайт появляется сообщение об ошибке "Некоторые из выбранных элементов не могут быть встроены".
2 ответа
Новые сайты Google не поддерживают скрипт Google Apps.
Смежный вопрос: Сценарии Google App для новой версии сайтов Google
Новые сайты Google теперь поддерживают встраивание сценария приложений (убедитесь, что сценарий приложений развернут как веб-приложение, установите правильные разрешения и используйте URL-адрес /exec, а не ваш /dev для встраивания).
Я обнаружил, что не могу использовать SDK facebook для видео из-за песочницы. Вместо этого я использовал решение iframe для видео, но, возможно, вы могли бы попробовать что-то вроде этого для канала (я предполагаю, что вы зарегистрировали свое приложение в fb, чтобы вы могли получить токены генерации):
В скрипте приложений создайте файл.gs и html, примерно так, как показано ниже (на самом деле я не работал с возвратом фидов, поэтому проверьте структуру возвращаемых данных и измените ее соответствующим образом)
//**feed.gs**
function doGet(e) {
return HtmlService
.createTemplateFromFile('my-html-file')
.evaluate();
}
function getToken() { //use your fb app info here (and make sure this script is protected / runs as you
var url = 'https://graph.facebook.com'
+ '/oauth/access_token'
+ '?client_id=0000000000000000'
+ '&client_secret=0x0x0x0x0x0x0x0x0x0x0x0x'
+ '&grant_type=client_credentials';
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var json = response.getContentText();
var jsondata = JSON.parse(json);
return jsondata.access_token;
}
function getFeed() {
var url = 'https://graph.facebook.com'
+ '/your-page/feed'
+ '?access_token=' + encodeURIComponent(getToken());
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var json = response.getContentText();
var jsondata = JSON.parse(json);
//Logger.log(jsondata); //check this and adjust following for loop and html showFeed function accordingly
var posts = {};
for (var i in jsondata) {
posts[i] = {"post":jsondata[i].message};
}
return posts;
}
<!--**my-html-file.html**-->
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
// The code in this function runs when the page is loaded (asynchronous).
$(function() {
google.script.run
.withSuccessHandler(showFeed)
.withFailureHandler(onFailure)
.getFeed(); //this function is back in .gs file and must return an array or object which gets auto-passed to the showFeed function below
});
function showFeed(posts) { //parameter name must match array or object returned by getFeed in gs file
var html = '';
for (var p in posts) {
html += '<p>' + posts[p].post + '</p>'; //instead of a string, you can build an array for speed
}
$('#feed').empty().append(html); //if you used an array for the html, you'd split it here
}
function onFailure(error) {
$('#feed').empty().append("Unable to retrieve feed: " + error.message); ;
}
</script>
</head>
<body>
<div id="feed">
Loading...
</div>
</body>
</html>