蝴蝶效应-虎的博客
博客信息

(HttpClient技术)(今日头条系列)HttpClient模拟发布视频

0
发布时间:『 2019-10-13 23:44』  博客类别:Httpclient提高分享  阅读(2027) 评论(3)

前言

    用Java HttpClient模拟今日头条发布视频,登陆,获取文章列表,发布文章,发布图片和视频的分享,已经接近于尾声了,这是最后一篇关于今日头条发布文章的分享了,不过学习和研究永远是没有止步的,如果有兴趣的同学,欢迎留言啦。这篇文章中,主要是来分享,如何来使用HttpClient模拟发布今日头条的视频文章。

今日头条视频文章

    从上面图片中,可以看到,今日头条中,有很多文章,是视频类型的,包括一些游戏视频,电视剧剪辑,电影花絮等,那要怎么用java模拟在今日头条中发布视频呢? 今天的分享,就此开始。

分析及代码

    Java模拟今日头条发布视频,其实视频文章的封面发布方式,和上一篇文章中((HttpClient技术)(今日头条系列)HttpClient发布图集)分享的发布图片的方式是一模一样的,通过抓包,可以看到,没有任何差异,封面的上传方式,请参考文章中的上传图片代码部分,这里主要分享,如何发布视频。从抓包来看,视频不是一次性上传成功的,而是通过分段上传的,当然通过测试发现,一次性也是可以成功的,就是需要的时间比较久而已。

    实际测试发现,一次性上传和分段上传,没有任何差异,我这里就偷个懒,分享一次性上传的代码,如果有想研究Java HttpClient模拟分段发布视频的代码,我后面会分享一个新浪微博模拟发布视频的代码,它就是分段的形式。

模拟上传视频

System.out.println("上传视频大小:"+ filesize + ",每次网站允许上传大小" + 10485759) ;
while(isNotFinished){
	System.out.println("分段上传视频") ;
	long start = 0 ;
					
	g4 = new HttpOptions(upload_url) ;
	g4.setHeader("Accept", "*/*") ;
	g4.setHeader("Origin", "https://mp.toutiao.com") ;
	g4.setHeader("Access-Control-Request-Method", "POST") ;
	g4.setHeader("Access-Control-Request-Headers", "content-range, content-type") ;
	g4.setHeader("Connection", "Keep-Alive") ;
	g4.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko") ;
	response2 = httpClient.execute(g4);
	if(response2.getStatusLine().getStatusCode() == 204){
	g3 = new HttpPost(upload_url) ;
	FileBody bin = new FileBody(updateFile, updateFile.getName(), "application/octet-stream", "UTF-8") ;
	MultipartEntity reqEntity = new MultipartEntity();  
	reqEntity.addPart("video_file", bin);//file1为请求后台的File upload;属性      
	g3.setEntity(reqEntity);  
						
	response2 = httpClient.execute(g3);
	sg1 = EntityUtils.toString(response2.getEntity(),"utf-8") ;
	System.out.println("分段上传视频结果:"+sg1) ;
	if(response2.getStatusLine().getStatusCode() == 200 && sg1.indexOf("\"message\":\"success\"")!=-1  
	&& sg1.indexOf("expect_bytes")!=-1  ){
		String expect_bytes = "" ;
		sg1 = sg1.substring(sg1.indexOf("expect_bytes")+14) ;
		expect_bytes = sg1.substring(0, sg1.indexOf(",")) ;
		if(expect_bytes.equals("-1")){
			System.out.println("上传视频完毕!") ;
			break ;
		}
			            	
	}
	}
}

    视频发布upload_url,是在进入发布页面的时候获取到的,在发布页面的Html中有upload_url和upload_id两个属性,需要事先获取到,然后通过upload_url上传视频,成功后,在提交的时候会用到upload_id.

发布视频

g3 = new HttpPost("https://mp.toutiao.com/core/article/edit_article_post/?source=mp&type=purevideo") ;
				
