惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
GRAHAM CLULEY
S
Security @ Cisco Blogs
P
Proofpoint News Feed
Cisco Talos Blog
Cisco Talos Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
WordPress大学
WordPress大学
Project Zero
Project Zero
S
Schneier on Security
P
Proofpoint News Feed
小众软件
小众软件
P
Privacy International News Feed
美团技术团队
L
LangChain Blog
Know Your Adversary
Know Your Adversary
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
I
InfoQ
量子位
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
Spread Privacy
Spread Privacy
D
DataBreaches.Net
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
U
Unit 42
P
Privacy & Cybersecurity Law Blog
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Blog of Author Tim Ferriss
Latest news
Latest news
K
Kaspersky official blog
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 热门话题
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
S
Securelist
AWS News Blog
AWS News Blog
F
Fortinet All Blogs
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
Scott Helme
Scott Helme
Help Net Security
Help Net Security
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tenable Blog

文章列表 - 她和她的猫

使用小鹤双拼一个月 折腾 Hugo PaperMod 主题 去长鹿旅游休博园 1Password 自动化登录堡垒机 深入 Hyperf:Inject 注解是如何工作的? 译|理解容器镜像层 使用 Rust 实现高性能预写日志(Write Ahead Log) 译|使用 Linux 命名空间隔离系统 深入 Hyperf:HTTP 服务是如何处理请求的? Linux 文件权限学习笔记 译|了解 Bitcask:基于日志结构的 KV 存储引擎 还原 SM2 压缩公钥的几种方法 深入 Hyperf:HTTP 服务启动时发生了什么? 一次 Hyperf 注解失效问题分析 将博客迁移到又拍云 译|PHP 7 新的 Hashtable 实现 排查 ES 查询问题:深入了解 json_encode() 函数 浅析 Redlock 分布式锁实现原理 Yar 源码阅读笔记:RPC 服务端 Yar 源码阅读笔记:客户端的并行调用 Yar 源码阅读笔记:客户端的同步调用 Yar 源码阅读笔记:数据传输模块 Yar 源码阅读笔记:消息编码模块 Yar 源码阅读笔记:RPC 通信协议 Yar 源码阅读笔记:开篇 PHP 8 新特性介绍 基于 OpenSSL 实现国密 SM4 加解密 PHP 源码阅读笔记:编译与调试 PHP 什么是惊群问题 大端模式和小端模式 基于 GitHub Actions 定时推送网址到百度站长平台 聊聊五种 I/O 模型 Workerman 源码分析:文件上传 浅入浅出 HTTP 协议 PHP 网络编程:构建 MySQL 蜜罐获取攻击者微信 ID 使用 Workerman 接入 Bilibili 直播弹幕协议 使用 GitHub Actions 自动部署 Hexo 什么是二进制安全 【转载】PHP 程序员进阶之路 优化 Workerman 检查主进程是否存活的逻辑 基于 Redis 实现分布式锁 《PHP 实现 Base64 编码/解码》笔记 PHP 多进程下载必应壁纸 基于 Redis 实现延迟队列 【转载】PHP 实现 Base64 编码/解码 使用 MySQL FIELD() 函数自定义排序规则 Laravel 的 Facades 实现原理 C语言单链表实现约瑟夫环 数据结构学习笔记:顺序栈和链栈(C语言) 使用 QueryList + Redis 下载壁纸 在 Laravel 登录/注册中使用 mews/captcha 扩展包 使用 mews/captcha 扩展包为 Laravel 应用添加图片验证码 给 YOURLS 短网址系统编写插件《Hello World!》 PHP 7.1 使用 json_encode 函数造成浮点类型数据出现精度问题 Laravel 授权策略(Policy)的基本使用 Ubuntu 系统下 WiFi 频繁掉线解决方法 Laravel 应用部署到 Nginx 服务器上的第一个坑 Ubuntu 16.04 LST 安装 Redis 和 Composer PHP 采集逐浪小说章节列表 Nginx 环境 SSL 强制 HTTP 301 跳转到 HTTPS 【工作&生活】第一周 ServiceStack.Redis 与多线程 Count the number of Duplicates C# Base64 加密及解密 ASP.NET MVC 使用动态类型传递数据 Django 使用 order_by() 对数据进行排序操作 ASP.NET + jQuery + AJAX 实现用户登录 ASP.NET 从客户端中检测到有潜在危险的 Request.Form 值 ASP.NET 使用 FormData 实现 AJAX 上传图片 Python 使用 BeautifulSoup 抓取网页 贪心算法之字符串的完美度 一言不和就造轮子之 CookieHelper ASP.NET 上传图片 DBHelper 类 C# 捕获屏幕源码 用 JavaScript 做一些有趣的事情 第一篇文章 好久不见。 如何防止非法调用 PHP 文件 清明小记。 PHP 生成随机字符串 Z-Blog PHP 程序做 301 跳转 PHP 处理数组常用的几个函数 Sublime Text 3 快捷键总结 PHP 使用 file_get_contents() 函数实现采集网页 使用 C# 编写学生信息管理系统 终于到了。 zblog报错: magic_quotes_gpc 和 safe_mode 世事无常。 如何使用 PHP 上传文件 安卓手机编写和运行 PHP 程序的软件 使用 AJAX 刷新、验证 PHP 图片验证码 PHP 生成图片验证码 PHP 之 session 的使用方法 PHP 之 cookie 的使用方法 PHP 实现分页原理详解 Thinkphp 框架中系统常量在 Js 文件中不解析的解决方法
给 YOURLS 短网址系统编写插件《批量生成短网址》
她和她的猫 · 2018-07-31 · via 文章列表 - 她和她的猫

