外部網頁新增 Google 日曆行程(URL模板)
好的,從外部網頁新增 Google 日曆行程,最常用且最簡單的方法是使用
基本 URL 結構: https://www.google.com/calendar/render?action=TEMPLATE添加參數以預填行程資訊: 在基本 URL 後面加上 & 和 參數名稱=參數值 來指定行程細節。重要的參數包括: text: 行程標題 (必填) 。範例: &text=團隊會議
dates: 行程開始和結束時間 (必填) 。格式非常重要,必須是 ISO 8601 格式,且強烈建議使用 UTC (世界標準時間) ,以避免時區混淆。特定時間格式: YYYYMMDDTHHMMSSZ/YYYYMMDDTHHMMSSZ (Z 表示 UTC)範例 (2024年7月26日 UTC 下午 2:00 到 3:00): &dates=20240726T140000Z/20240726T150000Z
全天事件格式: YYYYMMDD/YYYYMMDD (結束日期是不包含 的那一天的日期,所以通常是開始日期加一天)範例 (2024年7月27日全天): &dates=20240727/20240728
location: 行程地點 。範例: &location=台北101會議室
details: 行程說明或備註 。可以包含換行符號 (\n)。範例: &details=討論下一季專案規劃。\n請攜帶筆記型電腦。
sprop: 來源網站資訊 (可選,但建議加入)。範例: &sprop=name:我的網站名稱&sprop=url:https://www.mywebsite.com
add: 邀請的賓客 Email (可選)。用逗號分隔多個 Email。範例: &add=user1@example.com,user2@example.com
URL 編碼 (URL Encoding): 所有參數的值都 必須 進行 URL 編碼,尤其是包含空格、換行符、特殊符號 (如 : / &) 的文字。大部分程式語言都有內建的 URL 編碼函式 (例如 JavaScript 中的 encodeURIComponent())。範例 (未編碼): https://www.google.com/calendar/render?action=TEMPLATE&text=團隊 會議&dates=20240726T140000Z/20240726T150000Z&location=台北 101 會議室&details=討論下一季專案規劃。\n請準備資料。 範例 (已編碼): https://www.google.com/calendar/render?action=TEMPLATE&text=%E5%9C%98%E9%9A%8A%20%E6%9C%83%E8%AD%B0&dates=20240726T140000Z/20240726T150000Z&location=%E5%8F%B0%E5%8C%97%20101%20%E6%9C%83%E8%AD%B0%E5%AE%A4&details=%E8%A8%8E%E8%AB%96%E4%B8%8B%E4%B8%80%E5%AD%A3%E5%B0%88%E6%A1%88%E8%A6%8F%E5%8A%83%E3%80%82%0A%E8%AB%8B%E6%BA%96%E5%82%99%E8%B3%87%E6%96%99%E3%80%82 (注意:\n 被編碼為 %0A)
在網頁中實作: 將這個產生好的、經過 URL 編碼的連結,放在 HTML 的 <a> 標籤的 href 屬性中。 <!DOCTYPE html> <html> <head> <title>新增行程到 Google 日曆</title> <meta charset="UTF-8"> </head> <body> <h1>重要活動</h1> <p>活動名稱:團隊會議</p> <p>時間:2024年7月26日 UTC 14:00 - 15:00</p> <p>地點:台北 101 會議室</p> <p>說明:討論下一季專案規劃。請準備資料。</p> <a href="https://www.google.com/calendar/render?action=TEMPLATE&text=%E5%9C%98%E9%9A%8A%20%E6%9C%83%E8%AD%B0&dates=20240726T140000Z/20240726T150000Z&location=%E5%8F%B0%E5%8C%97%20101%20%E6%9C%83%E8%AD%B0%E5%AE%A4&details=%E8%A8%8E%E8%AB%96%E4%B8%8B%E4%B8%80%E5%AD%A3%E5%B0%88%E6%A1%88%E8%A6%8F%E5%8A%83%E3%80%82%0A%E8%AB%8B%E6%BA%96%E5%82%99%E8%B3%87%E6%96%99%E3%80%82&sprop=name:My%20Website&sprop=url:https%3A%2F%2Fwww.mywebsite.com" target="_blank" rel="noopener noreferrer"> <img src="https://www.google.com/calendar/images/ext/gc_button1_en.gif" alt="Add to Google Calendar"> <!-- 或者使用文字連結 --> <!-- 新增到 Google 日曆 --> </a> <script> // 如果需要動態產生連結 (例如,從表單或 API 取得資料) // 可以使用 JavaScript 來建立 URL 並進行編碼 function generateGoogleCalendarLink(eventData) { const baseUrl = 'https://www.google.com/calendar/render?action=TEMPLATE'; const params = new URLSearchParams(); // 自動處理編碼 params.append('text', eventData.title); // 注意:日期時間需要先轉換成正確的 ISO 8601 UTC 格式 params.append('dates', eventData.dates); // e.g., '20240726T140000Z/20240726T150000Z' if (eventData.location) { params.append('location', eventData.location); } if (eventData.details) { params.append('details', eventData.details); } if (eventData.websiteName && eventData.websiteUrl) { params.append('sprop', `name:${eventData.websiteName}`); params.append('sprop', `url:${eventData.websiteUrl}`); } return `${baseUrl}&${params.toString()}`; } // 範例使用 /* const myEvent = { title: '動態產生會議', dates: '20240727T090000Z/20240727T100000Z', // 假設這是已轉換好的 UTC 時間 location: '線上會議室', details: '這是用 JavaScript 動態產生的連結。\n包含換行。', websiteName: '我的動態網站', websiteUrl: 'https://dynamic.example.com' }; const dynamicLink = generateGoogleCalendarLink(myEvent); console.log(dynamicLink); // 可以將 dynamicLink 設定給 <a> 標籤的 href // document.getElementById('myCalendarLink').href = dynamicLink; */ </script> </body> </html>
時區 (Timezone): 這是最容易出錯的地方。強烈建議在 dates 參數中使用 UTC 時間 (結尾加 Z)。如果你提供的是本地時間,Google 會嘗試根據使用者的日曆設定來解釋,但這可能導致不一致。在伺服器端或客戶端生成時間字串時,務必轉換為 UTC。URL 編碼: 確保所有參數值都經過正確的 URL 編碼,否則連結可能會失效或資訊顯示不完整。使用者體驗: 使用 target="_blank" 在新分頁開啟 Google 日曆,避免使用者離開你的網頁。清楚標示按鈕或連結的用途 (例如 "新增到 Google 日曆")。測試: 徹底測試你產生的連結,確認所有資訊都正確地預填到 Google 日曆頁面。
Google Calendar API: 如果你需要更深度的整合,例如在背景直接新增行程 (需要使用者授權 OAuth 2.0)、讀取使用者日曆、或管理日曆資源,就需要使用 Google Calendar API。這通常需要後端程式碼,並且涉及複雜的驗證流程。對於僅僅是讓使用者方便地將你的 活動加到他們 的日曆中,URL 模板方法通常是更好、更簡單的選擇。第三方服務 (如 AddEvent, AddToCalendar): 有些服務提供整合多種日曆 (Google, Outlook, Apple Calendar 等) 的按鈕或小工具,可以簡化跨平台支援,但可能需要付費或依賴外部服務。
留言
張貼留言