阅读视图

发现新文章,点击刷新页面。

零艺客 - 开源的API接口管理平台

前言

零艺客API管理平台是由zeroart开发的一款API接口管理平台。

截图

图片[1]-新锐博客

教程

1.数据库信息配置在路径【config/database.php】文件中
2.导入根目录下的【data.sql】数据库文件
3.设置网站运行目录为根目录【public】目录

后台地址 /admin/login.html
账户 admin 密码 123456

伪静态在public目录下,nginx和apache分别对应文件 nginx.htaccess和.htaccess

下载地址

零艺客API管理平台源码

分享一个蓝奏云解析源码

前言

有时候我们需要蓝奏云的直链做一些事情,比如远程更新等,所以能够解析直链就比较重要,今天就给大家分享一个解析源码,亲测可用

代码

<?php
/**
 * @package Lanzou
 * @author 莫忘
 * @version 1.2.96
 * @Date 2024-01-12
 * @link https://www.xrbk.cn
 */
header('Access-Control-Allow-Origin:*');
header('Content-Type:application/json; charset=utf-8');
//默认UA
$UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36';
$url = isset($_GET['url']) ? $_GET['url'] : "";
$pwd = isset($_GET['pwd']) ? $_GET['pwd'] : "";
$type = isset($_GET['type']) ? $_GET['type'] : "";
//判断传入链接参数是否为空
if (empty($url)) {
	die(
	    json_encode(
	        array(
	            'code' => 400,
	            'msg' => '请输入URL'
	        )
	        , JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
	    );
}
//一个简单的链接处理
$url='https://www.lanzoup.com/'.explode('.com/',$url)['1'];
$softInfo = MloocCurlGet($url);
//判断文件链接是否失效
if (strstr($softInfo, "文件取消分享了") != false) {
	die(
	    json_encode(
	        array(
	            'code' => 400,
	            'msg' => '文件取消分享了'
	        )
	        , JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
	    );
}
//取文件名称、大小
preg_match('~style="font-size: 30px;text-align: center;padding: 56px 0px 20px 0px;">(.*?)</div>~', $softInfo, $softName);
if(!isset($softName[1])) {
	preg_match('~<div class="n_box_3fn".*?>(.*?)</div>~', $softInfo, $softName);
}
preg_match('~<div class="n_filesize".*?>大小:(.*?)</div>~', $softInfo, $softFilesize);
if(!isset($softFilesize[1])) {
	preg_match('~<span class="p7">文件大小:</span>(.*?)<br>~', $softInfo, $softFilesize);
}
if(!isset($softName[1])) {
	preg_match('~var filename = '(.*?)';~', $softInfo, $softName);
}
if(!isset($softName[1])) {
	preg_match('~div class="b"><span>(.*?)</span></div>~', $softInfo, $softName);
}
//带密码的链接的处理
if(strstr($softInfo, "function down_p(){") != false) {
	if(empty($pwd)) {
		die(
				json_encode(
					array(
						'code' => 400,
						'msg' => '请输入分享密码'
					)
					, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
				);
	}
	preg_match_all("~skdklds = '(.*?)';~", $softInfo, $segment);
	$post_data = array(
			"action" => 'downprocess',
			"sign" => $segment[1][0],
			"p" => $pwd
		);
	$softInfo = MloocCurlPost($post_data, "https://www.lanzoup.com/ajaxm.php", $url);
	$softName[1] = json_decode($softInfo,JSON_UNESCAPED_UNICODE)['inf'];
} else {
	//不带密码的链接处理
	preg_match("~n<iframe.*?name="[sS]*?"ssrc="/(.*?)"~", $softInfo, $link);
	//蓝奏云新版页面正则规则
	if(empty($link[1])) {
		preg_match("~<iframe.*?name="[sS]*?"ssrc="/(.*?)"~", $softInfo, $link);
	}
	$ifurl = "https://www.lanzoup.com/" . $link[1];
	$softInfo = MloocCurlGet($ifurl);
	preg_match_all("~'sign':'(.*?)'~", $softInfo, $segment);
	$post_data = array(
			"action" => 'downprocess',
			"signs"=>"?ctdf",
			"sign" => $segment[1][0],
		);
	$softInfo = MloocCurlPost($post_data, "https://www.lanzoup.com/ajaxm.php", $ifurl);
}
//其他情况下的信息输出
$softInfo = json_decode($softInfo, true);
if ($softInfo['zt'] != 1) {
	die(
	    json_encode(
	        array(
	            'code' => 400,
	            'msg' => $softInfo['inf']
	        )
	        , JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
	    );
}
//拼接链接
$downUrl1 = $softInfo['dom'] . '/file/' . $softInfo['url'];
//解析最终直链地址
$downUrl2 = MloocCurlHead($downUrl1,"https://developer.lanzoug.com",$UserAgent,"down_ip=1; expires=Sat, 16-Nov-2019 11:42:54 GMT; path=/; domain=.baidupan.com");
//判断最终链接是否获取成功,如未成功则使用原链接
if($downUrl2 == "") {
	$downUrl = $downUrl1;
} else {
	$downUrl = $downUrl2;
}
//判断是否是直接下载
if ($type != "down") {
	die(
	    json_encode(
	        array(
	            'code' => 200,
	            'msg' => '解析成功',
	            'name' => isset($softName[1]) ? $softName[1] : "",
	            'filesize' => isset($softFilesize[1]) ? $softFilesize[1] : "",
	            'downUrl' => $downUrl
	        )
	        , JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
	    );
} else {
	header("Location:$downUrl");
	die;
}
//获取下载链接函数
function MloocCurlGetDownUrl($url) {
	$header = get_headers($url,1);
	if(isset($header['Location'])) {
		return $header['Location'];
	}
	return "";
}
//CURL函数
function MloocCurlGet($url = '', $UserAgent = '') {
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
	if ($UserAgent != "") {
		curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
	}
	curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.Rand_IP(), 'CLIENT-IP:'.Rand_IP()));
	#关闭SSL
	    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
	#返回数据不直接显示
	    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$response = curl_exec($curl);
	curl_close($curl);
	return $response;
}
//POST函数
function MloocCurlPost($post_data = '', $url = '', $ifurl = '', $UserAgent = '') {
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
	if ($ifurl != '') {
		curl_setopt($curl, CURLOPT_REFERER, $ifurl);
	}
	curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.Rand_IP(), 'CLIENT-IP:'.Rand_IP()));
	#关闭SSL
	    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
	#返回数据不直接显示
	    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
	$response = curl_exec($curl);
	curl_close($curl);
	return $response;
}
//直链解析函数
function MloocCurlHead($url,$guise,$UserAgent,$cookie) {
	$headers = array(
		'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
		'Accept-Encoding: gzip, deflate',
		'Accept-Language: zh-CN,zh;q=0.9',
		'Cache-Control: no-cache',
		'Connection: keep-alive',
		'Pragma: no-cache',
		'Upgrade-Insecure-Requests: 1',
		'User-Agent: '.$UserAgent
	);
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_HTTPHEADER,$headers);
	curl_setopt($curl, CURLOPT_REFERER, $guise);
	curl_setopt($curl, CURLOPT_COOKIE , $cookie);
	curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
	curl_setopt($curl, CURLOPT_NOBODY, 0);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	//超时设置,默认为10秒
	curl_setopt($curl, CURLOPT_TIMEOUT, 10);
	$data = curl_exec($curl);
	$url=curl_getinfo($curl);
	curl_close($curl);
	return $url["redirect_url"];
}
//随机IP函数
function Rand_IP() {
	$ip2id = round(rand(600000, 2550000) / 10000);
	$ip3id = round(rand(600000, 2550000) / 10000);
	$ip4id = round(rand(600000, 2550000) / 10000);
	$arr_1 = array("218","218","66","66","218","218","60","60","202","204","66","66","66","59","61","60","222","221","66","59","60","60","66","218","218","62","63","64","66","66","122","211");
	$randarr= mt_rand(0,count($arr_1)-1);
	$ip1id = $arr_1[$randarr];
	return $ip1id.".".$ip2id.".".$ip3id.".".$ip4id;
}
?>

