API для поиска по ключевым словам

Введение

API-интерфейс, позволяющий искать веб-сайты, содержащие определенные ключевые слова.

Общий метод доступа следующий: -
https://api.builtwith.com/kws1/api.[json|csv]?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=[KEYWORD]

🤖 Подсказка от ИИ-агента
Reference https://api.builtwith.com/llms.txt and
https://raw.githubusercontent.com/builtwith/builtwith-ai-sdk/refs/heads/main/README.md
Add builtwith AI api to my app as a client. Make a call to the keyword search API to find websites using the keyword perfume
Аутентификация

Вам необходимо указывать свой ключ API при каждом поиске. Наши конечные точки работают только по протоколу HTTPS, обеспечивая шифрование ключей. Никогда не раскрывайте свой ключ API.

Ваш ключ API
00000000-0000-0000-0000-000000000000

Вы можете указать свой ключ в качестве параметра строки запроса или в качестве заголовка HTTP:

  • Строка запроса: ?KEY=00000000-0000-0000-0000-000000000000
  • HTTP-заголовок: Authorization: API 00000000-0000-0000-0000-000000000000
Примеры поиска по ключевым словам

JSON Поиск по ключевому слову
https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume

JSON Поиск с ограничением
https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume&LIMIT=50

JSON Следующая страница с использованием смещения
https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume&OFFSET=[last domain from previous result]

CSV Поиск по ключевому слову
https://api.builtwith.com/kws1/api.csv?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume

Примеры кода

Вот примеры реализации на разных языках программирования для выполнения API-запросов:

var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://api.builtwith.com/kws1/api.json" +
                        "?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume"),
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
import requests
url = "https://api.builtwith.com/kws1/api.json"
params = {
    'KEY': '00000000-0000-0000-0000-000000000000',
    'KEYWORD': 'perfume'
}
response = requests.get(url, params=params)
print(response.json())
<?php
$url = "https://api.builtwith.com/kws1/api.json";
$params = array(
    'KEY' => '00000000-0000-0000-0000-000000000000',
    'KEYWORD' => 'perfume'
);
$url_with_params = $url . '?' . http_build_query($params);
$response = file_get_contents($url_with_params);
$data = json_decode($response, true);
print_r($data);
?>
const https = require('https');
const url = 'https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume';
https.get(url, (res) => {
    let data = '';
    res.on('data', (chunk) => {
        data += chunk;
    });
    res.on('end', () => {
        console.log(JSON.parse(data));
    });
}).on('error', (err) => {
    console.log('Error: ' + err.message);
});
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class BuiltWithAPI {
    public static void main(String[] args) throws Exception {
        String url = "https://api.builtwith.com/kws1/api.json" +
                    "?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume";
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        System.out.println(response.toString());
    }
}
require 'net/http'
require 'uri'
require 'json'
uri = URI('https://api.builtwith.com/kws1/api.json')
uri.query = URI.encode_www_form({
    'KEY' => '00000000-0000-0000-0000-000000000000',
    'KEYWORD' => 'perfume'
})
response = Net::HTTP.get_response(uri)
data = JSON.parse(response.body)
puts data
package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
)
func main() {
    url := "https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume"
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(body))
}
curl -X GET "https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume"
Ссылка
Параметры
Для поиска могут быть предоставлены следующие параметры GET:
ИмяПримерыНеобходимый
KEY00000000-0000-0000-0000-000000000000
Это ваш ключ, используйте его для поиска.
Да
KEYWORDperfume
wordpress
Содержит не менее 4 букв, только алфавитные символы, и не является распространенным стоп-словом.
Да
LIMIT100
Количество возвращаемых результатов. Минимум 16, максимум 1000. Значение по умолчанию — 100.
Нет
OFFSETzoho.com
Последний домен, возвращенный с предыдущей страницы. Используется для пагинации с использованием набора ключей.
Нет
Ответы
Формат: Keyword, Domains[], NextOffset
ИмяПримерОписание
KeywordperfumeКлючевое слово, которое было использовано для поиска.
Domains["example.com","store.com"]Массив доменных имен, содержащих ключевое слово.
NextOffsetzoho.comПередайте это значение в качестве OFFSET, чтобы получить следующую страницу. Возвращает "END", если результатов больше нет.
API-библиотеки
Node.js NPM

https://www.npmjs.com/package/builtwith-api
NPM пакет по Zach Caceres - https://github.com/zcaceres/builtwith-api

Microsoft .NET Nuget

https://www.nuget.org/packages/BuiltWith/
C# пакет по BuiltWith Pty Ltd - https://github.com/builtwith/BuiltWith-C-Client-API

Примеры кода

https://github.com/builtwith/code-examples
Примеры всех конечных точек API на разных языках.

Специальные домены

Мы ведём два списка, которые пригодятся вам при поиске доменов: списки игнорирования и списки BuiltWith Suffix.

Список игнорирования
TЭто наш внутренний список доменов, которые мы не индексируем. Они либо заблокированы, либо содержат слишком много вводящих в заблуждение технологий, либо слишком много поддоменов с пользовательским контентом.

BuiltWith Список суффиксов
Это основано на Список публичных суффиксов но включает множество дополнительных записей для компаний с поддоменами, которые следует считать доменами верхнего уровня. Этот список обеспечивает лучшую видимость внутренних веб-сайтов, например, он выводит northernbeaches.nsw.gov.au на верхний уровень по сравнению с nsw.gov.au.

Игнорировать домены (XML, JSON or TXT)
https://api.builtwith.com/ignoresv1/api.json
Суффиксные домены (XML, JSON or TXT)
https://api.builtwith.com/suffixv1/api.json
Коды ошибок

Обратите внимание, что отправка сообщений об ошибках в этом формате не может быть гарантирована, ваша реализация должна также рассматривать коды ответа, отличные от 200, как ошибки. Свойство Lookup будет иметь значение null (json) или не будет предоставлено (xml), если ошибка связана с сервером. Просмотреть все возможные правильно сформированные коды ошибок.

Условия эксплуатации

Наш стандартные условия распространяется на использование всех наших API.

В целом, вы можете использовать API для улучшения своего продукта различными способами. Единственное ограничение — вы не можете перепродавать данные в их исходном виде или предоставлять дублирующий функционал builtwith.com и связанным с ним сервисам.