如何用Google App Script实现仅YouTube会员可访问的Google Sheets表单?
实现YouTube会员专属的体重计算表单(Google App Script + Sheets方案)
一、基础实现步骤(附代码)
1. 准备Google Sheets结构
先创建两个工作表:
- 体重记录:用来存储用户提交的日期、身高、体重、BMI结果(列名依次设为:日期、身高(cm)、体重(kg)、BMI)
- 会员列表:存储授权的YouTube会员邮箱(第一行开始直接填邮箱即可)
2. 编写App Script代码
打开Sheets的「扩展程序」→「App Script」,替换默认代码为以下内容:
// 显示体重计算侧边栏表单 function showWeightForm() { // 获取当前用户邮箱 const userEmail = Session.getActiveUser().getEmail(); // 读取会员列表验证身份 const memberSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('会员列表'); const memberEmails = memberSheet.getDataRange().getValues().flat(); // 非会员拦截 if (!memberEmails.includes(userEmail)) { SpreadsheetApp.getUi().alert('你不是授权的YouTube会员,无法使用此功能'); return; } // 构建表单界面 const htmlForm = HtmlService.createHtmlOutput(` <div style="padding: 20px; font-family: sans-serif;"> <h3>体重计算器</h3> <div style="margin: 10px 0;"> <label>身高(cm):</label> <input type="number" id="height" step="0.1" required style="padding: 5px;"> </div> <div style="margin: 10px 0;"> <label>体重(kg):</label> <input type="number" id="weight" step="0.1" required style="padding: 5px;"> </div> <button onclick="calculateAndSave()" style="padding: 8px 15px; cursor: pointer;">计算并保存</button> <div id="result" style="margin-top: 15px; font-weight: bold;"></div> </div> <script> function calculateAndSave() { const height = parseFloat(document.getElementById('height').value); const weight = parseFloat(document.getElementById('weight').value); const bmi = weight / Math.pow(height / 100, 2); const resultText = '你的BMI指数:' + bmi.toFixed(2); document.getElementById('result').textContent = resultText; // 调用后端脚本保存数据到Sheets google.script.run.saveWeightData(new Date().toLocaleDateString(), height, weight, bmi.toFixed(2)); } </script> `).setTitle('体重计算器'); // 显示侧边栏 SpreadsheetApp.getUi().showSidebar(htmlForm); } // 保存数据到体重记录表 function saveWeightData(date, height, weight, bmi) { const recordSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('体重记录'); recordSheet.appendRow([date, height, weight, bmi]); } // 给Sheets添加自定义菜单(方便用户打开表单) function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('会员专属工具') .addItem('打开体重计算器', 'showWeightForm') .addToUi(); }
3. 配置权限与隐藏代码
- Sheets共享权限:设置为「特定人员」,仅添加会员邮箱,权限设为「查看者」或「评论者」(不给编辑权限,防止用户修改数据或访问脚本)
- 代码隐藏:App Script的代码仅所有者(你)可见,其他用户无法打开脚本编辑器,完全看不到底层逻辑
4. 进阶:用YouTube API直接验证会员
如果不想手动维护会员列表,可启用YouTube Data API实现自动验证:
- 在App Script编辑器中,点击「资源」→「高级Google服务」,启用「YouTube Data API v3」
- 替换身份验证部分的代码为:
function checkYouTubeMembership() { try { // 获取当前用户的YouTube频道ID(需用户授权) const userChannel = YouTube.Channels.list('id', {mine: true}).items[0].id; // 获取你的频道下的会员列表 const memberships = YouTube.Memberships.list('snippet', {mine: true}).items; // 检查当前用户是否为会员 return memberships.some(member => member.snippet.memberDetails.channelId === userChannel); } catch (e) { console.error('会员验证失败:', e); return false; } }
调用时直接用if (!checkYouTubeMembership()) {...}即可拦截非会员。
二、替代工具方案
如果不想用Google生态,这些工具也能实现需求:
- Google Forms + Apps Script:用Google Forms做前端表单,通过脚本验证会员身份,仅允许会员提交,数据自动同步到Sheets
- Airtable:用Airtable的表单功能,配合其权限系统限制会员访问,可通过脚本对接YouTube API自动验证会员
- Webflow + Memberstack:搭建自定义网页表单,用Memberstack对接YouTube会员体系,数据可同步到Sheets或其他数据库,适合做更美观的界面
- Typeform + Zapier:用Typeform制作表单,通过Zapier关联YouTube会员数据,仅允许会员提交,提交结果同步到Sheets
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

