红穆笔记
首页 语言笔记 php获取百度下拉词
语言笔记 PHP

php获取百度下拉词

php获取百度下拉词

有些时候在做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;
    }
}
微信赞赏

微信

支付宝赞赏

支付宝

✍️ 作者: 红穆

网站管理员 · 感谢阅读,更多精彩内容敬请关注

作者主页 查看主页 →

相关文章

PHP ob函数记录

PHP ob函数记录 语言笔记 PHP

下面3个函数的用法 ob_get_contents(); ob_end_clean(); ob_start(); 可以借助这几个函数实现缓冲本地文件,以及执行本地脚本代码。 使用ob_start()把输出的代码存到缓冲区,页面不会显示出来; 然后用ob_get_contents得到缓冲区的数据。 o…
👁 141
PHP preg

PHP preg 语言笔记 PHP

preg_match_all 函数用于执行一个全局正则表达式匹配。preg_match_all() 语法int preg_match_all ( string $pattern , string $subject [, array &amp;$matches [, int $flags = PREG…
👁 169
PHP 三元运算符与if的详解

PHP 三元运算符与if的详解 语言笔记 PHP

三元运算符语条件 ? 结果1 : 结果2 说明:问号前面的位置是判断的条件,如果满足条件时结果1,不满足时结果2。本文对三元运算符和if...else...进行对比详解,希望对大家有所帮助。今天在改论文在线的时候遇到了一个语句看不懂:$if_summary = $row['IF_SUMMARY']=…
👁 190
PHP强制转换类型

PHP强制转换类型 语言笔记 PHP PHP采集 PHP与mysql

获取数据类型1.如果想查看某个表达式的值和类型,用var_dump()。 2.如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()。3.要查看某个类型,不要用 gettype(),而用is_type() 函数。字符串转换为数值当一个字符串被当作数字来求值时,根据以下规则来决定结果…
👁 232
php 字符串中是否包含指定字符串的多种方法

php 字符串中是否包含指定字符串的多种方法 语言笔记 PHP

strstrstrstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。代码如下:&lt;?php $email = 'user@example.com'; $domain = strstr($email, …
👁 138

推荐阅读

响应式作文工作范文网站模板 0781

响应式作文工作范文网站模板 0781 实用收藏 易优模板

一款针对作文与工作范文的eyoucms响应式网站模板。设计风格简洁实用,能够提供各类范文、工作模板、写作素材及资料下载。有助于教育资料平台在线上吸引学生与职场人士。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易优CMS(E…
👁 56
社会民生新闻博客网站模板 0782

社会民生新闻博客网站模板 0782 实用收藏 易优模板

此套eyoucms模板适用于社会民生与新闻博客网站,设计风格信息流,能够聚合社会热点、民生动态、深度报道及评论文章。有助于新闻媒体在线上吸引读者,建立社会影响力。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易优CMS(Ey…
👁 61
新闻博客资讯网站模板 0783

新闻博客资讯网站模板 0783 实用收藏 易优模板

一款针对新闻、博客与资讯网站的eyoucms模板。设计风格现代信息流,适合聚合行业新闻、深度报道、评论文章及热点话题。有助于资讯网站在线上吸引读者,建立媒体影响力。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易优CMS(E…
👁 54
资源网站typecho001模板

资源网站typecho001模板 程序笔记 Typecho

typecho001模板板本请勿修改本模板文件夹名称 文件夹名称为:typecho001 1.4修复文章页面js输出问题1.3修复未安装插件时的报错提示优化列表页代码输出1.2修复评论功能增加自定义首页标题1.1修复评论回复不对称功能添加首页单独的标题设置功能增加网站favicon.ico图标增加一…
👁 198
生活常识新闻博客资讯网站模板 0784

生活常识新闻博客资讯网站模板 0784 实用收藏 易优模板

此套eyoucms模板适用于生活常识与新闻博客资讯网站,设计风格清新信息流,适合分享生活百科、健康知识、实用技巧及热点资讯。有助于生活资讯平台在线上吸引读者。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易优CMS(Eyou…
👁 31
typecho分页样式的修改

typecho分页样式的修改 程序笔记 Typecho

大人,时代变了!目前typecho最完美的解决方案了,因为百度只能看到固定思维的代码。实际生成的html代码,干净到让人窒息完全的自定义,包括给li元素加上class,给a元素加上class,给上一页下一页加上class,去除typecho自带用于表示更多的li标签。甚至里面的内容我也能添加一些文字…
👁 517