API
API方法
获取语言列表
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | 数组 | 可用语言数组。 |
| └ lang_id | 数字 | 唯一语言标识符。 |
| └ name | 字符串 | 英文语言名称。 |
| └ iso_code | 字符串 | ISO语言代码(例如,"EN"代表英语,"ZH"代表中文)。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/languages');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
获取国家列表
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | 数组 | 可用国家数组。 |
| └ country_id | 数字 | 唯一国家标识符。 |
| └ name | 字符串 | 英文国家名称。 |
| └ iso_code | 字符串 | ISO 3166-1 alpha-2国家代码(例如,"CN"代表中国)。 |
| └ iso_code_3 | 字符串 | ISO 3166-1 alpha-3国家代码(例如,"CHN"代表中国)。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/countries');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
获取浏览器列表
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | 数组 | 可用浏览器数组。 |
| └ browser_id | 数字 | 唯一浏览器标识符。 |
| └ name | 字符串 | 浏览器名称。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/browsers');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
获取设备列表
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | 数组 | 可用设备类型数组。 |
| └ device_id | 数字 | 唯一设备类型标识符。 |
| └ name | 字符串 | 设备类型显示名称。 |
| └ value | 字符串 | API请求的设备类型值。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/devices');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
获取操作系统列表
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | 数组 | 可用操作系统数组。 |
| └ os_id | 数字 | 唯一操作系统标识符。 |
| └ name | 字符串 | 操作系统显示名称。 |
| └ value | 字符串 | API请求的操作系统值。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/operating_systems');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
获取广告网络列表
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | 数组 | 可用广告网络数组。 |
| └ network_id | 数字 | 唯一广告网络标识符。 |
| └ name | 字符串 | 广告网络显示名称。 |
| └ value | 字符串 | API请求的广告网络值。 |
| └ logo | 字符串 | 广告网络徽标URL。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/advertising_networks');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
搜索Push广告
使用多种过滤器搜索Push广告素材。
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| limit | 数字 | 否 | 每页项目数(10-100)。默认:10。 |
| offset | 数字 | 否 | 要跳过的项目数。用于分页。默认:0。 |
| keyword | 字符串 | 否 | 按标题或描述过滤广告素材的搜索关键词。 |
| countries | 数组 | 否 | ISO-2国家代码数组(例如,["US", "GB", "DE"])。 |
| country_ids | 数组 | 否 | 来自/api/filters/countries端点的国家ID数组。优先于countries。 |
| languages | 数组 | 否 | ISO语言代码数组(例如,["EN", "ZH", "DE"])。 |
| lang_ids | 数组 | 否 | 来自/api/filters/languages端点的语言ID数组。优先于languages。 |
| advertising_networks | 数组 | 否 | 广告网络名称数组。 |
| network_ids | 数组 | 否 | 来自/api/filters/advertising-networks端点的网络ID数组。优先于advertising_networks。 |
| browsers | 数组 | 否 | 浏览器名称数组。 |
| browser_ids | 数组 | 否 | 来自/api/filters/browsers端点的浏览器ID数组。优先于browsers。 |
| operating_systems | 数组 | 否 | 操作系统值数组(例如,["windows", "macos", "android"])。 |
| devices | 数组 | 否 | 设备类型数组(例如,["desktop", "mobile", "tablet"])。 |
| date_from | 字符串 | 否 | 过滤起始日期(格式:Y-m-d,例如,"2025-01-01")。 |
| date_to | 字符串 | 否 | 过滤结束日期(格式:Y-m-d,例如,"2025-12-31")。 |
| sort_by | 字符串 | 否 | 排序字段:creation、activity、popularity。 |
| sort_order | 字符串 | 否 | 排序方向:asc或desc。 |
| only_adult | Boolean | 否 | 仅过滤成人内容。布尔值(true/false)。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | Object | 匹配请求的流程数据数组。 |
| └ format | 字符串 | 广告素材格式(push、inpage、facebook、tiktok)。 |
| └ items | 数组 | 广告素材对象数组。 |
| └ id | 数字 | 唯一广告素材标识符。 |
| └ title | 字符串 | 广告素材标题文本。 |
| └ description | 字符串 | 广告素材描述文本。 |
| └ category | 字符串 | 广告素材格式/类别(push、inpage、facebook、tiktok)。 |
| └ country | Object | 国家信息对象(code、name、iso_code_3)。 |
| └ code | 字符串 | ISO 3166-1 alpha-2国家代码(例如,"CN"代表中国)。 |
| └ name | 字符串 | 英文国家名称。 |
| └ iso_code_3 | 字符串 | ISO 3166-1 alpha-3国家代码(例如,"CHN"代表中国)。 |
| └ file_size | 字符串 | 格式化的总文件大小。 |
| └ icon_url | 字符串 | 广告素材图标图片URL。 |
| └ landing_url | 字符串 | 着陆页URL。 |
| └ created_at | 字符串 | 广告素材创建日期(Y-m-d格式)。 |
| └ advertising_networks | 数组 | 广告网络名称数组。 |
| └ languages | 数组 | ISO语言代码数组。 |
| └ operating_systems | 数组 | 操作系统值数组。 |
| └ browsers | 数组 | 浏览器名称数组。 |
| └ devices | 数组 | 设备类型数组。 |
| └ main_image_url | 字符串 | 广告素材主图URL。 |
| └ is_adult | Boolean | 广告素材是否包含成人内容。 |
| └ is_active | Boolean | 广告素材当前是否活动。 |
| └ pagination | Object | 分页信息对象。 |
| └ total | 数字 | 匹配过滤器的广告素材总数。 |
| └ limit | 数字 | 每页项目数。 |
| └ offset | 数字 | 当前偏移量。 |
| └ has_more | Boolean | 是否还有更多可用项目。 |
| └ returned_count | 数字 | 此响应中返回的项目数。 |
| └ filters_applied | Object | 包含已应用过滤器的对象。 |
| └ timestamp | 字符串 | ISO 8601格式的响应时间戳。 |
<?php
function searchPushCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/push');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
];
$result = searchPushCreatives($params);
if ($result && $result['status'] === 'success') {
foreach ($result['data']['items'] as $creative) {
echo "ID: " . $creative['id'] . " - " . $creative['title'] . "\n";
}
echo "Total: " . $result['data']['pagination']['total'] . "\n";
}
// Example 2: Search with ISO codes/names filters
$paramsWithFilters = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US', 'GB', 'DE'], // ISO-2 codes
'languages' => ['EN'], // ISO codes
'browsers' => ['Chrome', 'Firefox'], // Browser names
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$filteredResult = searchPushCreatives($paramsWithFilters);
// Example 3: Search with ID-based filters (recommended)
// Use IDs from /api/filters/* endpoints for better performance
$paramsWithIds = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'country_ids' => [1, 2, 3], // IDs from /api/filters/countries
'lang_ids' => [1], // IDs from /api/filters/languages
'network_ids' => [5, 10], // IDs from /api/filters/advertising-networks
'browser_ids' => [1, 2], // IDs from /api/filters/browsers
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$resultWithIds = searchPushCreatives($paramsWithIds);
// Note: ID-based filters take precedence over name-based filters
// If both country_ids and countries are provided, country_ids will be used
搜索Inpage广告
使用多种过滤器搜索Inpage广告素材。
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| limit | 数字 | 否 | 每页项目数(10-100)。默认:10。 |
| offset | 数字 | 否 | 要跳过的项目数。用于分页。默认:0。 |
| keyword | 字符串 | 否 | 按标题或描述过滤广告素材的搜索关键词。 |
| countries | 数组 | 否 | ISO-2国家代码数组(例如,["US", "GB", "DE"])。 |
| country_ids | 数组 | 否 | 来自/api/filters/countries端点的国家ID数组。优先于countries。 |
| languages | 数组 | 否 | ISO语言代码数组(例如,["EN", "ZH", "DE"])。 |
| lang_ids | 数组 | 否 | 来自/api/filters/languages端点的语言ID数组。优先于languages。 |
| advertising_networks | 数组 | 否 | 广告网络名称数组。 |
| network_ids | 数组 | 否 | 来自/api/filters/advertising-networks端点的网络ID数组。优先于advertising_networks。 |
| browsers | 数组 | 否 | 浏览器名称数组。 |
| browser_ids | 数组 | 否 | 来自/api/filters/browsers端点的浏览器ID数组。优先于browsers。 |
| operating_systems | 数组 | 否 | 操作系统值数组(例如,["windows", "macos", "android"])。 |
| devices | 数组 | 否 | 设备类型数组(例如,["desktop", "mobile", "tablet"])。 |
| date_from | 字符串 | 否 | 过滤起始日期(格式:Y-m-d,例如,"2025-01-01")。 |
| date_to | 字符串 | 否 | 过滤结束日期(格式:Y-m-d,例如,"2025-12-31")。 |
| sort_by | 字符串 | 否 | 排序字段:creation、activity、popularity。 |
| sort_order | 字符串 | 否 | 排序方向:asc或desc。 |
| only_adult | Boolean | 否 | 仅过滤成人内容。布尔值(true/false)。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | Object | 匹配请求的流程数据数组。 |
| └ format | 字符串 | 广告素材格式(push、inpage、facebook、tiktok)。 |
| └ items | 数组 | 广告素材对象数组。 |
| └ id | 数字 | 唯一广告素材标识符。 |
| └ title | 字符串 | 广告素材标题文本。 |
| └ description | 字符串 | 广告素材描述文本。 |
| └ category | 字符串 | 广告素材格式/类别(push、inpage、facebook、tiktok)。 |
| └ country | Object | 国家信息对象(code、name、iso_code_3)。 |
| └ code | 字符串 | ISO 3166-1 alpha-2国家代码(例如,"CN"代表中国)。 |
| └ name | 字符串 | 英文国家名称。 |
| └ iso_code_3 | 字符串 | ISO 3166-1 alpha-3国家代码(例如,"CHN"代表中国)。 |
| └ file_size | 字符串 | 格式化的总文件大小。 |
| └ icon_url | 字符串 | 广告素材图标图片URL。 |
| └ landing_url | 字符串 | 着陆页URL。 |
| └ created_at | 字符串 | 广告素材创建日期(Y-m-d格式)。 |
| └ advertising_networks | 数组 | 广告网络名称数组。 |
| └ languages | 数组 | ISO语言代码数组。 |
| └ operating_systems | 数组 | 操作系统值数组。 |
| └ browsers | 数组 | 浏览器名称数组。 |
| └ devices | 数组 | 设备类型数组。 |
| └ main_image_url | 字符串 | 广告素材主图URL。 |
| └ is_adult | Boolean | 广告素材是否包含成人内容。 |
| └ is_active | Boolean | 广告素材当前是否活动。 |
| └ pagination | Object | 分页信息对象。 |
| └ total | 数字 | 匹配过滤器的广告素材总数。 |
| └ limit | 数字 | 每页项目数。 |
| └ offset | 数字 | 当前偏移量。 |
| └ has_more | Boolean | 是否还有更多可用项目。 |
| └ returned_count | 数字 | 此响应中返回的项目数。 |
| └ filters_applied | Object | 包含已应用过滤器的对象。 |
| └ timestamp | 字符串 | ISO 8601格式的响应时间戳。 |
<?php
function searchInpageCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/inpage');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
];
$result = searchInpageCreatives($params);
if ($result && $result['status'] === 'success') {
foreach ($result['data']['items'] as $creative) {
echo "ID: " . $creative['id'] . " - " . $creative['title'] . "\n";
}
echo "Total: " . $result['data']['pagination']['total'] . "\n";
}
// Example 2: Search with ISO codes/names filters
$paramsWithFilters = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US', 'GB', 'DE'], // ISO-2 codes
'languages' => ['EN'], // ISO codes
'browsers' => ['Chrome', 'Firefox'], // Browser names
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$filteredResult = searchInpageCreatives($paramsWithFilters);
// Example 3: Search with ID-based filters (recommended)
// Use IDs from /api/filters/* endpoints for better performance
$paramsWithIds = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'country_ids' => [1, 2, 3], // IDs from /api/filters/countries
'lang_ids' => [1], // IDs from /api/filters/languages
'network_ids' => [5, 10], // IDs from /api/filters/advertising-networks
'browser_ids' => [1, 2], // IDs from /api/filters/browsers
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$resultWithIds = searchInpageCreatives($paramsWithIds);
// Note: ID-based filters take precedence over name-based filters
// If both country_ids and countries are provided, country_ids will be used
搜索Facebook广告
使用多种过滤器搜索Facebook广告素材。当结果较少时,API可能会启动实时搜索并返回scrapingJob用于轮询。
如果scrapingJob.needStartPolling为true,请使用isPolling=true和job_id调用相同的端点以接收新项目。如果状态为recently_completed或rejected,则不会创建任务,不应开始轮询。
仅当countries数组中指定正好一个国家时才会启动实时搜索。
仅当提供非空关键词时才会启动实时搜索。
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| limit | 数字 | 否 | 每页项目数(10-100)。默认:10。 |
| offset | 数字 | 否 | 要跳过的项目数。用于分页。默认:0。 |
| keyword | 字符串 | 否 | 按标题或描述过滤广告素材的搜索关键词。 |
| countries | 数组 | 否 | ISO-2国家代码数组(例如,["US", "GB", "DE"])。 |
| country_ids | 数组 | 否 | 来自/api/filters/countries端点的国家ID数组。优先于countries。 |
| languages | 数组 | 否 | ISO语言代码数组(例如,["EN", "ZH", "DE"])。 |
| lang_ids | 数组 | 否 | 来自/api/filters/languages端点的语言ID数组。优先于languages。 |
| date_from | 字符串 | 否 | 过滤起始日期(格式:Y-m-d,例如,"2025-01-01")。 |
| date_to | 字符串 | 否 | 过滤结束日期(格式:Y-m-d,例如,"2025-12-31")。 |
| sort_by | 字符串 | 否 | 排序字段:creation、activity、popularity。 |
| sort_order | 字符串 | 否 | 排序方向:asc或desc。 |
| status | 字符串 | 否 | 广告状态过滤器:ALL、ACTIVE、INACTIVE。 |
| media_type | 字符串 | 否 | 媒体类型过滤器:ALL、IMAGE、VIDEO。 |
| search_type | 字符串 | 否 | 搜索类型:keyword_unordered、keyword_exact_phrase。 |
| isPolling | Boolean | 否 | 启用实时搜索更新轮询。与job_id一起使用。 |
| lastId | 数字 | 否 | 用于增量轮询的最后接收的广告素材ID(可选)。 |
| perPage | 数字 | 否 | 用于检测低结果数的预期页面大小(12-96)。 |
| job_id | 字符串 | 否 | 来自scrapingJob的实时搜索任务ID。当isPolling=true时必需。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | Object | 匹配请求的流程数据数组。 |
| └ format | 字符串 | 广告素材格式(push、inpage、facebook、tiktok)。 |
| └ items | 数组 | 广告素材对象数组。 |
| └ id | 数字 | 唯一广告素材标识符。 |
| └ title | 字符串 | 广告素材标题文本。 |
| └ description | 字符串 | 广告素材描述文本。 |
| └ category | 字符串 | 广告素材格式/类别(push、inpage、facebook、tiktok)。 |
| └ country | Object | 国家信息对象(code、name、iso_code_3)。 |
| └ code | 字符串 | ISO 3166-1 alpha-2国家代码(例如,"CN"代表中国)。 |
| └ name | 字符串 | 英文国家名称。 |
| └ iso_code_3 | 字符串 | ISO 3166-1 alpha-3国家代码(例如,"CHN"代表中国)。 |
| └ file_size | 字符串 | 格式化的总文件大小。 |
| └ icon_url | 字符串 | 广告素材图标图片URL。 |
| └ landing_url | 字符串 | 着陆页URL。 |
| └ created_at | 字符串 | 广告素材创建日期(Y-m-d格式)。 |
| └ advertising_networks | 数组 | 广告网络名称数组。 |
| └ languages | 数组 | ISO语言代码数组。 |
| └ operating_systems | 数组 | 操作系统值数组。 |
| └ browsers | 数组 | 浏览器名称数组。 |
| └ devices | 数组 | 设备类型数组。 |
| └ main_image_url | 字符串 | 广告素材主图URL。 |
| └ has_video | Boolean | 广告素材是否包含视频。 |
| └ video_url | 字符串 | 视频URL(如果has_video为true)。 |
| └ video_duration | 数字 | 视频时长(秒)(如适用)。 |
| └ social_likes | 数字 | 点赞数(用于社交广告)。 |
| └ social_comments | 数字 | 评论数(用于社交广告)。 |
| └ social_shares | 数字 | 分享数(用于社交广告)。 |
| └ is_adult | Boolean | 广告素材是否包含成人内容。 |
| └ is_active | Boolean | 广告素材当前是否活动。 |
| └ pagination | Object | 分页信息对象。 |
| └ total | 数字 | 匹配过滤器的广告素材总数。 |
| └ limit | 数字 | 每页项目数。 |
| └ offset | 数字 | 当前偏移量。 |
| └ has_more | Boolean | 是否还有更多可用项目。 |
| └ returned_count | 数字 | 此响应中返回的项目数。 |
| └ filters_applied | Object | 包含已应用过滤器的对象。 |
| └ scrapingJob | Object | 实时搜索任务对象(当实时搜索启动或活动时存在)。 |
| └ type | 字符串 | 实时搜索类型标识符(例如,facebook_search)。 |
| └ status | 字符串 | 任务状态:dispatched、running、post_processing、completed、failed、error、recently_completed、rejected。 |
| └ needStartPolling | Boolean | 客户端是否应开始轮询更新。 |
| └ needStopPolling | Boolean | 客户端是否应停止轮询。 |
| └ job_id | 字符串 | 用于轮询的任务标识符(当状态为recently_completed或rejected时不存在)。 |
| └ polling_interval_seconds | 数字 | 建议的轮询间隔(秒)。 |
| └ estimatedDuration | 数字 | 预估持续时间(秒)(completed或recently_completed时为0)。 |
| └ message | 字符串 | 来自服务器或解析器的额外状态消息。 |
| └ retry_after_seconds | 数字 | recently_completed/rejected时重试前等待时间(如果提供)。 |
| └ error | 字符串 | 错误详情(当状态为failed或error时存在)。 |
| └ timestamp | 字符串 | ISO 8601格式的响应时间戳。 |
<?php
function searchFacebookCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/facebook');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
];
// Example 2: Social filters (status/media_type/search_type)
$paramsWithSocialFilters = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
'status' => 'ACTIVE',
'media_type' => 'VIDEO',
'search_type' => 'keyword_unordered',
];
$result = searchFacebookCreatives($paramsWithSocialFilters);
// Example 3: Live search polling (when scrapingJob.needStartPolling is true)
$initial = searchFacebookCreatives([
'api_key' => 'YOUR_API_KEY',
'limit' => 10,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
'status' => 'ACTIVE',
]);
if ($initial && !empty($initial['data']['scrapingJob'])) {
$scrapingJob = $initial['data']['scrapingJob'];
if (!empty($scrapingJob['needStartPolling']) && !empty($scrapingJob['job_id'])) {
$pollingResult = searchFacebookCreatives([
'api_key' => 'YOUR_API_KEY',
'isPolling' => true,
'job_id' => $scrapingJob['job_id'],
'limit' => 10,
'offset' => 0,
]);
}
}
// Note: If scrapingJob.status is "recently_completed" or "rejected",
// the job will not be created and polling should not be started.
搜索TikTok广告
使用多种过滤器搜索TikTok广告素材。当结果较少时,API可能会启动实时搜索并返回scrapingJob用于轮询。
如果scrapingJob.needStartPolling为true,请使用isPolling=true和job_id调用相同的端点以接收新项目。如果状态为recently_completed或rejected,则不会创建任务,不应开始轮询。
仅当countries数组中指定正好一个国家时才会启动实时搜索。
仅当提供非空关键词时才会启动实时搜索。
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| limit | 数字 | 否 | 每页项目数(10-100)。默认:10。 |
| offset | 数字 | 否 | 要跳过的项目数。用于分页。默认:0。 |
| keyword | 字符串 | 否 | 按标题或描述过滤广告素材的搜索关键词。 |
| countries | 数组 | 否 | ISO-2国家代码数组(例如,["US", "GB", "DE"])。 |
| country_ids | 数组 | 否 | 来自/api/filters/countries端点的国家ID数组。优先于countries。 |
| languages | 数组 | 否 | ISO语言代码数组(例如,["EN", "ZH", "DE"])。 |
| lang_ids | 数组 | 否 | 来自/api/filters/languages端点的语言ID数组。优先于languages。 |
| date_from | 字符串 | 否 | 过滤起始日期(格式:Y-m-d,例如,"2025-01-01")。 |
| date_to | 字符串 | 否 | 过滤结束日期(格式:Y-m-d,例如,"2025-12-31")。 |
| sort_by | 字符串 | 否 | 排序字段:creation、activity、popularity。 |
| sort_order | 字符串 | 否 | 排序方向:asc或desc。 |
| video_duration | 字符串 | 否 | TikTok视频时长过滤器:ALL、SHORT、MEDIUM、LONG。 |
| isPolling | Boolean | 否 | 启用实时搜索更新轮询。与job_id一起使用。 |
| lastId | 数字 | 否 | 用于增量轮询的最后接收的广告素材ID(可选)。 |
| perPage | 数字 | 否 | 用于检测低结果数的预期页面大小(12-96)。 |
| job_id | 字符串 | 否 | 来自scrapingJob的实时搜索任务ID。当isPolling=true时必需。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| data | Object | 匹配请求的流程数据数组。 |
| └ format | 字符串 | 广告素材格式(push、inpage、facebook、tiktok)。 |
| └ items | 数组 | 广告素材对象数组。 |
| └ id | 数字 | 唯一广告素材标识符。 |
| └ title | 字符串 | 广告素材标题文本。 |
| └ description | 字符串 | 广告素材描述文本。 |
| └ category | 字符串 | 广告素材格式/类别(push、inpage、facebook、tiktok)。 |
| └ country | Object | 国家信息对象(code、name、iso_code_3)。 |
| └ code | 字符串 | ISO 3166-1 alpha-2国家代码(例如,"CN"代表中国)。 |
| └ name | 字符串 | 英文国家名称。 |
| └ iso_code_3 | 字符串 | ISO 3166-1 alpha-3国家代码(例如,"CHN"代表中国)。 |
| └ file_size | 字符串 | 格式化的总文件大小。 |
| └ icon_url | 字符串 | 广告素材图标图片URL。 |
| └ landing_url | 字符串 | 着陆页URL。 |
| └ created_at | 字符串 | 广告素材创建日期(Y-m-d格式)。 |
| └ advertising_networks | 数组 | 广告网络名称数组。 |
| └ languages | 数组 | ISO语言代码数组。 |
| └ operating_systems | 数组 | 操作系统值数组。 |
| └ browsers | 数组 | 浏览器名称数组。 |
| └ devices | 数组 | 设备类型数组。 |
| └ main_image_url | 字符串 | 广告素材主图URL。 |
| └ has_video | Boolean | 广告素材是否包含视频。 |
| └ video_url | 字符串 | 视频URL(如果has_video为true)。 |
| └ video_duration | 数字 | 视频时长(秒)(如适用)。 |
| └ social_likes | 数字 | 点赞数(用于社交广告)。 |
| └ social_comments | 数字 | 评论数(用于社交广告)。 |
| └ social_shares | 数字 | 分享数(用于社交广告)。 |
| └ is_adult | Boolean | 广告素材是否包含成人内容。 |
| └ is_active | Boolean | 广告素材当前是否活动。 |
| └ pagination | Object | 分页信息对象。 |
| └ total | 数字 | 匹配过滤器的广告素材总数。 |
| └ limit | 数字 | 每页项目数。 |
| └ offset | 数字 | 当前偏移量。 |
| └ has_more | Boolean | 是否还有更多可用项目。 |
| └ returned_count | 数字 | 此响应中返回的项目数。 |
| └ filters_applied | Object | 包含已应用过滤器的对象。 |
| └ scrapingJob | Object | 实时搜索任务对象(当实时搜索启动或活动时存在)。 |
| └ type | 字符串 | 实时搜索类型标识符(例如,facebook_search)。 |
| └ status | 字符串 | 任务状态:dispatched、running、post_processing、completed、failed、error、recently_completed、rejected。 |
| └ needStartPolling | Boolean | 客户端是否应开始轮询更新。 |
| └ needStopPolling | Boolean | 客户端是否应停止轮询。 |
| └ job_id | 字符串 | 用于轮询的任务标识符(当状态为recently_completed或rejected时不存在)。 |
| └ polling_interval_seconds | 数字 | 建议的轮询间隔(秒)。 |
| └ estimatedDuration | 数字 | 预估持续时间(秒)(completed或recently_completed时为0)。 |
| └ message | 字符串 | 来自服务器或解析器的额外状态消息。 |
| └ retry_after_seconds | 数字 | recently_completed/rejected时重试前等待时间(如果提供)。 |
| └ error | 字符串 | 错误详情(当状态为failed或error时存在)。 |
| └ timestamp | 字符串 | ISO 8601格式的响应时间戳。 |
<?php
function searchTikTokCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/tiktok');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
];
// Example 2: TikTok filter (video_duration)
$paramsWithVideoDuration = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
'video_duration' => 'SHORT',
];
$result = searchTikTokCreatives($paramsWithVideoDuration);
// Example 3: Live search polling (when scrapingJob.needStartPolling is true)
$initial = searchTikTokCreatives([
'api_key' => 'YOUR_API_KEY',
'limit' => 10,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
]);
if ($initial && !empty($initial['data']['scrapingJob'])) {
$scrapingJob = $initial['data']['scrapingJob'];
if (!empty($scrapingJob['needStartPolling']) && !empty($scrapingJob['job_id'])) {
$pollingResult = searchTikTokCreatives([
'api_key' => 'YOUR_API_KEY',
'isPolling' => true,
'job_id' => $scrapingJob['job_id'],
'limit' => 10,
'offset' => 0,
]);
}
}
// Note: If scrapingJob.status is "recently_completed" or "rejected",
// the job will not be created and polling should not be started.
资金转账
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| amount | 数字 | 是 | 转账金额(最低10美元)。 |
| 字符串 | 是 | 收款人邮箱。必须有效。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| transaction_number | 字符串 | 与转账关联的唯一交易号。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/accounts/transfer_funds');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = [
'api_key' => 'YOUR_API_KEY',
'amount' => 100,
'email' => '[email protected]'
];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
获取账户余额
请求URL
| 参数 | 数据类型 | 必填 | 描述 |
|---|---|---|---|
| api_key | 字符串 | 是 | 用于请求验证的唯一API密钥。 |
| 参数 | 数据类型 | 描述 |
|---|---|---|
| status | 字符串 | 表示请求执行成功("success")或错误("error")的字段。 |
| msg | 字符串 | 错误消息或额外的请求信息。 |
| code | 数字 | 响应代码,例如,成功请求为200。 |
| balance | 数字 | 用户当前账户余额。 |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/accounts/balance');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = [
'api_key' => 'YOUR_API_KEY'
];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}