Datele trebuie să fie trimise într-un array JSON. Fiecare element trebuie să conțină următoarele câmpuri.
Limite
Matricea JSON poate conține 100 de elemente, astfel încât puteți crea 100 de răzuiri SERPs cu un singur apel.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Autorizații : Bearer {api_key}
Parametrii
search_engine
Necesar
string
Alegerea motorului de căutare :
Căutare Google (valoare: google_search)
keyword
Necesar
string
Cuvinte-cheie pentru căutarea pe motorul de căutare
device
Necesar
string
Alegerea substratului :
Computer (valoare: desktop)
Mobil (valoare: mobil)
depth
Necesar
integer
Adâncimea paginii, recuperăm SERP-urile Google cu paginare. Acest parametru trebuie să fie între 1 (aproximativ 10 rezultate) și 10 (aproximativ 100 de rezultate).
location
Necesar
string
Codul locației motorului de căutare
language
Necesar
string
Limba motorului de căutare
geolocation
string
Vă permite să geolocați un SERP Google. De exemplu, puteți indica orașul, departamentul sau țara, separate prin virgulă.
priority
integer
Utilizat pentru prioritizarea cererilor dumneavoastră, care sunt procesate în ordinea descrescătoare a priorității. Valoare între 1 (scăzută) și 10 (ridicată).
callback_url
string
Vă permite să specificați un URL la care vă vom trimite rezultatele pentru cuvântul cheie după ce acesta a fost procesat.
Datele trebuie să fie trimise într-un array JSON. Fiecare element trebuie să conțină următoarele câmpuri.
Limite
Matricea JSON poate conține 100 de elemente, astfel încât puteți crea 100 de răzuiri SERPs cu un singur apel.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Autorizații : Bearer {api_key}
Parametrii
search_engine
Necesar
string
Alegerea motorului de căutare :
Google Maps (valoare: google_maps)
keyword
Necesar
string
Cuvinte-cheie pentru căutarea pe motorul de căutare
depth
Necesar
integer
Adâncimea paginii, recuperăm SERP-urile Google cu paginare. Acest parametru trebuie să fie între 1 (aproximativ 10 rezultate) și 10 (aproximativ 100 de rezultate).
location
Necesar
string
Codul locației motorului de căutare
language
Necesar
string
Limba motorului de căutare
geolocation
string
Vă permite să geolocați un SERP Google. De exemplu, puteți indica orașul, departamentul sau țara, separate prin virgulă.
priority
integer
Utilizat pentru prioritizarea cererilor dumneavoastră, care sunt procesate în ordinea descrescătoare a priorității. Valoare între 1 (scăzută) și 10 (ridicată).
callback_url
string
Vă permite să specificați un URL la care vă vom trimite rezultatele pentru cuvântul cheie după ce acesta a fost procesat.
Lista de identificatori (ID) pentru SERP-urile completate pe care nu le-ați recuperat încă.
Această metodă vă permite să obțineți ID-urile tuturor SERP-urilor care au fost deja prelucrate, dar care nu au fost încă recuperate. Puteți apela apoi metoda de recuperare a SERP-urilor utilizând aceste ID-uri.
Recuperarea SERPs prin intermediul unui URL de apel
Puteți primi rezultatul unui SERP direct pe un URL pe care ni-l furnizați atunci când creați o interogare. Tot ce trebuie să faceți este să recuperați cheia HMAC legată de cheia API utilizată.
Cod
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
};
Vizualizați numărul de SERP-uri în funcție de starea lor:
Finalizat și rezultatele preluate de utilizator (status=done, fetched=true)
Finalizat și rezultatele nu au fost preluate de utilizator (status=done, fetched=false)
În curs de procesare (status=processing)
În așteptare (status=în așteptare)