快手随机短视频

前言

  • 随机快手短视频无水印采集播放系统 全自动更新采集快手官方最新热门短视频,包含视频详情和视频连接播放!页面自适应!支持手机和电脑端访问!
  • 接口数据采集来自快手视频官方,非第三方远程接口!点击刷新随机下一个即可随机播放最新热门视频

源码截图

图片[1]-新锐博客

下载地址

随机快手短视频

Typecho - 一款轻量级博客程序

前言

  • Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴。
  • Typecho基于PHP5 开发,支持多种数据库,是一款内核强健﹑扩展方便﹑体验友好﹑运行流畅的轻量级开源博客程序。
  • 相对于WordPress的臃肿,Typecho更加简洁轻量,适合个人博客网站的搭建。

教程

下载框架文件

Typecho是一款开源的博客程序,所以在开源平台Github 上即可下载。

Github地址:https://github.com/typecho/typecho

官方网址:https://typecho.org/

安装程序

  • 将压缩包上传到网站根目录中解压。
  • 访问你的网址,并根据提示完成安装步骤。

推荐

优秀主题

图片[1]-新锐博客

图片[2]-新锐博客

主题地址

安装好框架就可以安装主题了,和WordPress一样上传主题到主题目录下。

Typecho主题网站:https://typecho.me/

