中国传媒大学媒体中心(http://media.cuc.edu.cn/)是中国传媒大学媒体资源最集中的地方,各种电影,电视剧,音乐等等,可以说是丰富多彩。然而它有一个缺点,就是只能在线看,不能下载。这导致想把自己喜爱的视频保存下来是比较困难的。为此我课余时间进行了一个小研究,做了一个MFC的小程序,可以实现媒体中心中资源URL的提取和保存,在此记录一下自己的制作过程。
该工具主要涉及以下三个技术:
1.发送HTTP请求,获取网页的源代码
2.查找具有特定标记的字符串,并提取出来
3.数据写入xml文件
下面先看看实际情况
首先登录媒体中心,打开一个视频,截图如图所示:
查看一下网页的源代码,看看有没有视频URL。在网页里搜索了关键字“.flv”,竟然找到了。
地址就是:
http://202.205.20.12:2048/02/video/2012/5/111309/1336492554022.flv
只要把上述地址粘贴到迅雷,快车里面就可以下载视频了。
现在有一个问题,就是下载一个视频可以这样翻网页源代码找一找,但是每次这样操作有点太过麻烦了。因此需要编程实现一个小工具。当输入一个视频播放网页的地址的时候,就可以输出该视频实际的下载地址。当然,最好可以批量输入页面地址,然后批量解析视频的实际地址。
其实这个东西已经实现出来了,最终界面如下所示:
在这个工具中,贴入视频所在的网页,就可以解析出视频的标题以及视频的地址。而且下半部分还提供了批量解析的功能,输入视频ID(随后会解释)的范围,就可以探测出该范围内所有的视频资源,同时输出成XML或者TXT。
批量解析输出成XML如下所示:
<URLList> <URL id="4"> <name>恐惧拉斯维加斯</name> <link>http://202.205.20.12:2048/02/video/2008/6/恐惧拉斯维加斯/恐惧拉斯维加斯.flv</link> <type>vod</type> <protocol>http</protocol> </URL> <URL id="5"> <name>一球成名2CD1</name> <link>http://202.205.20.12:2048/02/video/2008/7/一球成名2CD1/一球成名2CD1.flv</link> <type>vod</type> <protocol>http</protocol> </URL> <URL id="6"> <name>一球成名2CD2</name> <link>http://202.205.20.12:2048/02/video/2008/7/一球成名2CD2/一球成名2CD2.flv</link> <type>vod</type> <protocol>http</protocol> </URL> <URL id="7"> <name>深海寻人</name> <link>http://202.205.20.12:2048/02/video/2008/7/深海寻人/深海寻人.flv</link> <type>vod</type> <protocol>http</protocol> </URL> <URL id="28"> <name>Oh_My_Friend</name> <link>http://202.205.20.12:2048/02/video/1970/1/28.BIGBANG_3rd_MINI_Oh_My_Friend_MV/BIGBANG_3rd_MINI_Oh_My_Friend_MV.flv</link> <type>vod</type> <protocol>http</protocol> </URL> <URL id="30"> <name>once in a lifetime</name> <link>http://202.205.20.12:2048/02/video/2008/9/30.once_in_a_lifetime/once_in_a_lifetime.flv</link> <type>vod</type> <protocol>http</protocol> </URL> </URLList>
或者TXT格式:
视频ID:4 视频名称:恐惧拉斯维加斯 视频地址:http://202.205.20.12:2048/02/video/2008/6/恐惧拉斯维加斯/恐惧拉斯维加斯.flv 视频ID:5 视频名称:一球成名2CD1 视频地址:http://202.205.20.12:2048/02/video/2008/7/一球成名2CD1/一球成名2CD1.flv 视频ID:6 视频名称:一球成名2CD2 视频地址:http://202.205.20.12:2048/02/video/2008/7/一球成名2CD2/一球成名2CD2.flv 视频ID:7 视频名称:深海寻人 视频地址:http://202.205.20.12:2048/02/video/2008/7/深海寻人/深海寻人.flv 视频ID:28 视频名称:Oh_My_Friend 视频地址:http://202.205.20.12:2048/02/video/1970/1/28.BIGBANG_3rd_MINI_Oh_My_Friend_MV/BIGBANG_3rd_MINI_Oh_My_Friend_MV.flv 视频ID:30 视频名称:once in a lifetime 视频地址:http://202.205.20.12:2048/02/video/2008/9/30.once_in_a_lifetime/once_in_a_lifetime.flv
介绍完毕。现在简要介绍一下单个视频解析url的制作过程。
第一步:发送HTTP请求,获取网页的源代码
曾经写过一篇发送HTTP请求获取网页源代码的文章:C++发送HTTP请求获取网页HTML代码
第二步:查找具有特定标记的字符串,并提取出来
曾经写过一篇查找字符串并提取出来的方法的文章:C++从文件中查找特定的字符串,并提取该字符串
在此需要综合前两篇文章的方法,实现对特定url的网页源代码的请求,以及对特定字符串的查找和提取。
首先观察一下网页源代码,发现视频地址是在一对<script>标签里:
<script type='text/javascript'> var s1 = new SWFObject('/v/Y29uZmlnPS9tcGMuanNwP21pZD0xMTEzMDk=','mediaplayer','480','380','10'); //var s1 = new SWFObject('/scripts/player_4.4.swf?config=/mpc.jsp?mid=111309','mediaplayer','480','380','9'); //s1.addParam('flashvars','&file=http://202.205.20.12:2048/02/video/2012/5/111309/1336492554022.flv&streamer=lighttpd'); s1.useExpressInstall('/scripts/expressinstall.swf'); s1.addParam('allowfullscreen','true'); s1.addParam('allowscriptaccess','always'); s1.write('player_box'); </script>
而地址开头“http://”前面是“('flashvars','&file=”,地址结尾“.flv”后面是“&streamer=lighttpd”。以这两个字符串作为标志,就能找到视频url地址。
视频标题的开头前面是“<span class=text_bl>”,地址结尾“</span>  ”。以这两个字符串作为标志,就能找到视频的标题。
下面贴上这部分的源代码
注意:本工程中使用了3个CString变量关联到3个Edit Control控件:
CString m_htmlurl;//输入页面url
CString m_videourl;//输出解析出来的视频url
CString m_videoname;//输出解析出来的视频名称
void Csocket_http_dialogDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //地址----------------- char stringsearch_before[]="('flashvars','&file="; char stringsearch_after[]="&streamer=lighttpd"; //标题----------------- char stringsearch_before1[]="<span class=text_bl>"; char stringsearch_after1[]="</span>"; //url_search_before位置,代表找到了相应字符串 const char *mark=NULL; //开始和结束 const char *stringstart=NULL; const char *stringend=NULL; //结果 char url[200]={0}; char vname[200]={0}; char *content_temp=NULL; char *string_temp=NULL; //----------------- CInternetSession session;//建立对话 CHttpFile *file; //CException *e; UpdateData(true); CString URL = m_htmlurl.GetString(); if(URL==""){ AfxMessageBox("网页地址为空!"); } try{ file=(CHttpFile*)session.OpenURL(URL);//打开文件 }catch(...){ file = 0; } if (file){ DWORD dwStatus; file->QueryInfoStatusCode(dwStatus); if(dwStatus == HTTP_STATUS_OK){ CString content; CString data; while (file->ReadString(data)){ content+=data+"\r\n"; } content.TrimRight(); //MessageBox((LPCTSTR)content); //处理数据,数据位于content之中--------------------------- //获得地址 mark=strstr(content,stringsearch_before); if(mark==NULL){ AfxMessageBox("没有找到地址...本软件只适用于媒体中心"); goto end; } //注意要-1,,此处获得string开始 stringstart=mark+sizeof(stringsearch_before)-1; //注意此处获得string结束之后的1位,因此最后一位应改为\0 stringend=strstr(stringstart,stringsearch_after); string_temp=url; for(content_temp=(char*)stringstart;content_temp!=stringend;content_temp++,string_temp++){ *string_temp=*content_temp; } string_temp='\0'; //获得标题----------------------------- mark=strstr(content,stringsearch_before1); if(mark==NULL){ AfxMessageBox("没有找到标题...本软件只适用于媒体中心"); goto end; } //注意要-1,,此处获得string开始 stringstart=mark+sizeof(stringsearch_before1)-1; //注意此处获得string结束之后的1位,因此最后一位应改为\0 stringend=strstr(stringstart,stringsearch_after1); //vname是最终输出 string_temp=vname; for(content_temp=(char*)stringstart;content_temp!=stringend;content_temp++,string_temp++){ *string_temp=*content_temp; } string_temp='\0'; //---------------------------------- m_videourl=url; m_videoname=vname; UpdateData(FALSE); }else{ MessageBox("dwStatus!=HTTP_STATUS_OK"); } end: file->Close(); delete file; } session.Close(); }
第三步:数据写入xml文件
曾经写过一篇数据写入成xml的文章:TinyXML:一个优秀的C++ XML解析器
在这里就不多说了,方法类似。
相关推荐
由于提供的文件内容不具可读性,以上知识内容并非直接从文件提取,而是基于文件标题“中国传媒大学音乐学考研真题.pdf”所反映的主题进行的知识性拓展。考生在准备考研时,应尽量获取官方发布的最新考研信息和真题,...
【星美传媒的内部媒体资源】星美传媒涉及两个主要部分:星美影院投资公司和中影星美院线,这两者共同构成了电影贴片广告的运营基础。同时,报告提供了电影贴片广告的权威数据、受众分析以及可操作的媒体策略。 ...
《2017年中国传媒大学高等代数考研题库及答案详解》是一个针对中国传媒大学高等代数课程考研复习的重要参考资料。这份资源包含了全面的考研题库和详细的解答,旨在帮助考生深入理解和掌握高等代数的核心概念、理论与...
压缩包中的"视频批量修改MD5.exe"就是这个工具的可执行文件,用户只需运行此程序并按照界面提示操作,即可实现批量修改。 需要注意的是,虽然MD5修改在某些场景下有其用途,但滥用或用于非法目的可能导致账号受限...
【中国传媒大学媒体管理学院高级研究报告生课程进修班专业优势】 中国传媒大学媒体管理学院的高级研究生课程进修班集合了多种专业优势,旨在培养具备深厚理论基础和实践能力的高级传媒人才。以下是一些主要的专业...
中国传媒大学考博试题系列 中国传媒大学2007年计算机图形学考博真题
从给定文件的【标题】和【部分内容】中提取知识点,我们需围绕中国传媒大学图书馆展开讨论,并解析文档内容中提及的各种数据库、期刊和相关资源。显然,这部分内容包含了许多数据库名称、年份、网络地址和可能与图书...
中国传媒大学21春《公文写作》平时作业.docx
2020年春6月传媒大学《社会统计学》平时作业答案.pdf
《信号与系统》是中国传媒大学考研的重要科目之一,2002年的考研真题是学子们备考的关键参考资料。本篇文章将深入解析这份真题,帮助考生理解和掌握信号与系统的基本概念、理论及其应用。 首先,我们要理解“信号”...
《中国传媒大学829艺术与科学基础考研真题详解》 中国传媒大学,作为国内传媒教育领域的领军学府,其829艺术与科学基础课程是艺术类研究生入学考试的重要科目之一。这个科目旨在考察考生对艺术理论、科技应用以及...
信号与系统 中国传媒大学 真题 答案 极具参考价值
1. **技术能力**:熟练掌握最新的制作技术和工具。 2. **创意思维**:具备良好的创意能力和故事讲述技巧。 3. **跨媒体协作**:能够与其他媒体平台进行有效合作。 4. **适应变化**:面对不断变化的技术环境,保持...
本专业立足广播影视传媒行业,面向媒体内容处理相关领域,运用计算机软件与现代电子技术等信息处理手段,着重于视音频处理、信源压缩、影视制作与节目管理、节目播出与分发等,具有基础理论与工程实践并重,艺术与...
2013-2017中国传媒大学计算机921数据结构与计算机网络考研初试真题
智慧传媒技术优势是该解决方案的核心竞争力所在,包括了节目发布简单、节目制作多样、内容更新方便、节目发布安全、内容权限分明、设备管理批量等技术优势。这些技术优势可以帮助用户快速、方便地发布和管理媒体信息...
中国传媒大学计算机考研真题 827 程序设计 2010年。。。
中国传媒大学的新媒体专业方向专注于在数字化、信息化和全球化背景下研究新媒体的综合发展。这个专业涵盖了广播电视新媒体、移动媒体和互联网新媒体等多个领域。学生将学习如何运用定量和定性研究方法分析市场竞争、...
《中国传媒大学 信号与系统一815真考研题00-09》是针对中国传媒大学通信、信号及电路方向考研学子的重要参考资料。这个压缩包包含了2000年至2009年间的历年真题,对于备考的学生来说,无疑是宝贵的复习资源。 信号...
在中国传媒大学的814新闻传播综合考研中,考生需要对这些核心概念有深入理解和应用能力。下面将围绕这个主题,详细讲解相关知识点。 一、新闻学基础 1. 新闻定义:新闻是关于新近发生的事实的报道,具有真实、及时...