You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
74 lines
1.8 KiB
<?php |
|
/* |
|
* YOURLS API |
|
* |
|
* author:xiaoz<xiaoz.me> |
|
* update:2022/03 |
|
* |
|
*/ |
|
header('Content-Type:application/json; charset=utf-8'); |
|
//载入扩展配置文件 |
|
require('ext.php'); |
|
|
|
//默认域名,请改成你自己的域名,末尾不要带有/ |
|
define("DOMAIN","https://xw.al"); |
|
//每日单IP限制,就是每个IP每天可以生成多少个短链接,默认50个 |
|
define("LIMIT",50); |
|
//过期时间设置 |
|
$today = strtotime(date("Y-m-d 23:59:59"),time()); |
|
$exp_time = $today - time(); |
|
//改成你自己的secret signature token,登录YOURLS后台 - 工具 - 安全的API调用 - 获取secret signature token |
|
define("TOKEN",''); |
|
|
|
//获取url |
|
$url = @$_POST['url']; |
|
//echo $url; |
|
//exit; |
|
//try{ |
|
// $url = urldecode($url); |
|
//} |
|
//catch(Exception $e){ |
|
// err_msg($e->getMessage()); |
|
//} |
|
//如果URL不合法,直接停止 |
|
if( ! filter_var($url, FILTER_VALIDATE_URL) ) { |
|
err_msg('URL不合法!'); |
|
} |
|
|
|
|
|
//获取用户IP |
|
$ip = getIP(); |
|
//设置key |
|
$key = 'ip_'.str_replace('.','_',$ip); |
|
|
|
//连接本地的 Redis 服务 |
|
$redis = new Redis(); |
|
$redis->connect('127.0.0.1', 6379); |
|
|
|
//判断key是否存在 |
|
if( ! $redis->get($key) ) { |
|
$redis->set($key, '0'); |
|
$redis->EXPIRE($key, $exp_time); |
|
} |
|
//如果key存在 |
|
if ( ($redis->get($key)) || ( $redis->get($key) === '0' ) ) { |
|
//获取value |
|
$value = intval($redis->get($key)); |
|
//如果value小于limit,则调用API |
|
if( $value < LIMIT ) { |
|
$api_url = DOMAIN.'/yourls-api.php?signature='.TOKEN.'&action=shorturl&format=json&url='.$url; |
|
$re = curl($api_url); |
|
$value = (string)($value + 1); |
|
|
|
$redis->set($key, $value); |
|
$redis->EXPIRE($key, $exp_time); |
|
// |
|
exit($re); |
|
} |
|
else{ |
|
err_msg('今日请求上限!'); |
|
} |
|
} |
|
//var_dump($redis->get($key)); |
|
//echo $key; |
|
//echo $redis->get($key);
|
|
|