本文摘要 DeepSeek
本文介绍了一个纯 PHP 实现的" 以词挖词" 工具,通过整合百度、Bing、搜狗等搜索引擎的推荐词接口,结合 OpenAI 接口实现关键词扩展功能。工具提供两种查询模式:1 层查询获取精确长尾词,2 层查询获取更广泛的相关词 (推荐使用)。查询结果会自动标记重复词并统计次数。核心代码展示了通过 CURL 调用各 API 接口、处理不同格式返回数据 (JSON/字符串解析)、错误重试机制及编码转换等关键技术实现,最终返回去重后的关联词列表。该方案适用于 SEO 关键词挖掘等场景,具有较好的兼容性和容错性。
还是纯 php 实现,利用百度推荐词、bing 推荐词、搜狗推荐词等接口结合 openai 接口实现以词挖词功能
使用说明:
- 1 层查询:获取关键词的长尾词,精确词。
- 2 层查询:获取关键词的长尾词+相关词,较为广泛。(建议使用 2 层)
- 查询结果中重复词会用黄色标记并显示重复次数
核心代码示例:
function getRelatedKeywords($keyword, $apiUrls, $maxRetries = 2, $timeout = 5) {
$relatedKeywords = [];
foreach ($apiUrls as $apiUrl) {
$attempt = 0;
while ($attempt < $maxRetries) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . urlencode($keyword));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
$response = curl_exec($ch);
if (curl_errno($ch)) {
error_log('Curl error for ' . $apiUrl . ': ' . curl_error($ch));
curl_close($ch);
$attempt++;
sleep(1);
continue;
}
curl_close($ch);
if ($response === false || empty($response)) {
error_log('API ' . $apiUrl . ' returned empty response.');
$attempt++;
continue;
}
if (strpos($apiUrl, 'bing.com') !== false) {
$start = strpos($response, '{');
$end = strrpos($response, '}');
if ($start !== false && $end !== false) {
$jsonData = substr($response, $start, $end - $start + 1);
$data = json_decode($jsonData, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($data) && isset($data['AS']['Results'])) {
foreach ($data['AS']['Results'] as $result) {
if (isset($result['Suggests']) && is_array($result['Suggests'])) {
foreach ($result['Suggests'] as $suggest) {
if (isset($suggest['Txt'])) {
$relatedKeywords[] = $suggest['Txt'];
}
}
}
}
} else {
error_log('Invalid JSON or structure for ' . $apiUrl);
}
}
} elseif (strpos($apiUrl, 'so.360.cn') !== false) {
$data = json_decode($response, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($data) && isset($data['result'])) {
foreach ($data['result'] as $result) {
if (isset($result['word'])) {
$relatedKeywords[] = $result['word'];
}
}
} else {
error_log('Invalid JSON or structure for ' . $apiUrl);
}
} elseif (strpos($apiUrl, 'baidu.com') !== false) {
$response = mb_convert_encoding($response, 'UTF-8', 'GBK');
$start = strpos($response, '["');
$end = strrpos($response, '"]');
if ($start !== false && $end !== false) {
$subStr = substr($response, $start + 2, $end - $start - 2);
$parts = explode('","', $subStr);
foreach ($parts as $part) {
if (!empty($part)) {
$relatedKeywords[] = $part;
}
}
} else {
error_log('Invalid data format for ' . $apiUrl);
}
}
break;
}
}
return array_unique($relatedKeywords);
}