You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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实现自动验证:

  1. 在App Script编辑器中,点击「资源」→「高级Google服务」,启用「YouTube Data API v3」
  2. 替换身份验证部分的代码为:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:32:25