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