Youtube API search auto-complete
Asked Answered
A

7

25

I'm using Youtube API, I'd like to have a search auto-complete feature, just like on YouTube, when you type into the search input box, it gives you search suggestions. I've read the docs, but still missing, Is this possible using the API?

Ac answered 30/6, 2012 at 15:34 Comment(0)
A
64

Ok I found this URL:

http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=Query

It isn't part of Youtube API, but still works, returns a JSON response.

Ac answered 2/7, 2012 at 16:24 Comment(5)
That's pretty dang cool... how did you find it, by looking at the network requests for the youtube search?Sheffy
we are not getting data in json , it is downoading in .txt file?Homer
how can we get suggest in json form , from this link .suggestqueries.google.com/complete/…Homer
This doesn't work with AJAX requests because the response lacks CORS headers :(Shoplifter
It's "The Google Way" :D Sure they have some reasons for that hack codepen.io/vyachkonovalov/pen/XRYpgB?editors=0012Rhodia
B
7

For json just add "client" parameter:

http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&client=firefox&q=Query

Barbiturate answered 24/11, 2015 at 21:57 Comment(2)
This is exactly what is needed, made an example based on this codepen.io/OfficialAntarctica/pen/oxQQPBSarto
is it possible to get data response direct in json?? its downloading .txt fileColloquium
A
4

Above all apis are old and give google search suggestion not youtube search suggestion

Use this:

https://clients1.google.com/complete/search?client=youtube&gs_ri=youtube&ds=yt&q=faded

Extract suggestions using following JS code:

//  data is response of above api
   const data = 'window.google.ac.h(["faded",[["faded",0,[433]],["faded alan walker lyrics",0,[433]],["faded remix",0,[433]],["faded 8d",0,[433]],["faded piano",0,[433]],["faded wheel free fire",0],["faded karaoke",0,[433]],["faded ringtone",0,[433]],["faded instrumental",0,[433]],["faded live",0,[433]],["faded piano tutorial",0,[433]],["faded whatsapp status",0,[433]],["faded dhol cover",0,[433]],["faded dance",0,[433]]],{"k":1,"q":"_sPyvXmmbfcsVtfP4sgjOdKQAvg"}])';

    const searchSuggestions = [];
    data.split('[').forEach((ele, index) => {
      if (!ele.split('"')[1] || index === 1) return;
        return searchSuggestions.push(ele.split('"')[1]);
    });
    console.log(searchSuggestions);
Aeolus answered 26/6, 2020 at 10:38 Comment(1)
Can localhost uses this api? I'm having the Origin https://localhost:8080 is not allowed by Access-Control-Allow-Origin. error.Venditti
Y
0

Check Out YouTube AutoComplete Keyword Scraper . Not really sure of the context the person asking the question wants YouTube auto complete solution for but I thought I would throw this out there.

Yusuk answered 28/3, 2017 at 9:29 Comment(0)
I
0

Also you can use JSON:

url: "https://suggestqueries.google.com/complete/search?client=youtube&ds=yt&q=" + i,
        dataType: "jsonp",
Ivyiwis answered 24/11, 2021 at 6:38 Comment(0)
G
0

The official one:

https://suggestqueries-clients6.youtube.com/complete/search?client=youtube-reduced&hl=en&gs_ri=youtube-reduced&ds=yt&cp=3&gs_id=100&q=Nectar&xhr=t&xssi=t&gl=us

You can choose country too.

P.S. I searched for Nectar in country US

Guenzi answered 24/3, 2022 at 13:28 Comment(0)
H
0

After making the fetch request

const res = await fetch(
    `https://clients1.google.com/complete/search?client=youtube&gs_ri=youtube&ds=yt&q=${searchTerm}`,
  );
const str = await res.text();

// const str = window.google.ac.h(["faded",[["faded",0,[433]],["faded alan walker lyrics",0,[433]],["faded remix",0,[433]],["faded 8d",0,[433]],["faded piano",0,[433]],["faded wheel free fire",0],["faded karaoke",0,[433]],["faded ringtone",0,[433]],["faded instrumental",0,[433]],["faded live",0,[433]],["faded piano tutorial",0,[433]],["faded whatsapp status",0,[433]],["faded dhol cover",0,[433]],["faded dance",0,[433]]],{"k":1,"q":"_sPyvXmmbfcsVtfP4sgjOdKQAvg"}])'

You can parse the response directly by first cutting the unnecessary pieces

const arr = JSON.parse(str.substring(str.indexOf("["), str.indexOf("])") + 1));

Here is the shape of the result

let suggestionsTuple: [string, number, number[]][] = [];

All we need is to filter out the strings

if (Array.isArray(arr) && Array.isArray(arr.at(1))) {
    suggestionsTuple = arr.at(1);
}

const suggestions = suggestionsTuple.flatMap((suggestion) => suggestion).filter((suggestion) => typeof suggestion === "string"); // ["faded" ,"faded alan walker lyrics", ...]
Hilversum answered 25/8, 2023 at 4:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.