写在前面:为什么要用 C# 接 EMLOG 的接口?
在零点博客运营了一段时间,我发现 EMLOG(PHP 架构)和 C# 后端在实际开发中经常需要数据互通。比如有时候我们需要用 C# 写个桌面工具去同步博客文章,或者反过来用 PHP 读取 C# 写的接口数据。这次我就把这次折腾 C# 连接 EMLOG 的全过程复盘一下,重点聊聊JSON 解析和SQL 注入防护这两个大家最容易踩的坑。
1. 核心思路:C# 爬取与解析
咱们的目标很明确:通过 C# 请求 EMLOG 的文章列表接口,拿到数据后存储到本地 MySQL,同时还要确保数据是安全的。
Step 1:请求与正则匹配
EMLOG 返回的数据通常是 HTML 或者 XML,有时候我们并不想用庞大的第三方库,直接用正则表达式提取想要的内容往往更轻量。这里要注意 HTTP 请求的 Header 设置,特别是 User-Agent,不然很容易被服务器拦截。
using System.Net.Http;
using System.Text.RegularExpressions;
// 模拟请求 EMLOG 列表
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0...");
string html = await client.GetStringAsync("https://www.lingdianblog.com/api/post_list");
// 提取文章标题和链接的正则
string pattern = @"<title>([^<>]+)</title>.*?href="([^"]+)"";
MatchCollection matches = Regex.Matches(html, pattern, RegexOptions.IgnoreCase);
foreach (Match match in matches)
{
Console.WriteLine($"标题:{match.Groups[1].Value} 链接:{match.Groups[2].Value}");
}
}
2. 数据落地:MySQL 防注入是底线
拿到 JSON 数据后,存入数据库是关键一步。很多新手直接用字符串拼接 SQL,这简直是在“裸奔”。一旦用户输入里有单引号,整个博客可能就挂了。
在零点博客的实战中,我强烈建议大家使用预处理语句。无论你是用原生 ADO.NET 还是 Dapper/EF Core,参数化查询都是标准配置。
// 使用 MyConnection 和参数化查询
string sql = "INSERT INTO emlog_post (title, content, uid) VALUES (@Title, @Content, @Uid)";
using (var cmd = new MySqlCommand(sql, connection))
{
// 绝对不要做 cmd.CommandText = "INSERT... ' " + title + " "; 这种操作!
cmd.Parameters.AddWithValue("@Title", postTitle);
cmd.Parameters.AddWithValue("@Content", postContent);
cmd.Parameters.AddWithValue("@Uid", 1);
cmd.ExecuteNonQuery();
}
3. 避坑指南:JSON/XML 解析的细节
C# 里处理 JSON 现在主要靠 System.Text.Json。这里有个小坑:日期格式。如果不做配置,C# 会把日期转成 1970 年的 Offset Time,在 EMLOG 的日期字段里存成乱码。解决办法是自定义 JsonNamingPolicy。
4. 总结与源码部署
整个接口开发流程其实就是:请求 -> 正则/JSON解析 -> 参数化SQL写入。代码跑通后,记得部署在服务器上设置定时任务,让它每小时自动同步一次,保持数据新鲜度。
代码我已经整理好了,放在了零点博客的 Github 仓库里,大家可以去下载看详细的注释。开发这种小工具,最大的价值就是复用性,下次换个 CMS 也能套用这套逻辑。



评论一下吧
取消回复