CSkin博客

标题: 【查询淘宝购买记录】根据淘宝名查询任意买家的购买记录 [打印本页]

作者: 乔克斯    时间: 2014-7-26 00:26
标题: 【查询淘宝购买记录】根据淘宝名查询任意买家的购买记录
C#源码-根据淘宝名查询任意买家的购买记录
  如何根据用户名去查找一个买家的购买记录呢?当然淘宝不可能免费提供我们这样一个查询接口,呢么我们就只能自己写方法将淘宝名转换成ID,再根据ID去一个记录着用户所有购买评论的页面去抓取评论的商品内容,其运行原理是采集评论页面的内容来得知对方的购买记录,当然程序也存在缺陷,未评论的商品将无法取到。
效果图:


部分代码-主窗体:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using ZzSDK;
using ZzSDK.TaoBao;

namespace BuyerData
{
    public partial class FrmMain : Form
    {
        private AutoResetEvent autoEvent = new AutoResetEvent(false);
        private List<string> HashList = new List<string>();
        private Thread thMain;
        public FrmMain() {
            InitializeComponent();
            this.dateStart.Value = this.dateEnd.Value.AddMonths(-6);
        }

        /// <summary>
        /// 开始抓取数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonStart_Click(object sender, EventArgs e) {
            if (this.txtName.Text.Length <= 0) {
                MessageBox.Show("请先添加买家旺旺号,才可以继续", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            } else {
                this.lvShow.Items.Clear();
                this.tm.Start();
                this.thMain = new Thread(delegate(object x) {
                    this.Invoke(new MethodInvoker(delegate {
                        this.buttonStart.Enabled = false;
                    }));
                    try {
                        this.Run();
                    } catch {
                    } finally {
                        this.Invoke(new MethodInvoker(delegate {
                            this.buttonStart.Enabled = true;
                        }));
                    }
                });
                this.thMain.IsBackground = true;
                this.thMain.Start();
            }
        }

        private void InsertBuyers(List<TBbuyData> Buyers, string Nick) {
            foreach (TBbuyData data in Buyers) {
                this.autoEvent.WaitOne();
                if (!this.HashList.Contains(data.Link)) {
                    data.BuyerNick = Nick;
                    this.addItem(data);
                }
            }
        }

        /// <summary>
        /// 添加Item的委托事件
        /// </summary>
        /// <param name="tbUser"></param>
        private delegate void d_AddItem(TBbuyData tbUser);
        private void addItem(TBbuyData tbUser) {
            if (this.lvShow.InvokeRequired) {
                this.lvShow.Invoke(new d_AddItem(this.addItem), new object[] { tbUser });
            } else {
                ListViewItem item = new ListViewItem(new string[5]);
                item.SubItems[0].Text = tbUser.BuyerNick;
                item.SubItems[1].Text = tbUser.Title;
                item.SubItems[2].Text = Convert.ToDateTime(tbUser.Date).ToString("yyyy/MM/dd HH:mm:ss");
                item.SubItems[3].Text = tbUser.Price;
                item.SubItems[4].Text = tbUser.Link;
                this.lvShow.Items.Add(item);
                this.HashList.Add(tbUser.ItemId);
            }
        }

        /// <summary>
        /// 开始抓取时调用的函数
        /// </summary>
        private void Run() {
            string userid = "";
            string str = txtName.Text;
            try {
                userid = Spider.Get_User_RankId(str);
            } catch {
            }
            if (userid != "") {
                int num = 0;
                while (num >= 0) {
                    this.autoEvent.WaitOne();
                    num++;
                    try {
                        List<TBbuyData> buyers = Spider.Get_BuyerData(userid, num.ToString());
                        if ((buyers == null) || (buyers.Count == 0)) {
                            break;
                        }
                        this.InsertBuyers(buyers, str);
                    } catch {
                    }
                    Random random = new Random();
                    Thread.Sleep((int)(500 * random.Next(2, 5)));
                }
                num = 0;
                while (num >= 0) {
                    this.autoEvent.WaitOne();
                    num++;
                    try {
                        List<TBbuyData> list2 = Spider.Get_BuyerData2(userid, num.ToString());
                        if (list2.Count == 0) {
                            break;
                        }
                        this.InsertBuyers(list2, str);
                    } catch {
                    }
                    Random random2 = new Random();
                    Thread.Sleep((int)(500 * random2.Next(2, 5)));
                }
            }
        }

        /// <summary>
        /// 双击ListView打开宝贝地址
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvShow_DoubleClick(object sender, EventArgs e) {
            if (this.lvShow.SelectedItems.Count > 0) {
                Process.Start(this.lvShow.SelectedItems[0].SubItems[4].Text);
            }
        }

        private void tm_Tick(object sender, EventArgs e) {
            this.autoEvent.Set();
        }

        /// <summary>
        /// 暂停
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonSleep_Click(object sender, EventArgs e) {
            this.tm.Stop();
        }

        /// <summary>
        /// 继续
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonTo_Click(object sender, EventArgs e) {
            this.tm.Start();
        }

