不知道大家有没有留意过,在有些网站的footer里,会有一个Affiliate的入口
进入后,是一个申请页面
Affiliate是什么,也就是“联盟营销(Affiliate Marketing)”,简单来说就是你可以申请产品的销售资格,网站会给你一个专属链接,如果用户通过你的链接付费,产品会给你一定比例的提成。是一种通过推广他人的产品或服务,赚取佣金的商业模式。
越来越多的自媒体博主或者内容创作者,都会通过联盟营销来实现被动收入,比如通过短视频介绍产品,然后附上专属链接地址,或者在youtube的视频介绍里附上链接地址。
那么会有人问到,那么多产品,到底哪些有联盟营销可以申请呢?手动搜索费时费力,效率低下。
那么今天就分享一个自动化解决方案,利用n8n工作流来挖掘联盟营销机会。如果不想看实现的方法,可以直接拉到文章最后面,我附上自己收集到的产品清单,供大家免费查看。
目录
一、从哪里获取产品
联盟营销产品的范围非常的广,有实物,有虚拟产品… 我们先缩小一下范围,就以软件、saas或AI服务为例。
去哪里收集这些产品呢? 我们就拿producthunt来试试。
ProductHunt作为一个全球知名的产品发现平台,每天都会展示新上线的技术产品、应用和工具,是当之无愧的顶流。
二、用n8n来挖掘ProductHunt里的联盟营销机会
n8n 是一个开源的自动化工作流工具,可以帮助你连接各种应用,自动完成重复性任务。
另外ProductHunt有提供开放的接口,这对我们获取数据非常的有利。
说一下大概的实现思路
- 抓取 ProductHunt 数据:每天或固定的间隔时间,从 ProductHunt 抓取新上线的产品信息,包括产品名称、官网链接、描述等
- 筛选联盟营销产品:通过自动化脚本访问每个产品的官网,检测是否包含联盟营销相关关键词(如“Affiliate ”或“Partner Program”),筛选出潜在机会。
- 存储到表格:将筛选出的产品信息自动整理到表格(google sheet或多维表格或notion等)中,包含产品名称、介绍、链接等字段,方便查阅和分析。
这个思路非常的简单,实现我们的需求已经足够了。
接下来我们就拆分下这个工作流,看看如何实现
进入n8n,新建一个工作流
1、开始节点
我们可以新建两个开始节点,On clicking ‘execute’就是点击执行即可运行工作流,不需要根据时间来定时运行。
另一个是Schedule Trigger,这里设置自动运行的频率
比如设置每3个小时运行一次(可以根据自己的需要来设置)
2、获取producthunt数据
接着我们要去producthunt抓取数据,我们通过HTTP Request节点,来通过接口获取(producthunt的接口可以去网上搜索)
新增一个HTTP Request节点
打开节点在里面进行配置(根据producthunt的接口规范)
- method:post
- url:https://api.producthunt.com/v2/api/graphql
- Authentication、Generic Auth Type、Header Auth:Authentication就选择Generic Credential Type,Generic Auth Type选择Header Auth,在Header Auth里,我们配置接口的token,这样才能连上producthunt的数据
- body:我们选择json方式,在json里写上要获取什么数据
{
"query": "query { posts(first: 30, order: NEWEST) { edges { node { id name url website tagline description createdAt } } } }"
}
意思就是获取producthunt里每天最新的30条产品信息,包含产品的id,名字,地址,标签,介绍和新增的时间。
执行后获取到的数据是这样的:
3、循环
通过HTTP Request的运行,我们就有了30条产品信息,接下来的思路就是要挨个循环每条产品,看他们有没有Affiliate的相关内容。
所以,我们就要有一个循环节点。
因为循环都是从某个数组里去循环,所以,在循环前,我们得稍微加工下producthunt的数据格式,把它变成数组格式的数据。
我们先加一个code节点,也就是做一些简单的代码上的处理
// 获取输入数据
const input = $input.first();
if (!input || !input.json || !input.json.data) {
throw new Error("Invalid input structure: data is missing or malformed");
}
// 打印 posts 的内容和类型
const posts = input.json.data.posts;
console.log("Posts content:", JSON.stringify(posts, null, 2));
console.log("Posts type:", typeof posts, Array.isArray(posts));
// 检查 posts 是否为数组
if (Array.isArray(posts)) {
const edges = posts;
console.log("Edges:", JSON.stringify(edges, null, 2));
return edges.map(edge => ({ json: edge }));
}
// 如果 posts 是字符串,尝试解析
if (typeof posts === "string") {
try {
const parsedPosts = JSON.parse(posts);
if (!Array.isArray(parsedPosts)) {
throw new Error("Parsed posts is not an array. Actual structure: " + JSON.stringify(parsedPosts));
}
const edges = parsedPosts;
console.log("Edges:", JSON.stringify(edges, null, 2));
return edges.map(edge => ({ json: edge }));
} catch (e) {
throw new Error("Failed to parse posts string: " + e.message);
}
}
// 如果 posts 是对象,检查是否有 edges 字段
if (posts && typeof posts === "object" && posts.edges) {
const edges = posts.edges;
if (!Array.isArray(edges)) {
throw new Error("Posts.edges is not an array. Actual structure: " + JSON.stringify(edges));
}
console.log("Edges:", JSON.stringify(edges, null, 2));
return edges.map(edge => ({ json: edge }));
}
// 如果 posts 不是数组、字符串或有效对象
throw new Error("Posts is not an array, string, or valid object. Actual structure: " + JSON.stringify(posts));
不用太纠结代码细节,我是直接用AI写的,能跑起来就行,毕竟要善于使用AI(AI确实是能提高效率呀)
接着我们就加上循环节点,挨个去循环这些产品
4、判断是否有Affiliate机会
当我们获取到一个产品的数据时,怎么判断是否有Affiliate机会呢,提供一个简单的思路
首先获取网页代码,其次去找是否有Affiliate关键词。这个思路比较简单粗暴,能实现需求即可。
(1)获取网页代码
添加一个HTTP Request节点
- url:我们取上个节点获取到的website网站链接
- 认证:和producthunt节点一样的配置
- Send Headers:name:User-Agent,value:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
- Response:Response Format:text;Put Output in Field:data
执行后就可以获取到网页前端代码
(2)找Affiliate关键词
一般来说,Affiliate都会在网页的footer标签里,所以,我就加个code节点,去找是否有Affiliate关键词
// 获取 HTTP Request 节点的 HTML 内容
const html = $input.first().json.data;
// 使用正则表达式提取 <footer> 内容
const footerMatch = html.match(/<footer[^>]*>([\s\S]*?)<\/footer>/i);
const footerContent = footerMatch ? footerMatch[1] : ''; // 如果匹配到 footer,返回内容,否则为空
// 检查是否包含 Affiliates 链接
const hasAffiliate = footerContent.toLowerCase().includes('affiliate') ||
footerContent.match(/<a[^>]*href=[^>]*affiliate[^>]*>/gi) !== null;
// 返回结果
return {
json: {
url: $input.first().json.data,
footer_content: footerContent,
hasAffiliate: hasAffiliate
}
};
意思就是我们去提取footer的内容,检查是否有Affiliate链接,如果有就返回true,没有就返回false
同样的,代码也是直接用AI写的,不用过多纠结,能满足需求即可
当然这种方式不一定百分百正确,比如有的网站的footer是提示并没有提供Affiliate,但是我们也会抓到这个关键词(可以想想怎么去优化)
其实到了这一步,就已经完成大半了,如果你还想进一步去获取Affiliate的链接,可以加一个if条件,Affiliate为true的话,就进一步再去获取Affiliate的链接,如果不需要做到这么细致,我们就把前几个步骤获取的数据同步到表格即可。
我们直接来说如何把获取的内容同步到表格里。
5、将数据同步到表格
以同步到google sheets和飞书多维表格为例
(1)如何同步到google sheets
同步到google sheets比较简单,因为n8n内置了google sheet的节点,直接选择即可
我们先去google sheets把表格建好,每列的字段都维护好
然后在n8n把数据和字段都对应上即可(在n8n里,连接上google sheet的账号,会自动获取你的表格和字段)
运行后数据就会写到google sheets里
效果大概就是这样(hasAffiliate里为true的就说明产品有Affiliate计划)
(2)如何同步到飞书多维表格
Google sheets对墙内用户不友好,我们介绍下如何同步到飞书的多维表格里。
因为n8n没有内置的飞书节点,所以这一步配置会稍微麻烦一点。
飞书多维表格也有开放接口:https://open.feishu.cn/document/docs/bitable-v1/app-table-record/bitable-record-data-structure-overview 我们根据接口规范配置就好
这里分两步,都用HTTP Request节点来实现
①获取飞书多维表格的token
- url:https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal
- Send Headers:name:Content-Type,Value:application/json; charset=utf-8
- body:body这里要输入对应应用的appid和secret,应用就需要我们去飞书的开放平台里去创建,创建后会生成对应的appid和secret,同时,我们要在多维表格里给应用添加权限。(这里就不细说了)
②在对应多维表格新增记录
同样的,我们创建好多维表格,把字段维护好,这一步就是给对应的字段传值了。
url这里,我们就按飞书多维表格的规范,拼接好对应的链接(多维表的id和对应表格table的id,要让n8n知道往哪张表里传值),具体怎么看id,飞书多维表格的官网api文档都有介绍,这里就不细说了。
在Header Parameters这里,我们要把上一步获取到的token值传进来
最后就是body,这里没有google sheet方便,已经把字段都给你列出来了,多维表格就需要我们自己写json把字段都对应上(字段名称和获取到的值一一对应,json要符合飞书多维表格格式和字段的要求)
{
"fields": {
"id": {{ $('Loop Over Items').item.json.node.id }},
"name": "{{ $('Loop Over Items').item.json.node.name }}",
"url": "{{ $('Loop Over Items').item.json.node.url }}",
"website": "{{ $('Loop Over Items').item.json.node.website }}",
"tagline": "{{ $('Loop Over Items').item.json.node.tagline }}",
"description": "{{ $('Loop Over Items').item.json.node.description }}",
"createdAt": "{{ $('Loop Over Items').item.json.node.createdAt }}",
"hasAffiliate": "{{ $('If').item.json.hasAffiliate }}"
}
}
最后执行即可
结果和google sheet是一样的
我们把hasAffiliate为true的筛选出来,这些就是有Affiliate的产品了!
飞书多维表格的好处就是可以进一步用飞书的生态实现一些小功能,比如自动化提醒,视图的修改,多维度的筛选等等,也可以自己在多维表格里做一些加工和处理。
以上就是如何用n8n自动化工作流来获取产品Affiliate的过程,思路其实是很简单的,虽然实现过程相对比较粗糙,获取到的结果不一定百分百正确,但是也可以满足我们的需求,过程中的一些配置我们其实都可以用AI帮助我们来实现。
觉得配置有难度的朋友,我把我提取出来的有Affiliate的产品列表放到blog上了(做了些简单的加工,后续也会持续更新),直接用就可以。
Affiliate list



评论区已关闭。