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 Realtime integration method in our examples. If you would like to use the Push-Pull integration, refer to the Integration Methodssection.
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.