第三方平台一键发布视频至抖音:基于.NET CORE
前言
既上次介绍了如何通过.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相关推荐
- 抖音用户扫码一键转发视频至抖音php
需求:用户扫码授权后自动转发视频到抖音,转发完成后获得一张优惠券,视频要随机生成(用阿里云视频生产接口提前后台生成好),因为同一个视频会被抖音降权 我用的yii2框架,具体写法需要自己改一改 1:接入 ...
- python抖音视频上传_使用 python 发布超清抖音视频
现在做的项目中有个需求,用户可以在我们平台可以管理自己的抖音号,可以使用抖音的一些功能,比如发布自己的抖音视频等.通过抖音开放平台提供的一些接口可以实现该需求,而且最大支持 4个G 的视频发布,最大时 ...
- 伪原创视频 审核 抖音短视频md5修改在线
伪原创视频 审核 抖音短视频md5修改在线 内容主打短视频,抖音要怎样"盘活"自己的产品池?以抖音的新晋网红李雪琴为例,以"喊话吴亦凡 ...
- 视频添加水印 抖音拍摄技巧
视频添加水印 抖音拍摄技巧 (<抖音隐私政策>很更新仍停留在2018年10月31日) 在短视频操作中,视频修改 ...
- 微信公众账号第三方平台全网发布源码(java)- 实战测试通过
微信公众账号第三方平台全网发布源码(java)- 实战测试通过 (更多资料,关注论坛:www.jeecg.org) 技术交流请加:289709451.287090836 package org.jee ...
- 抖音开放平台授权登录PHP,5分钟快速接入抖音开放平台,获取我的抖音粉丝列表,还有更多实用API...
注:图片来自抖音开放平台 极速体验 即便你还没有抖音开放平台的账号,也可以极速体验一下抖音授权和接口调用的效果. 进入果创云开放平台-会员-抖音用户-抖音扫码授权. 链接:http://open.ye ...
- php自媒体平台系统,自媒体多平台一键发布系统,自媒体人必备
原标题:自媒体多平台一键发布系统,自媒体人必备 近几年短视频走红,新媒体平台"多如牛毛",不过真正操作起来,才会发现实在苦逼,每天一开工,都得各个平台挨个登录,每天的内容创作完成后 ...
- 沉睡者IT - [短视频运营] 抖音短视频成SEO新风口
下面会从以下5个企业关心的问题来聊聊,如果有什么不明白的地方可以评论交流. 一.什么是SEO? 二.为什么要做抖音SEO? 三.哪些企业适合做抖音SEO? 四.抖音SEO怎么做? 五.影响抖音排名的 ...
- 音视频开发—抖音GsyVideoPlayer视频底层分析使用
theme: channing-cyan 一.初始化分析 1.初始化主要是构造了一个StandardGSYVideoPlayer 2.设置全屏布局的容器 代码如下: listVideoUtil = n ...
最新文章
- Go 学习笔记(30)— Go 语言 make 和 new 的区别
- 微型计算机基础 教案,第一章微型计算机基础知识新080902电子教案(153页)-原创力文档...
- java做直播需要哪些技术_直播APP开发中需要解决哪些技术难点?千联信息
- python super 理解(一)
- Cpp 对象模型探索 / 虚函数表和虚函数表指针的创建时机
- docker安装(linux)
- 2018,抢票大作战
- 实现歌词效果自动滚动_只需五步,专业Pr软件实现视频歌词渐变色效果,你学会了吗?...
- 分布式文件系统研究-测试-上传文件测试
- mysql hdfs_MySQL数据库与HDFS的实时数据同步
- 【kafka】Kafka consumer处理大消息数据过大导致消费停止问题
- Linux系统管理(6)——Linux下启动Redis服务的几种方法
- OpenCV+MFC显示图像
- php怎么设置div圆角,不用图片的DIV圆角(兼容各浏览器)
- logistic回归分析优点_一文详尽系列之逻辑回归
- 计算机论文中期考核报告,硕士学位论文中期检查表范文_中期检查报告范文_中期考核 修改论文题目...
- 必应缤纷桌面产品分析
- 技术岗的职业规划_技术人员职业规划精选范文
- 同学录退出了历史舞台了吗?
- 生活:电影穿普拉达的女王(the Devil Wears Prada)的感想