首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

传媒大学传媒中心资源批量获取工具的制作

2013-10-27 
传媒大学媒体中心资源批量获取工具的制作中国传媒大学媒体中心(http://media.cuc.edu.cn/)是中国传媒大学

传媒大学媒体中心资源批量获取工具的制作

中国传媒大学媒体中心(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如下所示:

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位,因此最后一位应改为\0stringend=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位,因此最后一位应改为\0stringend=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解析器 

在这里就不多说了,方法类似。



1楼imtfcp昨天 17:23
不明觉历

热点排行