Explorar o código

【第一版开发】
1.增加线程池配置
2.修复ProductHunt数据重复拉取异常
3.ProductHunt定时任务增加翻译逻辑

ChenYL hai 10 meses
pai
achega
78e9b15d0f

+ 6 - 0
data-easy/src/main/java/com/dataeasy/server/atomic/entity/DataProductHuntPost.java

@@ -60,6 +60,12 @@ public class DataProductHuntPost extends BaseEntity implements Serializable {
     @Column(name = "description")
     private String description;
 
+    /**
+     * 关键词
+     */
+    @Column(name = "description_key")
+    private String descriptionKey;
+
     /**
      * 投票数
      */

+ 31 - 0
data-easy/src/main/java/com/dataeasy/server/core/config/AsyncConfig.java

@@ -0,0 +1,31 @@
+package com.dataeasy.server.core.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2025/3/15 9:55
+ * @description 线程池异步配置
+ */
+@Configuration
+public class AsyncConfig {
+
+    @Bean(name = "customThreadPool")
+    public Executor customThreadPool() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(3); // 核心线程数
+        executor.setMaxPoolSize(10); // 最大线程数
+        executor.setQueueCapacity(100); // 阻塞队列容量
+        executor.setKeepAliveSeconds(60); // 空闲线程存活时间
+        executor.setThreadNamePrefix("custom-thread-"); // 线程名称前缀
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
+        executor.initialize();
+        return executor;
+    }
+}

+ 5 - 0
data-easy/src/main/java/com/dataeasy/server/core/config/ProductHuntProperties.java

@@ -29,4 +29,9 @@ public class ProductHuntProperties {
      * 系统自访问密钥
      */
     private String apiKey;
+
+    /**
+     * 同一时间翻译数量
+     */
+    private Integer translateNum;
 }

+ 33 - 0
data-easy/src/main/java/com/dataeasy/server/pojo/task/ProductHuntTranslateDto.java

@@ -0,0 +1,33 @@
+package com.dataeasy.server.pojo.task;
+
+import lombok.Data;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2025/3/15 15:58
+ * @description ProductHunt 翻译数据
+ */
+@Data
+public class ProductHuntTranslateDto {
+
+    /**
+     * 帖子ID
+     */
+    private Long id;
+
+    /**
+     * 标语
+     */
+    private String tagline;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 关键词
+     */
+    private String key;
+}

+ 0 - 17
data-easy/src/main/java/com/dataeasy/server/service/manager/IAiChatManager.java

@@ -1,17 +0,0 @@
-package com.dataeasy.server.service.manager;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @description AI大模型 服务类
- * @date 2025/3/5 12:30
- */
-public interface IAiChatManager {
-
-    /**
-     * 文本翻译
-     * @param text
-     * @return
-     */
-    String translate(String text);
-}

+ 0 - 34
data-easy/src/main/java/com/dataeasy/server/service/manager/impl/AiChatManagerImpl.java

@@ -1,34 +0,0 @@
-package com.dataeasy.server.service.manager.impl;
-
-import com.dataeasy.server.service.manager.IAiChatManager;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.ai.chat.client.ChatClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @description AI大模型 服务类
- * @date 2025/3/5 12:31
- */
-@Slf4j
-@Component
-public class AiChatManagerImpl implements IAiChatManager {
-
-    @Autowired
-    private ChatClient.Builder chatClientBuilder;
-
-    // 通过@Value注解注入资源文件
-    @Value("classpath:/prompts/system-message.st")
-    private Resource promptSystemMessage;
-
-    @Override
-    public String translate(String text) {
-        // 单个提问
-        ChatClient chatClient = chatClientBuilder.defaultSystem(promptSystemMessage).build();
-        return chatClient.prompt().user(text).call().content();
-    }
-}

+ 84 - 24
data-easy/src/main/java/com/dataeasy/server/task/ProductHuntTask.java

@@ -1,22 +1,37 @@
 package com.dataeasy.server.task;
 
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import com.dataeasy.server.common.exception.BusinessException;
+import com.dataeasy.server.pojo.task.ProductHuntTranslateDto;
+import com.dataeasy.server.utiis.DateUtils;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
 import org.jasypt.iv.RandomIvGenerator;
 import org.jasypt.salt.RandomSaltGenerator;
+import org.springframework.ai.chat.client.ChatClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
 
 import com.dataeasy.server.atomic.entity.DataProductHuntPost;
 import com.dataeasy.server.atomic.service.IDataProductHuntPostService;
@@ -27,7 +42,7 @@ import com.dataeasy.server.constant.ScheduleTaskEnum;
 import com.dataeasy.server.core.config.ProductHuntProperties;
 import com.dataeasy.server.feign.ProductHuntFeign;
 import com.dataeasy.server.feign.dto.PostNode;
