独立购物网系统研发讨论

携购独立网店系统,ShopXG免费独立网店系统
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2009-01-12 15:14  吴康彬  阅读(4754)  评论(1编辑  收藏  举报
      电子商务在中国的发展已经越来越迅速了,有非常多的实体店已经从传统的行业转向了网络市场,他们当中的很多人都不再纯粹的依附于淘宝等第三方交易平台,因为他们很清楚的认识到淘宝的客户是大家共享的客户,淘宝上做起来的品牌也很可能由于一两次的不小心,而导致整个积累过程前功尽弃。于是他们选择了独立网店系统。注册了完全属于自己品牌的独立域名,有了自己的管理后台,管理客户那才叫爽。
    当然,有了独立网店,没有销售那怎么行呢,因此很多人,在淘宝、拍拍、携购网、易趣等等大型的平台上开起了店,他们在这些地方开店是为了增加自己的销售点。销售点多了是好事情,但是产品发布却成了他们最头痛的事情,如果每个地方都要重新发布产品的话,那简直就是受罪。如果能有个很方便的批量导入、导出产品到各个销售点的功能,那该多好啊。
    这几天,我抽空研究了一下目前国内比较有名的免费独立网店系统(独立购物网系统),如:ShopEx、ShopXG(携购独立网店)、ECShop(买否网店)、HIShop 等等。他们都提供了数据包的导入,导出功能,特别是ShopXG的VTEditor网店模板可视化编辑系统,更加灵活,功能十分的强大,可惜他们都没有提供源代码。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("\r\n");
}
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|\\r|\\t|\\n]*?\"),|.*?,");
MatchCollection mc = reg.Matches(str);
if (mc.Count < 30)
{//肯定这里格式不对了,所以要换
reg = new Regex("(\"[\\w|\\W|\\s|\\S|\\r|\\t|\\n]*?\")\\t|.*?\\t");
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;
}

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