任务描述
暂无
需求描述

需求详情:http://product-doc-wan.zhcxkj.com:9000/%E4%BA%A7%E5%93%81%E4%B8%80%E7%BB%84/xiaoyu/%E6%99%BA%E8%83%BD%E9%80%89%E5%93%81/start.html#g=1&p=sif%E6%8E%A5%E5%8F%A3%E5%AF%B9%E6%8E%A5


一、背景

背景:目前sif数据通过页面接口采集获得,需换成官方接口保证数据的稳定性。

目的:保证接口稳定性。

sif 企业API文档

地址:https://opeblk6n4y.feishu.cn/docs/doccnhTXjIVsg8T0DtfdGfv3m0e

密码:6uR1


执行计划:先调验证接口是否可以使用,是否上线等通知.



二、需求说明

2.1、操作位置:智能选品-->竞品数据管理-->关键词/竞品挖掘/高频词

2.2  接口对接:

https://www.sif.com/api/user/token?secretid=******

--secretid=3pBZmWbj1054060gl39PczqZSzZ72q




2.2.2、关键词列表

1)API :反查asin的所有关键词


路径: api/search/external/asinKeywords?country=US

路径说明: country是站点,值类型US/DE/JP/CA,默认US

请求方式:post

请求参数:  header中需要携带token


2)对应sif字段

关键词:keyword.

站点:country,请求时输入,产品库-->竞品ASIN的站点.

原始竞品ASIN:asin,请求时输入,产品库-->竞品ASIN.

搜索量排名:searchesRank

流量占比:ratioScore

曝光位置:exposureType

自然排名:lastRankStr

SP广告排名:adLastRankStr

月搜索量:estSearchesNum

竞品数:saleNum

竞争度: demandRatio


更新时间:增量更新,只要由数据更新则更新时间.



2.2.3  竞品挖掘列表


1)API:查询流量来源


路径: api/search/external/asinSummary?country=US

路径说明: country是站点,值类型US/DE/JP/CA,默认US

请求方式:post

请求参数:  header中需要携带token




2)对应sif字段

竞品ASIN:asin

关键词:searchKeyword,输入字段,按关键词--系统核心关键词输入.

图片:img

标题:title

销售价:price

币种:?,暂未找到需调接口核实.

最新星级:star