主题插件:https://plugins.typecho.me/  或  https://github.com/typecho-fans/plugins

具体教程请看:https://docs.typecho.org/doku.php

 

文本转语音API接口

前言

日常生活中不论是配音还是需要朗读一些文本都需要文本转语音的功能,但是很多都需要收费或者用不了。

介绍

文字转语音PHP接口源码,调用百度的接口,支持发言人可选1-15默认5[1-4基础音库]1=度小宇(成熟男声)2=度小美(成熟女声)3=度逍遥(磁性男声)4=度丫丫(可爱女童)[5-11精品音库]5=度逍遥(磁性男声)6=度小鹿(甜美女声)7=度博文(情感男声)8=度小童(活泼男童)9=度小萌(可爱女童)10=度米朵(可爱女童)11=度小娇(情感女声)[12-19臻品音库]12=度逍遥(磁性男声)13=度博文(情感男声)14=度小贤(情感男声)15=度小鹿(甜美女声)16=度灵儿(清澈女声)17=度小乔(情感女声)18=度小雯(成熟女声)19=度米朵(可爱女童)

教程

  • 直接上传到网站目录下即可,如果遇到报错请选择PHP7.4 ,并且在data 文件夹中创建一个yuyin 的空文件夹。
  • 请求方式: GET    请求示例: /yuyin.php?msg=新锐网络 

下载地址

文本转语音接口源码

随机图片API接口源码

前言

  • 本站因背景图或者缩略图等需求需要用到随机图片的API接口。
  • 但是用别人的接口,会担心某天接口GG了。
  • 所以自己根据网上的教程之类的写了一个PHP的随机图片API接口。

源码教程

里面有很多注释标明的很清楚了,参数type的作用是返回的类型(可空,默认返回down),如showdownjson

  • show:直接返回一张图片
  • down:直链下载方式
  • json:返回json格式的文本

首先新建一个dongman.txt 的文本,将图片的URL地址放进去,然后新建一个random.php 的文件,最后将下方代码填写进去。

开源代码

<?php
//存有美图链接的文件名img.txt
$filename = "dongman.txt";
if(!file_exists($filename)){
    die('文件不存在');
}

//从文本获取链接
$pics = [];
$fs = fopen($filename, "r");
while(!feof($fs)){
    $line=trim(fgets($fs));
    if($line!=''){
        array_push($pics, $line);
    }
}

//从数组随机获取链接
$pic = $pics[array_rand($pics)];

//返回指定格式
$type=$_GET['type'];

//设置缓存控制
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

//JSON返回
if (isset($_GET['type']) && $_GET['type'] === 'json') {
    $response = array(
        'code' => 200,
        'img' => $pic
    );
    header('Content-Type: application/json');
    echo json_encode($response);
}elseif (isset($_GET['type']) && $_GET['type'] === 'show') {
    echo '<img src="' . $pic . '" />';
}elseif (isset($_GET['type']) && $_GET['type'] === 'down') {
    header("location:$pic");
}else {
    header("location:$pic");   
}
?>

WordPress每天60秒看世界自动写文章

前言

因接口失效,所以该方式已经失效,有能力的把知乎接口换成其他的就可以了。

源码介绍

  • 有些博客站每天会自动采集并生成一篇《每天60秒读懂世界》的文章,代码在下方
  • 注意:此代码会在根目录下创建名称为60s的目录用于存放图片。
  • 自动创建文章分类:每天60秒读懂世界
  • 如果创建分类后在前台页面点击分类不显示分类下的文章,需要在后台重新编辑保存下分类(不需要修改内容)

