今日頭條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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM