前言

  由于工作原因,需要用到今日头条的Marketing API做一些广告投放的定制化开发。然后看现在网上也没多少关于头条Marketing API的文章,于是便就有了该篇文章。

  头条Marketing API主页地址:https://ad.toutiao.com/openapi/index.html

  头条Marketing API开发文档:https://ad.toutiao.com/openapi/doc/index.html

交互图

  典型的OAuth2.0授权流程:

  

使用步骤

  1. 首先需要去主页注册一个开发者账号,并申请一个APPID,设置好回调地址

  因为从头条重定向回自己的站点只是浏览器行为,所有回调地址填写本机可访问的地址即可(不需要头条能访问),这里是http://localhost:5000/api/auth/callback。

  2. 在appsettings.json中设置APPID + Secret

{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"toutiao": {
"appId": "{Your appId}",
"secret": "{Your secret}"
}
}

  3. 启动项目,即可直接在swagger中使用

  

  

程序逻辑

  1. 在launchsettings.json中设置启动地址为http://localhost:5000/api/auth

"ToutiaoApi": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/auth",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}

  2. 浏览器访问地址http://localhost:5000/api/auth,会重定向到今日头条的认证地址,并且拼接好参数

[HttpGet]
public IActionResult Redirect()
{
var authUrl = "http://ad.toutiao.com/openapi/audit/oauth.html";
var redirectUrl = $"{Request.Scheme}://{Request.Host}/api/auth/callback";
var url = $"{authUrl}?app_id={_setting.AppId}&state=&scope=[\"ad_service\",\"report_service\",\"dmp_service\",\"account_service\"]&redirect_uri={redirectUrl}";
return Redirect(url);
}

  3. 跳转到今日头条的认证地址并点击“同意授权”

  4. 重定向回http://localhost:5000/api/auth/callback并带回了auth_code参数

  

  5. 利用AuthCode + AppId + Secret调用头条认证API获取AccessToken,并把AccessToken缓存到内存中,然后重定向回swagger

[HttpGet("callback")]
public async Task<IActionResult> Callback([FromQuery(Name = "auth_code")]string authCode)
{
var url = "https://ad.toutiao.com/open_api/oauth2/access_token/"; var request = new AuthRequest
{
AppId = _setting.AppId,
Secret = _setting.Secret,
AuthCode = authCode
}; var response = await _restClient.PostAsync<AuthResponse>(url, request);
response.EnsureSuccess(); _cache.Set(ToutiaoCacheKey.AccessToken, response.Data.AccessToken);
return Redirect("/swagger/index.html");
}

调用头条API

  0. 示例代码

/// <summary>
/// 获取广告计划(新版)
/// </summary>
/// <param name="advertiserId">广告主ID</param>
/// <param name="page">页数,默认值: 1</param>
/// <param name="pageSize">页面大小,默认值: 10,最大值:100</param>
/// <returns></returns>
[HttpGet("get")]
public async Task<IActionResult> Get([FromQuery] string advertiserId, [FromQuery]int page = , [FromQuery]int pageSize = )
{
var url = "https://ad.toutiao.com/open_api/2/ad/get/" + "?advertiser_id=" + advertiserId + "&page=" + page + "&page_size=" + pageSize;
var response = await _restClient.GetAsync<DynamicResponse>(url, _cache.Get<string>(ToutiaoCacheKey.AccessToken));
response.EnsureSuccess();
return Ok(response);
}

  1. 根据文档拼接对应参数

var url = "https://ad.toutiao.com/open_api/2/ad/get/" + "?advertiser_id=" + advertiserId + "&page=" + page + "&page_size=" + pageSize;

  2. 从缓存中取出之前得到的AccessToken

_cache.Get<string>(ToutiaoCacheKey.AccessToken)

  3. 构造请求头信息

client.DefaultRequestHeaders.Add("Access-Token", accessToken);

  4. 调用API,并把返回的json反序列化为dynamic类型

var response = await _restClient.GetAsync<DynamicResponse>(url, _cache.Get<string>(ToutiaoCacheKey.AccessToken));

  5. 输出结果到浏览器

  说明:示例中只有查询类API,没有操作类型的API,主要是考虑到操作可能会影响到现有业务。

操作类型API

  代码调用操作类型的API时,可能需要构建请求json对应的实体,这里可以使用Visual Studio的选择性编辑功能,快速生成对象。

  示例:

  1. 拷贝json

{
"advertiser_id": 0,
"campaign_name": "xxx",
"budget": 1000,
"landing_type": "LINK",
"budget_mode": "BUDGET_MODE_DAY"
}

  2. 新建一个cs文件,点击Visual Studio菜单栏的“编辑” -> “选择性编辑” -> “保存json为类”

  

  

  3. 设置JsonProperty(可选,规范、美观考虑)

  

  其实,头条的开发文档中有提供操作API的示例json,但是示例json的字段有些不全,而请求API的结果基本包含了操作API的字段。

  因此,可以使用操作API的返回json来生成操作请求。同时,这个小工具也可以做一些前期的简单查询。

源码地址

  https://github.com/ErikXu/ToutiaoApi

  

