Βάθος σελίδας, ανακτούμε τα SERPs της 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 SERPs scrapes με μία μόνο κλήση.
post
https://api.semscraper.com/v1/serp
https://api.semscraper.com/v1/serp
Άδειες : Bearer {api_key}
Παράμετροι
search_engine
Απαιτούμενο
string
Επιλογή μηχανής αναζήτησης :
Χάρτες Google (τιμή: google_maps)
keyword
Απαιτούμενο
string
Λέξεις-κλειδιά για αναζήτηση στη μηχανή αναζήτησης
depth
Απαιτούμενο
integer
Βάθος σελίδας, ανακτούμε τα SERPs της Google με σελιδοποίηση. Αυτή η παράμετρος πρέπει να είναι μεταξύ 1 (περίπου 10 αποτελέσματα) και 10 (περίπου 100 αποτελέσματα).
location
Απαιτούμενο
string
Κωδικός θέσης μηχανής αναζήτησης
language
Απαιτούμενο
string
Γλώσσα μηχανών αναζήτησης
geolocation
string
Σας επιτρέπει να εντοπίσετε γεωγραφικά ένα SERP της Google. Για παράδειγμα, μπορείτε να αναφέρετε την πόλη, το διαμέρισμα ή τη χώρα, χωρισμένα με κόμμα.
priority
integer
Χρησιμοποιείται για την ιεράρχηση των αιτημάτων σας, τα οποία επεξεργάζονται με φθίνουσα σειρά προτεραιότητας. Τιμή μεταξύ 1 (χαμηλή) και 10 (υψηλή).
callback_url
string
Σας επιτρέπει να καθορίσετε μια διεύθυνση URL στην οποία θα σας στείλουμε τα αποτελέσματα για τη λέξη-κλειδί μόλις ολοκληρωθεί η επεξεργασία.
Λίστα αναγνωριστικών (ID) για ολοκληρωμένα SERPs που δεν έχετε ακόμη ανακτήσει.
Αυτή η μέθοδος σας επιτρέπει να λάβετε τα αναγνωριστικά όλων των SERPs που έχουν ήδη υποβληθεί σε επεξεργασία αλλά δεν έχουν ακόμη ανακτηθεί. Στη συνέχεια, μπορείτε να καλέσετε τη μέθοδο ανάκτησης SERP χρησιμοποιώντας αυτά τα ID.
Μπορείτε να λάβετε το αποτέλεσμα ενός 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
};
Δείτε τον αριθμό των SERPs ανάλογα με την κατάστασή τους:
Ολοκληρώθηκε και τα αποτελέσματα ανακτήθηκαν από το χρήστη (status=done, fetched=true)
Ολοκληρώθηκε και τα αποτελέσματα δεν ανακτήθηκαν από τον χρήστη (status=done, fetched=false)
Σε εξέλιξη (status=processing)
Αναμονή (status=pending)