V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
notot
V2EX  ›  分享创造

开源一个半成品项目,思路是完整的,不过我自己不太想接着做下去,分享出来给有需要的人。

  •  
  •   notot · 286 天前 · 3467 次点击
    这是一个创建于 286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    image.png开源一个半成品项目,思路是完整的,不过我自己不太想接着做下去,分享出来给有需要的人。项目地址 https://github.com/xiaoxiunique/mt-store-proxy

    背景

    一个朋友让我帮他做一个软件,基本的功能需求就是帮美团商家处理店铺导入问题 image.png

    比如我要开一个店,比如水果店,成人用品店。这样的店有一个特征就是店里面的大部分的商品都是标品(就是不怎么需要修改),其实正常来说只需要对标到其他的店铺直接 Copy 一份过来就行。如果从 0 开始去录入,对于大部分商家而言都非常的困难,可能有的人电脑都不太会。

    然而就拿成人用品这个品类来说,大概会有 500 多个商品,还有各种各样的分类,如果人工操作的话确实非常麻烦,因为这样的品类完全没必要自己操作,毕竟产品不是自己生产的,大部分产品的东西都非常标准。

    这样 需求就产生了

    大概方案

    处理这个软件需求的初步方案分为下面几步

    1. 登录商家后台账号,获取商家登录信息,主要是 cookie
    2. 抓取需要复制数据商家的店铺商品信息,包括活动,营销图信息
    3. 将对应的店铺的商品上传到自己的店铺

    分析完大概方案基本上可以确定这是一个 electron 软件,纯 web 方案实现难度也比较高,需要和美团的爬虫团队对抗处理各种人机验证,环境监测,滑块。属实没必要。

    基本方案就是 ,通过 electron 的 webview 获取到 cooike

    在 electron 里面启动好 代理软件,比如 anyproxy, http-mimt-proxy, 这样的,并自动配置好 https 证书,以及电脑的代理端口。 image.png 在微信里面,大概电脑端的美团店铺的微信小程序,然后浏览商品,浏览过程中,通过 代理软件保存商品信息,等到后面进行上传。

    避免后续商品冲突,在上传之前需要先删除掉所有的原店铺里面的所有商品分类,以及对应的商品信息。

    然后上传商品

    详细方案

    店铺登录

    image.png

    这个没什么好说基本思路就是 通过 webview 打开登录的页面,然后在页面里面 监听是否登录成功,登录成功之后获取页面里面的 cookie 并发送给 main process 进行保存。

    具体的方案可以监测登录后的 localStorage 1s 检测一次,有就说明登录成功了。

    复制对应店铺的数据

    image.png 因为成本问题,所以采用这种抓包的方式,如果直接通过调用接口的方式,需要逆向代码,成本太高。

    这里我直接使用了 anyproxy,这个我比较熟悉这个,其他的也可以

          async beforeSendResponse(req, res) {
            if (req.url.indexOf("wx-shangou.xx.com") === -1) {
              return null;
            }
    
            console.log(req.url);
            if (req.url.indexOf("/mtweapp/v1/poi/sputag/products") !== -1) {
              const r = JSON.parse(Buffer.from(res.response.body).toString());
              const projectList = r.data.product_spu_list;
              win?.webContents.send("product-list", projectList);
              return null;
            }
    
            if (req.url.indexOf("/mtweapp/v1/poi/food") !== -1) {
              const r = JSON.parse(Buffer.from(res.response.body).toString());
              const tags = r.data.food_spu_tags;
              win?.webContents.send("tags", tags);
              return null;
            }
    
            return null;
          }
    

    具体的方案就是 监听对应接口的 response 请求,然后保存具体的值。

    将数据上传到自己的店铺

    有几种方案,一种是通过 excel 的方式上传 image.png 可以将商品整理成美团官方规定的格式用 excel 的方式进行上传,不过根据我的实验,只有小部分标准商品可以,大部分的商品还是有问题的。

    image.png 第二种方法就是直接通过后台的接口进行上传,这个在后台操作的时候可以看出来,对应的就是补起参数就可以了。但是也是比较麻烦

    已完成的功能

    image.png 目前店铺登录,抓取竞品数据,清除店铺数据,包括上传,其实都 OK 了,就是上传数据不太完成,可能还需要仔细分析一下 包,核对一下数据才行。

    目前存在的问题

    登录问题

    image.png 因为前期测试的原因,所以我是保存了店铺的固定的 cookie 然后模拟登录的,实际上调试就可以使用这样的方式, 因为美团的后台的 cookie 其实很长时间都不会更新,真正在测试的时候,使用我上面注视掉的代码就可以。

    证书问题

    因为我们需要进行中间人抓包,所以在你的电脑上需要安装好 HTTPS 证书,这个流程应该是可以自己完成的 但是我现在没做,嫌麻烦,大家自己用的时候也可以先自己手动安装证书,自己测试通之后再自己安装证书

    全局代理问题

    在启动中间人抓包之后,还有一个需要为电脑设置全局代理

    networksetup -setwebproxy Wi-Fi 127.0.0.1 8003;
    networksetup -setsecurewebproxy Wi-Fi 127.0.0.1 8003;
    

    MAC 下面的命令是这个样子的。

    我不接着做的原因

    主要一个是没有太多相关的测试数据,朋友只提供了一个商家店铺,实际上它里面的类别还是挺多的,不太好测试, 再者就是里面的需要核对的数据太多了,再没有足够的测试数据的情况下,就比较麻烦了,调试起来就比较烦人,还有,也是最重要的原因,就是没有预算,再见。

    12 条回复    2024-08-14 23:41:07 +08:00
    kkk9
        1
    kkk9  
       286 天前
    参与过类似项目。最后结果,如果脚本能解决这类问题,那代运营机构早就赚翻了。还是大学生更性价比
    notot
        2
    notot  
    OP
       286 天前
    @kkk9 是的,不过其实现在市面上有两款这样的项目。基本思路就是上面这样,只是他们积累比较多,也基本上达到可用状态
    sss15
        3
    sss15  
       286 天前
    我看起来这个是一个一次性的开店工具,既然是一次性的,我也就开店用一次,用户为什么会为之付费,所以只能为爱发电了,商业模式可能还没找到出路
    Imindzzz
        4
    Imindzzz  
       286 天前 via Android
    我还以为这种功能平台自带有呢,甚至跨平台导入都应该自带,
    Gooon
        5
    Gooon  
       286 天前
    做个油猴插件可行吗
    notot
        6
    notot  
    OP
       286 天前
    @sss15 你错了,其实用户很多的,很多老板开业的时候 我可以花 100 块钱,让人帮我直接处理好商品,我直接销售就可以了,为什么不做这么模式呢,难道要他自己花几天甚至 10 几天来一个一个的上传 SKU 吗,你是老板你会怎么选
    notot
        7
    notot  
    OP
       286 天前
    @Imindzzz 官方只会处理,同类型,同品牌的门店的商品导入问题,但是不会给你口子,直接就去导入其他店铺的数据。
    notot
        8
    notot  
    OP
       286 天前
    @Gooon 不行,因为这样拿到不到核心的 对应店铺的数据,必须通过抓包的方式进行实现
    CDuXZMAPgHp1q9ew
        9
    CDuXZMAPgHp1q9ew  
       286 天前
    低频, 获客成本高
    a463640216
        10
    a463640216  
       284 天前
    我们早就做过了,最后放弃了,原因就是现在代理人根本不可行,你多用几次号就无了,美团现在风控太严格了
    banzige
        11
    banzige  
       284 天前
    这种数据一般下游供应商会提供啊。
    iSk2yroot
        12
    iSk2yroot  
       138 天前
    如果知道对方店铺的 ID ,业务员好像可以直接复制
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1117 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:30 · PVG 02:30 · LAX 10:30 · JFK 13:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.