百度搜索推广API对接--ASP.NET版
前段时间应公司要求,给百度推广做API对接,做一个公司自己用的推广统计后台,就是把百度推广的数据通过API抓取到自己的数据库里, 再进行自己想要的统计,但是在官网上找的示例只有PHP和JAVA版本的,而且示例也很简单,内容很少,给的API文档也没有示例,只有方法名和参数,非常不具体,对于我这个菜鸟来说,很是头疼,不过从中也学到了不少东西,例如用 AuthHeader 对 Web Services 进行身份验证,对Web Services 有了更进一步的了解。
下面开始说说百度推广的API对接的步骤:
一、添加百度搜索推广API的Web Services 。
怎么添加Web Services这个我就不多说了,就是注意在添加的时候,把命名空间起名分清楚,因为他的API的服务地址有很多个,一个大的模块一个地址,所以要添加多个Web Services,具体用哪个就添加哪个就行了,我这里主要用到了帐户服务,推广计划服务,报表服务,所以就添加了3个Web Services。
服务地址请参照百度推广API官网:http://dev2.baidu.com/docs.do?product=2#page=File3
这里请用V3版本的,V2版本马上下线了,我也是刚把V2升级成V3,改了一些地方,有参数不一样的。
二、Web Services方法调用
下面贴代码:
public override DataTable GetReport(DateTime startime) { DataTable dt = new DataTable(); //创建webservice对像 baidu.Report.ReportService myservice = new baidu.Report.ReportService(); //webservice头信息,对 Web Services 进行身份验证 baidu.Report.AuthHeader authheader = new baidu.Report.AuthHeader(); authheader.username = Dic_parameter["username"];//百度推广后台帐号 authheader.password = Dic_parameter["password"];//百度推广后台密码 authheader.token = Dic_parameter["code"];//百度推广后台API码(需要申请,一般是由SEM专员向百度申请,具体流程官网有) myservice.AuthHeaderValue = authheader; //生成报表传递参数类型,这里是对报表服务的使用 baidu.Report.ReportRequestType reqtype = new baidu.Report.ReportRequestType(); //生成报表的字段,还有其他的字段具体请参照开发文档内相应的方法http://dev2.baidu.com/docs.do?product=2#page=File3#page=File string[] data = { "cost", "click", "impression" }; reqtype.startDate = startime.Date;//报表的开始时间 reqtype.endDate = startime.Date.AddDays(1).AddSeconds(-1);//报表的结束时间 reqtype.performanceData = data;//报表的字段 //下面是对报表想要一些参数,详细的还是看开发文档,这里我就不复制了。 reqtype.reportType = 14; reqtype.statRange = 2; reqtype.unitOfTime = 5; reqtype.device = 1; reqtype.levelOfDetails = 11; reqtype.levelOfDetailsSpecified = true; reqtype.format = 0; //获取生成报表的ID string reportid = myservice.getProfessionalReportId(reqtype); //获取报表是否生成成功 int isGenerated = myservice.getReportState(reportid); //循环调用获取报表生成状态,如果不成功接着调用,他文档里说“通过 pull 的方式轮询调用getReportState()”,这句没看懂,反正就是要循环调用,因为他生成报表时间有长有短 int i = 0; while (isGenerated != 3) { Thread.Sleep(100);//弄个线程挂起时间 isGenerated = myservice.getReportState(reportid); i++; if (i > 10) { return null; } } //获取报表地址 string url = myservice.getReportFileUrl(reportid); //判断报表是否成功 baidu.Report.ResHeader resheader = myservice.ResHeaderValue; if (resheader.desc == "success") { string str = Reader(url);//这里他的报表是反回TXT格式用制表符隔开,然后我写了一个用StreamReader输出的方法(方法下面写上),把他输出成字付串,然后再下面操作 //根据帐户名,查出媒体帐户ID string userid = new GeezClick.BLL.MediaAccount().GetModelByUsername(authheader.username).id.ToString(); return TxtToDataTable(str, userid);//这里把字符串用\n\t制表符用Split拆分(方法我就不写了),做成DataTable,(实在想不出什么好办法了) } else { return null; } } //将URL路径内容输出成字符串的方法 public static string Reader(string url) { StreamReader sr; WebRequest HttpWebRequest = WebRequest.Create(url); WebResponse HttpWebResponse = HttpWebRequest.GetResponse(); sr = new StreamReader(HttpWebResponse.GetResponseStream(), System.Text.Encoding.Default); string strHtml = sr.ReadToEnd(); return strHtml; }
到这里基本就完成了,输出成DataTable就自己随便操作了,就这么一点东西,查资料看文档,折腾好几天啊!