<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>lianhaotian.com | Kyleの博客</title><description>这里记录我在编程、人工智能、游戏、阅读与生活中的实践和思考。所有文章均由我独立撰写，希望这些真实的探索与经验能为你带来一点启发。</description><link>https://lianhaotian.com/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>V3.0.0</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年9月2日 17:00:57</lastBuildDate><item><title>欢迎来到 lianhaotian.com</title><link>https://lianhaotian.com/posts/welcome-to-lianhaotian/</link><guid isPermaLink="true">https://lianhaotian.com/posts/welcome-to-lianhaotian/</guid><description>这里是小凯丽x_x的个人博客，记录编程、人工智能、游戏、读书与生活中的实践和思考。</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p>欢迎来到 <strong>lianhaotian.com</strong>。</p>
<p>我是小凯丽x_x，一名来自四川的学生开发者，也是一名喜欢游戏、阅读和折腾新技术的普通人。这个博客将用来记录我在编程、人工智能、项目开发和日常生活中的实践与思考。</p>
<p>我主要使用 Java 和 Python，也会研究前端开发、AI 应用、自动化工具和各种开源项目。我还在运营自己的 AI 中转服务，希望通过真实的项目积累更多关于开发、部署和产品运营的经验。</p>
<p>这里的文章都会由我个人撰写。无论是一次成功的实现、一段踩坑记录，还是游戏与生活中的片段，我都会尽量认真地整理和分享。</p>
<blockquote>
<p>且视他人之疑目如盏盏鬼火，大胆地去走你的夜路。</p>
</blockquote>
<p>早上中午晚上好，欢迎来这做客，别客气，随便坐。</p>
]]></content:encoded></item><item><title>零成本搭建地址生成器：用 Cloudflare 部署并探索广告变现</title><link>https://lianhaotian.com/posts/address-generator-cloudflare-guide/</link><guid isPermaLink="true">https://lianhaotian.com/posts/address-generator-cloudflare-guide/</guid><description>记录我使用 Cloudflare 搭建在线测试地址生成器的完整思路，包括项目设计、部署、SEO 内容规划和广告合规注意事项。</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p>开发网站、测试注册表单或演示电商流程时，经常需要填写姓名、电话、邮箱、街道、城市和邮编。一项项临时编写不仅效率低，还容易忘记不同国家的格式差异。</p>
<p>因此，我做了一个在线地址生成器，把常见的测试信息集中在一个页面中。本文记录这个项目的实现思路、Cloudflare 部署方式，以及如何把一个小工具逐步做成可被搜索和使用的工具站。</p>
<blockquote>
<p>本项目生成的是虚构测试数据，仅适用于开发、测试和演示。不要把它用于真实注册、支付、身份验证、收货或任何绕过平台规则的场景。</p>
</blockquote>
<h2>项目地址</h2>
<ul>
<li>在线工具：地址生成器</li>
<li>源码仓库：<a href="https://github.com/kylemarvin884/address-gen">kylemarvin884/address-gen</a></li>
</ul>
<h2>工具可以生成什么</h2>
<p>打开工具后，选择国家或地区并点击生成，即可得到一组结构化测试信息：</p>
<ul>
<li>姓名和性别</li>
<li>电话号码</li>
<li>Email</li>
<li>街道地址</li>
<li>城市</li>
<li>州、省或地区</li>
<li>ZIP Code / 邮编</li>
<li>适合复制的完整地址</li>
</ul>
<p>生成结果支持一键复制和重新生成，部分结果也可以暂时保存，方便反复测试表单。</p>
<p><img src="https://lianhaotian.com/_astro/1.DsdxhzC1_Z1LOap.webp" alt="地址生成器首页" loading="lazy" /></p>
<h2>为什么要单独做一个工具</h2>
<p>不同国家的地址格式并不完全相同。美国常见的是州和 ZIP Code，英国地址通常包含更细的行政区和邮政编码，加拿大、澳大利亚等地区也有自己的字段习惯。</p>
<p>如果只是随便组合一串文字，可能无法覆盖真实表单的字段要求。将国家、字段和格式规则拆开后，生成器可以更稳定地服务于以下场景：</p>
<ul>
<li>测试注册和登录页面</li>
<li>测试网站表单校验</li>
<li>测试电商订单流程</li>
<li>测试 App 的地址填写页面</li>
<li>演示产品原型</li>
<li>验证前端表单布局</li>
</ul>
<p>它的价值不在于生成“真实地址”，而在于提供结构完整、格式合理、不会误用真实个人信息的测试数据。</p>
<h2>支持的国家和地区</h2>
<p>当前项目围绕多个常见国家和地区进行设计，例如：</p>
<ul>
<li>美国</li>
<li>加拿大</li>
<li>英国</li>
<li>澳大利亚</li>
<li>德国</li>
<li>法国</li>
</ul>
<p>后续增加国家时，建议先整理每个地区的字段规则，再添加数据生成逻辑，而不是只翻译国家名称。至少需要关注：</p>
<ol>
<li>姓名的常见格式</li>
<li>电话号码的区号和长度</li>
<li>地址字段的顺序</li>
<li>州、省或地区的命名方式</li>
<li>邮编的字符规则</li>
</ol>
<p><img src="https://lianhaotian.com/_astro/2.DTRqG3O0_2lPNfL.webp" alt="选择国家和地区" loading="lazy" /></p>
<h2>Cloudflare 部署思路</h2>
<p>这个项目适合使用 Cloudflare 的原因是：工具前端可以做成静态页面，部署成本低，全球访问速度也比较稳定。一个简单的架构可以拆成三部分：</p>
<pre><code class="language-text">用户浏览器
    |