前言

在上一篇文章 给 YOURLS 短网址系统编写插件《Hello World!》 中,用了一个简单的例子介绍了如何给 YOURLS 编写插件,让我们对 YOURLS 插件的实现步骤有了一些了解。

YOURLS 自带的功能一次只能生成一个短网址,如果想要一次让多个 url 生成多个短网址,那么就需要《批量生成短网址》这个插件了。

编写插件

在这个插件中需要一个参数:

  • urls 以英文的逗号分割的 url 字符串, 例如 https://baidu.com,https://youku.com,https://csdn.com

接收到 urls 后,先使用 explode 函数将 urls 字符串分割为 url 数组,然后遍历 url 数组,对数组中的值进行编码过滤,再调用系统方法生成短网址,最后将结果返回。

完整代码:

<?php
/*
Plugin Name: Batch generation shorturl
Plugin URI: https://github.com/her-cat/batch-generation-shorturl
Description: Batch generation of short URLs
Version: 1.0
Author: 她和她的猫
Author URI: https://github.com/her-cat
*/

// 注册插件
yourls_add_filter( 'api_action_batch_generation', 'batch_generation_shorturl' );

// 插件核心内容
function batch_generation_shorturl() {

    // 判断是否传入参数 urls
	if( !isset( $_REQUEST['urls'] ) ) {
		return array(
			'statusCode' => 400,
			'simple'     => "Need a 'urls' parameter",
			'message'    => 'error: missing param',
		);	
	}

    $urls = $_REQUEST['urls'];

    // 将 urls 以 , 分割为 url 数组
    $url_arr = explode( ',', $urls );
    // 存放结果集
	$result = array();
    // 遍历 url 数组
    foreach ( $url_arr as $url ) {
        // 对 url 进行编码过滤
        $url = yourls_encodeURI( $url );
        $url = yourls_escape( yourls_sanitize_url( $url ) );

        // 生成短网址
        $return = yourls_add_new_link( $url );
        
        // 判断是否生成功
        if (isset($return['statusCode']) && $return['statusCode'] == 200 ) {
            // 加入结果集中
            $result[] = [
                'raw_url' => $url,  // 原 url
                'keyword' => $return['url']['keyword'], // 短网址关键词
                'shorturl' => $return['shorturl'], // 生成的短网址
            ];
        }
	}
    
    // 输出 json 格式结果
	echo json_encode($result);exit;
}

使用插件

请求地址:

http://域名或ip地址/yourls-api.php?username=你的登录账户&password=你的登录密码&action=batch_generation&urls=https://baidu.com,https://youku.com,https://csdn.com

结果:

[{
	"raw_url": "https://baidu.com",
	"keyword": "1",
	"shorturl": "http://yourls.com/1"
}, {
	"raw_url": "https://youku.com",
	"keyword": "2",
	"shorturl": "http://yourls.com/2"
}, {
	"raw_url": "https://csdn.com",
	"keyword": "3",
	"shorturl": "http://yourls.com/3"
}]

总结

最重要的是要知道 YOURLS 自带的函数有哪些,以及它们的用法,最后将他们组合起来。

这篇文章没有将如何安装、启用插件,不了解的可以参考上一篇文章。

最后,不知不觉七月份就过去了,这一个月断断续续的写了5篇文章,最后一篇拖延了十多天,拖延症发作,一边感叹着时间过得真快,感觉自己就是一条咸鱼,一边看着这几篇文章,感觉又好像做了些什么,留下了一点东西。

这大概就是写博客的原因吧。

Github:https://github.com/her-cat/batch-generation-shorturl