百度搜索推广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就自己随便操作了,就这么一点东西,查资料看文档,折腾好几天啊!

posted on 2014-03-17 15:10  靖洋  阅读(2053)  评论(1编辑  收藏  举报

导航