xref: /MusicPlayer2/MusicPlayer2/LyricDownloadCommon.cpp (revision 3832d43c13b4f4f451bb850590942c718aa8fe3c)
1 #include "stdafx.h"
2 #include "LyricDownloadCommon.h"
3 
4 
CLyricDownloadCommon()5 CLyricDownloadCommon::CLyricDownloadCommon()
6 {
7 }
8 
9 
~CLyricDownloadCommon()10 CLyricDownloadCommon::~CLyricDownloadCommon()
11 {
12 }
13 
14 
DownloadLyric(const wstring & song_id,wstring & result,bool download_translate)15 bool CLyricDownloadCommon::DownloadLyric(const wstring & song_id, wstring & result, bool download_translate)
16 {
17 	wstring lyric_url;
18 	if (!download_translate)
19 		lyric_url = L"http://music.163.com/api/song/media?id=" + song_id;
20 	else
21 		lyric_url = L"http://music.163.com/api/song/lyric?os=osx&id=" + song_id + L"&lv=-1&kv=-1&tv=-1";
22 	return CInternetCommon::GetURL(lyric_url, result);
23 }
24 
25 
DisposeLryic(wstring & lyric_str)26 bool CLyricDownloadCommon::DisposeLryic(wstring & lyric_str)
27 {
28 	size_t index1 = lyric_str.find('[');	//查找第1个左中括号,即为歌词开始的位置
29 	if (index1 == string::npos)
30 	{
31 		return false;
32 	}
33 	lyric_str = lyric_str.substr(index1, lyric_str.size() - index1 - 13);
34 	if (!lyric_str.empty() && lyric_str.back() == L'\"')
35 		lyric_str.pop_back();
36 
37 	for (int i{}; i < static_cast<int>(lyric_str.size() - 1); i++)
38 	{
39 		//如果歌词中含有字符串“\r\n”或“\n\n”,则将其转换成为两个转义字符\r\n,删掉两个多余的字符
40 		if (i < static_cast<int>(lyric_str.size() - 3))
41 		{
42 			if ((lyric_str[i] == '\\' && lyric_str[i + 1] == 'r' && lyric_str[i + 2] == '\\' && lyric_str[i + 3] == 'n')
43 				|| (lyric_str[i] == '\\' && lyric_str[i + 1] == 'n' && lyric_str[i + 2] == '\\' && lyric_str[i + 3] == 'n'))
44 			{
45 				lyric_str[i] = '\r';
46 				lyric_str[i + 1] = '\n';
47 				lyric_str.erase(i + 2, 2);
48 			}
49 		}
50 		//如果歌词中含有字符串“\r”,则将其转换成为两个转义字符\r\n
51 		if (lyric_str[i] == '\\' && lyric_str[i + 1] == 'r')
52 		{
53 			lyric_str[i] = '\r';
54 			lyric_str[i + 1] = '\n';
55 		}
56 		//如果歌词中含有字符串“\n”,则将其转换成为两个转义字符\r\n
57 		if (lyric_str[i] == '\\' && lyric_str[i + 1] == 'n')	//将歌词文本中的“\n”转换成回车符\r\n
58 		{
59 			lyric_str[i] = '\r';
60 			lyric_str[i + 1] = '\n';
61 		}
62 		//如果歌词中含有字符串“\"”,则删除反斜杠“\”
63 		if (lyric_str[i] == '\\' && lyric_str[i + 1] == '\"')
64 		{
65 			lyric_str.erase(i, 1);
66 		}
67 	}
68 	return true;
69 }
70 
AddLyricTag(wstring & lyric_str,const wstring & song_id,const wstring & title,const wstring & artist,const wstring & album)71 void CLyricDownloadCommon::AddLyricTag(wstring& lyric_str, const wstring & song_id, const wstring & title, const wstring & artist, const wstring & album)
72 {
73 	wstring tag_info{};
74 	CString tmp;
75 	tmp.Format(_T("[id:%s]\r\n"), song_id.c_str());
76 	tag_info += tmp;
77 	if (lyric_str.find(L"[ti:") == wstring::npos || lyric_str.find(L"[ti:]") != wstring::npos)
78 	{
79 		tmp.Format(_T("[ti:%s]\r\n"), title.c_str());
80 		tag_info += tmp;
81 	}
82 	if (lyric_str.find(L"[ar:") == wstring::npos || lyric_str.find(L"[ar:]") != wstring::npos)
83 	{
84 		tmp.Format(_T("[ar:%s]\r\n"), artist.c_str());
85 		tag_info += tmp;
86 	}
87 	if (lyric_str.find(L"[al:") == wstring::npos || lyric_str.find(L"[al:]") != wstring::npos)
88 	{
89 		tmp.Format(_T("[al:%s]\r\n"), album.c_str());
90 		tag_info += tmp;
91 	}
92 	lyric_str = tag_info + lyric_str;
93 }
94 
95