基于Google Docs的现代博客系统

在数字化时代,信息的传播和分享变得异常重要。随着技术的发展,不再局限于传统的纸质媒体,而是转向了更加灵活和便捷的数字平台。在这样的背景下,接手了一个期刊的数字化和印刷发行工作。面临的挑战是,如何将现有的基于WordPress Annotum的系统迁移到一个更现代、用户友好且不易出错的新平台上。经过深思熟虑,选择了Google Docs作为后端存储解决方案。

Google Docs以其直观的操作界面和无限的文档存储空间赢得了用户的青睐。然而,问题随之而来:如何将所有的文章和论文从文档转换为网页内容?为了解决这个问题,决定开发一个名为GoogPress的系统,它类似于WordPress,但后端基于Google。

网站使用GoogPress构建,并且提供了更详细的文档,可以在这里找到:[网站链接],所有的代码都可以在GitHub上找到:[GitHub链接]。

使用Google Apps Script作为获取所有文档的手段。这意味着它们不需要公开共享,可以全部存储在一个名为"Posts"的文件夹中。脚本存储在用户Google Drive的某个位置(具体位置并不重要),并通过客户端的POST请求调用。开发者然后在他们的网站上加入GoogPress.js,并使用gp_Init函数调用它。

// 初始化GoogPress gp_Init("https://your-script-url-here"); // 加载最新的3篇文章 gp_loadPosts($("#post-container"), "postClass", "<​hr/>", 1, 3);

完成这些操作后,生成的HTML看起来可能如下所示:

<div id="post-container"> <div class="postClass">是最新的文章<​/div> <hr/> <div class="postClass">不是最新的文章<​/div> <hr/> <div class="postClass">也不是最新的文章<​/div> <hr/> <​/div>

也可以通过以下方式加载单个文章:

// 将文章'Hi World'加载到post div中 gp_loadPost("Hi World", $("#post"));

这将返回类似于以下的内容:

<div id="post"> 'Hi World'的内容 <​/div>

或者简单地使用Google的data-googpress属性:

<div data-googpress="postName"><​/div>

这将在初始化时将文章加载到

中。

深入服务器端,后端完全是Google Apps Script。它基本上是JavaScript,带有一些令人兴奋的Google集成。

// 这是将如何与外界交互 function doPost(e) { var requestType = e.parameters.type; var id = e.parameters.id; var asHtml = e.parameters.asHtml; var start = e.parameters.start; var end = e.parameters.end; if (requestType == undefined) { return ContentService.createTextOutput("Failed to specify request type"); } // 其他内容在这里 }

使用openDoc函数搜索文档。

// 在containerFolder中查找docName function openDoc(docName, containerFolder) { var file, files = (containerFolder == undefined) ? DriveApp.getFilesByName(docName) : openFolder(containerFolder).getFilesByName(docName); if (files.hasNext()) { file = files.next(); } else { return "Not Found"; } return DocumentApp.openById(file.getId()); }

然后使用Omar Al Zabir修改过的代码片段将文档转换为HTML。这基本上允许将文档内容转换为网页内容。

Google Apps Script允许通过DocumentApp和DriveApp类轻松地与Google产品进行交互。

构建安装程序是一个相当简单的请求制作界面,它是在放学后的下午实现的。然而,令人惊讶的是,构建安装程序却相当困难。首先考虑在Chrome Web Store上部署,但这似乎太费力了(而且不是特别原型友好)。尝试编写一个脚本来在用户的驱动器中创建一个脚本文件,然后复制代码,但这也没有奏效(确实有充分的理由)。

最终,在一天的思考和几杯啤酒之后,决定采用下面描述的复杂系统。

用户运行一个他们必须授权的脚本。通过这种方式,获得了访问用户驱动器的权限。

然后脚本向这边运行的脚本发送请求。

这边的脚本创建GoogPress脚本的副本,并与用户共享。

用户端的脚本将共享的脚本添加到自己的驱动器中,然后制作它的副本。这确保了用户是文件的所有者(而不是)。

然后进行一些复制和粘贴以及文件的整理,这意味着安装是整洁的,并且保存在一个专门的GoogPress文件夹中。还创建了一个“Hello World”帖子。

一旦这一切都完成,就从驱动器上删除共享文件。

(感兴趣的脚本是Distributor.gs,它在这边运行,以及Installer.gs,它在用户的端运行)。

现在在做什么?(当前挑战)

缓存系统。如果每秒发送太多请求,Google会认为试图DDOS他们(或类似的事情)。虽然这对较小的网站来说不是问题,但对来说是个问题,将尝试解决它。

处理图片。在GoogPress上,图片加载相当慢,因为Google Doc到HTML的转换器在发送它们之前将它们转换为Base64。可能有一种更快的方法,随着时间的推移,会找到它。

<html> <head> <title>GoogPress演示</title> </head> <body> <h1>这是GoogPress</h1> <div data-googpress="TestPost2"><​/div> <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> <script type="text/javascript" src="https://cdn.googpress.org/0.1/GoogPress.min.js"></script> <script> // 替换URL gp_Init("https://script.google.com/macros/s/AKfycbxunMflwCcd5lPoS1SEDTEIeIOjAuj9QnLon9czPFN5lfV2dtXt/exec"); </script> </body> </html>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485