-import com.dataeasy.server.service.manager.IAiChatManager;
+import com.google.common.collect.Lists;
 
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
@@ -43,11 +58,6 @@ import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
 @ScheduleTask(ScheduleTaskEnum.PRODUCT_HUNT)
 public class ProductHuntTask extends AbstractDataTask {
 
-    /**
-     * 内容分隔符
-     */
-    private static final String CONTENT_DELIMITER = "##==!!!=##";
-
     @Autowired
     private ProductHuntFeign productHuntFeign;
 
@@ -55,7 +65,18 @@ public class ProductHuntTask extends AbstractDataTask {
     private IDataProductHuntPostService productHuntPostService;
 
     @Autowired
-    private IAiChatManager aiChatManager;
+    private ProductHuntProperties productHuntProperties;
+
+    @Autowired
+    private ChatClient.Builder chatClientBuilder;
+
+    // 通过@Value注解注入资源文件
+    @Value("classpath:/prompts/system-message.st")
+    private Resource promptSystemMessage;
+
+    @Autowired
+    @Qualifier("customThreadPool")
+    private Executor executor;
 
     /**
      * 自建ProductHunt服务访问凭据
@@ -82,7 +103,9 @@ public class ProductHuntTask extends AbstractDataTask {
 
     @Override
     public boolean fetchData() {
-        String rankDateStr = "2025-03-13";
+        // 目标是拉取昨天的数据,且中国时区比ProductHunt的服务器快了8个小时,因此如果在8点前运行,则会获取同一天的数据
+        LocalDateTime yesterdayLocalDateTime = LocalDateTime.now().minusDays(1);
+        String rankDateStr = DateUtils.YYYY_MM_DD_FORMATTER.format(yesterdayLocalDateTime);
         // 拉取数据
         JsonResponse<List<PostNode>> jsonResponse = productHuntFeign.getPosts(apiToken, rankDateStr);
         if (Objects.isNull(jsonResponse)) {
@@ -100,25 +123,56 @@ public class ProductHuntTask extends AbstractDataTask {
             return false;
         }
 
-        // 翻译 TODO 可能内容太长了,要分批次翻译
-        String originalText = postNodes.stream().filter(v -> StringUtils.hasText(v.getDescription()))
-                .map(PostNode::getDescription).collect(Collectors.joining(CONTENT_DELIMITER));
-        String translateText = aiChatManager.translate(originalText);
-        log.info("翻译数据:{}", translateText);
-        String[] contents = translateText.split(CONTENT_DELIMITER);
-        if (contents.length > postNodes.size()) {
-            log.warn("翻译结果与原始数据长度不一致,翻译结果:{},原始数据:{}", contents.length, postNodes.size());
-            return false;
+        // 内容太长,要分批次翻译
+        List<List<PostNode>> partition = Lists.partition(postNodes, Optional.ofNullable(productHuntProperties.getTranslateNum()).orElse(10));
+        ObjectMapper objectMapper = new ObjectMapper();
+        List<ProductHuntTranslateDto> synchronizedList = Collections.synchronizedList(new ArrayList<ProductHuntTranslateDto>());
+        // 开启多线程翻译
+        CountDownLatch countDownLatch = new CountDownLatch(partition.size());
+        for (List<PostNode> nodes : partition) {
+            List<PostNode> currentNodes = new ArrayList<>(nodes);
+            executor.execute(() -> {
+                try {
+                    // 转换格式便于批量翻译,待翻译的字段:标语和描述
+                    List<ProductHuntTranslateDto> originProductHuntTranslateDtos = currentNodes.stream().map(node -> {
+                        ProductHuntTranslateDto productHuntTranslateDto = new ProductHuntTranslateDto();
+                        BeanUtils.copyProperties(node, productHuntTranslateDto);
+
+                        return productHuntTranslateDto;
+                    }).collect(Collectors.toList());
+
+                    // 把productHuntTranslateDtos转换成json字符串
+                    String originalText = objectMapper.writeValueAsString(originProductHuntTranslateDtos);
+                    log.debug("原文:{}", originalText);
+
+                    // 使用大模型批量翻译
+                    ChatClient chatClient = chatClientBuilder.defaultSystem(promptSystemMessage).build();
+                    String translateText = chatClient.prompt().user(originalText).call().content();
+                    log.debug("翻译结果:{}", translateText);
+
+                    // 回写翻译数据
+                    List<ProductHuntTranslateDto> translateProductHuntTranslateDtos = objectMapper.readValue(translateText, new TypeReference<List<ProductHuntTranslateDto>>() {});
+                    synchronizedList.addAll(translateProductHuntTranslateDtos);
+                } catch (Exception e) {
+                    log.error("ProductHunt热榜翻译异常", e);
+                } finally {
+                    countDownLatch.countDown();
+                }
+            });
         }
-        // 回写翻译内容
-        for (int i = 0; i < contents.length; i++) {
-            String translateContent = contents[i];
-            PostNode postNode = postNodes.get(i);
-            postNode.setDescription(translateContent);
+
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            log.error("ProductHunt热榜定时任务翻译异常", e);
+            BusinessException.throwFail("ProductHunt热榜定时任务翻译异常");
         }
 
+        // 转换成map对象方便查找
+        Map<Long, ProductHuntTranslateDto> productHuntTranslateDtoMap = synchronizedList.stream().collect(Collectors.toMap(ProductHuntTranslateDto::getId, Function.identity(), (v1, v2) -> v1));
+
         AtomicInteger rankNum = new AtomicInteger(1);
-        Date rankDate = new Date();
+        Date rankDate = Date.from(yesterdayLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
         List<DataProductHuntPost> posts = postNodes.stream().map(v -> {
             DataProductHuntPost post = new DataProductHuntPost();
             BeanUtils.copyProperties(v, post);
@@ -132,6 +186,12 @@ public class ProductHuntTask extends AbstractDataTask {
             if (Objects.nonNull(v.getFeaturedAt())) {
                 post.setFeaturedAt(Date.from(v.getFeaturedAt().atZone(ZoneId.systemDefault()).toInstant()));
             }
+            ProductHuntTranslateDto productHuntTranslateDto = productHuntTranslateDtoMap.get(v.getId());
+            if (Objects.nonNull(productHuntTranslateDto)) {
+                post.setDescriptionKey(productHuntTranslateDto.getKey());
+                post.setTagline(productHuntTranslateDto.getTagline());
+                post.setDescription(productHuntTranslateDto.getDescription());
+            }
             return post;
         }).collect(Collectors.toList());
 

+ 5 - 0
data-easy/src/main/java/com/dataeasy/server/utiis/DateUtils.java

@@ -12,6 +12,11 @@ import java.time.format.DateTimeFormatter;
  */
 public class DateUtils {
 
+    /**
+     * 日期格式化器,格式:yyyy-MM-dd
+     */
+    public static final DateTimeFormatter YYYY_MM_DD_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
     /**
      * 日期格式化器,格式:yyyyMMdd
      */

+ 2 - 0
data-easy/src/main/resources/application-dev.yaml

@@ -57,6 +57,8 @@ product-hunt:
   password: ENC(2wscdOD7kzByW3VNDQkOZq2BdoM6PS7peINZRwJjEwVubsFN437X3g==)
   # 系统自访问密钥
   api-key: ENC(S3TSPw9QuJwvZScgrOv1ORm089BkXy6EJJNeFYwRVxqZnBb176rSXA==)
+  # 同一时间翻译数量
+  translate-num: 10
 
 # 系统配置
 biz:

+ 1 - 1
data-easy/src/main/resources/prompts/system-message.st

@@ -1 +1 @@
-你是世界上最专业的翻译工具,擅长英文和中文互译。你是一位精通英文和中文的专业翻译,尤其擅长将IT公司黑话和专业词汇翻译成简洁易懂的地道表达。你的任务是将以下内容翻译成地道的中文,风格与科普杂志或日常对话相似。"##==!!!=##"是分隔符,按原格式返回,且开头和解为不要出现分隔符
+你是世界上最专业的翻译工具,擅长英文和中文互译。你是一位精通英文和中文的专业翻译,尤其擅长将IT公司黑话和专业词汇翻译成简洁易懂的地道表达。你的任务是将以下内容翻译成地道的中文,风格与科普杂志或日常对话相似。根据给出的json格式字符串,对其中的tagline字段和description字段进行翻译,并且把原文用翻译内容进行替换,同时根据description的内容生成关键词,关键词之间用逗号隔开,并且把结果写入key字段,最后请你直接以json格式返回,无需再返回其它答复

+ 4 - 0
doc/sql/schema.sql

@@ -395,3 +395,7 @@ ALTER TABLE data_easy.`user` MODIFY COLUMN ma_open_id varchar(128) CHARACTER SET
 ALTER TABLE data_easy.`user` MODIFY COLUMN nickname varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '用户昵称';
 ALTER TABLE data_easy.subscription_order ADD close_time TIMESTAMP NOT NULL COMMENT '订单关闭时间';
 ALTER TABLE data_easy.subscription_order CHANGE close_time close_time TIMESTAMP NOT NULL COMMENT '订单关闭时间' AFTER subscription_duration;
+ALTER TABLE data_easy.data_product_hunt_post ADD `key` varchar(500) NULL COMMENT '关键词';
+ALTER TABLE data_easy.data_product_hunt_post CHANGE `key` `key` varchar(500) NULL COMMENT '关键词' AFTER description;
+ALTER TABLE data_easy.data_product_hunt_post ADD description_key varchar(500) NULL COMMENT '信息中的关键词';
+ALTER TABLE data_easy.data_product_hunt_post CHANGE description_key description_key varchar(500) NULL COMMENT '信息中的关键词' AFTER description;

+ 1 - 0
doc/技术文档.md

@@ -133,6 +133,7 @@
 | name             | varchar(200)  | 帖子名称                           |
 | tagline          | varchar(300)  | 帖子的标语                         |
 | description      | varchar(1000) | 帖子信息                           |
+| description_key  | varchar(500)  | 信息中的关键词                     |
 | votes_count      | int           | 投票数                             |
 | created_at       | timestamp     | 帖子的创建日期和时间               |
 | featured_at      | timestamp     | 帖子被特色展示的日期和时间         |

+ 269 - 269
product-hunt/src/main/java/com/producthunt/server/service/controller/ProductHuntController.java

@@ -37,334 +37,334 @@ public class ProductHuntController {
 
     private String content = "[\n" +
             "        {\n" +
-            "            \"id\": 935408,\n" +
-            "            \"name\": \"Wispr Flow for Windows\",\n" +
-            "            \"tagline\": \"Stop typing, start speaking: 3x faster dictation on PC & Mac\",\n" +
-            "            \"description\": \"Tired of typing? Wispr Flow for Windows lets you speak naturally and see your words perfectly formatted—no extra edits, no typos. It’s the easiest way to write 3x faster across all your apps.\",\n" +
-            "            \"votesCount\": 621,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/VEQJCWAHVPXBLC?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/wispr-flow-for-windows?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941859,\n" +
+            "            \"name\": \"Freepik AI Video Upscaler\",\n" +
+            "            \"tagline\": \"Upscale videos up to 4K in one click\",\n" +
+            "            \"description\": \"Give your videos a high-quality finish with the Video Upscaler. Upscale to 4K resolution and increase frames per second to 60 fps. Available now in the Freepik AI Suite.\",\n" +
+            "            \"votesCount\": 485,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/J76ZVJGVUDKFQA?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/freepik-ai-video-upscaler?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 931928,\n" +
-            "            \"name\": \"No Cap\",\n" +
-            "            \"tagline\": \"World's first AI angel investor\",\n" +
-            "            \"description\": \"Time to come clean: I just invested $100k in a startup — and I'm an AI. Full announcement and video below \uD83D\uDC47\",\n" +
-            "            \"votesCount\": 458,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/RX3O54ISJJ42UG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/no-cap?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 910704,\n" +
+            "            \"name\": \"agent.ai\",\n" +
+            "            \"tagline\": \"The #1 Professional Network for AI Agents\",\n" +
+            "            \"description\": \"The #1 (and only) professional network and marketplace for AI agents and the people who love them. Users can discover, connect, and hire AI agents for useful tasks. Builders create advanced agents with a no-code platform, data tools, and frontier LLMs.\",\n" +
+            "            \"votesCount\": 439,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/XRA3TW3ZMCBSPM?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/agent-ai-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 941045,\n" +
-            "            \"name\": \"Cuckoo\",\n" +
-            "            \"tagline\": \"Real-time AI translator for global teams\",\n" +
-            "            \"description\": \"Cuckoo is a real-time AI translator for global sales, marketing, and support. Cuckoo helps companies like Snowflake and PagerDuty talk to their global customers in Zoom in-person meetings, even in the most technical discussions.\",\n" +
-            "            \"votesCount\": 384,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/BSLO27YPI7UOLG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/cuckoo-6?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 909200,\n" +
+            "            \"name\": \"touch grass\",\n" +
+            "            \"tagline\": \"reduce your screen time\",\n" +
+            "            \"description\": \"block your apps until you literally touch grass. our ai verifies it's real grass - no cheating. decrease your screen time by getting outside. \uD83C\uDF31\",\n" +
+            "            \"votesCount\": 404,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/O22QETJCU5EE42?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/touch-grass?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 938270,\n" +
-            "            \"name\": \"Sherloq\",\n" +
-            "            \"tagline\": \"Create one place for all your SQL, directly on your editor\",\n" +
-            "            \"description\": \"Sherloq is a Collaborative SQL Repository. Using the AI-powered plugin, SQL users automatically save, organize, share, and document queries on-the-fly, without leaving the editor. Companies use Sherloq as the single source of truth for all their queries.\",\n" +
-            "            \"votesCount\": 358,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/M7N4WQZQIP4IOJ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/sherloq-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 887501,\n" +
+            "            \"name\": \"Factory.fm\",\n" +
+            "            \"tagline\": \"The music review app\",\n" +
+            "            \"description\": \"Welcome to the music review app! We are the \\\"Letterboxd for music\\\". You can rate, review and track the music you're listening to. Discover new music from other music obsessives and create a profile with your favorite albums (yes, just like the MySpace Top 8!)\",\n" +
+            "            \"votesCount\": 264,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/LUW36RFIGYQWWN?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/factory-fm?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 939950,\n" +
-            "            \"name\": \"Numeral\",\n" +
-            "            \"tagline\": \"Spend less than 5 minutes per month on sales tax compliance\",\n" +
-            "            \"description\": \"Numeral puts sales tax on autopilot for leading e-commerce and SaaS businesses, offering intelligent workflows for registration, filing, and remittance alongside white-glove customer support.\",\n" +
-            "            \"votesCount\": 339,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/EQNJ7UZ55RUAHG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/numeral?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 938306,\n" +
+            "            \"name\": \"AgBr\",\n" +
+            "            \"tagline\": \"Black & white film emulator for iPhone, iPad & Mac\",\n" +
+            "            \"description\": \"AgBr is a black & white film emulator for iPhone/iPad/Mac. A minimal interface that makes it straightforward to process your photos with 11 film recreations. Free to download, with advanced processing & export options available for a one-time in app purchase.\",\n" +
+            "            \"votesCount\": 239,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/TMHQFJQ2ZB5AGY?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/agbr?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 929040,\n" +
-            "            \"name\": \"OG PM Agent: Beta Release\",\n" +
-            "            \"tagline\": \"Your AI Product Manager\",\n" +
-            "            \"description\": \"PM Agent is your AI Product Manager that attends all your meetings, creates detailed summaries, and converts business discussions into Product Requirement Document including acceptance criteria for every sprint in real time keeping all stakeholders aligned.\",\n" +
-            "            \"votesCount\": 247,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/HYURCPOABM6B7B?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/og-pm-agent-beta-release?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941921,\n" +
+            "            \"name\": \"Pi\",\n" +
+            "            \"tagline\": \"The ML & Data Science toolkit; built for Software Engineers.\",\n" +
+            "            \"description\": \"Pi is a toolkit of 30+ AI techniques designed to boost the quality of your AI apps. Pi first builds your scoring system to capture your application requirements and then compiles 30+ optimizers against it - automated prompt opt., search ranking, RL & more.\",\n" +
+            "            \"votesCount\": 175,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/ROOHXPAMSTICRV?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/pi-6?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940539,\n" +
-            "            \"name\": \"Superwall\",\n" +
-            "            \"tagline\": \"Build & test mobile app paywalls without shipping updates\",\n" +
-            "            \"description\": \"Superwall is the ultimate paywall solution for mobile apps. Build and test unlimited paywall designs, pricing, and A/B experiments— all without shipping app updates. With built in analytics, reduce your time to experiment by 90% and grow revenue by 20-30%.\",\n" +
-            "            \"votesCount\": 227,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/JEBXUG7IVV3WMG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/superwall?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 939408,\n" +
+            "            \"name\": \"Bettermode\",\n" +
+            "            \"tagline\": \"Your All-in-One Customer Community Platform\",\n" +
+            "            \"description\": \"Bettermode is an all-in-one community platform enhanced with AI-powered features. It unifies all your community tools into a single, cohesive solution, empowering your brand with a dynamic, scalable space where customers effortlessly connect, engage, and grow.\",\n" +
+            "            \"votesCount\": 172,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/RUKQQCHCYNJMIV?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/bettermode?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940968,\n" +
-            "            \"name\": \"OpenAI Responses API and Agents SDK\",\n" +
-            "            \"tagline\": \"New tools for building agents and tools\",\n" +
-            "            \"description\": \"A new set of APIs and tools specifically designed to simplify the development of agentic applications.\",\n" +
-            "            \"votesCount\": 174,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/7ZEJQUN3IQPUZA?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/openai-responses-api-and-agents-sdk?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941290,\n" +
+            "            \"name\": \"JOOS©\",\n" +
+            "            \"tagline\": \"Invest in content creators, accelerate their growth\",\n" +
+            "            \"description\": \"JOOS lets investors fund creators in exchange for a share of future revenue. Capital fuels growth—ads, team expansion, better content. As creators earn more, investors profit. A scalable, transparent way to invest in digital talent. \uD83D\uDE80\",\n" +
+            "            \"votesCount\": 164,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/I3BVE3MZTV4UFE?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/joos?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940914,\n" +
-            "            \"name\": \"AI Renamer\",\n" +
-            "            \"tagline\": \"Rename your files with AI\",\n" +
-            "            \"description\": \"Automatically rename your files based on their content using AI. Perfect for organizing images and documents with meaningful names.\",\n" +
-            "            \"votesCount\": 167,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/DND2CRR6HKS53X?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/ai-renamer-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941519,\n" +
+            "            \"name\": \"Gemini Robotics\",\n" +
+            "            \"tagline\": \"Bringing AI into the Physical World\",\n" +
+            "            \"description\": \"Gemini Robotics from Google Deepmind, is the Gemini 2.0-based AI models for robots. Multimodal, general, interactive, and dexterous. Powers ALOHA 2, Apptronik Apollo, and more.\",\n" +
+            "            \"votesCount\": 146,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/KXIJOH4X567PN7?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/gemini-robotics?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940701,\n" +
-            "            \"name\": \"Omlet for VS Code\",\n" +
-            "            \"tagline\": \"Get React component usage insights in VS Code\",\n" +
-            "            \"description\": \"Omlet is a component analytics tool for React. You can now use Omlet directly in VS Code and analyze how and where your React components (and their props) are used as you're coding — helping you confidently update, clean up and maintain your component library.\",\n" +
-            "            \"votesCount\": 163,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/DOVGY6PD4WK77S?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/omlet-for-vs-code?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941942,\n" +
+            "            \"name\": \"Proxy DeepWork\",\n" +
+            "            \"tagline\": \"Automate Complex Workflows with AI Agents\",\n" +
+            "            \"description\": \"DeepWork is the major update for Convergence's Proxy.Aautomate complex, multi-step workflows with a team of AI agents. Describe your goal, and DeepWork handles the rest.\",\n" +
+            "            \"votesCount\": 138,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/53KWM4GGKM6PSA?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/proxy-deepwork?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940824,\n" +
-            "            \"name\": \"FirstSeed Tasks\",\n" +
-            "            \"tagline\": \"Task manager focused on task execution & completion\",\n" +
-            "            \"description\": \"Introducing FirstSeed Tasks 4 – a task manager that is focused on task execution and completion. With a built-in timer and Pomodoro functionality, it keeps you focused, enhances efficiency, and maximizes productivity. Available on iPhone, iPad, and Mac.\",\n" +
-            "            \"votesCount\": 153,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/A6Q5G6U66ELHPP?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/firstseed-tasks?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 911261,\n" +
+            "            \"name\": \"Clickma\",\n" +
+            "            \"tagline\": \" Keep Figma & ClickUp in sync\",\n" +
+            "            \"description\": \"Tired of hunting for the right Figma screen? Updating ClickUp manually? Clickma connects your designs and tasks instantly—so your team stays aligned, works faster, and never loses track of what matters. No more searching, switching, or second-guessing.\",\n" +
+            "            \"votesCount\": 128,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/CWUMZAUFAOCWDN?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/clickma?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 939735,\n" +
-            "            \"name\": \"Sahha Archetypes\",\n" +
-            "            \"tagline\": \"Segment users based on their health, lifestyle, & behavior!\",\n" +
-            "            \"description\": \"Categorize users based on long-term health, lifestyle, and behavioral trends, enabling hyper-personalized engagement and retention strategies. Archetypes are intuitive, easy-to-use labels that capture a person’s persona, health and lifestyle\",\n" +
-            "            \"votesCount\": 153,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/KFNWL2Q64CTORR?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/sahha-archetypes?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941917,\n" +
+            "            \"name\": \"CharmBar\",\n" +
+            "            \"tagline\": \"Mac dock icon customization app, personalize your macOS dock\",\n" +
+            "            \"description\": \"CharmBar lets you customize Mac app icons in your dock with emojis, PNGs, or JPGs. One-time payment, no subscriptions. Give your macOS dock a little bit of personality!\",\n" +
+            "            \"votesCount\": 126,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/ARAG56Z3C4NNJZ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/charmbar?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 939053,\n" +
-            "            \"name\": \"Search Copilot\",\n" +
-            "            \"tagline\": \"Work AI across platforms\",\n" +
-            "            \"description\": \"Search Copilot is the AI-powered search engine for your work. Instantly find insights from meetings, emails, chats, docs, and CRMs—all in one place. No setup hassle, privacy-first, and free. Stop searching, start finding. \uD83D\uDE80\",\n" +
-            "            \"votesCount\": 141,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/7PCPCKCIRCKM3Z?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/search-copilot?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941826,\n" +
+            "            \"name\": \"Amiry – AI-Powered Smart City Routes\",\n" +
+            "            \"tagline\": \"Explore any city without planning\",\n" +
+            "            \"description\": \"Amiry is an AI-powered city guide that builds personalized routes in seconds. Just enter your time, interests, and transport mode—walk, bike, or run—and explore effortlessly. No planning, no research, just the best spots with real-time voice guidance.\",\n" +
+            "            \"votesCount\": 123,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/XBYZSSTWTV7WSF?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/amiry-ai-powered-smart-city-routes?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940919,\n" +
-            "            \"name\": \"PlanetScale Metal\",\n" +
-            "            \"tagline\": \"The fastest way to run databases in AWS or GCP\",\n" +
-            "            \"description\": \"PlanetScale Metal is the fastest way to run databases in AWS or GCP. With blazing fast NVMe drives, you can unlock unlimited IOPS, ultra low latencies, and the highest throughput for your workloads.\",\n" +
-            "            \"votesCount\": 130,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/A3UUCYI5Q7MH76?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/planetscale-metal?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941450,\n" +
+            "            \"name\": \"Zuni\",\n" +
+            "            \"tagline\": \"Chat with all the latest AI models in your Chrome sidebar\",\n" +
+            "            \"description\": \"Zuni is a Chrome sidebar extension providing extra-fast access to advanced AI models like ChatGPT 4o, Claude 3.7 Sonnet, Gemini Flash 2.0, and DeepSeek R1. Chats are stored locally, never touch our servers and encrypted in transit.\",\n" +
+            "            \"votesCount\": 111,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/3RXJNPEPLC3CBS?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/zuni?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940792,\n" +
-            "            \"name\": \"DJI Dock 3\",\n" +
-            "            \"tagline\": \"Rise to Any Challenge\",\n" +
-            "            \"description\": \"Introducing the DJI Dock 3, DJI's First Dock Adaptable for Vehicle Mounting. The DJI Dock 3 empowers 24/7 remote operations and effortlessly adapts to various environments.\",\n" +
-            "            \"votesCount\": 125,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/GHI7E7TT5CCHW5?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/dji-dock-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 942018,\n" +
+            "            \"name\": \"Pi Digits Challenge\",\n" +
+            "            \"tagline\": \"It's Pi day! How many digits do you remember?\",\n" +
+            "            \"description\": \"A site where you can test how many digits of Pi you remember, see high scores, and a leaderboard.\",\n" +
+            "            \"votesCount\": 111,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/CIZ54HF65AYYRD?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/pi-digits-challenge?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940946,\n" +
-            "            \"name\": \"Supadex for iOS & Android\",\n" +
-            "            \"tagline\": \"Supabase data in your pocket\",\n" +
-            "            \"description\": \"The ultimate mobile dashboard for Supabase. Manage databases, track metrics, and monitor projects seamlessly, anytime, anywhere.\",\n" +
-            "            \"votesCount\": 118,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/SUQDWEYZSJKTZF?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/supadex-for-ios-android?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941873,\n" +
+            "            \"name\": \"Ai Agents for Machines\",\n" +
+            "            \"tagline\": \"Build your own AI Agent for machines!\",\n" +
+            "            \"description\": \"This platform enables you to build and test your own AI agents for seamless interaction between users and machines. By leveraging the OPC UA communication protocol, it reads sensor variables and controls actuators to perform actions based on user requirements.\",\n" +
+            "            \"votesCount\": 111,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/LU2RXTEDKAYPG3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/ai-agents-for-machines?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940774,\n" +
-            "            \"name\": \"Pod\",\n" +
-            "            \"tagline\": \"A desktop iPod that plays local music and radio\",\n" +
-            "            \"description\": \"Pod is a desktop music player which feels and looks like an iPod. Enjoy seamless navigation, haptic feedback, and stylish design, all without extra hardware. Listen to local music files, radio and soon Spotify.\",\n" +
-            "            \"votesCount\": 115,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/EYQMXQVYVKJ7YJ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/pod-6?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 940565,\n" +
+            "            \"name\": \"Fuego\",\n" +
+            "            \"tagline\": \"A desktop application for managing Firestore databases\",\n" +
+            "            \"description\": \"Fuego is a desktop app that simplifies Firestore and Firebase Auth management, offering bulk actions, efficient data import/export, background tasks, Point-in-Time Recovery, custom dashboards, advanced queries, and emulator integration for a faster workflow.\",\n" +
+            "            \"votesCount\": 109,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/UJPNCJ2E25UDZ7?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/fuego-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940617,\n" +
-            "            \"name\": \"W3ARE v1 beta\",\n" +
-            "            \"tagline\": \"Accept payments in any currency or crypto\",\n" +
-            "            \"description\": \"Simplify international transactions with w3are. Create payment links that support multiple payment methods, currencies, and cryptocurrencies. Secure, compliant, and easy to use. Start accepting payments worldwide today!\",\n" +
-            "            \"votesCount\": 108,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/OGNMM5QABG7HLJ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/w3are-v1-beta?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941860,\n" +
+            "            \"name\": \"Hal9 Reply\",\n" +
+            "            \"tagline\": \"Reply to Any Message\",\n" +
+            "            \"description\": \"Chrome extension to reply to any social media message with AI. Supported sites include LinkedIn, X, Gmail, Reddit, Instagram, GitHub, and many other sites.\",\n" +
+            "            \"votesCount\": 104,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/RBRXW6OJH7ABVC?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/hal9-reply?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940536,\n" +
-            "            \"name\": \"FocusNudge\",\n" +
-            "            \"tagline\": \"Status bar app to nudge you back into focus!\",\n" +
-            "            \"description\": \"Stay on track in a distraction-filled world! FocusNudge gently reminds you of your main focus whenever you switch to distracting apps. This tiny menu bar app delivers perfectly timed nudges that keep you aligned with what matters. Customizable, unobtrusive.\",\n" +
-            "            \"votesCount\": 108,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/HW627AGBESAL3V?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/focusnudge?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941803,\n" +
+            "            \"name\": \"LoadFast Snippet Expander\",\n" +
+            "            \"tagline\": \"Lightning fast text expansion, unlimited snippets, modern UI\",\n" +
+            "            \"description\": \"The best Google Chrome extension to insert snippets, templates, and macros. The best part? You can do everything (create, edit, or delete snippets) from the extension itself—no fluff, just speed. You'll be left wondering how you lived without this for so long!\",\n" +
+            "            \"votesCount\": 92,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"website\": \"https://www.producthunt.com/r/ZAQWATQGN3A6M2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/loadfast-snippet-expander?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940392,\n" +
-            "            \"name\": \"Pocket Casts\",\n" +
-            "            \"tagline\": \"No Paywalls. No Walled Gardens. Just Podcasts.\",\n" +
-            "            \"description\": \"Pocket Casts is a powerful, beautifully designed podcast player that lets you stream your podcasts from any device. With intuitive playback controls and a clean interface, it’s the best way to enjoy podcasts—now free for all.\",\n" +
-            "            \"votesCount\": 106,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
+            "            \"id\": 937750,\n" +
+            "            \"name\": \"Sooper.ai\",\n" +
+            "            \"tagline\": \"Follow content sites through AI generated audio podcasts \",\n" +
+            "            \"description\": \"Sooper allows users to follow any content sources in the form of a daily feed of AI generated audio podcasts. It tracks the sites for latest articles, summarizes them into interactive audio podcasts and delivers them to you in the form of a daily podcast feed.\",\n" +
+            "            \"votesCount\": 66,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
             "            \"featuredAt\": null,\n" +
-            "            \"website\": \"https://www.producthunt.com/r/IIDXSG7EVDDS64?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/pocket-casts-8?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"website\": \"https://www.producthunt.com/r/PMMFG57TW3OHEK?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/sooper-ai?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 935408,\n" +
-            "            \"name\": \"Wispr Flow for Windows\",\n" +
-            "            \"tagline\": \"Stop typing, start speaking: 3x faster dictation on PC & Mac\",\n" +
-            "            \"description\": \"Tired of typing? Wispr Flow for Windows lets you speak naturally and see your words perfectly formatted—no extra edits, no typos. It’s the easiest way to write 3x faster across all your apps.\",\n" +
-            "            \"votesCount\": 621,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/VEQJCWAHVPXBLC?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/wispr-flow-for-windows?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 765451,\n" +
+            "            \"name\": \"Ad Alchemy\",\n" +
+            "            \"tagline\": \"AI-powered solutions for Google Ads\",\n" +
+            "            \"description\": \"Built by industry leaders who’ve managed over $500M in Google Ads and have over 20 years of industry experience, Ad Alchemy combines cutting-edge tools with proven strategies to drive growth.\",\n" +
+            "            \"votesCount\": 62,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/BUTQ4DOSBPS2JO?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/ad-alchemy?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 931928,\n" +
-            "            \"name\": \"No Cap\",\n" +
-            "            \"tagline\": \"World's first AI angel investor\",\n" +
-            "            \"description\": \"Time to come clean: I just invested $100k in a startup — and I'm an AI. Full announcement and video below \uD83D\uDC47\",\n" +
-            "            \"votesCount\": 458,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/RX3O54ISJJ42UG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/no-cap?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 938379,\n" +
+            "            \"name\": \"Prolific Alpha\",\n" +
+            "            \"tagline\": \"Leverage cutting-edge AI to unlock stock market intelligence\",\n" +
+            "            \"description\": \"Our AI-powered platform translates complex stock data into clear, actionable insights for everyday investors, using large language models to synthesize chart patterns and news into comprehensive market intelligence.\",\n" +
+            "            \"votesCount\": 59,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/ZELTMCE2JN7L6T?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/prolific-alpha?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 941045,\n" +
-            "            \"name\": \"Cuckoo\",\n" +
-            "            \"tagline\": \"Real-time AI translator for global teams\",\n" +
-            "            \"description\": \"Cuckoo is a real-time AI translator for global sales, marketing, and support. Cuckoo helps companies like Snowflake and PagerDuty talk to their global customers in Zoom in-person meetings, even in the most technical discussions.\",\n" +
-            "            \"votesCount\": 384,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/BSLO27YPI7UOLG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/cuckoo-6?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941276,\n" +
+            "            \"name\": \"KreadoAI Video Face Swap\",\n" +
+            "            \"tagline\": \"Get face swaps video in one click with studio-quality result\",\n" +
+            "            \"description\": \"Create ultra-realistic face swap videos with ease. Swap faces across genders, skin tones, and ages with just one click. Our enhanced video face swap delivers studio-quality results, perfect for creators and professionals seeking precision and creativity.\",\n" +
+            "            \"votesCount\": 54,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/S2GH5IQUTUXN4D?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/kreadoai-video-face-swap?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 938270,\n" +
-            "            \"name\": \"Sherloq\",\n" +
-            "            \"tagline\": \"Create one place for all your SQL, directly on your editor\",\n" +
-            "            \"description\": \"Sherloq is a Collaborative SQL Repository. Using the AI-powered plugin, SQL users automatically save, organize, share, and document queries on-the-fly, without leaving the editor. Companies use Sherloq as the single source of truth for all their queries.\",\n" +
-            "            \"votesCount\": 358,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/M7N4WQZQIP4IOJ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/sherloq-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 934878,\n" +
+            "            \"name\": \"Cyclops\",\n" +
+            "            \"tagline\": \"Open-Source tool for building Internal Developer Platforms\",\n" +
+            "            \"description\": \"Cyclops is an open-source tool that allows companies to build Developer Platforms for Kubernetes in days instead of months. It enables DevOps engineers to create custom UIs for Kubernetes, making it accessible for the rest of the developers.\",\n" +
+            "            \"votesCount\": 48,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/2RDQWYCGOJ4QF4?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/cyclops-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 939950,\n" +
-            "            \"name\": \"Numeral\",\n" +
-            "            \"tagline\": \"Spend less than 5 minutes per month on sales tax compliance\",\n" +
-            "            \"description\": \"Numeral puts sales tax on autopilot for leading e-commerce and SaaS businesses, offering intelligent workflows for registration, filing, and remittance alongside white-glove customer support.\",\n" +
-            "            \"votesCount\": 339,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/EQNJ7UZ55RUAHG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/numeral?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941958,\n" +
+            "            \"name\": \"Copyright Registration - SecureAuthor\",\n" +
+            "            \"tagline\": \"Protect & prove your creations with SecureAuthor\",\n" +
+            "            \"description\": \"SecureAuthor – Instantly prove authorship with blockchain receipts. No fees, no lawyers, no paperwork—just instant, verifiable proof for your designs, code, documents, and more. Protect your work effortlessly, trusted by creators and businesses worldwide.\",\n" +
+            "            \"votesCount\": 47,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/HIWF5SDTI6VMWX?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/copyright-registration-secureauthor?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 929040,\n" +
-            "            \"name\": \"OG PM Agent: Beta Release\",\n" +
-            "            \"tagline\": \"Your AI Product Manager\",\n" +
-            "            \"description\": \"PM Agent is your AI Product Manager that attends all your meetings, creates detailed summaries, and converts business discussions into Product Requirement Document including acceptance criteria for every sprint in real time keeping all stakeholders aligned.\",\n" +
-            "            \"votesCount\": 247,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/HYURCPOABM6B7B?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/og-pm-agent-beta-release?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 880802,\n" +
+            "            \"name\": \"Cresh\",\n" +
+            "            \"tagline\": \"Analyze & refine business idea in minutes\",\n" +
+            "            \"description\": \"Cresh is a multi-agent business research and analysis tool designed to enhance and improve your business ideas. Answer key questions, get AI-driven insights, and make data-backed decisions—all in one place.\",\n" +
+            "            \"votesCount\": 38,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/FUDJH6TQIN4ZFA?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/cresh?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940539,\n" +
-            "            \"name\": \"Superwall\",\n" +
-            "            \"tagline\": \"Build & test mobile app paywalls without shipping updates\",\n" +
-            "            \"description\": \"Superwall is the ultimate paywall solution for mobile apps. Build and test unlimited paywall designs, pricing, and A/B experiments— all without shipping app updates. With built in analytics, reduce your time to experiment by 90% and grow revenue by 20-30%.\",\n" +
-            "            \"votesCount\": 227,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/JEBXUG7IVV3WMG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/superwall?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941667,\n" +
+            "            \"name\": \"Nexus\",\n" +
+            "            \"tagline\": \"AI-managed code quality and workflows built for AI teams\",\n" +
+            "            \"description\": \"Tired of bottlenecks? Nexus automates sprint tracking, code quality checks, bug finding, and DevOps monitoring with AI agents, a Kanban board, and a chatbot—bringing real-time visibility and insights to every stage of development.\",\n" +
+            "            \"votesCount\": 35,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/KXIBF4UYYCXPHB?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/nexus-10?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940968,\n" +
-            "            \"name\": \"OpenAI Responses API and Agents SDK\",\n" +
-            "            \"tagline\": \"New tools for building agents and tools\",\n" +
-            "            \"description\": \"A new set of APIs and tools specifically designed to simplify the development of agentic applications.\",\n" +
-            "            \"votesCount\": 174,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/7ZEJQUN3IQPUZA?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/openai-responses-api-and-agents-sdk?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 941738,\n" +
+            "            \"name\": \"IncredEmail AI\",\n" +
+            "            \"tagline\": \"Create High-Converting Emails in Just 5 Minutes with AI\",\n" +
+            "            \"description\": \"Most email builders are complex and not optimized for conversions. IncredEmail AI is designed for creating high-converting emails quickly and easily without coding. AI-powered templates, pixel-perfect layouts, and a no-code editor make email design effortless.\",\n" +
+            "            \"votesCount\": 29,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/U5CRYOKVQJWWE7?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/incredemail-ai?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940914,\n" +
-            "            \"name\": \"AI Renamer\",\n" +
-            "            \"tagline\": \"Rename your files with AI\",\n" +
-            "            \"description\": \"Automatically rename your files based on their content using AI. Perfect for organizing images and documents with meaningful names.\",\n" +
-            "            \"votesCount\": 167,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/DND2CRR6HKS53X?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/ai-renamer-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 938672,\n" +
+            "            \"name\": \"Headless Site Directory\",\n" +
+            "            \"tagline\": \"List of high-performance headless websites\",\n" +
+            "            \"description\": \"Explore top-performing headless websites setting new standards in speed, design, and innovation. Discover leading eCommerce, React JS, and portfolio projects.\",\n" +
+            "            \"votesCount\": 20,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/UZAKIMBSDNTB4X?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/headless-site-directory?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        },\n" +
             "        {\n" +
-            "            \"id\": 940701,\n" +
-            "            \"name\": \"Omlet for VS Code\",\n" +
-            "            \"tagline\": \"Get React component usage insights in VS Code\",\n" +
-            "            \"description\": \"Omlet is a component analytics tool for React. You can now use Omlet directly in VS Code and analyze how and where your React components (and their props) are used as you're coding — helping you confidently update, clean up and maintain your component library.\",\n" +
-            "            \"votesCount\": 163,\n" +
-            "            \"createdAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"featuredAt\": \"2025-03-12T07:01:00\",\n" +
-            "            \"website\": \"https://www.producthunt.com/r/DOVGY6PD4WK77S?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
-            "            \"url\": \"https://www.producthunt.com/posts/omlet-for-vs-code?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
+            "            \"id\": 940719,\n" +
+            "            \"name\": \"Senrigan\",\n" +
+            "            \"tagline\": \"See beyond horizons with remote vision\",\n" +
+            "            \"description\": \"An exciting realm of exploration where a plethora of fascinating places, await your discovery.\",\n" +
+            "            \"votesCount\": 18,\n" +
+            "            \"createdAt\": \"2025-03-14T07:01:00\",\n" +
+            "            \"featuredAt\": null,\n" +
+            "            \"website\": \"https://www.producthunt.com/r/K6N7KJCC3HZUS3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "            \"url\": \"https://www.producthunt.com/posts/senrigan?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\"\n" +
             "        }\n" +
             "    ]";
 

+ 2 - 0
product-hunt/src/main/java/com/producthunt/server/service/manager/impl/ProductHuntManagerImpl.java

@@ -105,6 +105,8 @@ public class ProductHuntManagerImpl implements IProductHuntManager {
                 break;
             }
             hasNextPage = postResponse.getPageInfo().getHasNextPage();
+            // 设置上次结尾位置
+            endCursor = postResponse.getPageInfo().getEndCursor();
         }
         if (CollectionUtils.isEmpty(posts)) {
             return List.of();