验收标准
暂无
附件
历史记录  
  1. 2022-07-19 09:54:52, 由 李育贵 创建。
  2. 2022-07-19 11:25:39, 由 zhubin 编辑。
    上传了附件 2FBA14FE-93EB-44da-893C-24933B9FC88E.txt,6C575B7A-390F-42b3-96A3-95EA747C7C87.txt,7C9B593B-5C49-4a36-ACB8-3A7606DF10F7.txt,8B10E6BB-DEC6-48b8-AD99-4A100442D8F8.txt,18D7ACC1-2769-4196-B34E-A195A1F9FA47.txt,46DED121-4D39-40b3-9BB0-68016F036ACA.txt,90F0E0FC-945C-4c40-BC43-DF31867A85EE.txt,79882D0D-9EFF-490e-A8A2-5435CD1F64AB.txt,AA424920-EC7D-4d9b-98D8-65E8952D8F50.txt,E4769C7E-C5E2-4510-9F2A-473DD8C0A299.txt,F5575E01-3F2C-454f-B829-2FBB4C01F128.txt

  3. 2022-07-19 16:31:08, 由 zhubin 添加备注。

    部分代码实现:


  4. 2022-07-19 16:45:37, 由 zhubin 添加备注。
    using CSRedis;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using Newtonsoft.Json;
    using RestSharp;
    using System;
    using System.Collections.Generic;
    using Zhcxkj.AutoChoose.Services.Interface.Sif;
    using Zhcxkj.AutoChoose.ViewModels.ConfigApi;
    using Zhcxkj.AutoChoose.ViewModels.Sif;
    using Zhcxkj.CronByMq.Interface;
    using Zhcxkj.Model;

    namespace Zhcxkj.AutoChoose.Services.Implement.Sif
    {
        /// <summary>
        /// Sif采集- API服务
        /// </summary>
        public class SifApiService : ISifApiService
        {
            #region
            private readonly ILogger<SifService> _logger;
            private readonly string _host;
            private readonly List<SifConfigItem> _sifConfigs;

            private readonly CSRedisClient _redis;

            public static object _loginLock = new object();
            public SifApiService(ILogger<SifService> logger, IOptions<SifConfig> sifConfigOption, ICronRedisContext cronRedisContext)
            {
                _logger = logger;
                _host = sifConfigOption.Value.Host;
                _sifConfigs = sifConfigOption.Value.List;

                _redis = cronRedisContext.Client;
            }
            #endregion

            /// <summary>
            /// 调用api获取token
            /// </summary>
            /// <param name="secretid"></param>
            /// <returns></returns>
            public TokenData GetToken(string secretid)
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(secretid))
                    {
                        return null;
                    }
                    string finalUrl = "https://www.sif.com/api/user/token?secretid="+ secretid;
                    string json = RequestClient.Get(finalUrl, string.Empty);
                    var jsonObjs = JsonConvert.DeserializeObject<TokenData>(json);
                    return jsonObjs;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"调用api获取token异常,{ex.Message}");
                    return null;
                }
            }

            /// <summary>
            /// 反查流量词
            /// </summary>
            /// <param name="index"></param>
            /// <param name="siteCode"></param>
            /// <param name="asin"></param>
            /// <param name="pageIndex"></param>
            /// <returns></returns>
            public SifKeywordsResponse KeywordsList(string asin,string token,string siteCode = "US")
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(asin))
                    {
                        return null;
                    }
                    string finalUrl = "https://www.sif.com/api/search/external/asinKeywords?country="+ siteCode;
                    //定义匿名请求类
                    var bodyObj = new
                    {
                        asin = asin,
                        pageNum=1,
                        pageSize=Int32.MaxValue
                    };
                    string body = JsonConvert.SerializeObject(bodyObj);
                    string json = RequestClient.Post(finalUrl, token, body);
                    var jsonObjs = JsonConvert.DeserializeObject<SifKeywordsResponse>(json);
                    return jsonObjs;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"调用api异常,{ex.Message}");
                    return null;
                }
            }

            /// <summary>
            /// 批量反查流量词
            /// </summary>
            /// <param name="siteCode"></param>
            /// <param name="asinList"></param>
            /// <returns></returns>
            public ReturnedDataView<List<SitKeywordsModels>> GetKeywordsList(string siteCode, List<string> asinList)
            {
                var retData = new ReturnedDataView<List<SitKeywordsModels>>();

                if (string.IsNullOrEmpty(siteCode))
                {
                    retData.Status = ReturnedStatusView.Error;
                    retData.Message = "SiteCode不能为空!";
                    return retData;
                }
                if (asinList.Count == 0)
                {
                    retData.Status = ReturnedStatusView.Error;
                    retData.Message = "Asin列表不能为空!";
                    return retData;
                }
                List<SitKeywordsModels> list = new List<SitKeywordsModels>();
                try
                {
                    foreach (var asin in asinList)
                    {
                        SitKeywordsModels item = new SitKeywordsModels();
                        var data = KeywordsList(siteCode, asin).data;
                        if (data != null && data.keywords.Count > 0)
                        {
                            List<SitKeywordsItem> sitKeywordsItemList = KeywordsList(siteCode, asin).data.keywords;
                            item.Asin = asin;
                            item.keywordList = sitKeywordsItemList;
                            list.Add(item);
                        }
                    }
                }
                catch (Exception ex)
                {
                    retData.Status = ReturnedStatusView.Error;
                    retData.Message = "Sif请求Asin反查接口异常,异常信息::" + ex.Message;
                    return retData;
                }
                retData.Status = ReturnedStatusView.Success;
                retData.Data = list;
                return retData;
            }

            /// <summary>
            /// 查流量来源列表
            /// </summary>
            /// <returns></returns>
            public SifAsinResponse AsinList(string keyword,string token, string siteCode="US")
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(keyword))
                    {
                        return null;
                    }
                    string finalUrl = "https://www.sif.com/api/search/external/asinSummary?country=" + siteCode;
                    //定义匿名请求类
                    var bodyObj = new
                    {
                        type=2,//搜索类型,1:搜索asin;2:搜索关键词 
                        pageNum = 1,
                        pageSize = Int32.MaxValue,
                        desc=true,
                        sortBy="",
                        searchKeyword = keyword
                    };
                    string body = JsonConvert.SerializeObject(bodyObj);
                    string json = RequestClient.Post(finalUrl, token, body);
                    var jsonObjs = JsonConvert.DeserializeObject<SifAsinResponse>(json);
                    return jsonObjs;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"调用api异常,{ex.Message}");
                    return null;
                }
            }

            /// <summary>
            /// 关键词竞争格局:关键词概览信息
            /// </summary>
            /// <returns></returns>
            public SifKeywordOverviewResponse KeywordOverview(string keyword, string token, string siteCode ="US")
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(keyword))
                    {
                        return null;
                    }
                    string finalUrl = "https://www.sif.com/api/search/external/keywordOverview?country=" + siteCode;
                    //定义匿名请求类
                    var bodyObj = new
                    {
                        keyword = keyword
                    };
                    string body = JsonConvert.SerializeObject(bodyObj);
                    string json = RequestClient.Post(finalUrl, token, body);
                    var jsonObjs = JsonConvert.DeserializeObject<SifKeywordOverviewResponse>(json);
                    return jsonObjs;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"调用api异常,{ex.Message}");
                    return null;
                }
            }

            /// <summary>
            /// 获取asin基本详情
            /// </summary>
            /// <returns></returns>
            public AsinDetail KeywordDetail(string asin, string token, string siteCode = "US")
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(asin))
                    {
                        return null;
                    }
                    string finalUrl = "https://www.sif.com/api/search/external/asinDetail?country="+ siteCode + "&&asin=" + asin;
                    string json = RequestClient.Get(finalUrl, token);
                    var jsonObjs = JsonConvert.DeserializeObject<AsinDetail>(json);
                    return jsonObjs;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"调用api异常,{ex.Message}");
                    return null;
                }
            }
        }
    }

  5. 2022-07-19 18:04:02, 由 zhubin 添加备注。

    单元测试Sif接口:

  6. 2022-07-22 09:52:41, 由 zhubin 添加备注。

    已完成所有代码开发工作,单元测试也是Ok:

  7. 2022-07-22 09:52:54, 由 zhubin 完成。
    修改了 总计消耗,旧值为 "0",新值为 "12"。
    修改了 指派给 ,旧值为 "zhubin",新值为 "liyugui"。
    修改了 实际完成,旧值为 "",新值为 "2022-07-22 09:52:49"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-22 09:52:54"。
    修改了 预计剩余,旧值为 "12",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "zhubin"。
  8. 2022-07-28 16:24:31, 由 李育贵 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "liyugui",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "liyugui"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-28 16:24:31"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 智能中心-智能选品迭代
所属模块 智能中心-需求池  战略独立项目   智能选品
相关需求 竞品数据接口对接(SIF采集字段换成接口对接)
指派给 Closed 于 2022-07-28 16:24:31
任务类型 后端
任务标签 初始
开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给
由谁创建 李育贵 于 2022-07-19 09:54:52
由谁完成 zhubin 于 2022-07-22 09:52:49
由谁取消 暂无
由谁关闭 李育贵 于 2022-07-28 16:24:31
关闭原因 已完成
最后编辑 李育贵 于 2022-07-28 16:24:31
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 12工时
总计消耗 12工时
预计剩余 0工时
预计开始 0000-00-00
实际开始 2022-07-22
截止日期 0000-00-00