# Tendências: Explorar

O `google_trends_explore` fonte é projetada para recuperar resultados do Google Trends.

{% hint style="warning" %}
Devido a problemas contínuos, os dados raspados podem não ser 100% precisos em comparação com o uso direto no Google Trends via navegadores web. Use com cautela e esteja ciente de possíveis discrepâncias.
{% endhint %}

## Amostras de requisição

Neste exemplo, fazemos uma requisição para obter resultados de tendências para um termo de pesquisa `adidas` entre 1º de janeiro de 2021 e 2 de fevereiro de 2022, e definimos a categoria para "Arts & Entertainment" (id da categoria: `3`).

{% tabs %}
{% tab title="cURL" %}

```shell
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
        "source": "google_trends_explore",
        "query": "adidas",
        "context": [
            {"key": "date_from", "value": "2021-01-01"},
            {"key": "date_to", "value": "2022-02-02"},
            {"key": "category_id", "value": 3}
        ]
    }'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from pprint import pprint


# Estruturar payload.
payload = {
    'source': 'google_trends_explore',
    'query': 'adidas',
    'context': [
        {'key': 'date_from', 'value': '2021-01-01'},
        {'key': 'date_to', 'value': '2022-02-02'},
        {'key': 'category_id', 'value': 3},
    ],
}


# Obter resposta.
response = requests.request(
    'POST',
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# Imprimir resposta formatada no stdout.
pprint(response.json())
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const https = require("https");

const username = "USERNAME";
const password = "PASSWORD";
const body = {
    source: "google_trends_explore",
    query: "adidas",
    context: [
        { key: "date_from", value: "2021-01-01" },
        { key: "date_to", value: "2022-02-02" },
        { key: "category_id", value: 3 },
    ],
};

const options = {
    hostname: "realtime.oxylabs.io",
    path: "/v1/queries",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        Authorization:
            "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
    },
};

const request = https.request(options, (response) => {
    let data = "";

    response.on("data", (chunk) => {
        data += chunk;
    });

    response.on("end", () => {
        const responseData = JSON.parse(data);
        console.log(JSON.stringify(responseData, null, 2));
    });
});

request.on("error", (error) => {
    console.error("Error:", error);
});

request.write(JSON.stringify(body));
request.end();
```

{% endtab %}

{% tab title="HTTP" %}

```shell
https://realtime.oxylabs.io/v1/queries?source=google_trends_explore&query=adidas&context[0][key]=date_from&context[0][value]=2021-01-01&&context[1][key]=date_to&context[1][value]=2022-02-02&context[2][key]=category_id&context[0][value]=3&access_token=12345abcde
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$params = array(
    'source' => 'google_trends_explore',
    'query' => 'adidas',
    'context' => [
        ['key' => 'date_from', 'value' => '2021-01-01'],
        ['key' => 'date_to', 'value' => '2022-02-02'],
        ['key' => 'category_id', 'value' => 3]
    ]
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");


$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
echo $result;

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	const Username = "USERNAME"
	const Password = "PASSWORD"

	payload := map[string]interface{}{
		"source": "google_trends_explore",
		"query":  "adidas",
		"context": []map[string]interface{}{
			{"key": "date_from", "value": "2021-01-01"},
			{"key": "date_to", "value": "2022-02-02"},
			{"key": "category_id", "value": 3},
		},
	}

	jsonValue, _ := json.Marshal(payload)

	client := &http.Client{}
	request, _ := http.NewRequest("POST",
		"https://realtime.oxylabs.io/v1/queries",
		bytes.NewBuffer(jsonValue),
	)

	request.SetBasicAuth(Username, Password)
	response, _ := client.Do(request)

	responseText, _ := ioutil.ReadAll(response.Body)
	fmt.Println(string(responseText))
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace OxyApi
{
    class Program
    {
        static async Task Main()
        {
            const string Username = "USERNAME";
            const string Password = "PASSWORD";

            var parameters = new {
                source = "google_trends_explore",
                query = "adidas",
                context = new dynamic [] {
                    new { key = "date_from", value = "2021-01-01" },
                    new { key = "date_to", value = "2022-02-02" },
                    new { key = "category_id", value = 3 }
                }
            };

            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(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
            requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);

            var response = await client.SendAsync(requestMessage);
            var contents = await response.Content.ReadAsStringAsync();

            Console.WriteLine(contents);
        }
    }
}
```

{% endtab %}

{% tab title="Java" %}

```java
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() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("source", "google_trends_explore");
        jsonObject.put("query", "adidas");
        jsonObject.put("context", new JSONArray()
                .put(new JSONObject().put("key", "date_from").put("value", "2021-01-01"))
                .put(new JSONObject().put("key", "date_to").put("value", "2022-02-02"))
                .put(new JSONObject().put("key", "category_id").put("value", 3))
        );

        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();
    }
}
```

{% endtab %}

{% tab title="JSON" %}

```json
{
    "source": "google_trends_explore",
    "query": "adidas",
    "context": [
        {"key": "date_from", "value": "2021-01-01"},
        {"key": "date_to", "value": "2022-02-02"},
        {"key": "category_id", "value": 3}
    ]
}
```

{% endtab %}
{% endtabs %}