今日头条Marketing API小工具(.Net Core版本)的更多相关文章

  1. 跨平台信息获取小工具第三版本(增加了继承、多线程、异常处理模块、excel表格内容剔除空格)

    # coding=utf-8 import threadingimport paramikoimport osimport timeimport xlrdimport xlwtimport openp ...

  2. 今日头条、抖音、西瓜、火山、微视、陌陌等自媒体平台小视频批量下载工具v1.1.0(视频搬运福利)

    前言 目前各大自媒体平台爆火,网络流量暴涨,各大自媒体平台的小视频为广大个广告主带来了如泉涌般的的视频流量,更给广大的自媒体小编带来了丰厚的利益回报,想要创做更多的自媒体内容着实不易,下面给广大的小视 ...

  3. .NET Core 跨平台资源监控库及 dotnet tool 小工具

    目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...

  4. PHP API接口测试小工具

    前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性. 后面利用PHP的curl实现Post请求,检验API接口的正确性:配合前面做的一个 ...

  5. 如何高效的编写与同步博客 (.NET Core 小工具实现)

    一.前言 写博客,可以带给我们很多好处,比如可以让我们结识更多志同道合的人:在写博客过程中去查技术资料或者实践可以让我们对知识的掌握和理解更加深刻:通过博客分享能帮助他人收获分享的快乐等等.写博客真的 ...

  6. 基于百度通用翻译API的一个翻译小工具

    前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...

  7. 今日头条移动app广告激活数据API对接完整Java代码实现供大家参考》》》项目随记

    这是自毕业后的第一篇博客,希望自己今后能养成写博客的一个好习惯.最近公司为了加速APP推广,采取在外部平台(如:今日头条)进行广告投放的方式,进行用户引流.因此我们需要对广告的激活数据进行一个检测,跟 ...

  8. python学习(26)分析ajax请求抓取今日头条cosplay小姐姐图片

    分析ajax请求格式,模拟发送http请求,从而获取网页代码,进而分析取出需要的数据和图片.这里分析ajax请求,获取cosplay美女图片. 登陆今日头条,点击搜索,输入cosplay 下面查看浏览 ...

  9. Go -- 今日头条架构

    夏绪宏,今日头条架构师,专注对高性能大规模 Web 架构,云计算.性能优化.编程语言理论等方向,PHP committer,HHVM 项目贡献者.2009 加入百度,先后从事大规模 IDC 自运维设施 ...

随机推荐

  1. 洛谷P1066 2^k进制数(题解)(递推版)

    https://www.luogu.org/problemnew/show/P1066(题目传送) (题解)https://www.luogu.org/problemnew/solution/P106 ...

  2. hdu 4542 "小明系列故事——未知剩余系" (反素数+DFS剪枝)

    传送门 参考资料: [1]:https://blog.csdn.net/acdreamers/article/details/25049767 题意: 输入两个数 type , k: ①type = ...

  3. \t \r \n \f

    \t 的意思是 :水平制表符.将当前位置移到下一个tab位置. \r 的意思是: 回车.将当前位置移到本行的开头. \n 的意思是:回车换行.将当前位置移到下一行的开头. \f的意思是:换页.将当前位 ...

  4. linux系统裁剪

    linux系统裁剪 1.简介 最近为了更加了解linux系统的启动过程,通过对系统进行裁剪的的方式来了解整个启动流程.这里记录下过程. 2.环境介绍 vmware12 + centos6.5 + xs ...

  5. C#调用DLL文件提示试图加载格式不正确的程序

    最近在调用第三方的DLL遇到了一个问题:试图加载格式不正确的程序,找了好久发现都没有解决问题,一直报错,后来发现是程序编译时的配置错了,要将项目->属性->平台选中release-X86 ...

  6. 03--STL序列容器(Deque)

    一:Deque双端队列<头尾操作> stack和queue是在Deque的基础上改进的,所以先介绍双端队列Deque     deque是“double-ended queue”的缩写,和 ...

  7. 快速掌握Nginx(一) —— 安装Nginx和简单配置虚拟主机

    Nginx安装和简单配置虚拟主机 1 Nginx简介 Nginx是近几年最火热的http.反向代理服务器,百度阿里等互联网公司也都在使用Nginx,它也可以用作邮件代理服务器.TCP/UDP代理服务器 ...

  8. 深入理解Java自带的线程池和缓冲队列

    前言 线程池是什么 线程池的概念是初始化线程池时在池中创建空闲的线程,一但有工作任务,可直接使用线程池中的线程进行执行工作任务,任务执行完成后又返回线程池中成为空闲线程.使用线程池可以减少线程的创建和 ...

  9. Web_0002:关于MongoDB的操作

    1,启动moggdb服务端 打开cmd命令窗口进入到MongoDB的安装目录bin文件下: 如:  cd /d F:\Program Files\mongodb\bin   执行如下命令(该命令窗口为 ...

  10. PLSQL Developer导入dmp文件,一闪而过

    在导入数据的时候,一闪而过,也没有任何报错信息. 在环境变量里添加ORACLE_HOME=D:\app\product\11.2.0\dbhome_1就行,此路径是指oracle安装路径.我是用这种方 ...