今日头条Marketing API小工具(.Net Core版本)
前言
由于工作原因,需要用到今日头条的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版本)的更多相关文章
- 跨平台信息获取小工具第三版本(增加了继承、多线程、异常处理模块、excel表格内容剔除空格)
# coding=utf-8 import threadingimport paramikoimport osimport timeimport xlrdimport xlwtimport openp ...
- 今日头条、抖音、西瓜、火山、微视、陌陌等自媒体平台小视频批量下载工具v1.1.0(视频搬运福利)
前言 目前各大自媒体平台爆火,网络流量暴涨,各大自媒体平台的小视频为广大个广告主带来了如泉涌般的的视频流量,更给广大的自媒体小编带来了丰厚的利益回报,想要创做更多的自媒体内容着实不易,下面给广大的小视 ...
- .NET Core 跨平台资源监控库及 dotnet tool 小工具
目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...
- PHP API接口测试小工具
前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性. 后面利用PHP的curl实现Post请求,检验API接口的正确性:配合前面做的一个 ...
- 如何高效的编写与同步博客 (.NET Core 小工具实现)
一.前言 写博客,可以带给我们很多好处,比如可以让我们结识更多志同道合的人:在写博客过程中去查技术资料或者实践可以让我们对知识的掌握和理解更加深刻:通过博客分享能帮助他人收获分享的快乐等等.写博客真的 ...
- 基于百度通用翻译API的一个翻译小工具
前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...
- 今日头条移动app广告激活数据API对接完整Java代码实现供大家参考》》》项目随记
这是自毕业后的第一篇博客,希望自己今后能养成写博客的一个好习惯.最近公司为了加速APP推广,采取在外部平台(如:今日头条)进行广告投放的方式,进行用户引流.因此我们需要对广告的激活数据进行一个检测,跟 ...
- python学习(26)分析ajax请求抓取今日头条cosplay小姐姐图片
分析ajax请求格式,模拟发送http请求,从而获取网页代码,进而分析取出需要的数据和图片.这里分析ajax请求,获取cosplay美女图片. 登陆今日头条,点击搜索,输入cosplay 下面查看浏览 ...
- Go -- 今日头条架构
夏绪宏,今日头条架构师,专注对高性能大规模 Web 架构,云计算.性能优化.编程语言理论等方向,PHP committer,HHVM 项目贡献者.2009 加入百度,先后从事大规模 IDC 自运维设施 ...
随机推荐
- jmeter笔记(9)--JDBC Request的使用
JDBC Request可以向数据库发送一个JDBC(Java Data Base Connectivity)请求(sql语句),获取返回的数据库数据进行操作.它需要和JDBC Connection ...
- 集合源码分析[3]-ArrayList 源码分析
历史文章: Collection 源码分析 AbstractList 源码分析 介绍 ArrayList是一个数组队列,相当于动态数组,与Java的数组对比,他的容量可以动态改变. 继承关系 Arra ...
- Promise的源码实现(完美符合Promise/A+规范)
Promise是前端面试中的高频问题,我作为面试官的时候,问Promise的概率超过90%,据我所知,大多数公司,都会问一些关于Promise的问题.如果你能根据PromiseA+的规范,写出符合规范 ...
- 深度学习二、CNN(卷积神经网络)概念及理论
一.卷积神经网络(CNN) 1.常见的CNN结构有:LeNet-5.AlexNet.ZFNet.VGGNet.ResNet等.目前效率最高的是ResNet. 2.主要的层次: 数据输入层:Input ...
- js重点--匿名函数
推荐博客:https://www.cnblogs.com/pssp/p/5216668.html 函数是必须要有函数名的,不然没有办法找到它,使用它. 如果没有名字必须要有一个依附体,如:将这个匿名函 ...
- TensorFlow windows 安装(base anaconda)
Python conda安装之后(19年默认是python3.7) 1.降级到python3.6 2.查看python版本 3.安装tensorflow
- hadoop记录-hadoop集群日常运维命令
hadoop集群日常运维命令 #1.namenode hadoop namenode -format #格式化,慎用 su hdfs hadoop-daemon.sh start namenode h ...
- mysql 设置skip_name_resolve参数 日志 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode
[环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.25-enterprise-commercial-advanced-log MySQL Enterprise ...
- 运维工作笔记--------------mongodb无法启动问题
1.根据编译的脚本检查脚本内的服务启动路径是否正确 2.更改完成后删除pid文件 3.重启mongod
- ibatis .net $与#的区别
$与#的区别 SELECT * FROM TABLE WHERE Id = #id# 其中如果字段id为字符串类型,那么#id#表示的就是'id',也就是说会自动加引号.如果id为整型,那么#id#就 ...