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

  cheney

SkyDriver是微软推出的网盘,免费容量最高25G,这个大小在国内并不算大。但是只需一点特殊就能让人对它欲罢不能:SkyDriver网盘支持图片和音乐的直接外链。把SkyDriver作为图床:把图片上传到SkyDriver,然后把链接贴到网站、博客、QQ空间、论坛等地方。音乐也是一样的。SkyDriver永远不会改变图片链接,流量也是几乎无限的。我要的就是这个功能,其他什么网盘的云同步功能,都是渣渣

唯一的缺点是获取链接地址比较麻烦,一个一个点击,获取原始地址。现在我做了一款自动解析所有图片地址的工具。且支持递归查询子目录。

程序界面

程序界面

使用方法

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

ok

程序会自动递归查询所有图片

(如果图片较多,建议先在SkyDriver中分出子目录,然后获取子目录的所有图片,不然时间会很长)

获取到目录后拷贝出图片的链接。插入到博客,QQ空间,论坛等地方。

也能很好的支持Windows Live Write:

Windows Live Write

核心源代码

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


	void CgetskydriverlinksDlg::OnBnClickedOk()
	{
		// TODO: Add your control notification handler code here
		// OnOK();
		
		UpdateData(TRUE);
	
		#define MAX_LEN 1024*20
		CString itemlink = "http://storage.live.com/items/";
		char *ch;
		CString temp;
		CString dat;
		CString enter = "\r\n";
		Cfolderlinks *pHead = NULL;
	
		
	
		// 校验URL
		int n = m_URL.Find("&id=");
		if ( n>0 )
		{
			for(int m = n ; m>0 ; )		//单独获取子目录
			{
				n = m;	//保存靠后的值
				m = m_URL.Find("&id=",m+4);		
			}
			m_Links.Format("URL正确...\n正在下载...\n");
		}
		else
		{
			m_Links.Format("URL错误!!!");	
			goto over;
		}
		
		
		pHead = new Cfolderlinks;
		pHead->ID = m_URL.Mid(n+4);
		
		m_Links.Empty();
		
		
		do 
		{
	
			temp = itemlink + pHead->ID ;
	
			// 下载错误自动忽略
			download ( (LPSTR)(LPCTSTR)( temp ) , "data.xml" );	
	
			// 从待下链表中删除
			Cfolderlinks *p = pHead->pNext;
			free(pHead);
			pHead = p;
	
			// 文本格式读取数据
			FILE * pf = fopen("data.xml","r"); 
			if( pf != NULL )
				ch = (char *)malloc(MAX_LEN);
	
			memset(ch,0,MAX_LEN);
			int nLen = fread(ch,1,MAX_LEN,pf);
			if( nLen > 0 )
				dat = ch; 
	
			free(ch);
			fclose(pf);
	
			// 查找当前目录下有无子目录
			int n = 0;
	
	Folderloop:
			n = dat.Find("<ItemType>Folder</ItemType>",n+100);
			if (n>0)
			{
				// 如果有子目录
				Cfolderlinks *ptemp = new Cfolderlinks;
				ptemp->ID = dat.Mid(n+46,21);	//获取目录ID
	
				//添加到链表末尾
				Cfolderlinks **p = &pHead;
				for ( ; NULL != *p ; p= &((*p)->pNext) );
				*p = ptemp;
				goto Folderloop;
			}
	
			// 查找所有图片
			n = 0;
			//(*pLinks).Empty();
	
	Photoloop:
			n = dat.Find("<ItemType>Photo</ItemType>",n+100);
			if (n>0)
			{
				m_Links += itemlink;
				m_Links += dat.Mid(n+45,21);
				m_Links += "?";
				int m = dat.Find("</RelationshipName>",n);
				m_Links += dat.Mid(n+104,m-(n+104));		//文件名
				m_Links += enter;
				goto Photoloop;
			}	
	
		} while (pHead != NULL);
		
		m_URL.Empty();
		
		//<ItemType>Photo</ItemType>
		//<ItemType>Folder</ItemType>
			
	
	over:	UpdateData(FALSE);
	
	}

软件地址

link