Selaa lähdekoodia

【第一版开发】
1.完善项目配置
2.完善token校验逻辑
3.更换测试数据data.sql
4.移除冗余代码
5.增加数据表ProductHunt媒体数据
7.完善表设计

ChenYL 10 kuukautta sitten
vanhempi
sitoutus
8abaf41d28
23 muutettua tiedostoa jossa 1617 lisäystä ja 553 poistoa
  1. 50 0
      data-easy/src/main/java/com/dataeasy/server/atomic/entity/DataProductHuntPostMedia.java
  2. 16 0
      data-easy/src/main/java/com/dataeasy/server/atomic/mapper/DataProductHuntPostMediaMapper.java
  3. 34 0
      data-easy/src/main/java/com/dataeasy/server/atomic/service/IDataProductHuntPostMediaService.java
  4. 55 0
      data-easy/src/main/java/com/dataeasy/server/atomic/service/impl/DataProductHuntPostMediaServiceImpl.java
  5. 8 1
      data-easy/src/main/java/com/dataeasy/server/core/interceptor/AuthInterceptor.java
  6. 1 1
      data-easy/src/main/java/com/dataeasy/server/feign/ProductHuntFeign.java
  7. 28 0
      data-easy/src/main/java/com/dataeasy/server/feign/dto/producthunt/PostMedia.java
  8. 7 1
      data-easy/src/main/java/com/dataeasy/server/feign/dto/producthunt/PostNode.java
  9. 1 126
      data-easy/src/main/java/com/dataeasy/server/pojo/data/IpoBondVO.java
  10. 10 70
      data-easy/src/main/java/com/dataeasy/server/pojo/data/IpoStockVO.java
  11. 28 0
      data-easy/src/main/java/com/dataeasy/server/pojo/data/ProductHuntPostMediaVO.java
  12. 11 0
      data-easy/src/main/java/com/dataeasy/server/pojo/data/ProductHuntPostVO.java
  13. 38 2
      data-easy/src/main/java/com/dataeasy/server/service/manager/impl/DataManagerImpl.java
  14. 6 10
      data-easy/src/main/java/com/dataeasy/server/service/manager/impl/TokenManagerImpl.java
  15. 47 12
      data-easy/src/main/java/com/dataeasy/server/task/ProductHuntTask.java
  16. 2 0
      data-easy/src/main/resources/application.yaml
  17. 1 1
      doc/sql/data.sql
  18. 17 0
      doc/sql/schema.sql
  19. 24 0
      doc/技术文档.md
  20. 28 0
      product-hunt/src/main/java/com/producthunt/server/dto/PostMedia.java
  21. 6 0
      product-hunt/src/main/java/com/producthunt/server/dto/PostNode.java
  22. 1194 329
      product-hunt/src/main/java/com/producthunt/server/service/controller/ProductHuntController.java
  23. 5 0
      product-hunt/src/main/java/com/producthunt/server/service/manager/impl/ProductHuntManagerImpl.java

+ 50 - 0
data-easy/src/main/java/com/dataeasy/server/atomic/entity/DataProductHuntPostMedia.java

@@ -0,0 +1,50 @@
+package com.dataeasy.server.atomic.entity;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+import com.dataeasy.server.common.pojo.BaseEntity;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt媒体数据表
+ * @date 2025/3/28 16:48
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(name = "data_product_hunt_post_media")
+public class DataProductHuntPostMedia extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3386709939694532309L;
+
+    /**
+     * 帖子ID
+     */
+    @Column(name = "post_id")
+    private Long postId;
+
+    /**
+     * 媒体类型
+     */
+    @Column(name = "type")
+    private String type;
+
+    /**
+     * 图片url
+     */
+    @Column(name = "url")
+    private Integer url;
+
+    /**
+     * 视频url
+     */
+    @Column(name = "video_url")
+    private Long videoUrl;
+}

+ 16 - 0
data-easy/src/main/java/com/dataeasy/server/atomic/mapper/DataProductHuntPostMediaMapper.java

@@ -0,0 +1,16 @@
+package com.dataeasy.server.atomic.mapper;
+
+import com.dataeasy.server.atomic.entity.DataProductHuntPostMedia;
+
+import tk.mybatis.mapper.common.Mapper;
+import tk.mybatis.mapper.common.special.InsertListMapper;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt榜单的帖子媒体数据 mapper
+ * @date 2025/3/28 16:50
+ */
+public interface DataProductHuntPostMediaMapper extends Mapper<DataProductHuntPostMedia>, InsertListMapper<DataProductHuntPostMedia> {
+
+}

+ 34 - 0
data-easy/src/main/java/com/dataeasy/server/atomic/service/IDataProductHuntPostMediaService.java

@@ -0,0 +1,34 @@
+package com.dataeasy.server.atomic.service;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.dataeasy.server.atomic.entity.DataProductHuntPostMedia;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt榜单的帖子媒体数据 service
+ * @date 2025/3/6 15:31
+ */
+public interface IDataProductHuntPostMediaService {
+
+    /**
+     * 批量新增
+     * @param postMedias
+     */
+    void insertList(List<DataProductHuntPostMedia> postMedias);
+
+    /**
+     * 根据帖子ID查询数据
+     * @param postIds 帖子ID
+     * @return
+     */
+    List<DataProductHuntPostMedia> getByPostIds(Collection<Long> postIds);
+
+    /**
+     * 根据帖子ID删除数据(逻辑删除)
+     * @param postIds 帖子ID
+     */
+    void deleteByPostIds(Collection<Long> postIds);
+}

+ 55 - 0
data-easy/src/main/java/com/dataeasy/server/atomic/service/impl/DataProductHuntPostMediaServiceImpl.java

@@ -0,0 +1,55 @@
+package com.dataeasy.server.atomic.service.impl;
+
+import com.dataeasy.server.atomic.entity.DataProductHuntPostMedia;
+import com.dataeasy.server.atomic.mapper.DataProductHuntPostMediaMapper;
+import com.dataeasy.server.atomic.service.IDataProductHuntPostMediaService;
+import com.dataeasy.server.common.utils.Assert;
+import com.dataeasy.server.utiis.WeekendUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/28 16:54
+ * @description Product Hunt榜单的帖子媒体数据 service
+ */
+@Service
+public class DataProductHuntPostMediaServiceImpl implements IDataProductHuntPostMediaService {
+
+    @Autowired
+    private DataProductHuntPostMediaMapper dataProductHuntPostMediaMapper;
+
+    @Override
+    public void insertList(List<DataProductHuntPostMedia> postMedias) {
+        Assert.notEmpty(postMedias);
+        dataProductHuntPostMediaMapper.insertList(postMedias);
+    }
+
+    @Override
+    public List<DataProductHuntPostMedia> getByPostIds(Collection<Long> postIds) {
+        if (CollectionUtils.isEmpty(postIds)) {
+            return List.of();
+        }
+
+        Weekend<DataProductHuntPostMedia> weekend = WeekendUtils.createExcludeAuditFields(DataProductHuntPostMedia.class);
+        WeekendCriteria<DataProductHuntPostMedia, Object> criteria = weekend.weekendCriteria();
+        criteria.andIn(DataProductHuntPostMedia::getPostId, postIds);
+        return dataProductHuntPostMediaMapper.selectByExample(weekend);
+    }
+
+    @Override
+    public void deleteByPostIds(Collection<Long> postIds) {
+        Assert.notEmpty(postIds);
+        Weekend<DataProductHuntPostMedia> weekend = Weekend.of(DataProductHuntPostMedia.class);
+        WeekendCriteria<DataProductHuntPostMedia, Object> criteria = weekend.weekendCriteria();
+        criteria.andIn(DataProductHuntPostMedia::getPostId, postIds);
+        dataProductHuntPostMediaMapper.deleteByExample(weekend);
+    }
+}

+ 8 - 1
data-easy/src/main/java/com/dataeasy/server/core/interceptor/AuthInterceptor.java

