Beispiel #1
0
        public IEnumerable <SongModel> InitPlaylistE()
        {
            //以下为测试代码
            for (int i = 0; i < 6; i++)
            {
                SongModel sm = SongModel.GetNew(1775616994);
                if (i == 0)
                {
                    sm.Name  = $"Foundations (Original Mix)";
                    sm.Album = AlbumModel.GetNew(2100274906);
                    //sm.MediaUri = new Uri(@"ms-appx:///Assets/Ring01.wma");
                    ExtensionMethods.InvokeAndWait(async() => sm.MediaUri = new Uri(await Net.DataApi.GetDownloadLink(sm, false)));
                    sm.Album.Art     = new Uri("http://img.xiami.net/images/album/img35/105735/21002749061455506376_2.jpg");
                    sm.Album.ArtFull = new Uri("http://img.xiami.net/images/album/img35/105735/21002749061455506376.jpg");
                }
                yield return(sm);

                sm = SongModel.GetNew(1771503325); if (i == 0)
                {
                    sm.Name  = $"Give My Regards";
                    sm.Album = AlbumModel.GetNew(504506);
                    //sm.MediaUri = new Uri(@"ms-appx:///Assets/Ring02.wma");
                    ExtensionMethods.InvokeAndWait(async() => sm.MediaUri = new Uri(await Net.DataApi.GetDownloadLink(sm, false)));
                    sm.Album.Art     = new Uri("http://img.xiami.net/images/album/img35/105735/5045061333262175_2.jpg");
                    sm.Album.ArtFull = new Uri("http://img.xiami.net/images/album/img35/105735/5045061333262175.jpg");
                }
                yield return(sm);
            }
        }
Beispiel #2
0
        public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            uint id = 0;

            if (!uint.TryParse(parameter.ToString(), out id))
            {
                NavigationService.Navigate(typeof(Views.LibraryPage));
            }
            Album = AlbumModel.GetNew(id);
            if (Album.Introduction == null)
            {
                await Net.WebApi.Instance.GetAlbumInfo(Album);
            }
        }
Beispiel #3
0
 internal IEnumerable <AlbumModel> ParseRelateAlbums(HtmlNode listnode)
 {
     foreach (var node in listnode.ChildNodes)
     {
         if (node.NodeType != HtmlNodeType.Element)
         {
             continue;
         }
         AlbumModel album = AlbumModel.GetNew(uint.Parse(node.GetAttributeValue("rel", "0")));
         album.Name   = node.SelectSingleNode("./div/a").InnerText;
         album.Rating = node.SelectSingleNode(".//em").InnerText;
         if (album.Art.Host == "")
         {
             var art = node.SelectSingleNode(".//img").GetAttributeValue("src", AlbumModel.SmallDefaultUri);
             album.Art     = new Uri(art);
             album.ArtFull = new Uri(art.Replace("_1", ""));
         }
         yield return(album);
     }
 }
Beispiel #4
0
 internal IEnumerable <AlbumModel> ParseArtistAlbums(HtmlNode listnode)
 {
     foreach (var item in listnode.ChildNodes)
     {
         if (item.NodeType != HtmlNodeType.Element)
         {
             continue;
         }
         var        id        = uint.Parse(item.GetAttributeValue("rel", "0"));
         AlbumModel album     = AlbumModel.GetNew(id);
         var        imagenode = item.SelectSingleNode(".//img");
         album.Name = imagenode.GetAttributeValue("alt", null);
         if (album.Art.Host == "")
         {
             var art = imagenode.GetAttributeValue("src", AlbumModel.SmallDefaultUri);
             album.Art     = new Uri(art);
             album.ArtFull = new Uri(art.Replace("_1", ""));
         }
         album.Rating = item.SelectSingleNode(".//em").InnerText;
         yield return(album);
     }
 }
Beispiel #5
0
        //TODO: 判断歌曲是否被喜爱
        /// <summary>
        /// 通过SongId获取歌曲的信息(不含取媒体地址)
        /// </summary>
        /// <param name="cover">是否覆盖已存在的Album和Artist信息</param>
        public IAsyncAction GetSongInfo(SongModel song, bool cover = false)
        {
            if (song.XiamiID == 0)
            {
                throw new ArgumentException("SongModel未设置ID");
            }
            return(Run(async token =>
            {
                try
                {
                    LogService.DebugWrite($"Get info of Song {song.XiamiID}", nameof(WapApi));

                    var gettask = HttpHelper.GetAsync($"http://www.xiami.com/app/xiating/song?id={song.XiamiID}");
                    token.Register(() => gettask.Cancel());
                    var content = await gettask;
                    HtmlDocument doc = new HtmlDocument();
                    doc.LoadHtml(content);
                    HtmlNode root = doc.DocumentNode;
                    var logo = root.SelectSingleNode("//img[1]");
                    var detail = root.SelectSingleNode("//ul[1]");
                    var detailgrade = root.SelectSingleNode("//div[1]/ul[1]");
                    if (song.Name == null)
                    {
                        song.Name = logo.GetAttributeValue("title", "UnKnown");
                    }
                    song.PlayCount = int.Parse(detailgrade.SelectSingleNode(".//span[1]").InnerText);
                    song.ShareCount = int.Parse(detailgrade.SelectSingleNode("./li[3]/span[1]").InnerText);

                    var additionnodes = detail.SelectNodes("./li[position()>2]");
                    foreach (var node in additionnodes)
                    {
                        switch (node.FirstChild.InnerText)
                        {
                        case "作词:":
                            song.Lyricist = node.LastChild.InnerText;
                            break;

                        case "作曲:":
                            song.Composer = node.LastChild.InnerText;
                            break;

                        case "编曲:":
                            song.Arranger = node.LastChild.InnerText;
                            break;
                        }
                    }

                    if ((song.Album == null) || cover)
                    {
                        var albumtag = detail.SelectSingleNode("./li[1]/a[1]");
                        var idtext = albumtag.GetAttributeValue("href", "/app/xiating/album?id=0");
                        var addrlength = "/app/xiating/album?id=".Length;
                        uint albumID = uint.Parse(idtext.Substring(addrlength, idtext.IndexOf("&", addrlength) - addrlength));
                        AlbumModel album = song.Album ?? AlbumModel.GetNew(albumID);
                        if (album.Art.Host == "")
                        {
                            var art = logo.GetAttributeValue("src", AlbumModel.SmallDefaultUri);
                            album.Art = new Uri(art.Replace("_2", "_1"));
                            album.ArtFull = new Uri(art.Replace("_2", ""));
                        }
                        album.Name = albumtag.InnerText;
                        song.Album = album;
                    }

                    if ((song.Album?.Artist == null) || cover)
                    {
                        var artisttag = detail.SelectSingleNode("./li[2]/a[1]");
                        var idtext = artisttag.GetAttributeValue("href", "/app/xiating/artist?id=0");
                        var addrlength = "/app/xiating/artist?id=".Length;
                        uint artistID = uint.Parse(idtext.Substring(addrlength, idtext.IndexOf("&", addrlength) - addrlength));
                        ArtistModel artist = song.Album?.Artist ?? ArtistModel.GetNew(artistID);
                        artist.Name = artisttag.InnerText;
                        song.Album.Artist = artist;
                    }

                    LogService.DebugWrite($"Finish Getting info of Song {song.Name}", nameof(WapApi));
                }
                catch (Exception e)
                {
                    LogService.ErrorWrite(e, nameof(WapApi));
                    throw e;
                }
            }));
        }