        /// <summary>
        /// 停止
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonStop_Click(object sender, EventArgs e) {
            this.tm.Stop();
            this.buttonStart.Enabled = true;
        }

        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonOut_Click(object sender, EventArgs e) {
            StringBuilder builder = new StringBuilder("所属买家\t购买产品\t购买日期\t购买金额\t连接\n");
            for (int i = 0; i < this.lvShow.Items.Count; i++) {
                string str = "";
                str = ((((str + this.lvShow.Items.SubItems[0].Text + "\t") + this.lvShow.Items.SubItems[1].Text + "\t") + this.lvShow.Items.SubItems[2].Text + "\t") + this.lvShow.Items.SubItems[3].Text + "\t") + this.lvShow.Items.SubItems[4].Text + "\t";
                str = str.Substring(0, str.Length - 1) + "\n";
                builder.Append(str);
            }
            if (builder != null) {
                SaveFileDialog dialog = new SaveFileDialog {
                    Filter = "表格CSV文件(*.csv)|*.csv",
                    FileName = "买家信息" + DateTime.Now.ToString("yy_MM_dd_HH_mm_ss") + ".csv"
                };
                if (dialog.ShowDialog() == DialogResult.OK) {
                    File.WriteAllText(dialog.FileName, builder.ToString(), Encoding.Unicode);
                    MessageBox.Show("导出完毕,路径:\r\n" + dialog.FileName, "导出完毕", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
            }
        }

        /// <summary>
        /// 统计金额
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMoney_Click(object sender, EventArgs e) {
            decimal num = new decimal(0);
            this.dateStart.Value = DateTime.Parse(this.dateStart.Value.ToString("yyyy-MM-dd"));
            this.dateEnd.Value = DateTime.Parse(this.dateEnd.Value.ToString("yyyy-MM-dd"));
            foreach (ListViewItem item in this.lvShow.Items) {
                try {
                    DateTime time = DateTime.Parse(Convert.ToDateTime(item.SubItems[2].Text).ToString("yyyy-MM-dd"));
                    if ((time >= this.dateStart.Value) && (time <= this.dateEnd.Value)) {
                        num += Convert.ToDecimal(item.SubItems[3].Text);
                    }
                } catch {
                }
            }
            this.lblMoney.Text = string.Format("总金额:{0}元", num.ToString());
        }
    }
}


提示:现已失效,只供参考。

项目源代码: 淘宝信息查看.rar (589.9 KB, 下载次数: 681)

作者: yueding    时间: 2014-7-26 00:34

作者: 乔克斯    时间: 2014-7-26 00:41
yueding 发表于 2014-7-26 00:34


作者: wengjinbao    时间: 2014-7-26 08:32
:D  下载收藏
作者: crystal_lz    时间: 2014-7-26 23:10

作者: wtujoxk    时间: 2014-7-29 09:22
谢谢分享!!!!!!
作者: Tim    时间: 2014-7-31 16:49
瞧一瞧,看一看
作者: MeeSii    时间: 2014-8-6 10:14
很明显有很多局限性,我自己的2014年只查询到一个商品。。实际上2014年我已经花了几万了。
作者: 乔克斯    时间: 2014-8-6 16:25
MeeSii 发表于 2014-8-6 10:14
很明显有很多局限性,我自己的2014年只查询到一个商品。。实际上2014年我已经花了几万了。 ...

你不会是- -。。只评论过这一件商品吧。
作者: MeeSii    时间: 2014-8-7 18:47
乔克斯 发表于 2014-8-6 16:25
你不会是- -。。只评论过这一件商品吧。

明显不止。。没评论也会默认好评的。
作者: 乔克斯    时间: 2014-8-7 20:40
MeeSii 发表于 2014-8-7 18:47
明显不止。。没评论也会默认好评的。

默认好评目测不行。
作者: pacocai    时间: 2014-10-23 16:36
正好需要,谢谢楼主。
作者:     时间: 2014-11-19 16:15
没评论也会默认好评的。
作者: 乔克斯    时间: 2014-11-19 17:55
 发表于 2014-11-19 16:15
没评论也会默认好评的。

默认的抓取不到。
作者: 老段    时间: 2014-11-21 10:19
论坛货太多了....
作者: 乔克斯    时间: 2014-11-21 16:58
老段 发表于 2014-11-21 10:19
论坛货太多了....

精品资源,必须收集。
作者: CSdmin    时间: 2014-11-27 13:02
这个好凶残!!!
作者: CastleDrv    时间: 2014-11-27 19:14
下来看看
作者: wpf    时间: 2014-12-5 15:27
好活动哈萨克的还是看好
作者: sangyuan6122    时间: 2014-12-15 20:16
80%的评论都是匿名的,例如:张**,只有少量非匿名的评论,所以基本用途不大
作者: alatc    时间: 2015-1-30 16:47
过段时间就要用到这个,感谢分享
作者: wanghenan    时间: 2015-4-15 22:20
好东西感谢分享
作者: WaterAsh    时间: 2015-4-27 15:36
收藏了,看看自己的记录
作者: xkc    时间: 2015-6-4 23:51
怪不得,骗子知道你什么时间购买了什么东西!!!!!!!
作者: 我来拾豆豆    时间: 2015-6-13 16:40
现在查不到了,楼主看看什么问题呀
作者: 乔克斯    时间: 2015-6-15 09:31
我来拾豆豆 发表于 2015-6-13 16:40
现在查不到了,楼主看看什么问题呀

接口早挂了- -
作者: 我来拾豆豆    时间: 2015-6-17 14:51
谢谢
作者: 524313162    时间: 2016-1-14 17:32
你确定能获取到?我试试
作者: jeffcn2    时间: 2016-1-19 09:44
匿名评论的应该也抓不下来
作者: meitao20    时间: 2016-1-26 12:44
下来看看,,,
作者: 大法师    时间: 2016-1-26 13:51
从2016年1月26日开始,淘宝屏蔽了卖家那里显示的购买记录。查指定产品销售记录比较有用,按照买家查询,只能查查隔壁老王有没有买情趣用品了~
作者: bfsjj    时间: 2016-1-26 15:43
初学者,用来学习下
作者: 00686cn    时间: 2016-4-12 14:50
这个得看看啊
作者: dskfitr    时间: 2016-10-22 03:15
感觉这个东西好玩,不过失效了。
作者: baiwei    时间: 2017-5-9 20:43
好东西值的分享
作者: go_go007    时间: 2019-5-6 18:57
  哈哈~~~




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2