Данните трябва да бъдат изпратени в масив JSON. Всеки елемент трябва да съдържа следните полета.
Ограничение
Масивът JSON може да съдържа 100 елемента, така че можете да създадете 100 скрейпа на SERP с едно извикване.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Разрешения : Bearer {api_key}
Параметри
search_engine
Изисква се
string
Избор на търсачка :
Търсене в Google (стойност: google_search)
keyword
Изисква се
string
Ключови думи за търсене в търсачката
device
Изисква се
string
Избор на субстрат :
Компютър (стойност: настолен)
Mobile (стойност: mobile)
depth
Изисква се
integer
Дълбочина на страницата, извличаме SERP на Google с подреждане по страници. Този параметър трябва да е между 1 (приблизително 10 резултата) и 10 (приблизително 100 резултата).
location
Изисква се
string
Код за местоположение на търсачката
language
Изисква се
string
Език на търсачката
geolocation
string
Позволява ви да определите географското местоположение на даден SERP на Google. Например можете да посочите града, департамента или страната, разделени със запетая.
priority
integer
Използва се за приоритизиране на заявките ви, които се обработват в низходящ ред по приоритет. Стойност между 1 (нисък) и 10 (висок).
callback_url
string
Позволява ви да посочите URL адрес, на който ще ви изпратим резултатите за ключовата дума, след като тя бъде обработена.
Данните трябва да бъдат изпратени в масив JSON. Всеки елемент трябва да съдържа следните полета.
Ограничение
Масивът JSON може да съдържа 100 елемента, така че можете да създадете 100 скрейпа на SERP с едно извикване.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Разрешения : Bearer {api_key}
Параметри
search_engine
Изисква се
string
Избор на търсачка :
Google Maps (стойност: google_maps)
keyword
Изисква се
string
Ключови думи за търсене в търсачката
depth
Изисква се
integer
Дълбочина на страницата, извличаме SERP на Google с подреждане по страници. Този параметър трябва да е между 1 (приблизително 10 резултата) и 10 (приблизително 100 резултата).
location
Изисква се
string
Код за местоположение на търсачката
language
Изисква се
string
Език на търсачката
geolocation
string
Позволява ви да определите географското местоположение на даден SERP на Google. Например можете да посочите града, департамента или страната, разделени със запетая.
priority
integer
Използва се за приоритизиране на заявките ви, които се обработват в низходящ ред по приоритет. Стойност между 1 (нисък) и 10 (висок).
callback_url
string
Позволява ви да посочите URL адрес, на който ще ви изпратим резултатите за ключовата дума, след като тя бъде обработена.
Списък с идентификатори (ID) за завършени SERP, които все още не сте изтеглили.
Този метод ви позволява да получите идентификаторите на всички SERP, които вече са обработени, но все още не са извлечени. След това можете да извикате метода за извличане на SERP, като използвате тези идентификатори.
Можете да получите резултата от SERP директно на URL адрес, който ни предоставяте при създаването на заявка. Трябва само да изтеглите HMAC ключа, свързан с използвания API ключ.
Код
PHP
Python
Javascript
Ruby
Java
C#
GO
// 1) Read the raw body (JSON)
$raw = file_get_contents('php://input');
// Middleware to parse JSON and keep raw body for HMAC verification
app.use(express.json({
verify: (req, res, buf) => {
req.rawBody = buf.toString(); // Save raw body for signature check
}
}));
app.post("/callback", (req, res) => {
// 1) Read the raw body (JSON)
const raw = req.rawBody;
// Use timing-safe comparison to avoid timing attacks
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))) {
return res.status(401).type("text").send("Invalid signature");
}
// 4) Decode the JSON (Express already did it in req.body)
let data;
try {
data = req.body;
} catch (err) {
return res.status(400).type("text").send("Invalid JSON");
}
// 5) Process the data
// data contains what the client sent in the payload
// For example: data.id, data.results, etc.
// 6) Respond in JSON (optional, we log these responses for tracking purposes)
res.status(200).json({
status: "ok",
received_at: new Date().toISOString(),
echo: data.id || null
});
});
// 4) Decode the JSON
Map data;
try {
data = new com.fasterxml.jackson.databind.ObjectMapper().readValue(raw, Map.class);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.contentType(MediaType.TEXT_PLAIN)
.body("Invalid JSON");
}
// 5) Process the data
// data contains what the client sent in the payload
// For example: data.get("id"), data.get("results"), etc.
// 6) Respond in JSON (optional, we log these responses for tracking purposes)
Map response = new HashMap<>();
response.put("status", "ok");
response.put("received_at", Instant.now().toString());
response.put("echo", data.get("id"));
// Helper method: secure string comparison (to avoid timing attacks)
private boolean secureCompare(String a, String b) {
if (a == null || b == null || a.length() != b.length()) {
return false;
}
int result = 0;
for (int i = 0; i < a.length(); i++) {
result |= a.charAt(i) ^ b.charAt(i);
}
return result == 0;
}
// Helper method: convert bytes to hex string
private String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder(2 bytes.length);
for (byte b : bytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
}
}
PHP
Python
Javascript
Ruby
Java
C#
GO
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
const string SHARED_SECRET = "HMAC_KEY";
app.MapPost("/callback", async (HttpRequest request, HttpResponse response) =>
{
// 1) Read the raw body (JSON)
using var reader = new StreamReader(request.Body);
var raw = await reader.ReadToEndAsync();
// 2) Retrieve the headers
var signature = request.Headers["X-Signature"].FirstOrDefault() ?? "";
// 3) (Optional) Verify the HMAC signature
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(SHARED_SECRET));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(raw));
var expected = Convert.ToHexString(hash).ToLowerInvariant();
// 5) Process the data
// data contains what the client sent in the payload
// For example: data["id"], data["results"], etc.
// 6) Respond in JSON (optional, we log these responses for tracking purposes)
var jsonResponse = new
{
status = "ok",
received_at = DateTime.UtcNow.ToString("o"), // ISO 8601
echo = data != null && data.ContainsKey("id") ? data["id"] : null
};
Преглед на броя на SERP в зависимост от техния статус:
Завършено и резултатите са изтеглени от потребителя (статус=завършено, изтеглено=истина)
Завършено, но резултатите не са изтеглени от потребителя (статус=done, fetched=false)
В процес на обработка (статус=процес)
Изчакване (статус=изчакващ)