You can search YouTube for videos, channels, playlists or movies by providing a search query to the youtube_search or youtube_search_max source.
Theyoutube_search source allows retrieving up to 20 search results, while the youtube_search_max source can return up to 700 results in a single response.
The following examples demonstrate how to utilize youtube_search source to retrieve Youtube videos based on a search query.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "youtube_search",
"query": "how to make a website"
}'
import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'youtube_search',
'query': 'how to make a website'
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('user', 'pass1'),
json=payload,
)
# Print the JSON response with the result.
pprint(response.json())
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
// Define the payload with the new youtube_metadata query.
payload := map[string]interface{}{
"source": "youtube_search",
"query": "how to make a website
}
jsonValue, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshalling JSON:", err)
return
}
client := &http.Client{}
request, err := http.NewRequest("POST", "https://realtime.oxylabs.io/v1/queries", bytes.NewBuffer(jsonValue))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
request.SetBasicAuth(Username, Password)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer response.Body.Close()
responseText, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(responseText))
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new
{
source = "youtube_search",
query = "how to make a website",
context = new[]
{
new { key = "language_code", value = "en" },
new { key = "transcript_origin", value = "uploader_provided" }
}
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(Encoding.UTF8.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
try
{
var response = await client.SendAsync(requestMessage);
response.EnsureSuccessStatusCode();
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
catch (HttpRequestException e)
{
Console.WriteLine($"Request error: {e.Message}");
}
}
}
}
package org.example;
import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
// Construct JSON payload for youtube_metadata request
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "youtube_search");
jsonObject.put("query", "how to make a website");
JSONArray contextArray = new JSONArray();
contextArray.put(new JSONObject().put("key", "language_code").put("value", "en"));
contextArray.put(new JSONObject().put("key", "transcript_origin").put("value", "uploader_provided"));
jsonObject.put("context", contextArray);
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}
{
"source": "youtube_search",
"query": "how to make a website"
}
We use the synchronous integration method in our examples. If you would like to use the integration, refer to the section.
Query parameters
Parameter
Description
Default Value
Type
source
Sets the scraper.
youtube_search or youtube_search_max
String
query
Search term.
-
String
- required parameter
Filters
You can customize your search by using all the filters available via Youtube GUI.
Filters query parameters
Parameter
Description
Default Value
Type
upload_date
Filters videos by when they were uploaded. Available values are: today, last_hour, this_week, this_month, this_year.
-
String
type
Returns results by content type. Available values are: video, channel, playlist, movie.
-
String
duration
Content duration in minutes. Available values are
>4, <20, 4-20 minutes.
-
String
sort_by
Determines how search results are ordered. Available values are rating, relevance, view_count,upload_date.
relevance
String
360
Returns 360-degree videos in search results.
-
Boolean
3d
Returns 3D videos in search results.
-
Boolean
4k
Returns 4K resolution videos in search results.
-
Boolean
creative_commons
Returns only videos with Creative Commons licenses.
-
Boolean
hd
Returns high-definition videos in search results.
-
Boolean
hdr
Returns HDR (High Dynamic Range) videos in search results.