g3.setHeader("Accept", "text/javascript, text/html, application/xml, text/xml, */*") ;
g3.setHeader("X-CSRFToken", "undefined") ;
g3.setHeader("X-Requested-With", "XMLHttpRequest") ;
g3.setHeader("Accept-Language", "zh-CN") ;
g3.setHeader("Cache-Control", "no-cache") ;
g3.setHeader("Connection", "Keep-Alive") ;
g3.setHeader("Referer", "https://mp.toutiao.com/profile_v2/publish") ;
g3.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko") ;
g3.setHeader("Content-Type", "application/x-www-form-urlencoded") ;
				
//这里的upload_id是刚进入页面的时候获取到的		
String formatContent = "<p>{!-- PGC_VIDEO:{\"sp\":\"toutiao\",\"vid\":\""
+upload_id+"\",\"vu\":\""+upload_id+"\",\"thumb_url\":\""+original+"\",\"vname\":\""+title+"\"} --}</p>" ;
				
List<NameValuePair> qparams = new ArrayList<NameValuePair>();
				
qparams.add(new BasicNameValuePair("article_type","1")); //0 文章  1:视频
qparams.add(new BasicNameValuePair("title", title));
qparams.add(new BasicNameValuePair("abstract", title));
qparams.add(new BasicNameValuePair("tag",""));
qparams.add(new BasicNameValuePair("extern_link",""));
qparams.add(new BasicNameValuePair("is_fans_article","0"));
qparams.add(new BasicNameValuePair("content", formatContent));
qparams.add(new BasicNameValuePair("add_third_title","0"));
qparams.add(new BasicNameValuePair("timer_status", isImediate? "0" : "1")); //0立刻发送 1 定时发送
qparams.add(new BasicNameValuePair("timer_time", publishTime)); // 必须24小时之内
qparams.add(new BasicNameValuePair("recommend_auto_analyse","0"));
qparams.add(new BasicNameValuePair("article_label",""));
qparams.add(new BasicNameValuePair("from_diagnosis","0"));
qparams.add(new BasicNameValuePair("article_ad_type", "2"));
qparams.add(new BasicNameValuePair("praise", "0"));
qparams.add(new BasicNameValuePair("pgc_debut", "0"));
qparams.add(new BasicNameValuePair("save","1"));
				
				
UrlEncodedFormEntity params = new UrlEncodedFormEntity(qparams, "UTF-8");
g3.setEntity(params);
				
response2 = httpClient.execute(g3);
sg1 = EntityUtils.toString(response2.getEntity(),"utf-8") ;
sg1 = StringRandomUtils.unicodeToString(sg1) ; 
System.out.println(sg1);

    模拟提交后,后台可以正常看到发布的视频,其实从抓包和分析来看,模拟发布视频部分的代码,要比发布图片文章的部分复杂一些,当然发布视频的,整体模拟过程,需要的时间要久很多。

小结

    使用Java HttpClient模拟头条部分,已经全部分享结束了,后面会接着分享,使用Java HttpClient模拟新浪微博登录和发布文章的部分,希望大家多多关注。

关键字:   Java     Java HttpClient     Java爬虫     模拟今日头条发布   
评论信息
1楼    183.92.249.53:大佬可以指点一下,uplodurl是在哪里吗,我检索了发布页面并没有发现这个属性,可否留个联系方式      [ 2020-02-17 00:49 ]
2楼    183.92.249.53:大佬可以指点一下,uplodurl是在哪里吗,我检索了发布页面并没有发现这个属性,可否留个联系方式      [ 2020-02-17 00:49 ]
3楼    117.34.143.138:[回复1楼]:可以说的具体一些吗?或者直接加我的公众号,给我发消息,网站维护较慢一些!谢谢      [ 2020-03-08 15:05 ]
发表评论
验证码: 
博主信息
【蝴蝶效应-虎】
  年轻只有一次,但是梦想却可以奋斗一辈子!

博主寄语:也曾年少轻狂,无奈时光易老!希望将绵薄的技术分享进行到底。
有求必应:如果需要帮助,请给我留言,一定知无不言,言无不尽,请大家多多支持博主,谢谢。
分享无悔:如果有一天你可以回到过去,你还愿意成为现在的自己吗?不让自己后悔,时光无悔。
  • 36文章总数
  • 5486访问次数
  • 38建站天数
  • 友情链接
    Copyright © 2019-2025 蝴蝶效应-虎
    陕ICP备19011911号-2