Údaje sa musia odoslať v poli JSON. Každý prvok musí obsahovať tieto polia.
Limit
Pole JSON môže obsahovať 100 prvkov, takže jedným volaním môžete vytvoriť 100 prehľadov SERP.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Povolenia : Bearer {api_key}
Parametre
search_engine
Požadované
string
Výber vyhľadávača :
Vyhľadávanie Google (hodnota: google_search)
keyword
Požadované
string
Kľúčové slová na vyhľadávanie vo vyhľadávači
device
Požadované
string
Výber substrátu :
Počítač (hodnota: stolný)
Mobilný telefón (hodnota: mobilný telefón)
depth
Požadované
integer
Hĺbka stránky, načítame SERPy Google so stránkovaním. Tento parameter musí byť v rozsahu od 1 (približne 10 výsledkov) do 10 (približne 100 výsledkov).
location
Požadované
string
Kód umiestnenia vyhľadávača
language
Požadované
string
Jazyk vyhľadávača
geolocation
string
Umožňuje geolokalizovať SERP Google. Môžete napríklad uviesť mesto, departement alebo krajinu oddelené čiarkou.
priority
integer
Slúži na určenie priority vašich požiadaviek, ktoré sa spracúvajú v zostupnom poradí podľa priority. Hodnota od 1 (nízka) do 10 (vysoká).
callback_url
string
Umožňuje zadať adresu URL, na ktorú vám po spracovaní kľúčového slova pošleme výsledky.
Údaje sa musia odoslať v poli JSON. Každý prvok musí obsahovať tieto polia.
Limit
Pole JSON môže obsahovať 100 prvkov, takže jedným volaním môžete vytvoriť 100 prehľadov SERP.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Povolenia : Bearer {api_key}
Parametre
search_engine
Požadované
string
Výber vyhľadávača :
Mapy Google (hodnota: google_maps)
keyword
Požadované
string
Kľúčové slová na vyhľadávanie vo vyhľadávači
depth
Požadované
integer
Hĺbka stránky, načítame SERPy Google so stránkovaním. Tento parameter musí byť v rozsahu od 1 (približne 10 výsledkov) do 10 (približne 100 výsledkov).
location
Požadované
string
Kód umiestnenia vyhľadávača
language
Požadované
string
Jazyk vyhľadávača
geolocation
string
Umožňuje geolokalizovať SERP Google. Môžete napríklad uviesť mesto, departement alebo krajinu oddelené čiarkou.
priority
integer
Slúži na určenie priority vašich požiadaviek, ktoré sa spracúvajú v zostupnom poradí podľa priority. Hodnota od 1 (nízka) do 10 (vysoká).
callback_url
string
Umožňuje zadať adresu URL, na ktorú vám po spracovaní kľúčového slova pošleme výsledky.
Zoznam identifikátorov (ID) pre dokončené SERPy, ktoré ste ešte nevyzdvihli.
Táto metóda umožňuje získať ID všetkých SERP, ktoré už boli spracované, ale ešte neboli načítané. Pomocou týchto ID potom môžete vyvolať metódu načítania SERP.
// 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
};
Zobrazenie počtu stránok SERP podľa ich stavu:
Dokončené a výsledky načítané používateľom (status=done, fetched=true)
Ukončené a výsledky neboli načítané používateľom (status=done, fetched=false)
V procese (status=processing)
Čakanie (status=pending)