作者: 乔克斯
查看: 25846|回复: 36

主题标签Tag

打印 上一主题 下一主题

[源码] 【查询淘宝购买记录】根据淘宝名查询任意买家的购买记录

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2014-7-26 00:26:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
查看: 25846|回复: 36
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());
        }
    }
}


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

项目源代码:

评分

参与人数 1金钱 +4 收起 理由
xiaobo + 4 感谢分享!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 转播转播
回复 论坛版权

使用道具 举报

沙发
yueding 发表于 2014-7-26 00:34:39 | 只看该作者

评分

参与人数 1金钱 -2 收起 理由
xiaobo -2 恶意灌水-________-''

查看全部评分

回复

使用道具 举报

板凳
 楼主| 乔克斯 发表于 2014-7-26 00:41:38 | 只看该作者

评分

参与人数 1金钱 -1 收起 理由
xiaobo -1 他灌水你也灌水,真是...-________-''..

查看全部评分

地板
wengjinbao 发表于 2014-7-26 08:32:13 | 只看该作者
:D  下载收藏
5#
crystal_lz 发表于 2014-7-26 23:10:25 | 只看该作者

评分

参与人数 1金钱 -2 收起 理由
xiaobo -2 恶心灌水-________-''

查看全部评分

回复

使用道具 举报

6#
wtujoxk 发表于 2014-7-29 09:22:40 | 只看该作者
谢谢分享!!!!!!
回复

使用道具 举报

7#
Tim 发表于 2014-7-31 16:49:37 | 只看该作者
瞧一瞧,看一看
8#
MeeSii 发表于 2014-8-6 10:14:13 | 只看该作者
很明显有很多局限性,我自己的2014年只查询到一个商品。。实际上2014年我已经花了几万了。
9#
 楼主| 乔克斯 发表于 2014-8-6 16:25:07 | 只看该作者
MeeSii 发表于 2014-8-6 10:14
很明显有很多局限性,我自己的2014年只查询到一个商品。。实际上2014年我已经花了几万了。 ...

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

明显不止。。没评论也会默认好评的。
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-4-24 14:13, Processed in 0.660217 second(s), 35 queries , Gzip On.

快速回复 返回顶部 返回列表