C#编程实战:调用EMLOG接口并封装自动化数据采集工具
在零点博客进行技术复盘时,我经常遇到需要处理第三方数据的需求。最近博主在折腾博客迁移和数据统计,发现EMLOG的RSS feed结构很固定,却因为要处理大量历史文章,手动操作效率太低。于是决定利用C#编程的强类型优势,开发一个小型的数据采集工具。
这个案例涵盖了HTTP请求、HTML解析、JSON处理以及数据库交互,非常适合想进阶后端开发的伙伴参考。下面直接进入干货环节。
1. 环境准备与核心逻辑
我们需要一个发送HTTP请求的客户端,以及用来处理数据的正则表达式库。核心思路很简单:发送请求获取网页/接口内容 -> 使用正则提取关键信息 -> 组装JSON对象 -> 保存到MySQL。
2. 获取数据与正则提取
首先封装一个HttpClient来获取EMLOG的接口数据。这里有个小坑,HttpClient作为跨域长连接对象,创建频率太高会导致端口耗尽,实际开发中建议用单例模式或者DI容器管理。
public class EmlogCrawler{
// 使用单例或DI管理 HttpClient
private static readonly HttpClient Client = new HttpClient();
private const string EmlogApiUrl = "https://www.example.com/feed.php";
public async Task<List<ArticleInfo>> GetArticlesAsync()
{
var response = await Client.GetStringAsync(EmlogApiUrl);
// 使用正则提取<title>和<link>
var titleMatches = Regex.Matches(response, <title>(.*?)</title>);
var linkMatches = Regex.Matches(response, <link>(.*?)</link>);
var articles = new List<ArticleInfo>();
for (int i = 0; i < titleMatches.Count; i++)
{
articles.Add(new ArticleInfo
{
Title = titleMatches[i].Groups[1].Value,
Url = linkMatches[i].Groups[1].Value
});
}
return articles;
}
}
public class ArticleInfo
{
public string Title { get; set; }
public string Url { get; set; }
}
3. 避坑指南:SQL注入防护与预处理语句
拿到数据后,最关键的一步是入库。很多初学者喜欢字符串拼接SQL,这在SQL注入防护上是绝大的隐患。在处理EMLOG这类内容型数据时,必须使用参数化查询。
public void SaveToDatabase(List<ArticleInfo> articles){
string sql = "INSERT INTO blog_articles (title, link, create_time) VALUES (@Title, @Link, @Time)";
using (SqlConnection conn = new SqlConnection("ConnectionString"))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
// 绑定参数,数据库会自动转义,防止SQL注入
cmd.Parameters.AddWithValue("@Title", "Test Title");
cmd.Parameters.AddWithValue("@Link", "https://example.com");
cmd.Parameters.AddWithValue("@Time", DateTime.Now);
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
4. 工具开发总结
通过这个小工具,我成功将原本需要半天的手动整理工作缩减到了几分钟。在实际的C#后端开发中,接口开发与数据交互是核心。无论是解析复杂的JSON/XML,还是与数据库打交道,掌握预处理语句和正则表达式这两把利器,能让你少走很多弯路。
如果你也在做在线工具开发或者博客相关项目,不妨参考这个思路。关注零点博客,下期我们继续拆解.NET Core在中间件开发中的应用。



评论一下吧
取消回复