有些時候在做SEO的時候想要使用程序來自動修改標題,這時候可以用到百度下拉詞庫來自動匹配修改,以下是一段獲取百度詞庫的PHP代碼
//獲取百度下拉信息
$title = urlencode($data['title']);
$api = "https://www.baidu.com/sugrec?pre=1&p=1&ie=utf-8&prod=pc&csor=2&wd=".$title."";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
$r = json_decode($r,true);
if(empty($r['g'])){
$new_title = $data['title'].'(圖文)';
}
//數據一定存在,取出數據,然後隨機獲取一個
$baidu_title = $r['g'][mt_rand(0,count($r['g'])-1)]['q'];//數據的隨機獲取
$baidu_title2 = $r['g'][mt_rand(0,count($r['g'])-1)]['q'];//數據的隨機獲取
$baidu_title = $baidu_title==$data['title']?$r['g'][mt_rand(0,count($r['g'])-1)]['q']:$baidu_title;//數據隨機,防止與原標題一樣
$baidu_title2 = $baidu_title==$baidu_title2?$r['g'][mt_rand(0,count($r['g'])-1)]['q']:$baidu_title2;//數據隨機,防止與第一個百度標題一樣優化後的代碼:
<?php
// 獲取百度下拉信息
$title = urlencode($data['title']);
$api = "https://www.baidu.com/sugrec?pre=1&p=1&ie=utf-8&prod=pc&csor=2&wd=".$title."";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api,
CURLOPT_TIMEOUT => 5,
CURLOPT_RETURNTRANSFER => true,
]);
$r = curl_exec($ch);
curl_close($ch);
$r = json_decode($r, true);
// 檢查是否爲空,如果爲空,則添加後綴到標題中
if (empty($r['g'])) {
$new_title = $data['title'] . ' (圖文)';
}
// 從建議中獲取隨機標題
$titles = array_column($r['g'], 'q');
$random_title = $titles[array_rand($titles)];
// 避免與原始標題和先前的建議重複
if ($random_title == $data['title'] || $random_title == $baidu_title) {
$random_title = $titles[array_rand($titles)];
}
$baidu_title = $random_title;
$baidu_title2 = $titles[array_rand($titles)];
if ($baidu_title2 == $baidu_title) {
$baidu_title2 = $titles[array_rand($titles)];
}代碼的改進包括:
- 使用數組來存儲隨機標題選項,以避免重複
- 使用
array_column提取響應中的標題 - 使用
array_rand從選項數組中獲取隨機標題 - 簡化了避免與原始標題和先前建議重複的代碼
- 使用數組參數設置 curl 選項,以提高可讀性和可維護性
根據上面上面的代碼封裝成函數,傳入中文標題後,如果成功獲取下拉則返回下拉數組,獲取爲空則返回false
function getBaiduSuggestion($title) {
$title = urlencode($title);
$api = "https://www.baidu.com/sugrec?pre=1&p=1&ie=utf-8&prod=pc&csor=2&wd=".$title."";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api,
CURLOPT_TIMEOUT => 5,
CURLOPT_RETURNTRANSFER => true,
]);
$r = curl_exec($ch);
curl_close($ch);
$r = json_decode($r, true);
if (!empty($r['g'])) {
$titles = array_column($r['g'], 'q');
$baidu_title = $titles[array_rand($titles)];
if ($baidu_title == $title) {
$baidu_title = $titles[array_rand($titles)];
}
$baidu_title2 = $titles[array_rand($titles)];
if ($baidu_title2 == $baidu_title) {
$baidu_title2 = $titles[array_rand($titles)];
}
return [$baidu_title, $baidu_title2];
} else {
return false;
}
}根據自己的需求將代碼改了改:
function getBaiduSuggestion($title) {
$title = urlencode($title);
$api = "https://www.baidu.com/sugrec?pre=1&p=1&ie=utf-8&prod=pc&csor=2&wd=".$title."";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api,
CURLOPT_TIMEOUT => 5,
CURLOPT_RETURNTRANSFER => true,
]);
$r = curl_exec($ch);
curl_close($ch);
$r = json_decode($r, true);
if (!empty($r['g'])) {
return array_column($r['g'], 'q');
} else {
return false;
}
}