在Google网站上自行使用Google API(例如在youtube.com上)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Google网站上自行使用Google API(例如在youtube.com上)相关的知识,希望对你有一定的参考价值。
我想做什么?我正在尝试创建一个小的javascript片段,它将在我的浏览器上运行在youtube的订阅页面(https://www.youtube.com/feed/subscriptions)上,并允许批量添加我没有看过的视频到我的“稍后观看”播放列表中,这样我就可以在块中观看它们。或者稍后在我的智能电视上。
我该怎么做?我正在尝试使用Google Youtube Data API并通过调用“insert”方法修改“Watch Later”播放列表。
我得到的问题是什么?为了从上面做所有事情之一是将google api脚本加载到页面上。这就是我看到问题的地方。当我在单独托管的html页面(或仅在jsfiddle沙箱中)加载该脚本(https://apis.google.com/js/api.js)时,一切正常:
<script>
function handleClientLoad() {
// Load the API client and auth2 library
gapi.load('client:auth2', initClient);
}
function initClient() {
// do nothing for now
}
</script>
<script async defer src="https://apis.google.com/js/api.js" onload="handleClientLoad()"></script>
但是,当我尝试使用tampermonkey在我的用户脚本中执行相同操作时,我收到错误。
function loadScript(url, callback)
{
console.log('load script: ' + url);
// Adding the script tag to the body
var body = document.getElementsByTagName('body')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.async = true;
script.defer = true;
// Then bind the event to the callback function.
script.onreadystatechange = function() {
console.log('in readyStateChange. readyState: ' + this.readyState);
callback();
};
script.onload = function() {
console.log('in onload');
this.onload = function() {};
callback();
};
// Fire the loading
body.appendChild(script);
}
function initGAPI() {
console.log('initGAPI');
gapi.load('client:auth2', initClient);
}
function initClient() {
// do nothing for now
}
loadScript('https://apis.google.com/js/api.js', initGAPI);
当我导航到https://www.youtube.com/feed/subscriptions时,我可以看到我的用户脚本被成功触发,但是当涉及gapi.load()
方法时,我收到此错误:
未捕获的TypeError:gapi.loaded_0不是cb = gapi.loaded_0:1的函数
在加载我自己的gapi实例之前,我尝试检查youtube页面上的可用内容,并意识到已存在gapi对象,并且它只有一个方法:load()。当我尝试在该现有对象上调用该方法时(不尝试加载我自己的gapi脚本实例),它:
gapi.load('client:auth2', function() {console.log('gapi loaded');})
我得到错误:
在desktop_polymer.js的某处获取https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.HtLvrA_npCQ.O/m=client/exm=oauth2/rt=j/sv=1/d=1/ed=1/am=AAE/rs=AHpOoo8wHQU_A1WtgGgcOpQEfGjHuD8e-g/cb=gapi.loaded_1 net :: ERR_ABORTED(第2661行)
我看到有不同的回调参与(gapi.loaded_0和gapi.loaded_0)。但是,我无法做任何事情。
我开始认为在google自己的网站上我不能真正使用Google API(就像我的情况一样youtube)。这是正确的假设吗?
也许现有的解决方案实现了我的目标(将未观看的视频批量添加到“稍后观看”播放列表中) - 会感激任何指针:)
原来这只是我懒惰的眼睛。我错过了我加载https://apis.google.com/js/api.js两次的事实。一次通过@require外部依赖 - tampermonkey脚本的功能,另一次 - 通过动态地将相同的脚本添加到页面,按照我开始使用Google API进行操作的说明。
只是通过@require加载并不真正起作用,因为它不会触发正确实例化所有内容所必需的回调。所以我不得不删除该指令,只依赖于动态地向页面添加脚本。在我这样做之后 - 一切都开始奏效了。所以,总而言之,我发布的代码实际上是有用的,问题仅在于我如何在tampermonkey usercript中使用它:)
以上是关于在Google网站上自行使用Google API(例如在youtube.com上)的主要内容,如果未能解决你的问题,请参考以下文章
Google API不会在测试服务器上授权网站,而是在localhost上工作
尽管有良好的API密钥,Google地图仍无法在我的网站上运行[关闭]
Google Maps API 错误:RefererNotAllowedMapError [重复]