请选择 进入手机版 | 继续访问电脑版

无忧编程_ASP.NET  / C# / PHP 程序员的软件世界

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1854|回复: 0

百度搜索推广API对接--ASP.NET版

[复制链接]

415

主题

448

帖子

1861

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1861
发表于 2018-12-26 10:56:17 | 显示全部楼层 |阅读模式
百度搜索推广API对接--ASP.NET版+
[size=13.3333px]  前段时间应公司要求,给百度推广做API对接,做一个公司自己用的推广统计后台,就是把百度推广的数据通过API抓取到自己的数据库里, 再进行自己想要的统计,但是在官网上找的示例只有PHP和JAVA版本的,而且示例也很简单,内容很少,给的API文档也没有示例,只有方法名和参数,非常不具体,对于我这个菜鸟来说,很是头疼,不过从中也学到了不少东西,例如用 AuthHeader 对 Web Services 进行身份验证,对Web Services 有了更进一步的了解。
[size=13.3333px]  下面开始说说百度推广的API对接的步骤:
[size=13.3333px]  一、添加百度搜索推广API的Web Services 。
[size=13.3333px]    怎么添加Web Services这个我就不多说了,就是注意在添加的时候,把命名空间起名分清楚,因为他的API的服务地址有很多个,一个大的模块一个地址,所以要添加多个Web Services,具体用哪个就添加哪个就行了,我这里主要用到了帐户服务,推广计划服务,报表服务,所以就添加了3个Web Services。
[size=13.3333px]
[size=13.3333px]服务地址请参照百度推广API官网:http://dev2.baidu.com/docs.do?product=2#page=File3
[size=13.3333px]这里请用V3版本的,V2版本马上下线了,我也是刚把V2升级成V3,改了一些地方,有参数不一样的。
[size=13.3333px]   二、Web Services方法调用
[size=13.3333px]    下面贴代码:
[size=13.3333px][mw_shl_code=csharp,true]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;
}[/mw_shl_code]

windows .net(C#+MSSQL) linux(php+mysql)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|软件编程 ( 鄂ICP备11006601号 )鄂公网安备 42011102001337号 |

GMT+8, 2019-6-27 17:09 , Processed in 0.062069 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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