├── MainFunction.cs └── README.md /MainFunction.cs: -------------------------------------------------------------------------------- 1 | static string _APP_SECRET = "MM_d*yP@`&1@]@!AVrXf_o-HVEnoTnm$O-ti4[G~$JDI/Dc-&piU&z&5.;:}95=Iad"; 2 | 3 | private string GetM3u8Url(string mpdUrl) 4 | { 5 | string str = mpdUrl; 6 | string m3u8 = str.Replace("manifest.mpd", "manifest.m3u8"); 7 | string prefix = "https://"; 8 | string[] arr = m3u8.Replace(prefix, "").Split('/'); 9 | arr[5] = "m3u8"; 10 | arr[9] = "m3u8hd"; 11 | m3u8 = prefix + string.Join("/", arr); 12 | m3u8 = Regex.Replace(m3u8, @"tag=\w+:\w+:(?\w+):.*cached", "tag=m3u8hd:normal:${str}:sourceVIKI:m3u8:cached"); 13 | return m3u8; 14 | } 15 | 16 | private string GetToken(string userName, string password) 17 | { 18 | string api = $"https://api.viki.io"; 19 | string p1 = "/v4/sessions.json?app=100005a&t=1569053071&site=www.viki.com"; 20 | api = api + p1 + "&sig=" + HmacSha1Sign(p1, _APP_SECRET); 21 | string data = "{\"password\": \"" + password + "\", \"login_id\": \"" + userName + "\"}"; 22 | string json = Post(api, data); 23 | string token = JObject.Parse(json)["token"].ToString(); 24 | return token; 25 | } 26 | 27 | private Dictionary GetSubtitles(string vid, string text) 28 | { 29 | Dictionary dic = new Dictionary(); 30 | string api = $"https://www.viki.com/player5_fragment/{text}.{vid}?id={text}&il=zh&autofocus=false"; 31 | string webSource = GetWebSource(api); 32 | Regex reg = new Regex(@"var parsedSubtitles = ([\s\S]*);\s*var parsedStreamSubtitles"); 33 | JArray subs = JArray.Parse(reg.Match(webSource).Groups[1].Value.Trim()); 34 | foreach (JObject item in subs) 35 | { 36 | dic.Add(Regex.Replace(text.Replace(vid + "-", "") + "_" + item["label"].ToString(), @"\W(?.*)", "${str}"), item["src"].ToString()); 37 | } 38 | return dic; 39 | } 40 | 41 | private string GetMpdUrl(string vid, string token = "") 42 | { 43 | string api = $"https://api.viki.io"; 44 | string p1 = $"/v4/videos/{vid}/streams.json?app=100005a&t={GetTimeStamp(true)}&site=www.viki.com" + (token == "" ? "" : $"&token={token}"); 45 | api = api + p1 + "&sig=" + HmacSha1Sign(p1, _APP_SECRET); 46 | string webSorce = GetWebSource(api); 47 | //MessageBox.Show(webSorce); 48 | 49 | return JObject.Parse(webSorce)["mpd"]["http"]["url"].ToString(); 50 | } 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VikiParser 2 | www.viki.com 解析工具 3 | 4 | ![PIC](https://nilaoda.github.io/N_m3u8DL-CLI/source/images/viki1.png) 5 | --------------------------------------------------------------------------------