2013年4月10日星期三

SkyDriver网盘批量获取图片链接工具


SkyDriver是微软推出的网盘,免费容量最高25G,这个大小在国内并不算大。但是只需一点特殊就能让人对它欲罢不能:SkyDriver网盘支持图片和音乐的直接外链。把SkyDriver作为图床:把图片上传到SkyDriver,然后把链接贴到网站、博客、QQ空间、论坛等地方。音乐也是一样的。SkyDriver永远不会改变图片链接,流量也是几乎无限的。我要的就是这个功能,其他什么网盘的云同步功能,都是渣渣。
唯一的缺点是获取链接地址比较麻烦,一个一个点击,获取原始地址。现在我做了一款自动解析所有图片地址的工具。且支持递归查询子目录。
1.程序界面



2.使用方法

->直接拷贝网址输入到软件的“SkyDriver资源页面URL”栏
->点击确定

程序会自动递归查询所有图片
(如果图片较多,建议先在SkyDriver中分出子目录,然后获取子目录的所有图片,不然时间会很长)
获取到目录后拷贝出图片的链接。插入到博客,QQ空间,论坛等地方。
也能很好的支持Windows Live Write:


3.核心源代码

MFC程序散乱,只贴出核心部分。

代码片段
  1. void CgetskydriverlinksDlg::OnBnClickedOk()
  2. {
  3.     // TODO: Add your control notification handler code here
  4.     // OnOK();
  5.     
  6.     UpdateData(TRUE);
  7.     #define MAX_LEN 1024*20
  8.     CString itemlink = "http://storage.live.com/items/";
  9.     char *ch;
  10.     CString temp;
  11.     CString dat;
  12.     CString enter = "\r\n";
  13.     Cfolderlinks *pHead = NULL;
  14.     
  15.     // 校?验?URL
  16.     int n = m_URL.Find("&id=");
  17.     if ( n>0 )
  18.     {
  19.         for(int m = n ; m>0 ; )        //单?独?获?取?子?目?录?
  20.         {
  21.             n = m;    //保?存?靠?后?的?值?
  22.             m = m_URL.Find("&id=",m+4);        
  23.         }
  24.         m_Links.Format("URL正?确?...\n正?在?下?载?...\n");
  25.     }
  26.     else
  27.     {
  28.         m_Links.Format("URL错?误?!?!?!?");    
  29.         goto over;
  30.     }
  31.     
  32.     
  33.     pHead = new Cfolderlinks;
  34.     pHead->ID = m_URL.Mid(n+4);
  35.     
  36.     m_Links.Empty();
  37.     
  38.     
  39.     do 
  40.     {
  41.         temp = itemlink + pHead->ID ;
  42.         // 下?载?错?误?自?动?忽?略?
  43.         download ( (LPSTR)(LPCTSTR)( temp ) , "data.xml" );    
  44.         // 从?待?下?链?表?中?删?除?
  45.         Cfolderlinks *p = pHead->pNext;
  46.         free(pHead);
  47.         pHead = p;
  48.         // 文?本?格?式?读?取?数?据?
  49.         FILE * pf = fopen("data.xml","r"); 
  50.         if( pf != NULL )
  51.             ch = (char *)malloc(MAX_LEN);
  52.         memset(ch,0,MAX_LEN);
  53.         int nLen = fread(ch,1,MAX_LEN,pf);
  54.         if( nLen > 0 )
  55.             dat = ch; 
  56.         free(ch);
  57.         fclose(pf);
  58.         // 查?找?当?前?目?录?下?有?无?子?目?录?
  59.         int n = 0;
  60. Folderloop:
  61.         n = dat.Find("<ItemType>Folder</ItemType>",n+100);
  62.         if (n>0)
  63.         {
  64.             // 如?果?有?子?目?录?
  65.             Cfolderlinks *ptemp = new Cfolderlinks;
  66.             ptemp->ID = dat.Mid(n+46,21);    //获?取?目?录?ID

  67.             //添?加?到?链?表?末?尾?
  68.             Cfolderlinks **p = &pHead;
  69.             for ( ; NULL != *p ; p= &((*p)->pNext) );
  70.             *p = ptemp;
  71.             goto Folderloop;
  72.         }
  73.         // 查?找?所?有?图?片?
  74.         n = 0;
  75.         //(*pLinks).Empty();

  76. Photoloop:
  77.         n = dat.Find("<ItemType>Photo</ItemType>",n+100);
  78.         if (n>0)
  79.         {
  80.             m_Links += itemlink;
  81.             m_Links += dat.Mid(n+45,21);
  82.             m_Links += "?";
  83.             int m = dat.Find("</RelationshipName>",n);
  84.             m_Links += dat.Mid(n+104,m-(n+104));        //文?件?名?
  85.             m_Links += enter;
  86.             goto Photoloop;
  87.         }    
  88.     } while (pHead != NULL);
  89.     
  90.     m_URL.Empty();
  91.     
  92.     //<ItemType>Photo</ItemType>
  93.     //<ItemType>Folder</ItemType>
  94.         

  95. over:    UpdateData(FALSE);
  96. }



4.软件下载地址:百度网盘下载



没有评论:

发表评论