趋势:探索
按关键词、日期范围和类别提取 Google Trends 数据。API 支持多种搜索类型和过滤。
该 google_trends_explore 源用于检索 Google 趋势结果。
由于持续存在的问题,抓取的数据可能与通过网页浏览器直接在 Google Trends 上查看的结果不完全一致。请谨慎使用并注意可能存在的差异。
请求示例
在此示例中,我们发出请求以获取搜索词的趋势结果 adidas 在 2021 年 1 月 1 日至 2022 年 2 月 2 日之间,并将类别设置为“艺术与娱乐”(类别 id: 3).
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}
]
}'import requests
from pprint import pprint
# 构建负载(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},
],
}
# 获取响应。
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# 将美化后的响应打印到标准输出。
pprint(response.json())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();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<?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);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))
}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);
}
}
}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();
}
}{
"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}
]
}在我们的示例中,我们使用同步的 Realtime 集成方法。如果您想使用 Proxy Endpoint 或异步的 Push-Pull 集成,请参阅 集成方法 部分。
请求参数值
通用
用于抓取 Google 趋势结果的基本设置和自定义选项。
- 必填参数
过滤
用于定制和精细化搜索上下文的高级选项。
参数
说明
默认值
context:
search_type
允许您设置搜索类型(Google Trends GUI 上的选项之一)。可能的值: web_search, image_search, google_shopping, youtube_search.
web_search
context:
date_from
较低的日期界限。格式: YYYY-MM-DD。 最早可用日期: 2004-01-01.
-
context:
date_to
较高的日期界限。格式: YYYY-MM-DD。 最早可用日期: 2004-01-01.
-
上下文参数
所有上下文参数应作为对象添加到 context 数组中,包含 key 和 value 键值对,例如:
...
"context": [
{
"key": "filter",
"value": "0"
}
]
...输出示例
{
"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
}
]
}最后更新于
这有帮助吗?

