做博客多久了?才明白手动折腾太累

作为一个在互联网摸爬滚打多年的开发者,我的技术栈里离不开 C#。很多朋友问我,平时维护像 零点博客 这样的站点靠什么?其实很多时候是靠“笨办法”,比如手动复制粘贴写文章。但最近我在优化开发流程时,发现通过 C# 直接调用 EMLOG 的接口来实现自动化,效率提升简直是降维打击。

如果你也在使用 EMLOG建站开发,或者是被手动管理几百篇文章搞烦了,这篇纯干货你一定要看下去。

第一步:搞懂 EMLOG 的 API 接口

EMLOG 虽然是 PHP 写的,但它自带的 API 接口非常完善。我们在做开发时,核心逻辑只有两步:

  1. 登录获取 Token:这就像你进大楼的门禁卡,每次操作前都得先刷一下。
  2. 发送 POST 请求:拿到卡后,就可以发消息了,比如发布文章或备份数据。

第二步:手写一个 C# 自动发布小工具

下面这个脚本是我写在零点博客开发环境里的一个小 Demo,没什么花里胡哨的 UI,就是一个控制台程序,纯粹为了干活。

using System;
using System.Net.Http;
using System.Text;
using Newtonsoft.Json; // 建议安装 Newtonsoft.Json

namespace EmlogCrawler
{
    class Program
    {
        static void Main(string[] args)
        {
            // 0. 你的 EMLOG 博客地址
            string blogUrl = "http://你的域名.com";
            string adminEmail = "admin@你的域名.com";
            string adminPass = "你的后台密码";

            // 1. 先登录,换取 Token
            using (var client = new HttpClient())
            {
                var loginData = new
                {
                    action = "login",
                    user = adminEmail,
                    password = adminPass
                };

                var jsonContent = JsonConvert.SerializeObject(loginData);
                var response = await client.PostAsync(blogUrl + "/tb.php", new StringContent(jsonContent, Encoding.UTF8, "application/json"));
                var resJson = await response.Content.ReadAsStringAsync();

                // 这里需要解析返回的 token,通常在返回的 JSON 里
                // 假设我们拿到了 token
                string token = "这里是登录成功后返回的Token"; 

                if (!string.IsNullOrEmpty(token))
                {
                    Console.WriteLine("登录成功!准备发布...");

                    // 2. 构建发布文章的数据
                    var publishData = new
                    {
                        action = "publish_post",
                        title = "C# 自动化测试 - " + DateTime.Now.ToString("HH:mm:ss"),
                        content = "这是通过 C# 脚本自动生成的测试内容,内容有点长,用来测试容错率。",
                        excerpt = "摘要测试...",
                        cid = 0, // 0 代表最新分类
                        cover = "",
                        password = "",
                        tags = "测试,C#",
                        top = 0,
                        allow_remark = 1,
                        date = DateTime.Now.ToString("Y-m-d H:i:s")
                    };

                    // 3. 发送发布请求
                    // 注意:EMLOG 接口通常支持 JSON 和 XML,这里演示 JSON
                    // 需要加上 token 作为参数
                    var finalData = new { token, publishData };
                    var finalJson = JsonConvert.SerializeObject(finalData);

                    var finalResponse = await client.PostAsync(blogUrl + "/tb.php", new StringContent(finalJson, Encoding.UTF8, "application/json"));
                    var finalResult = await finalResponse.Content.ReadAsStringAsync();

                    Console.WriteLine("发布结果:" + finalResult);
                }
            }
        }
    }
}

核心点解析: 代码里的 `tb.php` 就是 EMLOG 的接口入口,这是系统自带的。不要去改核心代码,直接调这个就行。如果你熟悉 ASP.NET Core,这简直不要太简单。

第三步:解决 Token 失效与跨域问题

刚开始跑的时候,我踩了不少坑。最常见的就是 Token 过期。我这里做了简化处理,实际项目中你应该加一个“自动刷新 Token”的机制。另外,如果你在本地写脚本,遇到跨域(CORS)问题,最简单的办法是给 PHP 加一个 CORS 头,或者直接把 PHP 放到后端跑。

写在最后:技术是为了更好的内容

写这篇 零点博客 的分享,其实也是想记录下这种开发思路。不管是用 C# 还是其他语言,建站开发的终极目的还是输出内容。希望这篇关于 EMLOGC# 结合的文章,能帮到正在做个人博客或者小型站点的朋友。如果你有更好的 EMLOG 插件推荐,欢迎在评论区留言交流!