将淘宝数据包导入自己的商城系统

淘宝网有一个淘宝助理,可以方便的将淘宝店的商品资源导出成csv格式的数据包。很多商城系统为了能快速输入商品,都会要求开发者能最大限度的利用淘宝数据包直接导入产品数据。

当然,数据包的产品字段与商城的产品表字段肯定不可能完全一致,但"宝贝名称","宝贝价格","宝贝描述"这三个字段,几乎是所有商城系统都有的.

下面是二种处理方法:

一、直接分析csv

1.淘宝的csv数据包是用"\t"做为字段间的分隔符,每行数据是用"\n"做为行分隔符 2.要注意的是:宝贝描述(html代码)本身也会包含换行符号,不过不是"\n",而是"\r\n"---幸好是这样,不然的话,宝贝描述本身的换行符与数据每行的分隔符混在一起,就很难区分了.

下面是示例关键代码;

if (IsPostBack)
 {
       HttpFileCollection fc = Request.Files;
                
        for (int i = 0; i < fc.Count; i++)
         {
                HttpPostedFile _file = fc[i];
                string ext = Path.GetExtension(_file.FileName).ToLower();
                string type = _file.ContentType;
                if (ext == ".csv" && type == "application/vnd.ms-excel")
                    {
                        StreamReader sr = new StreamReader(_file.InputStream);

                        string sHeader = sr.ReadLine();
                        string sBody = sr.ReadToEnd();

                        string sTemp = sBody.Replace("\r\n", "");//将宝贝描述html代码中的"\r\n"去掉

                 string[] arrData = sTemp.Split('\n'); //这里已经将每行的数据保存到数组arrData里了,数组里的每个元素再用"\t"拆分,就是每行各字段的值

//...

优缺点:通用性强,也不依赖于其它任何组件,简单高效。但是如果以后淘宝的html编辑器修改了,比如保存时把"\r\n"换成"\n",这种方法就不管用了.

二、借用oledb把数据包当作db来操作

oledb可以方便的操作access,excel等内容,我们可以把cvs文件在excel里另存为xls格式,然后就可以用oledb连接,用sql来查询了

HttpFileCollection fc = Request.Files;

                if (fc.Count <= 0) {
                    Utils.Alert("请先上传数据包!", "javascript:window.history.back");
                }

               
                for (int i = 0; i < fc.Count; i++)
                {
                    HttpPostedFile _file = fc[i];
                    string ext = Path.GetExtension(_file.FileName).ToLower();
                    string type = _file.ContentType;
                    if (ext == ".xls" && (type == "application/octet-stream"))
                    {
                        string _path = Server.MapPath("/upload/xls/");
                        Utils.CreateDir(_path);
                        string _filePath = _path + "product.xls";
                        _file.SaveAs(_filePath);//先保存到服务器

                        DataTable dtTable = new DataTable();

                        #region
                        using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + _filePath + ";Extended Properties=Excel 8.0;"))
                        {
                            conn.Open();

                            //获取Sheet的名字。
                            DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
                            OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + schemaTable.Rows[0]["TABLE_NAME"] + "]", conn);//默认查询第一个工作表
                            try
                            {
                                adapter.Fill(dtTable);
                            }
                            catch (Exception ex)
                            {
                                //...
                            }
                        }

                        //to do list。。。

                    }                   
                    else {
                        Utils.Alert("数据包格式不对!", "javascript:window.history.back()");
                    }
                }

优缺点:使用方便,可以把数据包当成常规的DataTable来操作,方便了数据库开发人员。但是服务器上必须要有oledb组件(而且oledb在64位系统下默认是跑不起来的)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hadoop学习笔记

pyhanlp 停用词与用户自定义词典功能详解

之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集。

1220
来自专栏GreenLeaves

SQL学习之计算字段的用法与解析

一、计算字段 1、存储在数据库表中的数据一般不是应用程序所需要的格式。大多数情况下,数据表中的数据都需要进行二次处理。下面举几个例子。 (1)、我们需要一个字段...

1915
来自专栏salesforce零基础学习

salesforce 零基础学习(四十一)Group

 salesforce中,有的时候我们需要将一组用户放进一个Group,用来实现以下主要功能: 1.通过sharing rule设置默认的共享访问; 2.将记录...

2088
来自专栏个人随笔

C# 操作 access 数据库

随笔: (1)   命名空间             using System.Data.OleDb; (2)   连接字符串             priv...

2805
来自专栏Java架构师学习

一个今日头条的面试题——LRU原理和Redis实现

很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU。

4022
来自专栏屈定‘s Blog

由需求而产生的一款db导出excel的工具

程序员最大的毛病可能就是懒,因为懒所以做出了许许多多提高自己工作效率的工具. 起因于我是商业开发,既然是商业项目避免不了各种数据统计,虽然公司有专门的数据平台,...

1585
来自专栏Python数据科学

10行代码爬取全国所有A股/港股/新三板上市公司信息

摘要: 我们平常在浏览网页中会遇到一些表格型的数据信息,除了表格本身体现的内容以外,可能还想透过表格背后再挖掘些有意思或者有价值的信息。这时,可用python爬...

1682
来自专栏圆方圆学院精选

【许晓笛】EOS 数据库与持久化 API —— 架构

在 EOS 中,智能合约执行完毕后,所占用的内存会释放。程序中的所有变量都会丢失。如果智能合约里要持久地记录信息,比如游戏智能合约要记录每位用户游戏记录,本次合...

1714
来自专栏个人随笔

C# 操作 access 数据库

private staticstring connStr = @"Provider= Microsoft.Ace.OLEDB.12.0;...

44513
来自专栏用户画像

实验5.1 存储过程的建立与使用

使用CREATE  PROCEDURE语句创建存储过程,ALTER  PROCEDURE语句修改存储过程,DROP  PROCEDURE语句删除存储过程,存储过...

673

扫码关注云+社区

领取腾讯云代金券