前言

既上次介绍了如何通过.net core控制台应用一键发布公众号消息后,这次来介绍一下,如何通过.net core 控制台应用一键发布视频内容至抖音,可以作为第三方分享内容至抖音的服务端方法参考,官方的示例没有提供C#的代码,并且文档也超级坑,api设计也很不友好,返回的错误码并不能真正反映问题所在,总之就是不够restful。。。这个坑我觉得比微信的文档还大。。废话不多说,开始吧

开发流程

(1)申请并成功配置应用

这里我就不多介绍了,参考这一篇博客:https://blog.csdn.net/I_lost/article/details/104520655,注意将授权回调域设置好

(2)获取用户授权code

随便说点,代码中的注释已经够清楚了。

强调一下,请求地址:https://open.douyin.com/platform/oauth/connect/

里面配置query的部分只需要注意:回调地址即redirect_uri需要在应用的配置的授权域名下,其他没啥了。。都很简单,我这里是控制台应用,会调用本地浏览器打开抖音扫码界面

  private string GetDouYinCode(){Dictionary<string, string> requestParameters = new Dictionary<string, string>();//这里的client_key以及client_secret需要自己到开发者平台去开通一个应用得到requestParameters.Add("client_key", "client_key");requestParameters.Add("response_type", "code");requestParameters.Add("scope", "video.create");//redirect_uri  回调的地址,需要在开发者平台配置这个地址requestParameters.Add("redirect_uri", "http://ccciie.com/eyuntong/(S(amksryslevropj3ib0nl0jha))/Default.aspx?id=V2.0");string requestUrl = "https://open.douyin.com/platform/oauth/connect/";StringBuilder stringBuilder = new StringBuilder();stringBuilder.Append(requestUrl);if (requestParameters.Count > 0){stringBuilder.Append("?");foreach (var item in requestParameters){stringBuilder.Append("&");stringBuilder.AppendFormat("{0}={1}", item.Key, item.Value);}}string codeRequest = stringBuilder.ToString();Console.WriteLine(codeRequest);// 控制台打开浏览器或者web 中打开新的窗口进行扫码跳转,等待用户输入code//将跳转后UTL的“code=“到”&“之间的字符复制下来,如下:6yNlI4Xu1Rc923iBNTvzQAsvK00nnie8yiTJ//https://www.a9blmo3lvm.54http.tech/?code=6yNlI4Xu1Rc923iBNTvzQAsvK00nnie8yiTJ&state=string code = OpenBrowerInputCode(codeRequest);return code;}private string OpenBrowerInputCode(string codeRequest){// 控制台打开浏览器窗口或者web 跳转到新的页面, 地址是:codeRequest// 我这里因为是控制台应用,就用了System.Diagnostics.Process()方法,web中弄个a标签跳转到codeRequest这个地址即可,System.Diagnostics.Process.Start(@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe", codeRequest);//用户将这个code复制下来,作为GetDouYinAcessToken(code)的传入参数//扫码跳转后的地址示例:https://www.a9blmo3lvm.54http.tech/?code=6yNlI4Xu1Rc923iBNTvzQAsvK00nnie8yiTJ&state=string code = Console.ReadLine();if (!string.IsNullOrWhiteSpace(code)){return code;}return new Exception("code不能为空").ToString();}

等待用户扫码跳转确认,确认后将代码中所说的code复制到控制台中,等待执行下一步

(3)获取AcessToken

简单说一下,这里对通过服务端方法对https://open.douyin.com/oauth/access_token/发起请求,最后将返回的open_id以及access_token取出来,用作下一步的进行视频上传的接口的参数

    private void GetDouYinAcessToken(string code){Dictionary<string, string> requestParameters = new Dictionary<string, string>();requestParameters.Add("client_key", "client_key");requestParameters.Add("client_secret", "client_secret");requestParameters.Add("code", code);requestParameters.Add("grant_type", "authorization_code");string requestUrl = "https://open.douyin.com/oauth/access_token/";StringBuilder stringBuilder = new StringBuilder();stringBuilder.Append(requestUrl);if (requestParameters.Count > 0){stringBuilder.Append("?");foreach (var item in requestParameters){stringBuilder.Append("&");stringBuilder.AppendFormat("{0}={1}", item.Key, item.Value);}}HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(stringBuilder.ToString());httpWebRequest.ContentType = "application/json";httpWebRequest.Method = "GET";httpWebRequest.Timeout = 20000;HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);string responseContent = streamReader.ReadToEnd();JObject jsonresult = JsonConvert.DeserializeObject<JObject>(responseContent);if (jsonresult["data"]["access_token"] != null && jsonresult["data"]["open_id"] != null){AcessToken = jsonresult["data"]["access_token"].ToString();OpenId = jsonresult["data"]["open_id"].ToString();}streamReader.Close();httpWebResponse.Close();httpWebRequest.Abort();//return jsonresult;}

(4)上传视频至服务器

这里是最坑的地方。。。文档很坑,并且对于C#一点也不友好,我调试了很久,才最终上传成功。

 /// <summary>/// 视频上传方法/// </summary>/// <param name="path">视频文件路径,视频大小不能超过128M,时长不能超过15分钟</param>/// <param name="videoTitle">视频的标题</param>/// <returns></returns>private JObject UploadVideoToDouYin(string path, string videoTitle){FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);byte[] bArr = new byte[fs.Length];fs.Read(bArr, 0, bArr.Length);string url = string.Format("https://open.douyin.com/video/upload/?open_id={1}&access_token={0}", AcessToken, OpenId);HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest;//httpWebRequest.AllowAutoRedirect = true;httpWebRequest.Method = "POST";httpWebRequest.Timeout = 20000;string boundary = DateTime.Now.Ticks.ToString("X");httpWebRequest.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");int pos = path.LastIndexOf("\\");string fileName = path.Substring(pos + 1);//组织表单数据StringBuilder sbHeader = new StringBuilder();sbHeader.Append("Content-Disposition: form-data; name=\"video\"; filename=\"" + path + "\"; filelength=\"" + fs.Length + "\"");sbHeader.Append("\r\n");//其他视频格式需要修改Content-Type:video/mp4; 格式必须是”video/“开头sbHeader.Append("Content-Type:video/mp4;");sbHeader.Append("\r\n\r\n");byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());Stream postStream = httpWebRequest.GetRequestStream();postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);postStream.Write(bArr, 0, bArr.Length);postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);postStream.Close();fs.Close();fs.Dispose();HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);string responseContent = streamReader.ReadToEnd();JObject jsonresult = JsonConvert.DeserializeObject<JObject>(responseContent);streamReader.Close();httpWebResponse.Close();httpWebRequest.Abort();if (jsonresult["data"]["video"]["video_id"] != null){VideoId = jsonresult["data"]["video"]["video_id"].ToString();Console.WriteLine(VideoId);CrateVideoForDouYin(videoTitle);}return jsonresult;}

(5)发布内容

到这就没啥问题了,直接参考官方文档,对内容做相应的配置即可。

    private JObject CrateVideoForDouYin(string videoTitle){//发送视频的的标题,不支持艾特某个用户string videoContext = @"{""text"":""测试视频:人生的意义在于旅行"",""video_id"":""""}";JObject requsetToken = JsonConvert.DeserializeObject<JObject>(videoContext);requsetToken["text"] = videoTitle;requsetToken["video_id"] = VideoId;string requestUrl = string.Format("https://open.douyin.com/video/create/?open_id={0}&access_token={1}", OpenId, AcessToken);HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(requestUrl);httpWebRequest.ContentType = "application/json";httpWebRequest.Method = "POST";httpWebRequest.Timeout = 10000;Console.WriteLine("请求的参数为\n" + requsetToken);byte[] plcByte = Encoding.UTF8.GetBytes(requsetToken.ToString());httpWebRequest.ContentLength = plcByte.Length;httpWebRequest.GetRequestStream().Write(plcByte, 0, plcByte.Length);HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);string responseContent = streamReader.ReadToEnd();JObject responseJson = JsonConvert.DeserializeObject<JObject>(responseContent);streamReader.Close();httpWebResponse.Close();httpWebRequest.Abort();return responseJson;}

(6)完成发布

打开抖音可以看到刚才发布的视频,在集成到真的平台应用上,再写个方法将回调里的code自动抓取到,整个过程只需要用户扫码授权就可以自动发布了

水平不够,又很忙,写的代码看起来比较繁琐,大家将就看看吧。。。

第三方平台一键发布视频至抖音:基于.NET CORE相关推荐

  1. 抖音用户扫码一键转发视频至抖音php

    需求:用户扫码授权后自动转发视频到抖音,转发完成后获得一张优惠券,视频要随机生成(用阿里云视频生产接口提前后台生成好),因为同一个视频会被抖音降权 我用的yii2框架,具体写法需要自己改一改 1:接入 ...

  2. python抖音视频上传_使用 python 发布超清抖音视频

    现在做的项目中有个需求,用户可以在我们平台可以管理自己的抖音号,可以使用抖音的一些功能,比如发布自己的抖音视频等.通过抖音开放平台提供的一些接口可以实现该需求,而且最大支持 4个G 的视频发布,最大时 ...

  3. 伪原创视频 审核 抖音短视频md5修改在线

             伪原创视频 审核 抖音短视频md5修改在线          内容主打短视频,抖音要怎样"盘活"自己的产品池?以抖音的新晋网红李雪琴为例,以"喊话吴亦凡 ...

  4. 视频添加水印 抖音拍摄技巧

             视频添加水印 抖音拍摄技巧          (<抖音隐私政策>很更新仍停留在2018年10月31日)                      在短视频操作中,视频修改 ...

  5. 微信公众账号第三方平台全网发布源码(java)- 实战测试通过

    微信公众账号第三方平台全网发布源码(java)- 实战测试通过 (更多资料,关注论坛:www.jeecg.org) 技术交流请加:289709451.287090836 package org.jee ...

  6. 抖音开放平台授权登录PHP,5分钟快速接入抖音开放平台,获取我的抖音粉丝列表,还有更多实用API...

    注:图片来自抖音开放平台 极速体验 即便你还没有抖音开放平台的账号,也可以极速体验一下抖音授权和接口调用的效果. 进入果创云开放平台-会员-抖音用户-抖音扫码授权. 链接:http://open.ye ...

  7. php自媒体平台系统,自媒体多平台一键发布系统,自媒体人必备

    原标题:自媒体多平台一键发布系统,自媒体人必备 近几年短视频走红,新媒体平台"多如牛毛",不过真正操作起来,才会发现实在苦逼,每天一开工,都得各个平台挨个登录,每天的内容创作完成后 ...

  8. 沉睡者IT - [短视频运营] 抖音短视频成SEO新风口

    下面会从以下5个企业关心的问题来聊聊,如果有什么不明白的地方可以评论交流. 一.什么是SEO? 二.为什么要做抖音SEO? ​三.哪些企业适合做抖音SEO? 四.抖音SEO怎么做? 五.影响抖音排名的 ...

  9. 音视频开发—抖音GsyVideoPlayer视频底层分析使用

    theme: channing-cyan 一.初始化分析 1.初始化主要是构造了一个StandardGSYVideoPlayer 2.设置全屏布局的容器 代码如下: listVideoUtil = n ...

最新文章

  1. Go 学习笔记(30)— Go 语言 make 和 new 的区别
  2. 微型计算机基础 教案,第一章微型计算机基础知识新080902电子教案(153页)-原创力文档...
  3. java做直播需要哪些技术_直播APP开发中需要解决哪些技术难点?千联信息
  4. python super 理解(一)
  5. Cpp 对象模型探索 / 虚函数表和虚函数表指针的创建时机
  6. docker安装(linux)
  7. 2018,抢票大作战
  8. 实现歌词效果自动滚动_只需五步,专业Pr软件实现视频歌词渐变色效果,你学会了吗?...
  9. 分布式文件系统研究-测试-上传文件测试
  10. mysql hdfs_MySQL数据库与HDFS的实时数据同步
  11. 【kafka】Kafka consumer处理大消息数据过大导致消费停止问题
  12. Linux系统管理(6)——Linux下启动Redis服务的几种方法
  13. OpenCV+MFC显示图像
  14. php怎么设置div圆角,不用图片的DIV圆角(兼容各浏览器)
  15. logistic回归分析优点_一文详尽系列之逻辑回归
  16. 计算机论文中期考核报告,硕士学位论文中期检查表范文_中期检查报告范文_中期考核 修改论文题目...
  17. 必应缤纷桌面产品分析
  18. 技术岗的职业规划_技术人员职业规划精选范文
  19. 同学录退出了历史舞台了吗?
  20. 生活:电影穿普拉达的女王(the Devil Wears Prada)的感想

热门文章

  1. 广州创龙SOM-TL138/1808/6748核心板 JTAG仿真器接口/LED指示灯
  2. iOS 代理修饰词weak 不用assgin
  3. AutoLink开源平台系统流程
  4. 好书推荐 | 北极星指标,你了解多少?(推荐指数★★★★★)
  5. 博客日记:论文与论文格式的认识
  6. ASP.net 日历控件
  7. 如何在iphone/ipad上安装低版本App
  8. 什么是SDK和API?
  9. 知网研学导入文献题录和引用文献的方法
  10. 数学建模第二天:数学建模工具课之MATLAB绘图操作