Usamos o método de integração síncrono [**Realtime**](https://developers.oxylabs.io/documentation/pt-br/solucoes-de-scraping/web-scraper-api/integration-methods/realtime) em nossos exemplos. Se você quiser usar [**Proxy Endpoint**](https://developers.oxylabs.io/documentation/pt-br/solucoes-de-scraping/web-scraper-api/integration-methods/proxy-endpoint) ou integração assíncrona [**Push-Pull**](https://developers.oxylabs.io/documentation/pt-br/solucoes-de-scraping/web-scraper-api/integration-methods/push-pull) consulte os [**métodos de integração**](https://developers.oxylabs.io/documentation/pt-br/solucoes-de-scraping/web-scraper-api/integration-methods) na seção.

## Valores dos parâmetros de requisição

### Genérico

Configuração básica e opções de personalização para raspar resultados do Google Trends.

<table><thead><tr><th width="222">Parâmetro</th><th width="350.3333333333333">Descrição</th><th>Valor padrão</th></tr></thead><tbody><tr><td><mark style="background-color:green;"><strong>source</strong></mark></td><td>Define o scraper.</td><td><code>google_trends_explore</code></td></tr><tr><td><mark style="background-color:green;"><strong>query</strong></mark></td><td>A palavra-chave ou frase a ser pesquisada.</td><td>-</td></tr><tr><td><code>callback_url</code></td><td>URL do seu endpoint de callback. <a href="../../../integration-methods/push-pull#callback"><strong>Mais informações</strong></a>.</td><td>-</td></tr><tr><td><code>user_agent_type</code></td><td>Tipo de dispositivo e navegador. A lista completa pode ser encontrada <a href="../../features/http-context-and-job-management/user-agent-type"><strong>aqui</strong></a>.</td><td><code>desktop</code></td></tr><tr><td><code>geo_location</code></td><td>A localização geográfica para a qual o resultado deve ser adaptado. Com o Google Trends: Explore, aceitamos códigos de país ISO de 2 letras como <code>geo_location</code> valores de parâmetro.</td><td>-</td></tr></tbody></table>

&#x20;   \- parâmetro obrigatório

### Filtragem

Opções avançadas para adaptar e refinar o contexto da busca.

<table><thead><tr><th width="222">Parâmetro</th><th width="350.3333333333333">Descrição</th><th>Valor padrão</th></tr></thead><tbody><tr><td><p><code>context</code>:</p><p><code>search_type</code></p></td><td>Permite definir o tipo de busca (uma das opções na interface do Google Trends). Valores possíveis: <code>web_search</code>, <code>image_search</code>, <code>google_shopping</code>, <code>youtube_search</code>.</td><td><code>web_search</code></td></tr><tr><td><p><code>context</code>:</p><p><code>date_from</code></p></td><td>O limite inferior de data. Formato: <code>YYYY-MM-DD</code>. Data mais antiga possível: <code>2004-01-01</code>.</td><td>-</td></tr><tr><td><p><code>context</code>:</p><p><code>date_to</code></p></td><td>O limite superior de data. Formato: <code>YYYY-MM-DD</code>. Data mais antiga possível: <code>2004-01-01</code>.</td><td>-</td></tr><tr><td><p><code>context</code>:</p><p><code>category_id</code></p></td><td>ID da categoria. Consulte por favor <a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiwDdoZGfMbUe5cRL2417%2Fuploads%2Fp5oVF3fBlQV8OzBmJ3BO%2FTrends-Google-categories.json?alt=media&#x26;token=141cdee3-cb9f-43c8-99cc-befa8b6ca8ec"><strong>este arquivo</strong></a> na história para uma lista de valores válidos.</td><td>-</td></tr></tbody></table>

### Parâmetros de contexto

Todos os parâmetros de contexto devem ser adicionados ao `context` array como objetos com `key` e `value` pares, por exemplo:

```json
...
"context": [
    {
        "key": "filter",
        "value": "0"
    }
]
...
```

{% hint style="info" %}
**NOTA**: Este serviço sempre entrega dados estruturados - portanto não há necessidade de utilizar o `parse` parâmetro com esta fonte.
{% endhint %}

## Exemplo de saída

```json
{
    "results": [
        {
            "content":"{\"interest_over_time\": [{\"keyword\": \"adidas\", \"items\": [{\"time\": \"Jan 3\ \–\ 9, 2021\", \"value\": 75}, {\"time\": \"Jan 10\ \–\ 16, 2021\", \"value\": 79}...{\"query\": \"adidas zx\", \"value\": 10, \"formatted_value\": \"10\", \"link\": \"/trends/explore?q=adidas+zx&date=2021-01-01+2022-02-02\"}]}]}",
            "created_at": "2024-02-13 11:33:21",
            "updated_at": "2024-02-13 11:33:27",
            "page": 1,
            "url": "https://trends.google.com/trends/api/explore?hl=en-US&tz=0&req=%7B%22comparisonItem%22%3A+%5B%7B%22keyword%22%3A+%22adidas%22%2C+%22geo%22%3A+%22%22%2C+%22time%22%3A+%222021-01-01+2022-02-02%22%7D%5D%2C+%22category%22%3A+0%2C+%22property%22%3A+%22%22%7D",
            "job_id": "7163133042662350849",
            "status_code": 200
        }
    ]
}
```