使用教程

  • 复制代码到60s.php然后放到网站根目录
  • 然后打开修改33行的链接为个人网站链接即可
  • 访问https://你的域名/60s.php即可
  • 宝塔面板-计划任务-访问URL-每日定时自动执行即可

开源代码

<?php
$date = file_get_contents("https://www.zhihu.com/api/v4/columns/c_1261258401923026944/items");
$date = json_decode($date);
$content = $date->data[0]->content;
$content = preg_replace('/(<a.*?>[sS]*?</a>)/','',$content);
$pattern ='<img.*?src="(.*?)">';
preg_match($pattern,$content,$matches);
$src_path = $matches[1];
$src = imagecreatefromstring(file_get_contents($src_path));
$info = getimagesize($src_path);
//裁剪开区域左上角的点的坐标
$x = 0;
$y = 0;
//裁剪区域的宽和高
$width = 720;
$height = 350;
//最终保存成图片的宽和高,和源要等比例,否则会变形
$final_width = 720;
$final_height = round($final_width * $height / $width);
//将裁剪区域复制到新图片上,并根据源和目标的宽高进行缩放或者拉升
$new_image = imagecreatetruecolor($final_width, $final_height);
imagecopyresampled($new_image, $src, 0, 0, $x, $y, $final_width, $final_height, $width, $height);
$ext = pathinfo($src_path, PATHINFO_EXTENSION);
$rand_name = date("Ymd") . "." . $ext;
//创建文件夹保存图片
if (!file_exists("60s")){
    mkdir ("60s",0777,true);
}
imagejpeg($new_image,"60s/".$rand_name);
imagedestroy($src);
imagedestroy($new_image);
$content = strip_tags($content,'<p>');
$content = '<img class="size-full wp-image-156 aligncenter" src="https://www.70xr.com/60s/'.$rand_name.'"  width="720" height="350" />'.$content;
require __DIR__ . '/wp-config.php';
global $wpdb;
date_default_timezone_set('PRC');
$post_tag_arr = array();
//先检查文章分类是否存在
$term_taxonomy_id = $wpdb->get_row("SELECT tt.term_taxonomy_id from $wpdb->terms t join $wpdb->term_taxonomy tt on t.term_id = tt.term_id where t.name = '每天60秒读懂世界' and tt.taxonomy = 'category' ")->term_taxonomy_id;
if (!$term_taxonomy_id) {
    $wpdb->query("insert into $wpdb->terms (name,slug,term_group)VALUES('每天60秒读懂世界','60miao','0')");
    $category_id = $wpdb->insert_id;
    $wpdb->query("insert into $wpdb->term_taxonomy (term_id,taxonomy,description,parent,count)VALUES($category_id,'category','','0','1')");
    $term_taxonomy_id = $wpdb->insert_id;
}
$post_tag_arr[] = $term_taxonomy_id;

$html = $content;

//标题
$title = $date->data[0]->title;
//标题存在则不插入
$posts = $wpdb->get_row("SELECT id from $wpdb->posts where post_title = '$title' ");
if (!$posts) {
    $now = current_time('mysql');
    $now_gmt = current_time('mysql', 1);
    $wpdb->insert(
        $wpdb->posts,
        array(
            'post_author' => 1,
            'post_date' => $now,
            'post_date_gmt' => $now_gmt,
            'post_content' => $html,
            'post_title' => $title,
            'post_excerpt' => '',
            'post_status' => 'publish',
            'comment_status' => 'open',
            'ping_status' => 'open',
            'post_password' => '',
            'post_name' => $title,
            'to_ping' => '',
            'pinged' => '',
            'post_modified' => $now,
            'post_modified_gmt' => $now_gmt,
            'post_content_filtered' => '',
            'post_parent' => '0',
            'guid' => '',//文章链接 插入后修改
            'menu_order' => '0',
            'post_type' => 'post',
            'post_mime_type' => '',
            'comment_count' => '0',

        )
    );
    $insertid = $wpdb->insert_id;
    $post_guid = get_option('home') . '/?p=' . $insertid;
    $wpdb->query(" UPDATE $wpdb->posts SET guid=$post_guid where id = $insertid ");

    //插入文章和分类、标签、专题的关系
    $sql = " INSERT INTO $wpdb->term_relationships (object_id,term_taxonomy_id,term_order) VALUES ";
    foreach ($post_tag_arr as $key => $value) {
        $sql .= "($insertid, $value, '0'),";
    }
    $wpdb->query(rtrim($sql, ","));

}

 

❌