天道酬勤,学无止境

用于在正文中查找 URL 并将其格式化为超链接的 Google Apps 脚本(Google Apps Script to find URLs in body and format them as hyperlinks)

问题

我有一个从命令行脚本生成的文本块,它启动了许多虚拟机。 文本输出包含有关如何访问虚拟机上的 web 应用程序的说明,例如:

TrainingMachine01
Username: [user] 
Password: [pass] 
iPython: http://ip/ 
RStudio: http://ip:8787/

我将这段文字转储到一个 Google Doc 中,该文档与许多人共享(我们用 Python 和 R 开设课程,并为每个参与者启动一个 VM)。

我希望能够将我的输出格式化为超链接,以便与会者只需单击 URL 而不是将其复制并粘贴到浏览器中(firstworldproblems)。

在研究了将文本粘贴到 Google Docs 的方法之后,我认为没有比 Google Apps 脚本更简单的解决方案了,它可以简单地找到与 URL 匹配的模式,并将它们设为超链接。

到目前为止,这是我所拥有的,在很大程度上基于对另一个问题的回答:

function updateLinks() {
  // Open active doc
  var body = DocumentApp.getActiveDocument().getBody();
  // Find URLs
  var link = body.findText("http:\/\/.*\/");

  // Loop through
  while (link != null) {
    // Get the link as an object
    var foundLink = link.getElement().asText();

    // Get the positions of start and end
    var start = link.getStartOffset();
    var end =link.getEndOffsetInclusive();

    // Format link
    foundLink.setLinkUrl(start, end, foundLink);

    // Find next
    link = body.findText("http:\/\/.*\/", link);
  }
}

我的模式和循环工作正常,除了写入超链接的 URL 是http://text如果我在格式链接部分使用foundLinkhttp://rangeelement如果我使用link http://rangeelement

如何让脚本将 URL 设置为文本本身?

(Javascript 新手,一直在使用这样的练习来学习它和 Google Apps 脚本)

更新: a-change 的评论将我指向文本元素上的getText()方法,以便相关行变为foundLink.setLinkUrl(start, end, foundLink.getText()); . 然而,这仍然不是很有效,并且正在插入指向about:blank链接。 任何想法如何清理从findText()提取的文本?

回答1

更详细地研究了它。 如果您记录foundLink.getText()的值,您将看到它实际上包含在该行找到的所有字符串,即RStudio: http://ip:8787/而不仅仅是http://ip:8787/ 。 这可能是因为link.getElement()返回包含找到的文本的范围的整个元素。

您可以将所有链接写在单独的行上,该函数可以很好地工作,但文档本身可能看起来不太好。

所以你需要在这里做的是额外地从foundLink.getText()字符串中切出链接。 这是稍微修改的初始函数:

 function updateLinks() {
  // Open active doc
  var body = DocumentApp.getActiveDocument().getBody();
  // Find URLs
  //Logger.log(body.findText("http").getElement().asText().getText());
  var link = body.findText("http:\/\/.*\/");
  // Loop through
  while (link != null) {
    // Get the link as an object
    var foundLink = link.getElement().asText();
    // Get the positions of start and end
    var start = link.getStartOffset();
    var end = link.getEndOffsetInclusive();
    //check the value of foundLink if needed
    //Logger.log(foundLink.getText());
    //slice only the link out of it
    var correctLink = foundLink.getText().slice(start, end);
    // Format link
    foundLink.setLinkUrl(start, end, correctLink);
    // Find next
    link = body.findText("http:\/\/.*\/", link);
  }
}
回答2

我在上面和其他地方尝试过其他正则表达式示例,但在重现结果时遇到了麻烦 - 我怀疑是因为 Google Apps Script 不是完整的 JS。

这对我有用,检测带有尾随空格的 http 和 https 链接。 我已经测试了在行/段末尾开始/结束的链接以及前后测试(用空格分隔),它们都有效。

