声明:提供的所有API接口仅供学习和娱乐使用。我们尊重并保护所有版权和知识产权,如有任何侵权行为,请通过以下方式与我们联系(博主QQ:345179552)。
唯爱公益API(api.im1.cc)是一款由博主独立开发的API管理系统,我始终坚持公益初心,致力于为广大开发者提供一个方便、安全、易于使用的API平台,我们相信,在唯爱API的帮助下,开发者们一定能够在API技术的道路上走得更远!助大家在学习和探索API技术的道路上更进一步。
唯爱API提供了丰富的API接口,抖音解析(仅提供学习使用),IP个性签名 、天气信息查询、随机图片、获取QQ头像等API。博主为每个API都提供了详细的文档说明,包括接口地址、请求参数、返回结果等信息。开发者可以根据自己的需求选择合适的API进行学习和使用。
前端:使用Vue 3框架,结合TypeScript、axios和Element Plus组件库,打造高效、灵活的前端应用。
后端:基于Node.js和Express框架构建后端服务,确保系统的稳定性和扩展性。
界面展示图:
跳转地址:
唯爱公益API
如图所示,星宿小程序作者突然来信!
在安卓项目中接入穿山甲广告平台(Pangle Ads,之前叫穿山甲广告),你可以通过官方SDK来实现。以下是接入穿山甲广告的一般步骤,基于Java语言。
1. 在项目中添加依赖
修改项目的build.gradle文件。
在项目级的build.gradle中,添加Pangle SDK的maven仓库:
allprojects {
repositories {
google()
jcenter()
maven {
url 'https://artifact.bytedance.com/repository/pangle'
}
}
}
在应用级的build.gradle中,添加Pangle SDK依赖项(以穿山甲广告的激励视频为例):
dependencies {
implementation 'com.bytedance.sdk:pangle:4.0.0.6' // SDK的版本号可能会更新,请参考官网
}
2. 配置权限
在AndroidManifest.xml中添加必要的权限和配置:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<application
...>
<!-- Pangle SDK初始化 -->
<meta-data
android:name="com.bytedance.sdk.openadsdk.APP_ID"
android:value="你的App ID"/> <!-- 替换成你的App ID -->
<!-- 网络安全配置 -->
<meta-data
android:name="com.bytedance.sdk.openadsdk.network_security_config"
android:value="@xml/network_security_config"/>
</application>
步骤3:初始化穿山甲SDK
在你的Application类中初始化穿山甲SDK:
import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdSdk;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
TTAdSdk.init(this, new TTAdConfig.Builder()
.appId("你的App ID") // 替换成你的App ID
.useTextureView(true)
.appName("你的应用名称")
.titleBarTheme(TTAdConstant.TITLE_BAR_THEME_LIGHT)
.allowShowNotify(true)
.debug(true) // Debug模式下会输出日志
.build());
}
}
步骤4:加载和展示广告
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;
import com.bytedance.sdk.openadsdk.AdSlot;
public class MainActivity extends AppCompatActivity {
private TTAdNative mTTAdNative;
private TTRewardVideoAd mTTRewardVideoAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建TTAdNative对象,用于加载广告
mTTAdNative = TTAdSdk.getAdManager().createAdNative(this);
// 加载激励视频广告
loadRewardVideoAd("你的广告位ID"); // 替换成你的广告位ID
}
private void loadRewardVideoAd(String adId) {
// 创建广告参数
AdSlot adSlot = new AdSlot.Builder()
.setCodeId(adId)
.setSupportDeepLink(true)
.setExpressViewAcceptedSize(500, 500) // 单位是dp
.setUserID("user123") // 用户ID, 用于广告效果归因
.setMediaExtra("media_extra") // 附加参数,可以传递给服务器
.build();
// 加载广告
mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
@Override
public void onError(int code, String message) {
Log.e("广告加载失败", "code: " + code + ", message: " + message);
}
@Override
public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
Log.d("广告加载成功", "激励视频广告已加载");
mTTRewardVideoAd = ad;
}
@Override
public void onRewardVideoCached() {
Log.d("广告缓存成功", "激励视频广告缓存完成");
}
});
}
private void showRewardVideoAd() {
if (mTTRewardVideoAd != null) {
mTTRewardVideoAd.showRewardVideoAd(this);
}
}
}
步骤5:测试和上线
穿山甲SDK支持多种广告形式,如Banner广告、插屏广告、信息流广告等,加载和展示的流程与激励视频广告类似,只需根据需求配置不同的AdSlot参数。
详细的API文档和具体广告类型的示例,可以参考穿山甲官方文档。
通过上述步骤,你应该可以成功接入穿山甲广告平台,并展示相应的广告。
]]>为什么会有想法来写这么一款插件,主要还是因为没有宝塔企业版,导致没有安装防火墙,本插件可以防御SQL注入、XSS攻击、CC攻击。
启用插件后可以防御 SQL 注入、XSS攻击、CC攻击。
插件后台可设置CC每分钟请求数限制,封禁时间(秒)。
插件后台自带CC模拟攻击测试。
记录信息在插件文件下的Lxanquan_log.txt文本内进行查看。
此插件主要是文章图片内容进行隐藏,分两种方式,第一种需登录后可见文章原图,第二种为评论后可见文章原图,没有登录和没有评论是无法正常查看到原图。
未登录效果:
评论后可见效果:
]]>在微信小程序中利用云开发实现文本内容审核可以通过以下步骤完成。文本内容审核主要是对用户提交的文本进行敏感信息检测和内容审核,确保内容的合法性和安全性。
首先,确保你的小程序已经开通了云开发功能。如果还没有,可以在微信开发者工具中创建一个新的小程序,并开通云开发。
微信小程序提供了内容安全能力,包括文本内容审核功能。你需要在微信小程序后台配置相应的服务。
2.1. 获取审核服务密钥
在云开发中创建一个云函数,用于调用微信小程序的内容安全接口进行文本内容审核。
3.1 创建云函数
在微信开发者工具中创建一个新的云函数,例如命名为 textCheck。
3.2 云函数代码示例
// 云函数 textCheck
const cloud = require('wx-server-sdk');
const request = require('request-promise');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
exports.main = async (event, context) => {
const { content } = event;
try {
const accessToken = await getAccessToken();
const result = await checkText(accessToken, content);
return result;
} catch (err) {
return {
errCode: -1,
errMsg: '内容审核失败'
};
}
};
// 获取 access token
async function getAccessToken() {
const res = await cloud.callFunction({
name: 'getWXAccessToken'
});
return res.result.access_token;
}
// 调用内容安全接口进行文本审核
async function checkText(accessToken, content) {
const apiUrl = `https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${accessToken}`;
const options = {
method: 'POST',
uri: apiUrl,
body: {
content
},
json: true
};
const res = await request(options);
return res;
}
3.3 创建获取 AccessToken 的云函数
创建一个额外的云函数来获取访问微信内容安全接口所需的 AccessToken,命名为 getWXAccessToken。
// 云函数 getWXAccessToken
const cloud = require('wx-server-sdk');
const axios = require('axios');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
exports.main = async () => {
try {
const { APPID, APPSECRET } = cloud.getWXContext().ENV;
const apiUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`;
const res = await axios.get(apiUrl);
return res.data;
} catch (err) {
return {
errCode: -1,
errMsg: '获取 AccessToken 失败'
};
}
};
在小程序端调用云函数,传入待审核的文本内容,并处理返回的审核结果。
4.1 小程序端代码示例
// 在小程序页面中调用云函数进行文本审核
wx.cloud.callFunction({
name: 'textCheck',
data: {
content: '待审核的文本内容'
},
success: res => {
console.log('审核结果:', res.result);
// 处理审核结果
},
fail: err => {
console.error('文本审核失败', err);
}
});
通过以上步骤,你可以在微信小程序中利用云开发实现文本内容审核功能,保障用户和平台的安全。
]]>站内内容引用插件,可在文章里面引用文章,独立页面,评论,用户,进而展示相关信息,引用文章时会根据评论数量进行评分。
//引用指定文章/独立页面
{post-文章或页面的cid}
{post-文章或页面的slug}
//引用指定评论
{comment-评论的coid}
支持点击评论跳转到完整评论内容处
//引用指定用户
{user-用户的uid}
今天有小伙伴与我交流发了一个PPT文件,我打开一看是个人简历的PPT文档。 他说想把此PPT文档样子做成网站形式进行展示,自己做个网站的引导页,我觉得他的想法挺有意思,就答应给他做了,不过...
评论留言参与抽奖即可免费获得此插件完整源代码!
每个用户每天有3次抽奖机会,如果三次机会没有获奖,第二天再来抽奖!
不是没人中奖,7月份中奖的数据没有,是因为设计插件时忘记编写重新开启活动后把之前的中奖名单自动记录为历史而不是删除,说简单点就是忘记多添加一个数据库的字段。
新增历史中奖记录功能
1、在每次活动结束时,不删除中奖记录,而是将其标记为历史记录。
2、在展示历史中奖名单时,包含所有的历史记录。
大家发现问题可在评论区留言或者发送邮件到我的邮箱:im1cc@qq.com,我看到也会进行亲测再进行修复,再此感谢那些发现问题能告知我的小伙伴们了。
]]>在使用 Docker 搭建的 Nginx 和 WordPress 环境中,自定义主题使用失败的情况可能由多种原因引起。以下是一些可能的原因和相应的解决方法:
进入 Docker 容器:
docker exec -it <wordpress_container_name> bash
检查主题目录权限:
cd /var/www/html/wp-content/themes
ls -l
设置适当的权限(例如 755):
chmod -R 755 <your_theme_directory>
确保主题文件完整
确保自定义主题文件完整,尤其是 style.css 和 functions.php 文件。style.css 应包含主题的基本信息,如下所示:
/*
Theme Name: My Lixiang Theme
Theme URI: http://example.com/
Description: A Lixiang theme for WordPress
Author: Your Name
Author URI: http://example.com/
Template: Lixiang
Version: 1.0.0
*/
确保 Nginx 配置正确,特别是根目录设置和 PHP 文件处理配置。
在 Nginx 配置文件中,检查根目录配置:
server {
listen 80;
server_name yourdomain.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
重启 Nginx 容器:
docker restart <nginx_container_name>
示例如下:
version: '3.1'
services:
wordpress:
image: wordpress:latest
ports:
- "8000:80"
volumes:
- ./wp-content/themes:/var/www/html/wp-content/themes
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
volumes:
- db_data:/var/lib/mysql
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./wp-content/themes:/var/www/html/wp-content/themes
volumes:
db_data:
检查 Nginx 和 PHP 错误日志,了解更多关于问题的详细信息。
查看 Nginx 错误日志:
docker logs <nginx_container_name>
查看 PHP 错误日志(通常在容器内的 /var/log/php_errors.log):
docker exec -it <wordpress_container_name> tail -f /var/log/php_errors.log
通过上述步骤,你应该能够排查并解决自定义主题使用失败的问题。
如果问题依然存在,请再评论区留言提供更多详细信息,以便我进一步诊断和解决。
在WordPress中修改固定链接(Permalinks)后,如果所有文章都返回500错误,通常与以下几个问题有关:
检查你的.htaccess文件,确保它包含以下内容(这是默认的WordPress重写规则):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
在Apache中启用mod_rewrite模块:
sudo a2enmod rewrite
sudo systemctl restart apache2
确保虚拟主机配置允许重写。你的虚拟主机配置文件(如/etc/apache2/sites-available/000-default.conf)应该包含以下指令:
<Directory /var/www/html>
AllowOverride All
</Directory>
启用WordPress调试模式以获得更多调试信息。编辑wp-config.php文件,添加或修改以下行:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
通过以上检查步骤,你应该能够找到并修复修改固定链接后导致500错误的具体原因。
如果问题依然存在,可以进一步在评论区留言提供错误日志或详细信息,以便我能更精确地诊断和解决您的问题。
]]>在 WordPress 中开发自定义区块并在其中使用其他区块(如 wp:image),可以通过 Gutenberg 块编辑器的 React 组件来实现。这通常涉及使用 @wordpress/blocks 和 @wordpress/block-editor 包来创建和嵌套区块。以下是详细步骤,包括创建一个自定义区块并在其内部使用 wp:image。
使用 @wordpress/create-block
npx @wordpress/create-block my-custom-block
这个命令会生成一个名为 my-custom-block 的项目文件夹,包含开发自定义区块所需的基础文件。
编辑 block.json
定义自定义区块的基本信息:
{
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 2,
"name": "my-custom-block/container",
"title": "My Custom Block",
"category": "widgets",
"icon": "smiley",
"description": "A custom block with nested image block.",
"supports": {
"html": false
},
"attributes": {
"content": {
"type": "string",
"default": ""
}
},
"textdomain": "my-custom-block",
"editorScript": "file:./build/index.js",
"editorStyle": "file:./build/editor.css",
"style": "file:./build/style.css"
}
编辑 src/index.js
注册区块:
import { registerBlockType } from '@wordpress/blocks';
import Edit from './edit';
import save from './save';
import './style.scss';
registerBlockType('my-custom-block/container', {
edit: Edit,
save,
});
编辑 src/edit.js
在编辑视图中使用 wp:image 块:
import { __ } from '@wordpress/i18n';
import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';
const ALLOWED_BLOCKS = ['core/image'];
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<h2>{__('My Custom Block', 'my-custom-block')}</h2>
<InnerBlocks allowedBlocks={ALLOWED_BLOCKS} />
</div>
);
};
export default Edit;
编辑 src/save.js
保存视图支持嵌套内容:
import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';
const save = ({ attributes }) => {
const blockProps = useBlockProps.save();
return (
<div {...blockProps}>
<InnerBlocks.Content />
</div>
);
};
export default save;
编辑 src/style.scss
定义区块的样式:
/* style.scss - 前端样式 */
.wp-block-my-custom-block-container {
padding: 20px;
border: 1px solid #ccc;
}
/* editor.scss - 编辑器样式 */
.wp-block-my-custom-block-container {
padding: 20px;
border: 1px dashed #ccc;
}
构建区块
在项目目录中运行以下命令以构建 JavaScript 和样式文件:
npm install
npm run build
加载区块
在 WordPress 插件或主题中注册和加载区块。
插件主文件(例如 my-custom-block.php):
<?php
/*
Plugin Name: My Custom Block
Description: A custom block with nested image block.
Version: 1.0
Author: Your Name
*/
function my_custom_block_register() {
register_block_type(__DIR__);
}
add_action('init', 'my_custom_block_register');
?>
使用区块属性
如果需要在自定义区块中使用区块属性,可以在 edit.js 和 save.js 中处理属性。例如,为图片块添加自定义属性:
// edit.js
const ALLOWED_BLOCKS = ['core/image'];
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<h2>{__('My Custom Block', 'my-custom-block')}</h2>
<InnerBlocks
allowedBlocks={ALLOWED_BLOCKS}
template={[
['core/image', { align: 'center' }]
]}
/>
</div>
);
};
// save.js
const save = ({ attributes }) => {
const blockProps = useBlockProps.save();
return (
<div {...blockProps}>
<InnerBlocks.Content />
</div>
);
};
使用 InspectorControls
你可以使用 InspectorControls 添加额外的设置:
// edit.js
import { InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<InspectorControls>
<PanelBody title={__('Settings', 'my-custom-block')}>
<TextControl
label={__('Example Setting', 'my-custom-block')}
value={attributes.exampleSetting}
onChange={(value) => setAttributes({ exampleSetting: value })}
/>
</PanelBody>
</InspectorControls>
<h2>{__('My Custom Block', 'my-custom-block')}</h2>
<InnerBlocks allowedBlocks={ALLOWED_BLOCKS} />
</div>
);
};
如果你需要在前端显示自定义的样式或脚本,可以在 style.scss 中定义样式,或在保存视图中添加自定义 HTML 结构。
自定义前端样式
/* style.scss */
.wp-block-my-custom-block-container .wp-block-image img {
border-radius: 50%;
}
总结
通过以上步骤,你可以开发一个自定义 WordPress 区块,并在其中嵌套使用 wp:image(即 core/image)等其他核心区块。此流程包括:
通过这种方式,你可以在自定义区块中实现复杂的布局和功能,利用 WordPress 提供的区块编辑器 API 构建动态和互动性强的内容块。
]]>在 WordPress 中开发高度自定义的区块(blocks)除了使用 HTML,还可以利用现代 JavaScript、React、和 WordPress 的 @wordpress/block-editor 和 @wordpress/blocks 等包。这里是详细步骤,包括设置开发环境、创建区块、以及如何实现自定义功能。
使用 @wordpress/create-block 工具
WordPress 提供了 @wordpress/create-block 工具,简化区块开发的基本设置。
npx @wordpress/create-block my-custom-block
这会创建一个新项目文件夹 my-custom-block,包含所有必要的文件和配置。
文件结构
my-custom-block/
├── build/
├── src/
│ ├── index.js
│ ├── edit.js
│ ├── save.js
│ ├── style.scss
│ └── editor.scss
├── block.json
├── package.json
├── README.md
└── webpack.config.js
重要文件
编写区块代码
block.json
定义区块的基本信息:
{
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 2,
"name": "my-custom-block/block",
"title": "My Custom Block",
"category": "widgets",
"icon": "smiley",
"description": "A custom block example.",
"supports": {
"html": false
},
"textdomain": "my-custom-block",
"editorScript": "file:./build/index.js",
"editorStyle": "file:./build/editor.css",
"style": "file:./build/style.css"
}
src/index.js
注册区块:
import { registerBlockType } from '@wordpress/blocks';
import Edit from './edit';
import save from './save';
import './style.scss';
registerBlockType('my-custom-block/block', {
edit: Edit,
save,
});
src/edit.js
定义编辑视图:
import { useBlockProps } from '@wordpress/block-editor';
import { TextControl } from '@wordpress/components';
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<TextControl
label="Example Text"
value={attributes.exampleText}
onChange={(value) => setAttributes({ exampleText: value })}
/>
</div>
);
};
export default Edit;
src/save.js
定义保存视图:
import { useBlockProps } from '@wordpress/block-editor';
const save = ({ attributes }) => {
const blockProps = useBlockProps.save();
return (
<div {...blockProps}>
{attributes.exampleText}
</div>
);
};
export default save;
src/style.scss 和 src/editor.scss
定义区块的样式:
/* style.scss - 前端样式 */
.wp-block-my-custom-block-block {
padding: 20px;
border: 1px solid #ccc;
}
/* editor.scss - 编辑器样式 */
.wp-block-my-custom-block-block {
padding: 20px;
border: 1px dashed #ccc;
}
使用 npm 脚本来打包区块:
npm install
npm run build
这会编译你的 JavaScript 和 SCSS 文件到 build 目录。
确保在你的 WordPress 主题或插件中注册和加载区块。
PHP 代码
在插件或主题的 PHP 文件中:
function my_custom_block_register() {
register_block_type(__DIR__);
}
add_action('init', 'my_custom_block_register');
使用更多 React 组件
你可以使用 WordPress 提供的各种 React 组件,如 TextControl, MediaUpload, InspectorControls 等,以增强区块的功能。
import { InspectorControls, MediaUpload } from '@wordpress/block-editor';
import { Button, PanelBody } from '@wordpress/components';
// 在 edit.js 中使用这些组件
<InspectorControls>
<PanelBody title="Media Settings">
<MediaUpload
onSelect={(media) => setAttributes({ mediaId: media.id, mediaUrl: media.url })}
allowedTypes={['image']}
render={({ open }) => (
<Button onClick={open} className="button button-large">
Select Image
</Button>
)}
/>
</PanelBody>
</InspectorControls>
动态区块
创建动态区块可以在保存时执行 PHP 代码生成内容:
function render_my_custom_block($attributes, $content) {
// 使用 $attributes 和 $content 来生成动态内容
return '<div class="my-custom-block">' . esc_html($attributes['exampleText']) . '</div>';
}
register_block_type('my-custom-block/block', [
'render_callback' => 'render_my_custom_block',
]);
总结
开发高度自定义的 WordPress 区块涉及现代 JavaScript(尤其是 React)和 WordPress 提供的区块编辑器 API。你可以从基础的 HTML 开始,逐步增加交互性和复杂性。这里是主要步骤:
这种方法可以让你在 WordPress 中创建功能丰富且高度自定义的区块,满足各种复杂的需求。
]]>
这个牛啊 意思删除文章同时删除了文章内的图片? [tv_呆]