【发布时间】:2019-01-04 19:29:55
【问题描述】:
我有一个 google sheet 脚本,可以获取 youtube 的视频时长。问题是时间数据采用 ISO 8601 格式。
例如:
PT3M23S
我现在使用的公式很好地将其转换为更易读的格式。
=iferror(REGEXREPLACE(getYoutubeTime(B20),"(PT)(\d+)M(\d+)S","$2:$3"))
它将上述内容转换为更易读的格式 3:23
现在手头的问题是,如果视频的持续时间正好是 3 分钟,或者视频短于 1 分钟,regexreplace 不会重新格式化它。
而是改为
PT4M OR PT53S
有没有办法编辑公式以解决可能出现的每个变体?
它将 PT4M 格式化为 4:00 或将 PT53S 格式化为 0:53
最后,如果持续时间中的秒数介于 1 到 9 之间,API 将返回一个单位数的秒数值。这意味着上面的公式看起来是错误的。例如,PT1M1S 应该是 1:01 时被格式化为 1:1
如果公式可以考虑前 9 秒并添加 0 以使其更具可读性,那就太好了。
感谢您阅读本文,如果有人能帮助我,我将不胜感激。
以防万一在脚本本身中更容易做到这一点,这里是检索视频持续时间的自定义脚本。
function getYoutubeTime(videoId){
var url = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=" + videoId;
url = url + "&key=";
var videoListResponse = UrlFetchApp.fetch(url);
var json = JSON.parse(videoListResponse.getContentText());
return json["items"][0]["contentDetails"]["duration"];
}
【问题讨论】:
-
@pnuts 显示的格式是 ISO 8601 格式的持续时间,而不是日期/时间 - en.wikipedia.org/wiki/ISO_8601#Durations
标签: regex google-apps-script google-sheets iso8601 re2