@@ -2,6 +2,7 @@ package com.dataeasy.server.core.interceptor;
 
 import java.util.Objects;
 
+import com.auth0.jwt.exceptions.TokenExpiredException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
@@ -45,7 +46,13 @@ public class AuthInterceptor implements HandlerInterceptor {
         }
 
         // token解析获取用户ID
-        Long currentUserId = tokenManager.getUserIdByToken(token);
+        Long currentUserId = null;
+        try {
+            currentUserId = tokenManager.getUserIdByToken(token);
+        } catch (TokenExpiredException e) {
+            log.warn("token已过期,token:{}", token);
+            throw LoginException.fail("登录校验失败,token已过期");
+        }
         if (Objects.isNull(currentUserId)) {
             log.warn("登录校验异常,token中不存在有效的用户信息,token:{}", token);
             throw LoginException.fail("登录校验异常,token中不存在有效的用户信息");

+ 1 - 1
data-easy/src/main/java/com/dataeasy/server/feign/ProductHuntFeign.java

@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import com.dataeasy.server.common.pojo.JsonResponse;
-import com.dataeasy.server.feign.dto.PostNode;
+import com.dataeasy.server.feign.dto.producthunt.PostNode;
 
 /**
  * @author tyuio

+ 28 - 0
data-easy/src/main/java/com/dataeasy/server/feign/dto/producthunt/PostMedia.java

@@ -0,0 +1,28 @@
+package com.dataeasy.server.feign.dto.producthunt;
+
+import lombok.Data;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/28 16:30
+ * @description Product Hunt的Post媒体信息
+ */
+@Data
+public class PostMedia {
+
+    /**
+     * 图片url
+     */
+    private String url;
+
+    /**
+     * 媒体类型
+     */
+    private String type;
+
+    /**
+     * 视频url
+     */
+    private String videoUrl;
+}

+ 7 - 1
data-easy/src/main/java/com/dataeasy/server/feign/dto/PostNode.java → data-easy/src/main/java/com/dataeasy/server/feign/dto/producthunt/PostNode.java

@@ -1,6 +1,7 @@
-package com.dataeasy.server.feign.dto;
+package com.dataeasy.server.feign.dto.producthunt;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 import lombok.Data;
 
@@ -57,4 +58,9 @@ public class PostNode {
      * 帖子URL
      */
     private String url;
+
+    /**
+     * 媒体数据
+     */
+    private List<PostMedia> media;
 }

+ 1 - 126
data-easy/src/main/java/com/dataeasy/server/pojo/data/IpoBondVO.java

@@ -24,148 +24,23 @@ public class IpoBondVO {
      */
     private String bondShortName;
 
-    /**
-     * 公告日期
-     */
-    private Date announcementDate;
-
-    /**
-     * 发行起始日
-     */
-    private Date issueStartDate;
-
-    /**
-     * 发行终止日
-     */
-    private Date issueEndDate;
-
-    /**
-     * 计划发行总量
-     */
-    private BigDecimal plannedIssueAmount;
-
-    /**
-     * 实际发行总量
-     */
-    private BigDecimal actualIssueAmount;
-
-    /**
-     * 发行面值
-     */
-    private BigDecimal issueParValue;
-
-    /**
-     * 发行价格
-     */
-    private BigDecimal issuePrice;
-
-    /**
-     * 发行方式
-     */
-    private String issueMethod;
-
-    /**
-     * 发行对象
-     */
-    private String issueTarget;
-
-    /**
-     * 发行范围
-     */
-    private String issueScope;
-
-    /**
-     * 承销方式
-     */
-    private String underwritingMethod;
-
-    /**
-     * 募资用途说明
-     */
-    private String fundraisingPurpose;
-
-    /**
-     * 初始转股价格
-     */
-    private BigDecimal initialConversionPrice;
-
-    /**
-     * 转股开始日期
-     */
-    private Date conversionStartDate;
-
-    /**
-     * 转股终止日期
-     */
-    private Date conversionEndDate;
-
     /**
      * 网上申购日期
      */
-    private Date onlineSubscriptionDate;
-
-    /**
-     * 网上申购代码
-     */
-    private String onlineSubscriptionCode;
-
-    /**
-     * 网上申购简称
-     */
-    private String onlineSubscriptionShortName;
+    private String onlineSubscriptionDate;
 
     /**
      * 网上申购数量上限
      */
     private BigDecimal onlineSubscriptionMax;
 
-    /**
-     * 网上申购数量下限
-     */
-    private BigDecimal onlineSubscriptionMin;
-
-    /**
-     * 网上申购单位
-     */
-    private BigDecimal onlineSubscriptionUnit;
-
-    /**
-     * 网上申购中签结果公告日及退款日
-     */
-    private Date onlineSubscriptionResultDate;
-
-    /**
-     * 优先申购日
-     */
-    private Date prioritySubscriptionDate;
-
     /**
      * 配售价格
      */
     private BigDecimal allotmentPrice;
 
-    /**
-     * 债权登记日
-     */
-    private Date creditorRegistrationDate;
-
-    /**
-     * 优先申购缴款日
-     */
-    private Date prioritySubscriptionPaymentDate;
-
-    /**
-     * 转股代码
-     */
-    private String conversionCode;
-
     /**
      * 交易市场
      */
     private String tradingMarket;
-
-    /**
-     * 债券名称
-     */
-    private String bondName;
 }

+ 10 - 70
data-easy/src/main/java/com/dataeasy/server/pojo/data/IpoStockVO.java

@@ -25,65 +25,15 @@ public class IpoStockVO {
     private String stockShortName;
 
     /**
-     * 申购代码
-     */
-    private String subscriptionCode;
-
-    /**
-     * 发行总数
-     */
-    private BigDecimal totalIssued;
-
-    /**
-     * 网上发行
-     */
-    private BigDecimal onlineIssued;
-
-    /**
-     * 顶格申购需配市值
-     */
-    private BigDecimal maxMarketValueForSubscription;
-
-    /**
-     * 申购上限
+     * 申购日期
      */
-    private Integer subscriptionLimit;
+    private String subscriptionDate;
 
     /**
      * 发行价格
      */
     private BigDecimal issuePrice;
 
-    /**
-     * 最新价
-     */
-    private BigDecimal latestPrice;
-
-    /**
-     * 首日收盘价
-     */
-    private BigDecimal firstDayClosingPrice;
-
-    /**
-     * 申购日期
-     */
-    private Date subscriptionDate;
-
-    /**
-     * 中签号公布日
-     */
-    private Date winningNumberAnnouncementDate;
-
-    /**
-     * 中签缴款日期
-     */
-    private Date paymentDateForWinning;
-
-    /**
-     * 上市日期
-     */
-    private Date listingDate;
-
     /**
      * 发行市盈率
      */
@@ -95,32 +45,22 @@ public class IpoStockVO {
     private BigDecimal industryPeRatio;
 
     /**
-     * 中签率
-     */
-    private BigDecimal winningRate;
-
-    /**
-     * 询价累计报价倍数
-     */
-    private BigDecimal cumulativeBidMultiple;
-
-    /**
-     * 配售对象报价家数
+     * 发行总数
      */
-    private Integer biddingFirmsCount;
+    private BigDecimal totalIssued;
 
     /**
-     * 连续一字板数量
+     * 网上发行
      */
-    private String consecutiveLimitUpDays;
+    private BigDecimal onlineIssued;
 
     /**
-     * 涨幅
+     * 顶格申购需配市值
      */
-    private BigDecimal increaseRate;
+    private BigDecimal maxMarketValueForSubscription;
 
     /**
-     * 每中一签获利
+     * 申购上限
      */
-    private BigDecimal profitRerWinningLot;
+    private Integer subscriptionLimit;
 }

+ 28 - 0
data-easy/src/main/java/com/dataeasy/server/pojo/data/ProductHuntPostMediaVO.java

@@ -0,0 +1,28 @@
+package com.dataeasy.server.pojo.data;
+
+import lombok.Data;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description ProductHunt热榜帖子媒体数据 VO
+ * @date 2025/3/28 17:15
+ */
+@Data
+public class ProductHuntPostMediaVO {
+
+    /**
+     * 媒体类型
+     */
+    private String type;
+
+    /**
+     * 图片url
+     */
+    private String url;
+
+    /**
+     * 视频url
+     */
+    private String videoUr;
+}

+ 11 - 0
data-easy/src/main/java/com/dataeasy/server/pojo/data/ProductHuntPostVO.java

@@ -1,6 +1,7 @@
 package com.dataeasy.server.pojo.data;
 
 import java.util.Date;
+import java.util.List;
 
 import lombok.Data;
 
@@ -43,6 +44,11 @@ public class ProductHuntPostVO {
      */
     private String description;
 
+    /**
+     * 关键词
+     */
+    private String descriptionKey;
+
     /**
      * 投票数
      */
@@ -67,4 +73,9 @@ public class ProductHuntPostVO {
      * 帖子URL
      */
     private String url;
+
+    /**
+     * 媒体数据
+     */
+    private List<ProductHuntPostMediaVO> medias;
 }

+ 38 - 2
data-easy/src/main/java/com/dataeasy/server/service/manager/impl/DataManagerImpl.java

@@ -4,10 +4,12 @@ import com.dataeasy.server.atomic.entity.DataDaLeTou;
 import com.dataeasy.server.atomic.entity.DataIpoBond;
 import com.dataeasy.server.atomic.entity.DataIpoStock;
 import com.dataeasy.server.atomic.entity.DataProductHuntPost;
+import com.dataeasy.server.atomic.entity.DataProductHuntPostMedia;
 import com.dataeasy.server.atomic.entity.DataShuangSeQiu;
 import com.dataeasy.server.atomic.service.IDataDaLeTouService;
 import com.dataeasy.server.atomic.service.IDataIpoBondService;
 import com.dataeasy.server.atomic.service.IDataIpoStockService;
+import com.dataeasy.server.atomic.service.IDataProductHuntPostMediaService;
 import com.dataeasy.server.atomic.service.IDataProductHuntPostService;
 import com.dataeasy.server.atomic.service.IDataShuangSeQiuService;
 import com.dataeasy.server.common.annotation.DataAuth;
@@ -15,9 +17,11 @@ import com.dataeasy.server.constant.CacheNameConstant;
 import com.dataeasy.server.pojo.data.DaLeTouVO;
 import com.dataeasy.server.pojo.data.IpoBondVO;
 import com.dataeasy.server.pojo.data.IpoStockVO;
+import com.dataeasy.server.pojo.data.ProductHuntPostMediaVO;
 import com.dataeasy.server.pojo.data.ProductHuntPostVO;
 import com.dataeasy.server.pojo.data.ShuangSeQiuVO;
 import com.dataeasy.server.service.manager.IDataManager;
+import com.dataeasy.server.utiis.DateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +29,10 @@ import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -49,6 +56,9 @@ public class DataManagerImpl implements IDataManager {
     @Autowired
     private IDataProductHuntPostService productHuntPostService;
 
+    @Autowired
+    private IDataProductHuntPostMediaService productHuntPostMediaService;
+
     @Autowired
     private IDataDaLeTouService daLeTouService;
 
@@ -65,9 +75,16 @@ public class DataManagerImpl implements IDataManager {
             return List.of();
         }
 
-        return ipoBonds.stream().map(ipoStock -> {
+        SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_PATTERN);
+        return ipoBonds.stream().map(ipoBond -> {
             IpoBondVO ipoBondVO = new IpoBondVO();
-            BeanUtils.copyProperties(ipoStock, ipoBondVO);
+            ipoBondVO.setBondCode(ipoBond.getBondCode());
+            ipoBondVO.setBondShortName(ipoBond.getBondShortName());
+            ipoBondVO.setTradingMarket(ipoBond.getTradingMarket());
+            ipoBondVO.setOnlineSubscriptionDate(sdf.format(ipoBond.getOnlineSubscriptionDate()));
+            // 修正数据
+            ipoBondVO.setOnlineSubscriptionMax(ipoBond.getOnlineSubscriptionMax().multiply(BigDecimal.TEN));
+            ipoBondVO.setAllotmentPrice(ipoBond.getAllotmentPrice().multiply(BigDecimal.TEN));
             return ipoBondVO;
         }).toList();
     }
@@ -82,9 +99,11 @@ public class DataManagerImpl implements IDataManager {
             return List.of();
         }
 
+        SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_PATTERN);
         return ipoStocks.stream().map(ipoStock -> {
             IpoStockVO ipoStockVO = new IpoStockVO();
             BeanUtils.copyProperties(ipoStock, ipoStockVO);
+            ipoStockVO.setSubscriptionDate(sdf.format(ipoStock.getSubscriptionDate()));
             return ipoStockVO;
         }).toList();
     }
@@ -128,9 +147,26 @@ public class DataManagerImpl implements IDataManager {
         if (CollectionUtils.isEmpty(posts)) {
             return List.of();
         }
+
+        // 读取媒体数据
+        List<Long> postIds = posts.stream().map(DataProductHuntPost::getPostId).toList();
+        List<DataProductHuntPostMedia> postMedias = productHuntPostMediaService.getByPostIds(postIds);
+        Map<Long, List<DataProductHuntPostMedia>> postMediaMap = postMedias.stream().collect(Collectors.groupingBy(DataProductHuntPostMedia::getPostId));
+
         return posts.stream().map(post -> {
             ProductHuntPostVO productHuntPostVO = new ProductHuntPostVO();
             BeanUtils.copyProperties(post, productHuntPostVO);
+
+            List<DataProductHuntPostMedia> tempPostMedias = postMediaMap.get(post.getPostId());
+            if (!CollectionUtils.isEmpty(tempPostMedias)) {
+                List<ProductHuntPostMediaVO> postMediaVOList = tempPostMedias.stream().map(postMedia -> {
+                    ProductHuntPostMediaVO postMediaVO = new ProductHuntPostMediaVO();
+                    BeanUtils.copyProperties(postMedia, postMediaVO);
+                    return postMediaVO;
+                }).collect(Collectors.toList());
+                productHuntPostVO.setMedias(postMediaVOList);
+            }
+
             return productHuntPostVO;
         }).collect(Collectors.toList());
     }

+ 6 - 10
data-easy/src/main/java/com/dataeasy/server/service/manager/impl/TokenManagerImpl.java

@@ -3,17 +3,18 @@ package com.dataeasy.server.service.manager.impl;
 import java.util.Calendar;
 import java.util.Map;
 
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.interfaces.Claim;
-import com.dataeasy.server.common.exception.BusinessException;
 import com.dataeasy.server.common.utils.Assert;
 import com.dataeasy.server.core.config.BizProperties;
 import com.dataeasy.server.service.manager.ITokenManager;
+
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 
 /**
  * @author myou
@@ -57,12 +58,7 @@ public class TokenManagerImpl implements ITokenManager {
 
     @Override
     public Long getUserIdByToken(String token) {
-        try {
-            Map<String, Claim> verify = jwtVerifier.verify(token).getClaims();
-            return verify.get(CLAIM_USER_ID).asLong();
-        } catch (Exception e) {
-            log.error("解析token异常", e);
-            throw BusinessException.fail("解析token异常");
-        }
+        Map<String, Claim> verify = jwtVerifier.verify(token).getClaims();
+        return verify.get(CLAIM_USER_ID).asLong();
     }
 }

+ 47 - 12
data-easy/src/main/java/com/dataeasy/server/task/ProductHuntTask.java

@@ -10,15 +10,19 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.Set;
 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.atomic.entity.DataProductHuntPostMedia;
+import com.dataeasy.server.atomic.service.IDataProductHuntPostMediaService;
 import com.dataeasy.server.common.exception.BusinessException;
 import com.dataeasy.server.constant.CacheNameConstant;
 import com.dataeasy.server.core.aop.ScheduleTaskLogAspect;
+import com.dataeasy.server.feign.dto.producthunt.PostMedia;
 import com.dataeasy.server.pojo.task.ProductHuntTranslateDto;
 import com.dataeasy.server.utiis.DateUtils;
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -44,7 +48,7 @@ import com.dataeasy.server.common.pojo.JsonResponse;
 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.feign.dto.producthunt.PostNode;
 import com.google.common.collect.Lists;
 
 import lombok.extern.slf4j.Slf4j;
@@ -77,6 +81,9 @@ public class ProductHuntTask extends AbstractDataTask {
     @Autowired
     private IDataProductHuntPostService productHuntPostService;
 
+    @Autowired
+    private IDataProductHuntPostMediaService productHuntPostMediaService;
+
     @Autowired
     private ProductHuntProperties productHuntProperties;
 
@@ -140,6 +147,13 @@ public class ProductHuntTask extends AbstractDataTask {
         // 删除历史数据数据,以防重复执行导致数据重复引发系统异常
         productHuntPostService.deleteByRankDate(rankDateStr);
 
+        // 删除历史媒体数据
+        List<DataProductHuntPost> oldPostList = productHuntPostService.getByRankDate(rankDateStr);
+        if (!CollectionUtils.isEmpty(oldPostList)) {
+            Set<Long> postIds = oldPostList.stream().map(DataProductHuntPost::getPostId).collect(Collectors.toSet());
+            productHuntPostMediaService.deleteByPostIds(postIds);
+        }
+
         // 内容太长,要分批次翻译
         List<List<PostNode>> partition = Lists.partition(postNodes, Optional.ofNullable(productHuntProperties.getTranslateNum()).orElse(10));
         ObjectMapper objectMapper = new ObjectMapper();
@@ -189,31 +203,52 @@ public class ProductHuntTask extends AbstractDataTask {
         Map<Long, ProductHuntTranslateDto> productHuntTranslateDtoMap = synchronizedList.stream().collect(Collectors.toMap(ProductHuntTranslateDto::getId, Function.identity(), (v1, v2) -> v1));
 
         AtomicInteger rankNum = new AtomicInteger(1);
-        List<DataProductHuntPost> posts = postNodes.stream().map(v -> {
+        List<DataProductHuntPost> posts = new ArrayList<>(postNodes.size());
+        List<DataProductHuntPostMedia> postMedias = new ArrayList<>(postNodes.size());
+        for (PostNode postNode : postNodes) {
+            // 构建帖子数据
             DataProductHuntPost post = new DataProductHuntPost();
-            BeanUtils.copyProperties(v, post);
+            BeanUtils.copyProperties(postNode, post);
             post.setRankDate(rankDate);
             post.setRankNum(rankNum.getAndIncrement());
             post.setId(null);
-            post.setPostId(v.getId());
-            if (Objects.nonNull(v.getCreatedAt())) {
-                post.setCreatedAt(Date.from(v.getCreatedAt().atZone(ZoneId.systemDefault()).toInstant()));
+            post.setPostId(postNode.getId());
+            if (Objects.nonNull(postNode.getCreatedAt())) {
+                post.setCreatedAt(Date.from(postNode.getCreatedAt().atZone(ZoneId.systemDefault()).toInstant()));
             }
-            if (Objects.nonNull(v.getFeaturedAt())) {
-                post.setFeaturedAt(Date.from(v.getFeaturedAt().atZone(ZoneId.systemDefault()).toInstant()));
+            if (Objects.nonNull(postNode.getFeaturedAt())) {
+                post.setFeaturedAt(Date.from(postNode.getFeaturedAt().atZone(ZoneId.systemDefault()).toInstant()));
             }
-            ProductHuntTranslateDto productHuntTranslateDto = productHuntTranslateDtoMap.get(v.getId());
+            ProductHuntTranslateDto productHuntTranslateDto = productHuntTranslateDtoMap.get(postNode.getId());
             if (Objects.nonNull(productHuntTranslateDto)) {
                 post.setDescriptionKey(productHuntTranslateDto.getKey());
                 post.setTagline(productHuntTranslateDto.getTagline());
                 post.setDescription(productHuntTranslateDto.getDescription());
             }
-            return post;
-        }).collect(Collectors.toList());
+            posts.add(post);
 
-        // 数据入库
+            // 构建帖子媒体数据
+            List<PostMedia> medias = postNode.getMedia();
+            if (CollectionUtils.isEmpty(medias)) {
+                continue;
+            }
+            List<DataProductHuntPostMedia> dataPostMediaList = medias.stream().map(media -> {
+                DataProductHuntPostMedia dataPostMedia = new DataProductHuntPostMedia();
+                BeanUtils.copyProperties(media, dataPostMedia);
+                dataPostMedia.setPostId(postNode.getId());
+                return dataPostMedia;
+            }).collect(Collectors.toList());
+            postMedias.addAll(dataPostMediaList);
+        }
+
+        // 帖子数据入库
         productHuntPostService.insertList(posts);
 
+        // 帖子媒体数据入库
+        if (!CollectionUtils.isEmpty(postMedias)) {
+            productHuntPostMediaService.insertList(postMedias);
+        }
+
         // 清除缓存,以防缓存中数据过时
         SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_PATTERN);
         String randDateStr = sdf.format(rankDate);

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

@@ -14,6 +14,8 @@ spring:
       chat:
         options:
           model: deepseek-ai/DeepSeek-V3
+  jackson:
+    time-zone: GMT+8
 
 jasypt:
   encryptor:

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
doc/sql/data.sql


+ 17 - 0
doc/sql/schema.sql

@@ -453,5 +453,22 @@ ALTER TABLE data_easy.subscription_order CHANGE transaction_id transaction_id va
 ALTER TABLE data_easy.subscription_task_config MODIFY COLUMN subscription_source_id bigint NULL COMMENT '订阅源ID';
 ALTER TABLE data_easy.subscription_task_config MODIFY COLUMN task_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '定时任务编码';
 ALTER TABLE data_easy.subscription_order MODIFY COLUMN close_time DATETIME NOT NULL COMMENT '订单关闭时间';
+ALTER TABLE data_easy.data_product_hunt_post DROP COLUMN key;
 
+-- Product Hunt榜单的帖子媒体数据
+CREATE TABLE `data_product_hunt_post_media` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `data_product_hunt_post_id` bigint NOT NULL COMMENT '帖子ID',
+  `type` varchar(20) NOT NULL COMMENT '媒体类型',
+  `url` varchar(500) NOT NULL COMMENT '图片url',
+  `video_url` varchar(500) NOT NULL COMMENT '视频url',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Product Hunt榜单的帖子媒体数据';
 
+ALTER TABLE data_easy.data_product_hunt_post_media CHANGE data_product_hunt_post_id post_id bigint NOT NULL COMMENT '帖子ID';

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

@@ -149,6 +149,30 @@
 
 
 
+### Product Hunt媒体数据表
+
+表名:data_product_hunt_post_media
+
+表注释:Product Hunt榜单的帖子媒体数据
+
+| 字段             | 类型         | 描述                               |
+| ---------------- | ------------ | ---------------------------------- |
+| id               | bigint       | 主键                               |
+| post_id          | bigint       | 帖子ID                             |
+| type             | varchar(20)  | 媒体类型                           |
+| url              | varchar(500) | 图片url                            |
+| video_url        | varchar(500) | 视频url                            |
+| created_by       | bigint       | 创建人                             |
+| creation_time    | timestamp    | 创建时间                           |
+| last_updated_by  | bigint       | 最后更信人                         |
+| last_update_time | timestamp    | 最后更新时间                       |
+| version          | bigint       | 版本号                             |
+| delete_flag      | tinyint      | 逻辑删除标志(0-未删除,1-已删除) |
+
+
+
+
+
 ### 大乐透数据表
 
 表名:data_da_le_tou

+ 28 - 0
product-hunt/src/main/java/com/producthunt/server/dto/PostMedia.java

@@ -0,0 +1,28 @@
+package com.producthunt.server.dto;
+
+import lombok.Data;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/28 16:30
+ * @description Product Hunt的Post媒体信息
+ */
+@Data
+public class PostMedia {
+
+    /**
+     * 图片url
+     */
+    private String url;
+
+    /**
+     * 媒体类型
+     */
+    private String type;
+
+    /**
+     * 视频url
+     */
+    private String videoUrl;
+}

+ 6 - 0
product-hunt/src/main/java/com/producthunt/server/dto/PostNode.java

@@ -3,6 +3,7 @@ package com.producthunt.server.dto;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @author tyuio
@@ -57,4 +58,9 @@ public class PostNode {
      * 帖子URL
      */
     private String url;
+
+    /**
+     * 媒体数据
+     */
+    private List<PostMedia> media;
 }

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

@@ -36,337 +36,1202 @@ public class ProductHuntController {
     private IProductHuntManager productHuntManager;
 
     private String content = "[\n" +
+            "    {\n" +
+            "      \"id\": 941118,\n" +
+            "      \"name\": \"Airial Travel\",\n" +
+            "      \"tagline\": \"Plan dream trips instantly from ideas or travel videos\",\n" +
+            "      \"description\": \"Just imagine your trip and Airial it! Simply describe your trip to Airial, or drop in your favourite TikToks / IG and see your dream trip come to life instantly. Airial's one-of-a-kind AI picks out every last detail so that you can start packing, stress-free!\",\n" +
+            "      \"votesCount\": 139,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/QMYFSMSLGEFH7W?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/airial-travel-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
             "        {\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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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/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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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\": 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" +
+            "          \"url\": \"https://ph-files.imgix.net/92a9bf61-2687-4792-bd39-a3497efde867.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/1e10b4ba-1453-4c8d-8e02-d3d41e4f5a83.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0f31628c-6f33-41c7-8d73-ca472c6fd5aa.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/3337811d-0532-43e2-af33-0cd49a443f68.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/486958dd-ce50-4ccb-878f-9ce7e8900ced.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e9f7198c-9b99-4041-a170-c7d4b1a5f509.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9068b997-451b-4dde-adbb-34e6c020cb93.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/148d6ee1-62e2-479d-97b1-37606561a805.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.loom.com/share/f3e075fd2fed4c98b6a5420e7a5be694?sid=3af3c996-d6ee-4f45-b158-effe7c093c66\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/6daa41ba-312e-4ab9-8eb2-dc282ad4814d.octet-stream?auto=format\",\n" +
+            "          \"type\": \"interactive_demo\",\n" +
+            "          \"videoUrl\": \"https://app.storylane.io/share/lwdigshaeesr\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 942660,\n" +
+            "      \"name\": \"Atlas.co 2.0\",\n" +
+            "      \"tagline\": \"The first no-code platform for spatial apps\",\n" +
+            "      \"description\": \"Atlas lets you build powerful spatial apps without writing code. Upload your spatial data, connect to APIs, and spreadsheets - all from your browser. Whether it’s inspections, site selection, or dashboards, you can go from idea to interactive maps in minutes.\",\n" +
+            "      \"votesCount\": 114,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/6CCIVYDLF7WBEN?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/atlas-co-2-0?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/08a7188e-3f86-4087-b4e7-84088cf03abd.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c0dce27a-a137-499b-a029-e9e9cc1cc08b.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/3badf89b-875b-4f79-8a7c-46db0f7b3c45.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/a0bff80a-db8d-4e80-8670-070acd127c12.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0465ae29-fe15-4c40-ae1d-2f0ca09f7d9d.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/00a1e4d9-a909-49d6-a288-0c4358cd2afe.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/MbZH_4ZE2MA\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 822186,\n" +
+            "      \"name\": \"Leadsourcing\",\n" +
+            "      \"tagline\": \"Turn anonymous visitors into qualified leads instantly.\",\n" +
+            "      \"description\": \"Leadsourcing reveals potential customers behind your website traffic. We enrich their profiles with emails, roles, and LinkedIn info, then send them to your Slack or Discord in real-time. Engage smarter. Act faster. Close more deals.\",\n" +
+            "      \"votesCount\": 103,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/2EP5HVPMEAHBGT?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/leadsourcing-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/736cd28e-7f5a-41b9-8925-919d9ac3c7ea.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/dfe8cd54-2ad8-49cc-b6c1-27f45ed12d90.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/134ac13f-059d-4d94-baa6-a378b335782e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/80fa5de8-fc40-4501-b32b-5ae3ffd7f54b.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/f6e55f33-d832-4153-9cb4-521227dd7195.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9c4a44b3-b018-4879-a0d7-e11486912549.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/a304eace-1a41-413c-bd13-32e6e9a7096c.png?auto=format\",\n" +
+            "          \"type\": \"interactive_demo\",\n" +
+            "          \"videoUrl\": \"https://app.supademo.com/demo/cm8iolsch0421xh7b5uaa184j?preview=true&step=1\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 942024,\n" +
+            "      \"name\": \"linktime\",\n" +
+            "      \"tagline\": \"Become the superhero of LinkedIn social selling.\",\n" +
+            "      \"description\": \"Are your LinkedIn comments going unnoticed? With linktime, play the social warming game and boost your visibility. Capture prospects' attention and stay on their radar easily: spot key posts, comment with eye-catching GIFs and images, and track conversations.\",\n" +
+            "      \"votesCount\": 101,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/5GS4V5M7RWIKZR?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/linktime-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0efb2c89-840f-4bd6-b00b-d2229f95aa52.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/10c45f7e-19ca-4539-8747-33488d92d5a8.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/64bf66d2-fbc4-43e3-9b1c-c831e289a406.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/652993b8-369e-4905-a2bc-5c5763f06a20.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/46c104cc-7436-4096-8937-7ba1cc7da4e2.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946901,\n" +
+            "      \"name\": \"Alice 3.0\",\n" +
+            "      \"tagline\": \"AI Automation tool that talks to Make, Zapier & your API\",\n" +
+            "      \"description\": \"AI Automation Assistant that works with Make Zapier and your APIs ✔\uFE0E Connect your apps to LLM via no-code ✔\uFE0E All models in one app ✔\uFE0E Fast, secure, privacy focused (offline models) ✔\uFE0E Developer friendly; connect your back-end ✔\uFE0E Assistant Library Try free \uD83C\uDD93\",\n" +
+            "      \"votesCount\": 98,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/7F7FNKRAHCO7VP?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/alice-3-0?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/8f9b7877-777c-4636-8f61-14701e1bfe82.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b09621e5-7f55-4271-af43-3f925674539a.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b3192607-8327-406a-af1e-06f54d2c5b5b.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/5a8f8ac9-c25c-4c53-af4b-dad1e7f4156c.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9b83a55e-ccde-4ca5-b63b-2d535160d5c1.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d16a2099-77ff-4baa-9537-a6cc64385e77.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/EyGjhnVTe5w\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946493,\n" +
+            "      \"name\": \"Nash\",\n" +
+            "      \"tagline\": \"AI that interacts with any app, service, or file.\",\n" +
+            "      \"description\": \"A more powerful variant of ChatGPT Desktop or Claude Desktop, with a built-in single MCP that lets you use literally any API, app, or local file.\",\n" +
+            "      \"votesCount\": 95,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/DQC53PJNMWYGBU?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/nash-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/578da675-40de-42ac-b798-5b23a595ca5e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/fc1da99f-03ef-4370-a9af-d8e592ede96f.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/141d268e-06b5-4536-b58f-fb5f35c4ed62.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?v=XqZQRd2LoAA\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 947001,\n" +
+            "      \"name\": \"Supavoice\",\n" +
+            "      \"tagline\": \"Voice to text app for macos\",\n" +
+            "      \"description\": \"Supavoice turns speech into perfectly formatted text in any Mac app. Dictate emails, notes, and posts with smart formatting modes. One-time purchase, uses your own OpenAI API key - you control the costs. Say it, format it, done.\",\n" +
+            "      \"votesCount\": 89,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/GRMYU4JE3FSP66?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/supavoice?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/3560187d-a95c-44c0-874c-7c37d4102fd6.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/bf889ac6-1f33-41dc-bc51-c3a70c230b38.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/065c8b7b-79bb-4bcc-aec3-5196b3436b90.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9ef6161c-b049-4559-a2c9-e76002bdd997.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/5a27554f-e5fd-4ea8-b566-3518918488fa.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/8ebec4b6-c247-4223-b36c-9b352cb2baea.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/bc8d543e-7f58-4db5-ab91-3e6cdbc5ae19.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/AzNu1krM3C4\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 945711,\n" +
+            "      \"name\": \"SyncTasks\",\n" +
+            "      \"tagline\": \"A minimalist to-do app for iOS\",\n" +
+            "      \"description\": \"A simpler way to manage your tasks. Sync your tasks from Notion, Apple Reminders, or create new lists with SyncTasks.\",\n" +
+            "      \"votesCount\": 87,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/HGPMQGZ6YM75ZE?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/synctasks?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d779c8b3-b4ac-42cd-8ea9-ed1d5d78c6c9.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/023df3d5-a8b2-4a06-92b7-123d1784199b.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d50d29d0-30b2-454b-afde-24f6073ad17a.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/89258d7d-032e-4d5d-ba13-89b2309b88d2.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ecd39df1-e8a1-42bd-90e7-bd365b5b9cd0.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/2d0f1ec2-bf9e-4ec9-82ab-1dfb767486ff.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946935,\n" +
+            "      \"name\": \"Ideogram 3.0\",\n" +
+            "      \"tagline\": \"Now with stunning realism and consistent styles\",\n" +
+            "      \"description\": \"Meet Ideogram 3.0 — stunning realism, creative designs, and consistent styles, all in one powerful model. Now available to all users on ideogram.ai and their iOS app!\",\n" +
+            "      \"votesCount\": 85,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/PZGHPL3TB62UPR?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/ideogram-3-0?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/47ba1892-0b28-4cb9-9627-b325af28773d.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?time_continue=2&v=USSpwbe3Rxk\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ec5d6631-b011-4f4c-b740-a99298e0e470.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b043d05c-e791-4c33-bb76-69a274d16498.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/f5b0621a-55cc-4909-97dd-f9d0a8abad4e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b02137dd-1e01-4d83-86cb-595393242edc.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946411,\n" +
+            "      \"name\": \"Mureka O1\",\n" +
+            "      \"tagline\": \"The AI music model that thinks\",\n" +
+            "      \"description\": \"Meet Mureka O1, it uses Chain-of-Thought (CoT) for structured AI music, claiming superior quality to Suno. Offers 10 languages, voice cloning, API & unique model fine-tuning.\",\n" +
+            "      \"votesCount\": 80,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/RMR3RK2ODXFOPI?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/mureka-o1?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/fea84d04-825b-4753-a89b-d841732a5573.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/Kym0kLtPu4g\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d8b9f9e3-d23d-49d3-a018-d7ef1c558559.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?v=pgY7AhMpFYk\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/8120ecb9-b134-4abf-b9a4-2797155a9ae5.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/cc39950f-7315-4869-b774-4d94dc95fb29.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/eb841ec4-203a-41ae-8163-5adf41747ba3.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e59afea9-08af-456f-b545-aea61bffbd64.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/a54cbd53-ff72-4278-b0aa-354ddbbce2c0.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/1b71af40-7137-4a44-ba4d-4c4d449d418d.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7479b24c-6c08-4211-aa66-508cb6d92e50.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/63f61832-f684-4990-bf54-b129035d2172.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946185,\n" +
+            "      \"name\": \"Researcher & Analyst in M365 Copilot\",\n" +
+            "      \"tagline\": \"Reasoning Agents for Complex Work\",\n" +
+            "      \"description\": \"Meet Researcher & Analyst, new reasoning agents in M365 Copilot. They handle deep research (work+web) & complex data analysis, providing expert insights within your workflow.\",\n" +
+            "      \"votesCount\": 76,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/F2ZWVJHG2I334G?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/researcher-analyst-in-m365-copilot?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/1fa16381-0537-474c-b857-80edee0330e0.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/lfruwkpqvk4\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/a88f896f-174d-44c5-8ce2-4c59d6a17e2c.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/9O3CoP8rEkY\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/13fff13f-09ad-4b81-88fc-1e504a3ed80c.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0da316a2-36fb-4b6d-b248-53fe1e5df7ae.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/68beb052-b29a-4f25-a9ba-b7172310a7f7.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/72bed163-5a6a-47ed-8149-aa45011145eb.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9cba3870-7985-40f0-abef-b77a65a16b03.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/91d7452e-07e8-4afd-bc44-38d683ca726e.gif?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/4a4f389d-bf80-4d48-b83d-399e2a792b3c.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c843fda0-3672-48ee-857f-75ea9d528fac.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/76c7f9c7-86f1-4f43-8a5f-10ae4bf1240f.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9c76d422-7f08-49b1-b606-37e5f76828de.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946936,\n" +
+            "      \"name\": \"Newsletter Builder 2.0\",\n" +
+            "      \"tagline\": \"Design and style your newsletter as you write\",\n" +
+            "      \"description\": \"With our all-new editor experience, you can create multiple unique templates and then switch between them within the same publication. No time to build from scratch? No sweat — we’ve designed a handful of pre-built newsletter templates to get you started.\",\n" +
+            "      \"votesCount\": 75,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/XAZTF5BMTRGU5L?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/newsletter-builder-2-0?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/da15161f-b6ca-475b-9f52-48e5ebadb55e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/5c0d1648-55f9-488c-9838-0cd45e831ecf.gif?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/bf8e87ab-ca29-4bbe-8cb0-84f4be6ad17f.gif?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/904e8e2e-74be-4543-850e-828a4ff8dd6f.gif?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 945783,\n" +
+            "      \"name\": \"MeshifAI\",\n" +
+            "      \"tagline\": \"Text-To-3D Generation Platform For Developers\",\n" +
+            "      \"description\": \"Transform text into 3D models instantly with MeshifAI. Our advanced AI technology helps developers integrate high-quality 3D generation into apps, games, and websites.\",\n" +
+            "      \"votesCount\": 74,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/KPWT6P5J3UEOLA?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/meshifai?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/4a2a5125-a861-41ff-92f8-b51b00df3012.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ee52d8db-e706-4a9a-a020-e80200ff7bb9.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ca955522-3c4e-4f55-a97c-43e353b1a126.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/98ea7991-949c-4b57-9b48-3eb50f1ad733.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/66a27331-9d66-481e-916e-b455a075a8b7.gif?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.loom.com/share/fd7e6ee7c4714c869a1ec023d22f02b8?sid=9617a124-2995-42f6-a15c-a5963128fce8\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946873,\n" +
+            "      \"name\": \"Zavimo\",\n" +
+            "      \"tagline\": \"One app for all your work\",\n" +
+            "      \"description\": \"Zavimo is an AI-powered work management platform designed to help teams stay organized, collaborate, and boost productivity. From task management and custom workflows to AI-driven insights, Zavimo simplifies work so teams can focus on what matters most.\",\n" +
+            "      \"votesCount\": 72,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/5MCY7BFNRRNSU7?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/zavimo?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9782eb61-0c09-4704-975f-4579bd38678e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/f00175ad-33fb-4a17-9f98-a3558ef38425.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/49a90355-1b48-4194-9c87-acd03bc41344.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/77db3f08-d8ac-4d28-8968-677729d7c4e4.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/21f0d640-2206-4ff3-ba5f-acd20ac57d80.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0d6ae330-ceda-4492-8bbd-8078330f894f.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/fe6a1541-7734-464d-b643-d58c27cb22bd.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/60e3b148-73a8-4878-b980-bfade678f744.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946338,\n" +
+            "      \"name\": \"Dragonfly\",\n" +
+            "      \"tagline\": \"A better Bluesky experience starts with drafts and bookmarks\",\n" +
+            "      \"description\": \"Dragonfly is an app client for Bluesky, built by Sébastien and Inès Gruhier. Now available on desktop (macOS) and iPad, coming soon to iPhone, Android, Windows, and Linux. Get more out of Bluesky with exclusive features like bookmarks and drafts.\",\n" +
+            "      \"votesCount\": 72,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/ZKXWVQYHZ2XLMC?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/dragonfly-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d16e2696-d637-4d1f-8862-fcfed00f12e1.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/9213e7df-fea1-4693-9dde-169ac5d6aa5e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e510fe48-49d0-47be-833e-3a235491894a.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ea104946-5eae-4b75-a2c9-c1ffa94233f8.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b47127ac-5c9d-4b0c-99fa-e4a5f75d748a.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ddfe2856-22e7-4550-8b47-1805e12a5cfa.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c11b5592-2612-42e1-a553-fe6704c5a765.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/565d54fd-cf3b-4ee0-af83-5302cb28b3a7.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/8cS22e-txcw\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946907,\n" +
+            "      \"name\": \"Discord New Game Overlay\",\n" +
+            "      \"tagline\": \"Revamped overlay & refreshed desktop give game time a boost\",\n" +
+            "      \"description\": \"A completely new version of the Game Overlay with expanded game support and better performance, along with a refreshed look for the desktop app that brings new ways to tweak and customize Discord to make it work best for you.\",\n" +
+            "      \"votesCount\": 70,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"website\": \"https://www.producthunt.com/r/K6RLS3OH2ADSIN?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/discord-new-game-overlay?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/3c59ffdf-6076-42aa-82a8-528d6be60589.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ec8aaf52-a673-4461-a549-70b83a99c07a.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0db9ade4-4720-4053-86db-436a065548af.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b230784e-54fa-42a9-a91e-9c5df2f7c360.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/edd1531a-c42c-43c8-9d60-db1c84413d20.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/4e20efa5-174f-4515-9f11-46fab59612ae.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b038c3ff-55e7-4516-a4cb-20ef53a307e3.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?v=nieYrkCEKFU\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946777,\n" +
+            "      \"name\": \"Competitor Ad Tracker\",\n" +
+            "      \"tagline\": \"See competitor's active ads using Chrome\",\n" +
+            "      \"description\": \"Want to know what ads your competitors are running? Competitor Ad Tracker by Adsby is a browser extension that automatically reveals competitor ads as you visit their websites. No setup, no manual searches - just browse!\",\n" +
+            "      \"votesCount\": 21,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/2OVRSVPXB5XIYK?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/competitor-ad-tracker?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/27702ec7-3b4e-4a68-aae2-f64fbb285b3e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e3e48575-f74d-4ec8-b347-ed13a482cfec.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c4fa53fb-903c-43f6-b8f3-5650f7326b60.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 943378,\n" +
+            "      \"name\": \"Femometer Fertility Tracker\",\n" +
+            "      \"tagline\": \"A smart PMS tracker, period and fertility calculator.\",\n" +
+            "      \"description\": \"Take control of your unique menstrual cycle with Femometer, the smartest ovulation & fertility tracker for those who need to track their periods or try to conceive. We believe to know your body, is to own your life.\",\n" +
+            "      \"votesCount\": 13,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/FJNLU5POQ7MV27?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/femometer-fertility-tracker-2?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0f1e2a8f-2d8a-4381-b10a-7b34c099bd8d.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7c8c2b20-a810-45d6-b2e0-24443ea8cf72.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/6dcc8c83-77bf-4549-91f1-061fe6f30e2c.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 909890,\n" +
+            "      \"name\": \"Page Flows \",\n" +
+            "      \"tagline\": \"Real UX flows. Real inspiration.\",\n" +
+            "      \"description\": \"Explore real user flow recordings and screenshots from top web and mobile apps. Discover how innovative products handle onboarding, checkout, and upgrades—all in one place. Quickly search, filter, and bookmark UX insights to design better experiences.\",\n" +
+            "      \"votesCount\": 11,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/WMV2ISO6E4PZLB?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/page-flows-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c429b939-5be0-4d96-8d47-bd4501a1c803.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e22c5cb5-0c7e-413d-a30f-fa2dbbb57e83.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/4f5d5271-7cd3-4006-ab58-2121b5fdb730.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7d5eeb3a-2bc6-4536-b861-d50c0b5d6a0e.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/dfc6e972-dc06-41b3-93b5-f11cc5367b8b.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?v=6V6Mc21_bYI&ab_channel=SMG\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946932,\n" +
+            "      \"name\": \"Polly in Presentations\",\n" +
+            "      \"tagline\": \"Interactive Q&A, polls & wordclouds in Slack + presentations\",\n" +
+            "      \"description\": \"Take Polly to the next level in your town halls, customer meetings and beyond. The only product that works seamlessly across Slack, the web and presentations to ensure that your team can participate regardless of where they're working or when they're watching.\",\n" +
+            "      \"votesCount\": 8,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/PAQZ7UOSLN3IXF?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/polly-in-presentations?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/25560c10-718f-45c5-8806-0fb40f6a397a.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/pxXKp6rVMSI\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/53d56e7c-2482-406c-9d20-6ec60b78b554.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e4480056-878e-462d-91ff-f21fc1e02007.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946899,\n" +
+            "      \"name\": \"OpenVC AI Deck Reviews\",\n" +
+            "      \"tagline\": \"Optimize your pitch deck with AI and get funded\",\n" +
+            "      \"description\": \"OpenVC Decks helps you build a top 1% pitch deck with AI. Just upload your PDF, wait 30 seconds, and ta-da! You get a detailed review of your content, design, structure + a slide-by-slide analysis. A must-try for every founder raising funds!\",\n" +
+            "      \"votesCount\": 7,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/LPD7RKVTQF3XWY?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/openvc-ai-deck-reviews?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/b4e27a84-d697-4e8b-a4e5-ad2bb8284862.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/af3e6a89-6b72-44cc-83ac-2b6cc3be9979.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c013d8be-1f19-4293-95cd-e6364cfb292a.gif?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.loom.com/share/1206db89416b4bfd82a1f6eee0d255cf?sid=5924143e-fb6c-4059-a657-f6b04e7a77b3\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946783,\n" +
+            "      \"name\": \"List Your Startup in 400+ Directories\",\n" +
+            "      \"tagline\": \"Discover and track 400+ high-quality startup directories.\",\n" +
+            "      \"description\": \"Discover and track 400+ high-quality startup directories to list your business. Organized by domain authority, categories, and submission status. Free tool to boost your startup's visibility.\",\n" +
+            "      \"votesCount\": 5,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/MM4ZZGNW62WZJG?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/list-your-startup-in-400-directories?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d469f536-e62e-4d8c-9099-f5d949f7bd6f.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d59d05bb-1595-40da-ac6c-81c0e6a546ba.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/5a65469e-2f3c-41c6-b490-4859cbdd6e60.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946779,\n" +
+            "      \"name\": \"Taskra\",\n" +
+            "      \"tagline\": \"Plan Smarter. Execute Faster.\",\n" +
+            "      \"description\": \"Taskra transforms your ideas into a structured project plan in seconds! Whether you're a startup, freelancer, or enterprise, Taskra simplifies project management with AI-driven insights.\",\n" +
+            "      \"votesCount\": 5,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/T4N2EVYQ5OD52V?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/taskra?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0cf24500-36ab-4e6a-b785-4efa0829b49b.octet-stream?auto=format\",\n" +
+            "          \"type\": \"interactive_demo\",\n" +
+            "          \"videoUrl\": \"https://app.storylane.io/share/jbzidts9dqld\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/843044f2-c102-4c37-933c-62f938d9622a.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://youtu.be/RQmW-Q-rAW8\"\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/018a5312-67f5-4bb6-9731-f5b8557bb60b.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/6aca4e62-df6d-4ef5-bd41-16bb6167983a.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/4ea07857-2f38-4403-9def-1f1d90632897.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946705,\n" +
+            "      \"name\": \"Raya\",\n" +
+            "      \"tagline\": \"your friendly AI!\",\n" +
+            "      \"description\": \"Raya is just another chat app but little \\\"aesthetic\\\" one and it do support 30+ LLMs to help you with studies, coding, brainstorming, and more. Also you can generate images too. & all for free forever.\",\n" +
+            "      \"votesCount\": 5,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/O4TVMFHEUKHAIZ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/raya-3?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/f656ffcc-3cea-4ae0-b951-b4463bf95e4f.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/2715fbe4-1610-4268-8f1c-8dfbd1f58fc1.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/35af8df6-8509-4c63-a1db-f16d87549b6b.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7fc719bd-a74b-48ce-b456-2defbfb5bfcc.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946785,\n" +
+            "      \"name\": \"Card Value Tracker for Pokemon\",\n" +
+            "      \"tagline\": \"Add your pokemon cards to keep track of their value for free\",\n" +
+            "      \"description\": \"My first real app that allows users to create unlimited collections for their pokemon cards. Scan your cards and we'll tell you it's going market rate. Looking for any and all feedback, would appreciate it. Thank you\",\n" +
+            "      \"votesCount\": 4,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/WGVXA5ZZYICZVV?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/card-value-tracker-for-pokemon?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d706e05e-8a30-4374-b875-b83fbecf9b8a.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946576,\n" +
+            "      \"name\": \"Myo for Mastodon, Misskey, Bluesky\",\n" +
+            "      \"tagline\": \"Photo & Short Video centric iOS client for Fediverse & Bsky\",\n" +
+            "      \"description\": \"Photo & Short Video centric iOS app compatible with Mastodon Misskey Bluesky Nostr Pleroma, comes with local ML powered For You feed.\",\n" +
+            "      \"votesCount\": 4,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/BGILXNBP4YB7PZ?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/myo-for-mastodon-misskey-bluesky?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/2327575d-d541-4d78-a971-c717a8ed7f4d.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/10a2343b-ac4d-499c-8da2-ffa09336e0cf.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e07f7bf0-07c8-46e6-8d19-e2a757b50e00.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/553734de-a2ae-4498-b9a4-e76d6b547e68.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/88c42ec3-9355-457e-9e09-0ab9c5eb7659.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0d8e2bdf-b95c-4b46-a748-01a5cddca79a.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7672e8e6-e4f1-42a8-b1db-25f809cabce1.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 452447,\n" +
+            "      \"name\": \"TEST launch -- Ruby Mine\",\n" +
+            "      \"tagline\": \"The Ruby on Rails IDE\",\n" +
+            "      \"description\": \"RubyMine is geared for Ruby on Rails development. The IDE supports jumping to definition, setting breakpoints, syntax highlighting. As an added plus, the IDE supports VS code shortcuts\",\n" +
+            "      \"votesCount\": 4,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/6WBNAED5DSRPMY?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/test-launch-ruby-mine?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0ecb1edd-f77f-4eb0-b76c-89964f1b4470.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/644f556a-9831-4932-89b1-6880fe27b27f.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7fb58bc8-084e-4c2e-90c0-35e8f9ac9357.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?v=H4tAOexHdR4\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 917623,\n" +
+            "      \"name\": \"SkootEco's API & No-Code Integrations\",\n" +
+            "      \"tagline\": \"Automate sustainability into apps, workflows, and platforms.\",\n" +
+            "      \"description\": \"The \\\"No-Code Integrations & API for Good\\\" lets you integrate climate-positive actions into your apps, workflows, and platforms. Automate tree planting, ocean-bound plastic recovery, and carbon reduction with no-code integrations and simple API calls.\",\n" +
+            "      \"votesCount\": 4,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/Q7KJCWBL5ZIZDC?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/skooteco-s-api-no-code-integrations?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/0bd16b1c-11a7-43c9-97c6-98aa897617fe.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/c112463f-8259-452f-9ad1-2b33bea1ce70.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/fc60e070-c104-4f67-9e74-153799ad6dc4.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946513,\n" +
+            "      \"name\": \"Net Worth Tracker for Notion & GSheets\",\n" +
+            "      \"tagline\": \"Two stunning templates leveraging cutting-edge features\",\n" +
+            "      \"description\": \"These gorgeous templates employ advanced new features of Notion and Google Sheets to create a simple, sophisticated system for tracking your full net worth in one familiar place. They're powerful tools for mastering Notion, Google Sheets, and personal finance.\",\n" +
+            "      \"votesCount\": 4,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/ZNJUZG5ETWOLPS?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/net-worth-tracker-for-notion-gsheets?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/6969a230-7468-4d6b-a061-38596028261d.jpeg?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/65587df9-56ef-4a37-b397-18ac9182c6bd.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/ac97a236-8b3e-49c2-865a-e245d7ec938b.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/7035d88b-bf2a-4919-a1e5-2d3544af24f8.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/a984b05f-9e2f-4131-9545-beaf755c9048.png?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/e7072be3-1a80-4040-89ae-258a84184c7e.jpeg?auto=format\",\n" +
+            "          \"type\": \"video\",\n" +
+            "          \"videoUrl\": \"https://www.youtube.com/watch?v=_hnJqkIocb8\"\n" +
+            "        }\n" +
+            "      ]\n" +
+            "    },\n" +
+            "    {\n" +
+            "      \"id\": 946928,\n" +
+            "      \"name\": \"Cook More\",\n" +
+            "      \"tagline\": \"Your personal digital cookbook. Keep your data to yourself.\",\n" +
+            "      \"description\": \"Cook More is a digital cookbook app that lets users create grocery lists and save recipes around the web or from physical cookbooks. No accounts, no subscriptions, updates included forever. The app works fully offline but can sync with other devices over BT.\",\n" +
+            "      \"votesCount\": 3,\n" +
+            "      \"createdAt\": \"2025-03-28T07:01:00\",\n" +
+            "      \"featuredAt\": null,\n" +
+            "      \"website\": \"https://www.producthunt.com/r/MIYMHIKBXC4N54?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"url\": \"https://www.producthunt.com/posts/cook-more?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+dataeasy+%28ID%3A+170125%29\",\n" +
+            "      \"media\": [\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/d1a66564-4664-4fe0-a7af-130d3f2657ef.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/1240d599-e1e6-414b-91a5-4d00a764971d.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/1604a77d-274b-491b-a337-a963d5212483.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
+            "        },\n" +
+            "        {\n" +
+            "          \"url\": \"https://ph-files.imgix.net/87504ba6-eab0-416a-b416-755de0f1b7fe.webp?auto=format\",\n" +
+            "          \"type\": \"image\",\n" +
+            "          \"videoUrl\": null\n" +
             "        }\n" +
-            "    ]";
+            "      ]\n" +
+            "    }\n" +
+            "  ]";
 
     /**
      * 获取热榜列表

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

@@ -53,6 +53,11 @@ public class ProductHuntManagerImpl implements IProductHuntManager {
                        featuredAt
                        website
                        url
+                       media {
+                         url
+                         type
+                         videoUrl
+                       }
                      }
                      pageInfo {
                        hasNextPage

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä