zoukankan      html  css  js  c++  java
  • 今日头条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 = 1, [FromQuery]int pageSize = 10)
    {
        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

      

  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/Erik_Xu/p/10055384.html
Copyright © 2011-2022 走看看