2017-02-15 2 views
1

Хорошо, поэтому я делаю бот в Discord для своего сервера, и что-то, что я хотел реализовать, это команда youtube.
Я искал повсюду и смотреть в API Youtube и все, что я могу найти их поиск, что кажется браузеромВернуть URL-адрес видео YouTube из поиска по ключевым словам с помощью Javascript

Я использую nodejs, чтобы запустить его с моим ноутбуком, и мои пробеги бот off of discord.js
У меня есть аналогичная команда, которая делает MAL и поиск в Urban Dictionary, но я ничего не нашел и не знаю, как сделать то же самое с youtube

Раньше у меня была команда для python bot, который смог это сделать, и я видел, как другие боссы Discord тоже могли это сделать, поэтому я знаю, что это возможно.

В основном, я говорю, мне нужно t о быть в состоянии найти и вернуть YouTube Video URL (первый результат поиска) из строки поисковых терминов, так что использование будет выглядеть

>>youtube Tunak Tunak Tun 

вернуть бы https://www.youtube.com/watch?v=vTIIMJ9tUc8, который является первым результатом поиска для этого ключевое слово (s)

EDIT:
Я нашел команду питона, который будет делать это, но близко навыков, ни уверенности, чтобы попытаться перевести это на 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 (Аполо gies для длины): Хорошо! Я нашел кое-что, что мне стало намного ближе! 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); 
    }); 
} 

, когда я вхожу >>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://i.imgur.com/Vorpn0f.png

Так что проблема теперь у меня есть ссылка в моей досягаемости, но я не могу заставить его вернуться JUST ссылки, и я не имею ни малейшего представления, как вытащить его из этого беспорядка.

+0

Попробуйте console.log (results.link) – jonofan

+0

@jonofan undefined – Paraxo

ответ

1

Похоже, ваши результаты объект является JSON строка. Это по существу означает, что это строковое представление объекта javascript. Вы можете проанализировать это в объекте, используя JSON.parse().

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

EDIT

Не удалось заметить, что ваш результат на самом деле массив. Вам просто нужно получить к нему доступ вот так: console.log(results[0].link). Не нужно JSON.parse()

+0

В итоге я получаю getpting http://pastebin.com/yUr2Jy3. Я даже не знаю, что он сейчас сжимает. Вот как и где я ввел ваш фрагмент http://pastebin.com/qBiRhWXj – Paraxo

+0

@Paraxo первая ссылка pastebin нарушена, поэтому вы не можете увидеть свою ошибку, только ваш код. – jonofan

+0

@Paraxo обновил этот ответ, на самом деле вам не нужно разбирать его. Просто используйте его как массив. – jonofan

0

Хорошо, вот еще один подход, который работает для меня, используя API-интерфейс google javascript. Еще раз, сниппет SO не работает, поэтому I'll link you to the fiddle.

Этот метод требует, чтобы вы setup a google API key, то enable youtube API access.

Я удалил свой Google API ключ от скрипку, так что вам необходимо установить это выше. Я могу сделать PM, если вы хотите сначала проверить.

var apiKey = null //put your API key here 
 

 
function search() { 
 
\t 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) { 
 
    \t var searchResult = response.result; 
 
    $('#search-results').append(JSON.stringify(searchResult, null, 4)) 
 
    \t 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() { 
 
    \t $('#first-video-title').text("") 
 
    if (!apiKey) { 
 
     $('#first-video-title').text("You need to set an apiKey!") 
 
     return; 
 
    } 
 
    \t 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>

+0

Для тех, кто сталкивается с этим вопросом и нуждается в чем-то в браузере, это действительно сработало достаточно хорошо. – Paraxo

Смежные вопросы