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在中间件开发中的应用。