Cloudflare Pages / Workers
    |
静态工具页面 + 地址生成逻辑
</code></pre>
<p>如果生成逻辑完全在浏览器中执行，就不需要单独购买服务器。发布时可以连接 GitHub 仓库，让每次提交自动构建和部署。</p>
<p>一个常见流程如下：</p>
<ol>
<li>将项目推送到 GitHub。</li>
<li>在 Cloudflare Pages 中创建项目并连接仓库。</li>
<li>填写项目使用的构建命令和输出目录。</li>
<li>绑定自己的域名。</li>
<li>发布后检查不同国家的生成结果和移动端布局。</li>
</ol>
<p>如果后续需要保存用户数据、统计使用次数或提供管理后台，再考虑加入 Cloudflare Workers、D1 或 KV。早期不必为了一个纯前端工具引入复杂后端。</p>
<p><img src="https://lianhaotian.com/_astro/3.CJIoJnoi_FekNp.webp" alt="部署后的工具页面" loading="lazy" /></p>
<h2>地址生成逻辑怎么设计</h2>
<p>生成器的核心不是随机拼接字符串，而是为每个地区维护相对独立的数据规则。可以把数据组织成类似下面的结构：</p>
<pre><code class="language-ts">type RegionProfile = {
  country: string;
  cities: string[];
  streets: string[];
  regions: string[];
  postalCode: () =&gt; string;
  phone: () =&gt; string;
};
</code></pre>
<p>生成时先选择地区，再从该地区的数据池中取值：</p>
<pre><code class="language-ts">const profile = profiles[country];

const address = {
  name: pick(profile.names),
  phone: profile.phone(),
  street: `${randomNumber(10, 9999)} ${pick(profile.streets)}`,
  city: pick(profile.cities),
  region: pick(profile.regions),
  postalCode: profile.postalCode(),
};
</code></pre>
<p>需要注意，格式合理不等于地址真实存在。项目应避免声称生成的是可投递地址，也不应收集或展示真实个人信息。</p>
<h2>工具站和 SEO 内容规划</h2>
<p>如果只发布一个工具页面，搜索引擎能够覆盖的关键词有限。更适合的做法是围绕用户真正遇到的问题补充说明文章，例如：</p>
<ul>
<li>美国地址格式怎么填写</li>
<li>美国 ZIP Code 是什么</li>
<li>英国地址格式示例</li>
<li>加拿大地址字段说明</li>
<li>澳大利亚地址怎么填写</li>
<li>测试地址和真实收货地址有什么区别</li>
</ul>
<p>文章应当解决具体问题，再自然地链接到工具，而不是为了关键词重复堆砌“地址生成器”。一个比较清晰的用户路径是：</p>
<pre><code class="language-text">搜索问题
  -&gt; 阅读格式说明
  -&gt; 了解测试数据边界
  -&gt; 打开生成器
  -&gt; 复制结果测试自己的表单
</code></pre>
<p>每篇文章最好有独立标题、简洁摘要、明确的更新时间和真实的使用说明。工具页则需要保证移动端可操作、复制反馈清晰、错误状态可理解。</p>
<h2>广告变现需要注意什么</h2>
<p>当工具有稳定访问量后，可以根据广告平台的政策申请广告。常见位置包括：</p>
<ul>
<li>首页工具区域附近</li>
<li>文章正文之间</li>
<li>文章底部</li>
<li>侧边栏或页脚区域</li>
</ul>
<p>广告不是流量上线后就一定会产生收入，收益会受到访问来源、用户地区、广告平台审核、点击质量和页面体验等因素影响。更稳妥的方式是先把工具体验和内容质量做好，再逐步测试广告位置。</p>
<p>接入广告时建议遵守以下原则：</p>
<ul>
<li>不诱导用户点击广告</li>
<li>不把广告伪装成生成按钮</li>
<li>不使用虚假收益承诺</li>
<li>不遮挡复制、生成等核心操作</li>
<li>明确隐私政策和第三方服务说明</li>
<li>不上传或出售用户生成的测试数据</li>
</ul>
<p>“零成本”更准确地说是早期可以使用 Cloudflare 免费额度和开源工具降低固定成本，并不代表永远没有域名、素材、服务和维护成本。</p>
<h2>后续可以扩展什么</h2>
<p>地址生成器可以作为在线测试数据工具箱的第一个模块，后续还可以增加：</p>
<ul>
<li>测试邮箱生成器</li>
<li>手机号码格式生成器</li>
<li>地址字段格式化工具</li>
<li>ZIP Code 查询和校验</li>
<li>更多国家和地区</li>
<li>JSON / CSV 测试数据导出</li>
<li>面向开发者的 API</li>
</ul>
<p>扩展功能时，应继续把“虚构测试数据”和“真实身份信息”区分开。对于 API，还需要考虑访问频率限制、滥用防护和数据留存策略。</p>
<h2>总结</h2>
<p>这个项目的技术门槛并不高，但它包含了一个独立工具站从想法到上线的完整过程：</p>
<pre><code class="language-text">发现具体问题
  -&gt; 做出简单工具
  -&gt; 用 Cloudflare 降低部署成本
  -&gt; 围绕真实问题补充 SEO 内容
  -&gt; 获得稳定访问后测试广告
  -&gt; 持续扩展为工具箱
</code></pre>
<p>对个人开发者来说，与其一开始做一个复杂平台，不如先解决一个明确的小问题。只要工具真的方便、内容真的有帮助，再考虑域名、搜索流量和广告变现，项目才更容易长期维护。</p>
<p>如果你也在做类似的工具站，可以从一个最常被重复填写、重复查询或重复转换的小需求开始。</p>
]]></content:encoded></item></channel></rss>