我的优快云博客下载器,下载博客文章保存为mht文件

                 近日,看到某人写了一个下载优快云博文的软件,输入csdn用户名就可以下载,但却是java写的,在java大行其道的天下,可惜我没学java,连java环境都没有,就想着用c++写一个类似的。

                不过没有保存成pdf、doc之类的功能,(没有找到好的API,哈哈),因为我个人平时都是用浏览器直接保存为mht文件,所以直接在codeguru上面找了一个代码,保存一个页面为mht文件。

              分析主要完成以下几个功能,

             1、页面内容提取。

             用CInterenetSession、CHttpConnection、CHttpFile 下载第一个页面,

             2、分析blog主要信息,排名,积分等,这里没有用到xml分析(不会用),都是根据页面特点进行字符串扫描,效率有点低。

             然后就在时提取里面的博客文章标题和它对应的url (当然如果有下一页就要不断分析了)

 

             3、显示用户的主要blog信息。包括所有文章,以及头像(gdi+),这里还遇到了一个问题困扰了我两天,gdi+在vc6里面的配置问题

             4、获取用户选择了的列表里面文章的URL交给 SaveOnePage 来保存。

软件界面

 

带关键字的文章检索

 

由关键字8086下载的内容

带头像

下载网页的代码

UINT GetWebText(CString & url,string *content,HWND hWnd=NULL)
{ 
	CMyInternetSession *pSession = NULL;
	CHttpConnection *pServer = NULL;
	CHttpFile *pFile = NULL;
	bool flag;

	DWORD dwServiceType;
	CString strServer;

	CString strObject;
	INTERNET_PORT nPort;

	try{
		flag=AfxParseURL( url,dwServiceType,strServer,strObject,nPort );
		if(!flag)
		{
			AfxMessageBox(_T("打开地址错误")+url );
			return false;
		}

		pSession=new CMyInternetSession;

		pSession->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,30000);
		
		pSession->SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);
		
		pSession->SetOption(INTERNET_OPTION_CONNECT_RETRIES,2);
	    
		pServer = pSession->GetHttpConnection(strServer,nPort );
	   	
		pSession->m_pMainWnd=hWnd;
		
		pSession->EnableStatusCallback(TRUE);
	}

	catch (CInternetException* pEx)
	{
		pSession->Close();
		pServer->Close();
		pEx->Delete();
		return false;
	}
///
	try	
	{
	   DWORD dwHttpRequestFlags =INTERNET_FLAG_EXISTING_CONNECT |  INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE ;
	   
	   pFile=pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject,NULL, 1,NULL, NULL,dwHttpRequestFlags);

	   pFile->SendRequest();
	}
	catch(CInternetException *pEx)
	{
	
		pSession->Close();
		pServer->Close();
		pEx->Delete();
		return false;
	}	

	char   szBuf[1024];   //缓存
	string *in,*out;
	in=new string;
	out=new string;
	char * pText;

	(*content)="";

	while( pFile->ReadString(szBuf,1023))
	{

		in->assign(szBuf);	
		
		pText=(char *)in->c_str();

		UTF_8ToGB2312(*out,pText, strlen(in->c_str()));

		(*content).append(*out);

		memset(szBuf,1024,0);
	}
	if( string::npos != (*content).find("没找到该页面") )
	{

		 return 0;
	}
	delete in;
	delete out;
	pFile->Close();   
	pServer->Close();   
	pSession->Close();

	if (pFile != NULL)
		delete   pFile;   
	if (pServer != NULL)
		delete  pServer;   
	if (pSession != NULL)
	      delete pSession ; 
	return 1;
}


 

 

 

下面的代码不是很懂,我的想法是可以调用浏览器里面的某个dll里面函数,但是不知道怎么去实现

	 CoInitialize(NULL);
	 BSTR bstr=szPageURL.AllocSysString();
	 CString szUserName="domain\\username";
	 BSTR bstrUserName=szUserName.AllocSysString();
	 CString szPass="domain\\username";
	 BSTR bstrPass=szPass.AllocSysString();
	 IMessage *pMsg=NULL;
	 IConfiguration* pConfig = NULL;
	 _Stream*        pStm    = NULL;

	  HRESULT hr=CoCreateInstance(
		  __uuidof(Message),
		  NULL,
		  CLSCTX_INPROC_SERVER,
		  __uuidof(IMessage),
		  (void**)&pMsg);


	   hr=CoCreateInstance(
		   __uuidof(Configuration),
		   NULL,
		   CLSCTX_INPROC_SERVER,
		   __uuidof(IConfiguration),
		   (void**)&pConfig);

	  pMsg->put_Configuration (pConfig);

      try
      {
         pMsg->CreateMHTMLBody(
          bstr, 
            cdoSuppressNone,
            bstrUserName,
            bstrPass );
      }
      catch(_com_error err)
      {
         // handle exception
		  AfxMessageBox("Exception");
		  return 0;
      }   

      _StreamPtr pStream;
      pMsg->GetStream(&pStm);

      pStm->SaveToFile( szFileName.AllocSysString(),
	      adSaveCreateOverWrite);
      pMsg->Release();
      pStm->Release();
      CoUninitialize();
      return 1;

 

工程下载地址:http://download.youkuaiyun.com/detail/lilien1010/4475758

本程序用java编写,运行的时候需要JDK1.5或以上环境,无需安装。程序通过分析优快云博客源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是优快云的源码结构修改了。程序只是用于学习之用,严禁用于非法目的而照成优快云服务器过载。 由于生成PDF的时候需要依赖字库,所以在打包程序的时候把一些必要的字库已经放到程序中去了。可能在生成一些PDF文件的时候出现乱码问题,那是因为里面缺少需要的字库,如遇到这个问题,请和本人联系wyphao.2007@163com #################################################### 程序功能: 1、支持输入优快云博客用户名针对性下载 2、支持选择保存下载文件 保存的结构目录为: 选择的保存路径\优快云用户名\img 该用户的头像保存路径 选择的保存路径\优快云用户名\pdf 生成的PDF文件保存路径 选择的保存路径\优快云用户名\doc 生成的DOC文件保存路径 选择的保存路径\优快云用户名\txt 生成的TXT文件保存路径 3、支持获取用户博客信息 4、支持显示用户所有的帖子列表 5、可以自己选择需要下载的帖子,有全选、反选、重置按钮 6、支持下载文件保存为 pdf、doc、txt三种格式 7、生成的pdf、doc文件支持图片 8、支持进度显示 #################################################### 制作时间:2012年07月17日 - 2012年07月18日 制 作:w397090770 个人博客:http://blog.csdn.net/w397090770 Email :wyphao.2007@163.com 版权所有,翻版不究 ####################################################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值