Get top5 on Product Hunt | n8n自动化工作流

如果你想去了解一些新兴科技产品和创意项目,你可以会选择上Product Hunt这个网站。https://www.producthunt.com/

Product Hunt是什么?它是一个供用户分享和发现产品的网站,每周都会有上千个新产品新项目在ProductHunt上发布

它提供了平台供创业者、开发者和用户分享他们发现的新产品,并进行投票、评论和互动。

网站上的产品特别多,其实我在想,是否可以每天汇总前一天最热门的产品,然后通过telegram或者邮件在固定的时候发给我,这样我就能了解到前一天都是什么产品最热门,这些产品都是做什么的,甚至大家对他们的评价是怎样的…

那么我就用n8n,来做一个简单的工作流,来实现这么一个需求吧。

需求很简单,我想每天早上9点,汇总product hunt里投票最多的五个产品,然后把这些产品的名字、描述、票数、标签和评论,通过gmail以列表的方式发给我。

那我们开始。

首先在n8n新建一个工作流,起个名字Get top5 on Product Hunt every day

1、Schedule Trigger

第一个节点,我们设置Schedule Trigger节点,这是一个时间触发器

然后我们可以设置每天早上9点自动触发此流程

2、code

第二个节点,我们需要添加一个code节点,在这个节点,我们希望可以先获取到一个时间段,也就是前一天这个时间段。因为我们后面也希望获取到这个时间段里的产品票数。

所以在code节点里,我们通过一段简单的JS代码来实现这个逻辑

return [
  {
    json: {
      postedAfter: new Date(new Date(Date.now()).getTime() - (1000 * 60 * 60 * 24)).toISOString(),
      postedBefore: new Date(Date.now()).toISOString()
    }
  }
];

3、GraphQL

GraphQL是一个用于API 的查询语言。producthunt支持的接口比较特殊,就是GraphQL。

所以我们这个节点,就是通过GraphQL来获取到producthunt的top 5的产品数据。

Endpoint就是https://api.producthunt.com/v2/api/graphql

Query参数这里,我们可以这样写

query PostRanking {
  posts(postedAfter: " {{ $json.postedAfter }}", order: RANKING, first: 5, postedBefore: "{{ $json.postedBefore }}") {
    edges {
      node {
        name
        tagline
        description
        votesCount
        website
       comments {
          edges {
            node {
              body
            }
          }
        }
      }
    }
  }
}

这个意思就是,我们希望可以查询到前一天的,排名前5的产品的name、tagline、description、votesCount 、website、comments

ok,执行一下试试

在output里,看到是一一个数组的方式返回给了我们所有的产品信息,说明获取数据是没有问题的。

4、code

我们已经获取到了产品数据,接下来就是看怎么发送到gmail

再发之前,我们需要简单处理下数据的格式,总不能这样一堆就扔到邮件里,看起来也不方便。

所以我们就再用code节点,简单做一下样式的处理。

我们希望通过表格的方式来呈现出所以内容。

我们希望这个列表,第一列是name,第二列是tagline,第三列是description,第四列是votesCount,第五列是website,第六列是comments,并且comments用序号来分类展示,这样更清晰一些。

return items.map(item => {
  const product = item.json.data.posts.edges.map(edge => edge.node);
  const tableRows = product.map(prod => {
    const comments = prod.comments.edges.map((comment, index) => `${index + 1}. ${comment.node.body}`).join("<br>");
    return `<tr>
      <td>${prod.name}</td>
      <td>${prod.tagline}</td>
      <td>${prod.description}</td>
      <td>${prod.votesCount}</td>
      <td><a href="${prod.website}">${prod.website}</a></td>
      <td>${comments}</td>
    </tr>`;
  }).join("");

  const tableHTML = `
    <table border="1">
      <thead>
        <tr>
          <th>Name</th>
          <th>Tagline</th>
          <th>Description</th>
          <th>Votes Count</th>
          <th>Website</th>
          <th>Comments</th>
        </tr>
      </thead>
      <tbody>
        ${tableRows}
      </tbody>
    </table>
  `;
  
  return {
    json: {
      tableHTML: tableHTML
    }
  };
});

来运行一下试试看

返回的是一段HTML。

5、gmail

好了,最后,我们就是把这段内容通过邮件发给我。

那么最后,我们选择gmail节点,选择send message操作

在这里的配置,我们都需要注意下:

  • Credential to connect with:需要连接到我们的gmail账户,这里我们用OAuth2的方式来连接,具体连接方式这里就不介绍了。如果有问题后续我专门写一个操作指引
  • Resource:选择message
  • Operation:选择send
  • To:选择发送给谁,那么这里我就写我自己的邮件地址。
  • Subject:也就是你收到邮件的标题。
  • Email Type:选择HTML
  • Message:在邮件里,我们具体要展示什么。 这里就是直接选择上一步我们获取到的tableHTML

好了,设置完了,我们运行下试试。

output里,看到是已经成功的执行了一个邮件任务。

我们去到邮箱里来看看

看到是已经收到了一条

点击进去,我们就可以看到top5的产品列表了,也挺清晰。

最后,我们开启这个工作流,运行即可。

这就是简单的一个获取产品信息的工作流,我们可以每天看看最近火热的都是什么产品,大家的评价都是如何,非常的高效。

其实可以更进一步,比如根据这些评论,我们可以再通过AI,来帮我们解读下产品的评论,看看大家正面和负面的评价,或者是需求,还是非常有价值的。

1人评论了“Get top5 on Product Hunt | n8n自动化工作流”

  1. Pingback: n8n如何添加AI节点?在自动化流程中融入AI能力 - 吨师傅工具箱

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部