function makeLinks() {
  var linkRegex = "https?:\/\/[^\\s]*";

  // Open active doc
  var body = DocumentApp.getActiveDocument().getBody();
  // Find URLs
  //Logger.log(body.findText("http").getElement().asText().getText());
  var link = body.findText(linkRegex);

  // Loop through the body finding texts matching the search pattern
  while (link != null) {
    // Get the link as an object
    var linkElement = link.getElement().asText();
    // Get the positions of start and end
    var start = link.getStartOffset();
    var end = link.getEndOffsetInclusive();

    //slice only the link out of it
    var correctLink = linkElement.getText().slice(start, end);
//    Logger.log("correctLink " + correctLink);

    // Format link
    linkElement.setLinkUrl(start, end, correctLink);
    // Find next
    link = body.findText(linkRegex, link);
  }
}

我希望它能帮助别人

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 获取文档中的所有链接(Get All Links in a Document)
    问题 给定Google文档/驱动器中的“常规文档”(例如,段落,列表,表格),其中包含分散在整个内容中的外部链接,您如何使用Google Apps Script编译存在的链接列表? 具体来说,我想通过在每个URL中搜索oldText并将其替换为每个URL中的newText ,而不是文本来更新文档中所有断开的链接。 我认为我不需要开发文档的替换文本部分,我需要扫描文档的每个元素吗? 我可以只使用editAsText并使用html正则表达式吗? 例子将不胜感激。 回答1 这只是最痛苦的事情! 代码是要点的一部分。 是的,我不会拼写。 getAllLinks 这是一个实用程序功能,可在文档中扫描所有LinkUrl,并将它们以数组形式返回。 /** * Get an array of all LinkUrls in the document. The function is * recursive, and if no element is provided, it will default to * the active document's Body element. * * @param {Element} element The document element to operate on. * . * @returns {Array} Array of objects, vis
  • HTML5基本结构及标签
    <!DOCTYPE html> <html> <head> <title>我的第一个HTML5页面</title> </head> <body> 你好,HTML5! </body> </html> HTML5 HTML5基本结构DOCTYPEbasemetastylelinkscriptboby注释字符实体图像文件HTML4.01转换为HTML5 HTML5保留的常用标签基础标签文本格式标签列表标签图像标签超链接标签表格标签框架标签容器标签 HTML5新增的常用标签文档结构标签格式标签新增API HTML5基本结构 DOCTYPE DOCTYPE是Document Type的简写,含义为文档类型。HTML5文档基础结构中第一行< !DOCTYPE html >就是HTML5的DOCTYPE声明。 <head>标签中可包含<title>和<meta>等标签,用于声明页面标题、字符集和关键词等。 base <!DOCTYPE HTML> <html> <head> <base href="http://localhost/images/" /> </head> <body> <img src="sunflower.jpg" /> </body> </html> <base>标签用于为页面上所有的链接设置默认URL地址或目标target。当HTML5文档中使用了相对路径时,浏览器会用
  • 查找Android应用的软件包名称,以使用Intent从网络启动Market应用(Find package name for Android apps to use Intent to launch Market app from web)
    问题 我正在创建一个移动网站,其中将包含一个页面,人们可以从该页面下载我们推荐的相关应用程序。 我已经找到了创建用于启动Market的链接的说明,但这是假设您是相关应用的开发人员,并且知道确切的软件包名称。 除了联系开发人员并询问之外,还有什么方法可以获取软件包名称? 而且,事实证明,这些说明实际上不适用于创建Web超链接。 它们仅为您提供一个URI,以在另一个Android应用程序的Java代码字符串中进行引用。 我们的站点位于Drupal,因此Java无法正常工作。 对于iPhone,我找到了从iTunes商店获取所需URL /链接样式的简单说明,因此我正在寻找类似信息。 回答1 这取决于您想从何处获取信息。 您有很多选择: 如果您有.apk的副本,则只是将其作为zip文件打开并查看AndroidManifest.xml文件的情况。 顶级<manifest>元素将具有package属性。 如果您已将应用程序安装在设备上并且可以使用adb进行连接,则可以启动adb shell并执行pm list packages -f ,其中显示了每个已安装apk的软件包名称。 如果您只想手动找到几个软件包名称,则可以在http://www.cyrket.com/m/android/上搜索该应用程序
  • 我可以在 Google Apps 电子表格的消息框中添加超链接吗 [重复](Can I add a hyperlink inside a message box of a Google Apps spreadsheet [duplicate])
    问题 这个问题在这里已经有了答案: 用于打开 URL 的 Google Apps 脚本(5 个回答) 9 个月前关闭。 有没有办法在 Google Apps 电子表格的消息框中添加超链接? 我有这个显示 msgbox 的代码。 // The code below will display a message box Browser.msgBox("Go to this site for help"); } 有没有办法在该消息框中插入超链接? 就像是: // The code below will display a message box Browser.msgBox("Go to this site for help" & <a href="www.google.com">Help</a>); } 回答1 这是显示指向 url 的链接的弹出窗口示例 function showurl() { var app = UiApp.createApplication().setHeight('60').setWidth('150'); app.setTitle("Anchor in a popup ;-)"); var panel = app.createPopupPanel() var link = app.createAnchor('This is your link', 'https
  • SOAP与REST(差异)(SOAP vs REST (differences))
    问题 我已经阅读了有关SOAP和REST作为Web服务通信协议之间的区别的文章,但是我认为REST相对于SOAP的最大优势在于: REST更动态,无需创建和更新UDDI(通用描述,发现和集成)。 REST不仅限于XML格式。 RESTful Web服务可以发送纯文本/ JSON / XML。 但是SOAP更加标准化(例如:安全性)。 那么,我在这些方面是正确的吗? 回答1 不幸的是,围绕REST存在许多误解和误解。 @cmd不仅反映您的问题和答案,而且反映与堆栈溢出主题相关的大多数问题和答案。 SOAP和REST无法直接进行比较,因为前者是一种协议(或至少是一种协议),而后者是一种体系结构样式。 这可能是引起混乱的原因之一,因为人们倾向于将REST称为不是SOAP的任何HTTP API。 稍作努力并尝试建立比较,SOAP和REST之间的主要区别在于客户端和服务器实现之间的耦合程度。 SOAP客户端的工作方式类似于自定义桌面应用程序,与服务器紧密耦合。 客户端和服务器之间存在严格的合同,如果任何一方更改任何内容,一切都会中断。 在进行任何更改后,您需要不断更新,但是更容易确定是否遵守合同。 REST客户端更像是浏览器。 这是一个通用客户端,知道如何使用协议和标准化方法,并且应用程序必须适合其中。 您不会通过创建其他方法来违反协议标准
  • 卷曲以返回 http 状态代码以及响应(Curl to return http status code along with the response)
    问题 我使用 curl 来获取 http 标头以查找 http 状态代码并返回响应。 我使用命令获取 http 标头 curl -I http://localhost 为了得到响应,我使用命令 curl http://localhost 一旦使用 -I 标志,我只会得到标题,而不再有响应。 有没有办法在一个命令中同时获取 http 响应和标头/http 状态代码? 回答1 我能够通过查看指定使用的 curl 文档来获得解决方案-用于将输出获取到标准输出的输出。 curl -o - http://localhost 要仅使用 http 返回码获得响应,我可以这样做 curl -o /dev/null -s -w "%{http_code}\n" http://localhost 回答2 详细模式会告诉你一切 curl -v http://localhost 回答3 我使用此命令打印状态代码,而没有任何其他输出。 此外,它只会执行 HEAD 请求并遵循重定向(分别为-I和-L )。 curl -o -I -L -s -w "%{http_code}" http://localhost 这使得在健康脚本中检查状态代码变得非常容易: sh -c '[ $(curl -o -I -L -s -w "%{http_code}" http://localhost) -eq 200 ]' 回答4
  • 用于编辑 Gmail 主题行的 google-apps-script(google-apps-script to edit gmail subject line)
    问题 这就是问题所在,你可以搜索并找到很多抱怨它的人: 假设您出售某物(例如经营一家在互联网上销售的小企业)并且您使用 PayPal 接受付款。 贝宝发送每一个付款通知,主题行“收到付款通知”完全相同。 因此,如果您收到 Bobby Sue 的付款,然后您收到 Billy Jo 的付款,gmail 会显示: Bobby Sue via PayPal(2) Notification of payment received 和/没有/比利乔。 比利是(2),但它埋在同一个“线程”中 如果您处理 Bobby Sue 的订单并将其存档,那么也会对 Billy Jo 的订单进行存档。 如果您不小心,您可能会忘记为该订单发货。 比利不喜欢那样。 我一直在努力寻找一种设置或一种方法来阻止 gmail 这样做,或者更改 PayPal 在其主题行中发送的内容。 似乎是一个不动的物体和不可抗拒的力量的例子。 *注意:是的,我知道 gmail 中有一个设置可以完全关闭此“对话视图”。 但该功能对于大多数电子邮件非常有价值。 我只想将这些贝宝电子邮件分开。 有任何想法吗? 我唯一的想法是 gmail 可以通过应用程序脚本访问,也许可以编写一个程序来查找电子邮件中的交易 ID,并在它到达时将其添加到主题上。 但我找不到任何编辑主题行的示例脚本......知道这是否可能吗? 回答1 Apps
  • 用HTML文本预填充gmail撰写屏幕(Prefilling gmail compose screen with HTML text)
    问题 我发现要打开Gmail撰写屏幕,您必须先登录并打开以下链接: https://mail.google.com/a/domain/?view=cm&fs=1&tf=1&source=mailto&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&cc=WHOEVER%40COMPANY.COM&bcc=WHOEVER%40COMPANY.COM&body=PREPOPULATEDBODYY 替换变量将填写撰写表单上的相应位置。 但是,如果我想输入多行文本或换行符,即使我对其进行urlencode,它也无法正常工作。 这里有什么想法吗? 回答1 检查您的UrlEncode方法是否确实将换行符转换为“%0a”。 这是两行电子邮件正文的示例: https://mail.google.com/mail/?view=cm&ui=2&tf=0&fs=1&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&body=LINE1%0aLINE2 回答2 Gmail支持HTML5的registerProtocolHandler()发出的内容。 例子: var compose = "https://mail.google.com/mail/?extsrc=mailto&url=" + encodeURIComponent("mailto
  • Python 网络爬虫实战:去哪儿网旅游攻略图文爬取保存为 Markdown电子书
    接上回,《Python 网络爬虫实战:爬取《去哪儿》网数千篇旅游攻略数据》。我们爬取到了数千篇的旅游攻略文章的数据。 但是事情还没有结束,对于大部分的人来讲,最希望得到的东西应该不是这种干巴巴的 Excel 数据,而是这种图文并茂的文章吧! 其实之前我们爬过很多类似的网站,比如 《人民日报新闻爬虫》,《知乎问题回答爬虫》,都是爬取大段的文章。不过区别在于,那些爬虫的关注点在于文字,主要用来做分词,语义情感等方面的分析,也就是说不是给人看的,是给程序看的,所以直接将图片,超链接,排版格式等东西舍弃,仅提取文字,使用记事本保存即可。而这篇爬虫不同,爬取旅游攻略文章,重点在于阅读体验,如果抛弃了图片,抛弃了排版,爬到的攻略文章也就失去了灵魂。BUT,用什么格式的文件可以保存图文,还可以尽可能保留原始排版呢?想来想去,我觉得 Markdown 或许是最佳选择。 0x00 分析网站相比于上一篇爬虫中各式各样的数据,这篇爬虫要爬的内容就简单很多了。以 https://travel.qunar.com/travelbook/note/6910266 这篇文章为例,使用 开发者工具(F12)来进行分析。可以看到,文章的正文部分是在一个 标签中的,其中每一个子 div 标签存放一个章节的内容。分析完毕,是不是确实很简单呢?如果是按照之前的做法,我可能直接一个 '.text' 或者 '.string'
  • 搜索引擎如何找到相关内容?(How do search engines find relevant content?)
    问题 谷歌在解析网络时如何找到相关内容? 例如,假设 Google 使用 PHP 原生 DOM 库来解析内容。 他们会用什么方法在网页上找到最相关的内容? 我的想法是它会搜索所有段落,按每个段落的长度排序,然后从可能的搜索字符串和查询参数中计算出每个段落的相关性百分比。 假设我们有这个 URL: http://domain.tld/posts/stackoverflow-dominates-the-world-wide-web.html 现在从那个 URL 中,我会计算出 HTML 文件名将是高度相关的,所以我会看到该字符串与页面中的所有段落相比有多接近! 一个很好的例子就是 Facebook 分享,当你分享一个页面时。 Facebook 迅速对链接进行机器人处理并带回图像、内容等。 我在想某种计算方法是最好的,根据周围的元素和元数据计算出相关性的百分比。 是否有任何关于内容解析最佳实​​践的书籍/信息,包括如何从站点获取最佳内容、任何可能被讨论的算法或任何深入的回复? 我想到的一些想法是: 查找所有段落并按纯文本长度排序以某种方式找到div容器的宽度和高度并按 (W+H) 排序 - @Benoit 检查元关键字、标题、描述并检查段落内的相关性查找所有图像标签并按最大和远离主段落的节点长度排序检查对象数据,例如视频并从最大的段落/内容 div 计算节点找出与前一页解析的相似之处
  • 带正文的HTML超链接中的iOS SMS方案(iOS SMS scheme in HTML hyperlink with body)
    问题 我们正在尝试在HTML页面中创建一个超链接,该超链接应打开预定义的SMS-当用户在我们的页面上点击此链接时,SMS应用程序应使用预定义的编号和正文打开。 我们能够成功设置号码,但是我们无法设置此短信的正文。 是否可以? 到目前为止,我们正在尝试的链接是: <a href="sms:123456789?body=sometext">sms link</a> 非常感谢您的帮助! 回答1 不,这是不可能的。 sms方案用于启动Messages应用程序。 此类型的URL的格式为“ sms:”,其中是一个可选参数,用于指定SMS消息的目标电话号码。 此参数可以包含数字0到9以及加号(+),连字符(-)和句点(。)。 URL字符串不得包含任何消息文本或其他信息。 参考:iPhoneURLScheme短信 回答2 对于iOS 8: <a href="sms:123456789&body=sometext">sms link</a> 我在删除电话号码1234的同时进行了自定义...因此用户可以输入他们选择的号码以共享我的应用程序的链接 回答3 目前,我正在处理以下情况: 适用于iOS 8(尚未测试iOS 7): <a href="sms:123456879&body=bodytext">Send sms</a> 适用于Android 4.x,不适用于5.x <a href="sms
  • JSON API响应格式是否有任何标准?(Is there any standard for JSON API response format?)
    问题 是否存在用于构造来自API的JSON响应的标准或最佳实践? 显然,每个应用程序的数据都是不同的,因此,我不必担心很多,而可以考虑使用“响应样板”。 我的意思是一个例子: 成功的请求: { "success": true, "payload": { /* Application-specific data would go here. */ } } 请求失败: { "success": false, "payload": { /* Application-specific data would go here. */ }, "error": { "code": 123, "message": "An error occurred!" } } 回答1 是的,已经出现了一些标准(尽管对标准的定义有一些自由): JSON API-JSON API还涵盖创建和更新资源,而不仅仅是响应。 JSend-简单,可能已经在做。 OData JSON协议-非常复杂。 HAL-与OData类似,但旨在成为HATEOAS。 还有JSON API描述格式: 昂首阔步 JSON模式(由swagger使用,但您可以单独使用) JSON中的WADL 拉姆 HAL是因为HATEOAS在理论上是自我描述。 回答2 Google JSON指南 成功响应返回数据 { "data": { "id": 1001,
  • AJAX和浏览器后退按钮(AJAX and the Browser Back Button)
    问题 我在www.darknovagames.com上运行了基于浏览器的游戏。 最近,我一直在努力使用CSS重新格式化该网站,试图让其所有页面都根据HTML标准进行验证。 我一直在想着要在页面左侧放置AJAX导航菜单的想法(而不是每次都将用户带到一个单独的页面,而是需要重新加载标题和导航栏,而这几乎是不会改变的),我知道如果这样做,我可能会破坏浏览器中的“前进/后退”按钮。 我的问题是,我应该继续使用AJAX网站,从而要求用户使用网站导航来玩游戏,还是应该离开网站目前的位置,并使用标准的超链接和东西进行导航? 我想问的原因是我在站点中构建了一个论坛系统,很多时候我想将发言链接到论坛中的特定主题。 我也乐于接受建议。 是否有一种标准的方法(最好是没有传统框架的方法)仅重新加载网站的正文区域,同时仍更改URL,以便用户可以添加书签以及前进/后退等? 那也有可能解决我的问题。 我只是在这里寻求最佳解决方案,而不是对特定问题的答案。 ^ _ ^ 谢谢 回答1 如果您要启用AJAX,则不要以使网站上每个重要页面都具有可访问URL的代价为代价。 这是人们可以使用的可导航站点的骨干。 当将所有功能都应用到AJAX调用和回调中时,基本上是在迫使用户进入一条单一的路径来访问他们想要的功能和内容,这完全与Web的工作方式背道而驰。 人们依靠地址栏和后退按钮。 如果您覆盖所有链接
  • PHP“ php:// input”与$ _POST(PHP “php://input” vs $_POST)
    问题 当与来自JQuery的Ajax请求进行交互时,我被指示使用方法php://input而不是$_POST 。 我不了解使用此方法与$_POST或$_GET全局方法的好处。 回答1 原因是php://input在请求的HTTP标头之后返回所有原始数据,而与内容类型无关。 PHP的超全局$_POST ,只应该总结的数据要么是 application/x-www-form-urlencoded (用于简单表单发布的标准内容类型)或 multipart/form-data (主要用于文件上传) 这是因为这些是用户代理必须支持的唯一内容类型。 因此,服务器和PHP传统上不希望接收任何其他内容类型(这并不意味着它们不能)。 因此,如果您只是简单地发布旧的HTML form ,则请求看起来像这样: POST /page.php HTTP/1.1 key1=value1&key2=value2&key3=value3 但是,如果您经常使用Ajax,那么这种可能性还包括使用类型(字符串,整数,布尔值)和结构(数组,对象)交换更复杂的数据,因此在大多数情况下,JSON是最佳选择。 但是带有JSON有效负载的请求看起来像这样: POST /page.php HTTP/1.1 {"key1":"value1","key2":"value2","key3":"value3"}
  • Excel超链接大量更新(Excel Hyperlink mass update)
    问题 我有一个包含数千行的电子表格。 每行包含一个带有路径的超链接。 该路径无效,但是可以通过将其第一部分替换为正确的值来轻松修复。 Example: current hyperlink: F:\Help\index.html Needed: P:\SystemHelp\index.html 问题在于标准的“查找/替换”无法“看到”超链接的内容。 是编写宏的唯一方法还是还有另一种方法? 回答1 除了宏之外,我不知道其他方法。 但是看起来有人已经写了一个来做。 Public Sub ReplaceHyperlinkURL(FindString As String, ReplaceString As String) Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If
  • 【HTTP协议】超详细的HTTP协议详解
    基本介绍 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 支持客户/服务器模式。 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 HTTP协议详解 — URL篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议
  • RESTful编程到底是什么?(What exactly is RESTful programming?)
    问题 RESTful编程到底是什么? 回答1 一种称为REST(代表性状态转移)的架构风格主张Web应用程序应使用最初设想的HTTP。 查找应使用GET请求。 PUT,POST和DELETE请求应分别用于突变,创建和删除。 REST支持者倾向于使用URL,例如 http://myserver.com/catalog/item/1729 但是REST体系结构不需要这些“漂亮的URL”。 带有参数的GET请求 http://myserver.com/catalog?item=1729 就像RESTful一样。 请记住,决不要将GET请求用于更新信息。 例如,用于将商品添加到购物车的GET请求 http://myserver.com/addToCart?cart=314159&item=1729 不合适。 GET请求应该是幂等的。 也就是说,两次发出请求应该与一次发出请求没有什么不同。 这就是使请求可缓存的原因。 “添加到购物车”请求不是幂等的-发出两次请求会将该商品的两个副本添加到购物车。 在这种情况下,POST请求显然是适当的。 因此,即使是RESTful Web应用程序也需要其POST请求共享。 这摘自David M. Geary撰写的出色的《 Core JavaServer Faces》一书。 回答2 REST是Web的基础架构原理。 关于Web的神奇之处在于,客户端(浏览器
  • 如何以跨平台方式打开带有主题和正文的默认邮件程序?(How do I open the default mail program with a Subject and Body in a cross-platform way?)
    问题 如何以跨平台方式打开带有主题和正文的默认邮件程序? 不幸的是,这是针对用Java编写的客户端应用程序,而不是网站。 我希望这可以跨平台的方式工作(这意味着Windows和Mac,对不起Linux)。 我很高兴在Windows中执行VBScript,在OS X中执行AppleScript。但是我不知道这些脚本应该包含什么。 我想执行用户的默认程序,而不是仅搜索Outlook或其他内容。 在OS X中,我尝试执行以下命令: open mailto:?subject=MySubject&body=TheBody 需要使用URL转义以将%20替换为空格。 已更新在Windows上,您必须玩各种游戏才能start正确运行。 这是正确的Java咒语: class Win32 extends OS { public void email(String subject, String body) throws Exception { String cmd = "cmd.exe /c start \"\" \"" + formatMailto(subject, body) + "\""; Runtime.getRuntime().exec(cmd); } } 回答1 在Java 1.6中,您有一种标准的方法来打开平台的默认邮件程序:Desktop.mail(URI)方法
  • 如何使用其中的 HYPERLINK 将 url 文本移出字段(How to get url text out of field with HYPERLINK in it)
    问题 我有一列带有超链接公式的列,例如: =HYPERLINK("http://example.com", "Link") 我想获得额外的列,其中只有第一列中的 url(作为文本)将出现,即在此示例中: http://example.com 是否有允许从 HYPERLINK 提取 url 的功能? 我也在考虑从第一列中获取公式文本并在最后一列中使用 SPLIT/SUBSTITUTE 进行剪切,但我不确定是否可以将一个字段代码放入另一个字段。 回答1 试试这个公式 A2=index(SPLIT(SUBSTITUTE(FORMULATEXT(A1),"=HYPERLINK(""",""),""","""),1,1) 例子 A1=HYPERLINK("http://example.com", "Link") 结果是 A2=http://example.com 回答2 您可以通过使用 Apps 脚本创建自定义函数来完成此操作。 试试这个: 打开您的 Google 表格。 在菜单栏中,打开工具 > 脚本编辑器... 在Code.gs 中,粘贴以下内容并保存: function EXTRACT_URL(input) { var range = SpreadsheetApp.getActiveSheet().getRange(input); var re = /^.+?\(\"(.+?)\"
  • 计算机网络 万维网WWW
    万维网概述万维网 WWW (World Wide Web) 并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所。万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。这种访问方式称为“链接”。万维网提供分布式服务超媒体与超文本万维网是分布式超媒体 (hypermedia) 系统,它是超文本 (hypertext) 系统的扩充。一个超文本由多个信息源链接成。利用一个链接可使用户找到另一个文档。这些文档可以位于世界上任何一个接在互联网上的超文本系统中。超文本是万维网的基础。超媒体与超文本的区别是文档内容不同。超文本文档仅包含文本信 息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声 音、动画,甚至活动视频图像。万维网的工作方式万维网以客户 - 服务器方式工作。浏览器就是在用户计算机上的万维网客户程序。万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。万维网必须解决的问题(1) 怎样标志分布在整个互联网上的万维网文档?使用统一资源定位符 URL (Uniform Resource Locator) 来标志万维网上的各种文档