关于“乱弹”

很久很久以前,OSChina 网站有个栏目叫 周x乱弹,内容就是用户们的说说的小编精选集。

这个已经下架了(UGC内容水太深),访问收藏夹里的乱弹链接会提示:“该内容暂时无法访问,敬请理解。”

WP可以自己做一个发布少于100字内容的专题页。这里我偷懒选用最简单的实现方式:新建一个普通页面,再修改下评论列表的样式就行了。但是又不想发个内容还要登录wp后台,如果可以通过命令行窗口调用一个命令就发送就 perfect 了。

所以就有了 “零工” 程序啦:https://github.com/daoyuc/zero_tools

其实核心代码就是,读取某篇文章评论内容 和 插入一条评论:

<?php

namespace App\Commands;

use DB;
use LaravelZero\Framework\Commands\Command;

class BbCommand extends Command
{
    /**
     * The signature of the command.
     * --p Whether the content should be private.
     *
     * @var string
     */
    protected $signature = 'bb {content?} {--p}  {--e}';

    /**
     * The description of the command.
     *
     * @var string
     */
    protected $description = 'Display recent phpf5 bb';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $content = $this->argument('content');

        $p = $this->option('p');

        $comment_post_ID = config('bb.post_id'); //定义你的说说页面ID

        if (!$comment_post_ID) {
            $this->error('config bb.post_id is null!');
            exit;
        }
        $comment_author = config('bb.author');
        $user_id = config('bb.user_id');
        $comment_author_email = config('bb.email');

        if (!$content) {
            //查询评论

            $comments = DB::table('wp_comments')->select('comment_content', 'comment_date')
                ->where('comment_post_ID', $comment_post_ID)
                ->orderBy('comment_ID', 'DESC')
                ->limit(config('bb.num'))
                ->get()
                ->map(function ($row) {
                    return [
                        $this->transContent($row->comment_content), $row->comment_date,
                    ];
                });

            //dd($comments);
            $headers = ['乱弹', '时间'];
            $this->table($headers, $comments); //borderless, 'compact'
        } else {
            if ($this->option('e')) {
                //修改上一条
                $affected = DB::update(
                    'UPDATE wp_comments SET comment_content = ? WHERE comment_post_ID = ? AND comment_approved = 1 ORDER BY comment_id DESC LIMIT 1',
                    [$content, $comment_post_ID]
                );
                if ($affected) {
                    $this->info('edit done');
                    exit;
                } else {
                    $this->error('edit ooops!');
                }
            }
            $inSql = 'INSERT INTO wp_comments
            (comment_post_ID,
            comment_author,
            comment_author_email,
            comment_date,
            comment_date_gmt,
            comment_content,
            comment_agent,
            `user_id`)
            VALUES (?,?,?,?,?,?,?,?)';
            $newId = DB::insert($inSql, [
                $comment_post_ID,
                $comment_author,
                $comment_author_email,
                gmdate('Y-m-d H:i:s', time() + 8 * 3600),
                date('Y-m-d H:i:s'),
                $content,
                'cmd',
                $user_id,
            ]);
            if ($newId) {
                $this->info('done');
                DB::update(
                    'UPDATE wp_posts SET comment_count =(SELECT COUNT(*) FROM wp_comments WHERE comment_post_ID = ? AND comment_approved = 1) WHERE ID = ?',
                    [$comment_post_ID, $comment_post_ID]
                );
            } else {
                $this->error('ooops!');
            }
        }

    }

    private function transContent($content)
    {
        return str_replace(PHP_EOL, '↙ ', $content); //换行符替换为浮号 ↙
    }
}

以上代码基于已有框架:Laravel Zero , 参考资料:https://learnku.com/laravel/t/66287

参数说明:

不带参数 (显示最新的 10 条评论)
引号包裹的字符串 (作为评论内容)
--q[=关键字] 关键字搜索
--e 编辑模式(修改最后一条评论)
--et 最后一条评论附加翻译(此时无需内容参数)
--c 计数(返回对应文章一共有多少条评论)
--id[=ID] 返回特定 ID 的评论内容,--id=-1 输出最后一条评论内容
--t 内容调用百度翻译, 换行附加在原本内容后面
--f 同步内容到 flomo 笔记

相关配置项:(.env文件)

DB_CONNECTION=mysql
DATABASE_URL=

BB_POST_ID=
BB_AUTHOR=
BB_USER_ID=
BB_EMAIL=
BB_NUM=

效果图:(windows 10 自带CMD)

TODO:

[ ] 修改评论列表样式

[ ] 支持附带图片发送

Categories: 示例

Tagged as: , ,

发表回复

您的电子邮箱地址不会被公开。