如何修复编码返回的 Youtube API 结果标题
Posted
技术标签:
【中文标题】如何修复编码返回的 Youtube API 结果标题【英文标题】:How to fix Youtube API results title that are returned encoded 【发布时间】:2019-08-18 12:19:24 【问题描述】:我正在使用youtube-search 1.1.4 查找视频。问题是我得到的结果标题用&
或'
编码,而不仅仅是&
和'
等等。
我从下面的示例代码中得到的一个结果示例(同样,故意在字符之间添加空格):
title: "Post Malone - "Wow." (Official Music Video)"
尝试通过 decodeURI 、decodeURIComponent 或 unescape 解决这个问题,但没有帮助。 直接调用youtube api 并得到相同的结果。 我错过了什么?
var youtubeSearch = require("youtube-search")
var opts =
maxResults : 15,
key : 'MY_API_KEY',
part : 'snippet',
type : 'video',
;
youtubeSearch('post malone', opts, function(err, results)
if(err) return console.log(err);
console.dir(results);
);
【问题讨论】:
如果您不介意使用库,请快速搜索找到我He.js 我自己已经看到这种行为两个多星期了。我的理解是这个问题其实是 API 的一个bug。也许您应该向issuetracker.google.com 提交错误报告。 搜索了谷歌问题跟踪器,发现:issuetracker.google.com/u/1/issues/128673539 @ramidulman 这不是同一个问题。如果字符串本身包含此字符,则 JSON 字符串必须使用反斜杠转义双引号字符。例如"""
无效,而"\""
有效。链接的问题与 html 编码无关。
@3limin4t0r:抱歉,您错了:rami dulman 确实将他的问题与 Google 的问题 #128673539 正确关联。请参阅我的评论issuetracker.google.com/issues/128673539#comment8。
【参考方案1】:
你可以使用 DOM Parser
var parser = new DOMParser;
let finalResult = parser.parseFromString(results, "text/html")
console.log(finalResult.body.innerHtml); // will turn & to &
【讨论】:
这可行,但我想知道这是否是正确的解决方案,我是否需要使用整个 DOMParser 来解码我的 React 组件中的 Youtube 视频标题? 似乎@ErikAGriffin 提到了一个小得多的替代库 - unescape。 github.com/jonschlinkert/unescape 编辑:发现了一个由已知的 sindresorhus 更新的软件包,3 个月前与 unescape 2 年前更新。 npmjs.com/package/escape-goat【参考方案2】:在 google 的问题跟踪器上找到相关票证后: issuetracker.google.com/u/1/issues/128673539 并得到谷歌的回应,这是预期的行为,他们不会修复它,我只是使用用户 3limin4t0r 建议并使用 he.js 库解码返回值标题,这是解决这个问题的空闲方式但我无意等待谷歌做出决定......
所以,我的解决方案是这样的:
var youtubeSearch = require("youtube-search")
let he = require('he');
var opts =
maxResults : 15,
key : 'MY_API_KEY',
part : 'snippet',
type : 'video',
;
youtubeSearch('post malone', opts, function(err, results)
if(err) return console.log(err);
results = results.map(item =>
item.snippet.title = he.decode(item.snippet.title);
return item;
);
console.dir(results);
);
【讨论】:
如果您只需要对 html 实体进行转义,那么这个库要小得多:unescape以上是关于如何修复编码返回的 Youtube API 结果标题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 从 youtube v3 api 修复 json?
如何确保 YouTube API 仅返回可在 iPhone 上流式传输的视频?
使用 Youtube API 在网络服务器上显示视频时如何修复播放 ID 错误?