如何将产品制作成淘宝CSV数据包

来源:岁月联盟 编辑:zhu 时间:2009-03-12

  电子商务在中国的发展已经越来越迅速了,有非常多的实体店已经从传统的行业转向了网络市场,他们当中的很多人都不再纯粹的依附于淘宝等第三方交易平台,因为他们很清楚的认识到淘宝的客户是大家共享的客户,淘宝上做起来的品牌也很可能由于一两次的不小心,而导致整个积累过程前功尽弃。于是他们选择了独立网店系统。注册了完全属于自己品牌的独立域名,有了自己的管理后台,管理客户那才叫爽。

  当然,有了独立网店,没有销售那怎么行呢,因此很多人,在淘宝、拍拍、携购网、易趣等等大型的平台上开起了店,他们在这些地方开店是为了增加自己的销售点。销售点多了是好事情,但是产品发布却成了他们最头痛的事情,如果每个地方都要重新发布产品的话,那简直就是受罪。如果能有个很方便的批量导入、导出产品到各个销售点的功能,那该多好啊。

  这几天,我抽空研究了一下目前国内比较有名的免费独立网店系统(独立购物网系统),如:ShopEx、ShopXG(携购独立网店)、ECShop(买否网店)、HIShop 等等。他们都提供了数据包的导入,导出功能,特别是ShopXG的VTEditor网店模板可视化编辑系统,更加灵活,功能十分的强大,可惜他们都没有提供源代码。VTEditor的截图是这样的:

  这几天我分析了下淘宝数据的原理,就把这几天的劳动成果拿出来给大家分享一下:

  这里我主要分析淘宝的CSV数据包。首先,特别强调一下,虽然同属于CSV的格式,但是淘宝的CSV格式要求保存为Unicode,而拍拍的需要保存为UTF-8。因此,这个前提不注意,你做出来的数据包导入到淘宝助理里,全部导入后会提示异常的错误信息,虽然能导入成功,但是每导入一次就要重新启动助理,这样太麻烦了。

  我这里不讲解所有的代码,只是把核心部分的代码拿出来给大家讲解下。

  从自己的独立购物网系统中将产品导入到淘宝助理过程核心代码:

    public List PrepareTaobaoCSVData()
    {
      int num2;
      int num = 0x1f;
      List list = new List();
      string[] strArray = new string[] {
      "宝贝名称", "宝贝类目", "店铺类目", "新旧程度", "省", "城市", "出售方式", "宝贝价格", "加价幅度",
      "宝贝数量", "有效期", "运费承担", "平邮", "EMS", "快递", "付款方式",
      "支付宝", "发票", "保修", "自动重发", "放入仓库", "橱窗推荐", "发布时间", "心情故事",
      "宝贝描述", "宝贝图片", "宝贝属性", "团购价", "最小团购件数", "邮费模版ID", "会员打折"};
      list.Add(strArray);
      if(this.productList == null)
        this.productList = new ArrayList();
     
      this.m_parent.progressBar1.Maximum = this.productList.Count;
      int num3 = -1;
      for (num2 = 0; num2 < this.m_parent.listView1.Items.Count; num2 )
      {
        if (this.m_parent.listView1.Items[num2].Checked)
        {
          num3 = num2;
          break;
        }
      }
      for (num2 = 0; num2 < this.productList.Count; num2 )
      {
        ShopXGProduct product = (ShopXGProduct)this.productList[num2];
        string[] strArray2 = new string[num];
        XGTaoBao tag = (XGTaoBao)this.m_parent.listView1.Items[num3].Tag;
        this.m_parent.progressBar1.Value = num2 1;
        strArray2[0] = """ product.m_name """;
        strArray2[1] = tag.m_cateId ;
        strArray2[2] = tag.m_shopCateId;
        strArray2[3] = tag.m_oldLevel;
        strArray2[4] = """ tag.m_capital.Trim() """;
        strArray2[5] = """ tag.m_city.Trim() """;
        strArray2[6] = """ tag.m_saleType """;
        strArray2[7] = PackageProductHelper.GetPriceByProIdAndTypeId(product.m_id,
                           ((OutPutCSV)this.m_parent).m_curPriceTypeId).ToString();
        strArray2[8] = tag.m_priceUpStep;
        strArray2[9] = tag.m_count;
        strArray2[10] = tag.m_validateTime;
        strArray2[11] = tag.m_post;
        strArray2[12] = tag.m_pingyou;
        strArray2[13] = tag.m_ems;
        strArray2[14] = tag.m_kuaidi;
        strArray2[15] = tag.m_payType;
        strArray2[0x10] = tag.m_zhifubao;
        strArray2[0x11] = tag.m_fapiao;
        strArray2[0x12] = tag.m_baoxiu;
        strArray2[0x13] = tag.m_autoSend;
        strArray2[20] = tag.m_putInStore;
        strArray2[0x15] = tag.m_recommend;
        strArray2[0x16] = """ DateTime.Now.ToString() """;
        strArray2[0x17] = """ tag.m_story """;
        if (this.m_parent.radioButton1.Checked)
        {
          strArray2[0x18] = """ this.GetProductDescribe(tag.m_describe, product) """;
        }
        else
        {
          strArray2[0x18] = """ this.GetProductDescribe(this.m_parent.m_proDetailMode, product) """;
        }
        string path = this.m_parent.textBox4.Text.Trim();
        if (!Directory.Exists(path))
        {
          Directory.CreateDirectory(path);
        }
        string str2 = DateTime.Now.ToString().Replace(" ", "").Replace("-", "").Replace(":", "") num2.ToString();
        DealPic.SavePhotoFromUrl(path, str2 ".jpg", product.m_pic1);
        strArray2[0x19] = """ path str2 ".jpg" """;
        strArray2[0x1a] = """ tag.m_property """;
        strArray2[0x1b] = strArray2[7];
        strArray2[0x1c] = tag.m_tgCnt;
        strArray2[0x1d] = tag.m_youfeiTemp;
        strArray2[30] = tag.m_zhekou;
        list.Add(strArray2);
      }
      return list;
    }
    

  将组织好的数组数据保存为CSV文件的代码:

  public static void WriteCSV(string filePathName, bool append, List ls)
    {
      bool isTaobao = false;
      if (ls.Count < 1)
        return;
      if (ls[0][0].IndexOf("宝贝名称") >= 0)
        isTaobao = true;
      Encoding code = System.Text.Encoding.Default;
      if(isTaobao)
        code = System.Text.Encoding.Unicode;
      else
        code = System.Text.Encoding.GetEncoding("gb2312");
      StreamWriter sw = new StreamWriter(filePathName, false,code);
      StringBuilder builder = new StringBuilder();
      foreach (string[] strArray in ls)
      {
        
        for (int i = 0; i < (strArray.Length - 1); i )
        {
          if (isTaobao)
          {
            builder.Append(strArray[i]);
            builder.Append("t");
          }
          else
            builder.Append(strArray[i] ",");
        }
        if (isTaobao)
        {
          builder.Append(strArray[strArray.Length - 1]);
          builder.Append("t");
        }
        else
          builder.Append(strArray[strArray.Length - 1]);
        builder.Append("rn");
      }
      sw.Write(builder.ToString());
      sw.Flush();
      sw.Close();
    }
  

  第二部分:将淘宝CSV数据包导入到用户的独立购物网系统中,核心代码如下:

  如下代码,将指定的CSV数据读取保存到List数组里。

  public static List ReadCSV(string filePathName)
    {
      List list = new List();
      StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("gb2312"));
      string str = "";
      while (str != null)
      {
        str = reader.ReadLine();
        if ((str != null) && (str.Length > 0))
        {
          #region 这里开始解析数据,因为paipai和淘宝的数据格式不一样,所以要分开来
          Regex reg = new Regex("("[w|W|s|S|
|  |
]*?"),|.*?,");
          MatchCollection mc = reg.Matches(str);
          if (mc.Count < 30)
          {//肯定这里格式不对了,所以要换
            reg = new Regex("("[w|W|s|S|
|  |
]*?")  |.*?  ");
            mc = reg.Matches(str);
          }
          #endregion
          string[] strArray = new string[mc.Count];
          for (int i = 0; i < mc.Count; i )
          {
            string t = mc[i].ToString();
            strArray[i] = t.Trim('t').Trim('"');
          }
          list.Add(strArray);
        }
      }
      reader.Close();
      return list;
    }
    

  然后将获取到的数组数据,根据上面对应的字段写入到独立网站数据库即可。