Exemplo n.º 1
0
        protected TResponse _Update <TRequest, TResponse>(WebApiType type, TRequest request)
        {
            _Init(type);
            var resp = _HttpHandler.PutJson <TRequest, TResponse>(request);

            return(resp);
        }
Exemplo n.º 2
0
        private List <Post> ParsePosts(WebApiType type, HtmlDocument doc)
        {
            var posts = new List <Post>();

            switch (type)
            {
            case WebApiType.Replies:
                var replyListNode = doc.DocumentNode.Descendants("ul")
                                    .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("list reply-list"));
                var replyNodes = replyListNode?.ChildNodes.Where(n => n.HasClassName("post") && !n.HasClassName("none"));
                posts = replyNodes == null ? new List <Post>() : replyNodes.Select(ParsePost).ToList();
                break;

            case WebApiType.Diary:
            case WebApiType.Drawing:
            case WebApiType.InGame:
            case WebApiType.OldGame:
                var postListNode = doc.DocumentNode.Descendants("div")
                                   .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("list post-list"));

                var postNodes = postListNode?.ChildNodes.Where(n => n.HasClassName("post") && !n.HasClassName("none"));
                posts = postNodes == null ? new List <Post>() : postNodes.Select(ParsePost).ToList();
                break;

            case WebApiType.Discussion:
                var postListNodeDiscuess = doc.DocumentNode.Descendants("div")
                                           .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("list multi-timeline-post-list"));

                var postNodes2 = postListNodeDiscuess?.ChildNodes.Where(n => n.HasClassName("post") && !n.HasClassName("none"));
                posts = postNodes2 == null ? new List <Post>() : postNodes2.Select(ParsePost).ToList();
                break;
            }

            return(posts);
        }
Exemplo n.º 3
0
        protected TResponse _GetAll <TResponse>(WebApiType type)
        {
            _Init(type);
            var resp = _HttpHandler.GetJson <TResponse>(string.Empty);

            return(resp);
        }
Exemplo n.º 4
0
        public async Task <WebApiResponse> GetPostResponse(string postId, WebApiType type, double lastPostTime = 0, double currentDate = 0)
        {
            AccessCheck();

            var baseUrl = $"https://miiverse.nintendo.net/posts/{postId}";

            if (currentDate == 0)
            {
                currentDate = ReturnEpochTime(DateTime.Now);
            }

            switch (type)
            {
            case WebApiType.Replies:
                baseUrl += "/replies";
                break;
            }

            if (lastPostTime != 0)
            {
                baseUrl += $"?page_param=%7B%22upinfo%22%3A%22{lastPostTime * -1 }%2C{(int)currentDate}%2C{currentDate}%22%2C%22reftime%22%3A%22{lastPostTime}%22%2C%22per_page%22%3A120%2C%22order%22%3A%22asc%22%7D&selected=all";
            }
            else
            {
                baseUrl += $"?page_param=%7B%22per_page%22%3A120%2C%22order%22%3A%22asc%22%7D&selected=all";
            }

            var req = new HttpRequestMessage(HttpMethod.Get, baseUrl);

            req.Headers.Add("X-Requested-With", "XMLHttpRequest");

            using (var result = await Client.SendAsync(req))
                using (var content = await result.Content.ReadAsStreamAsync())
                {
                    var doc = new HtmlDocument();
                    doc.Load(content, System.Text.Encoding.UTF8);

                    var posts = new List <Post>();

                    switch (type)
                    {
                    case WebApiType.Replies:
                        posts = ParsePosts(type, doc);
                        break;

                    case WebApiType.Posts:
                        posts.Add(ParsePost(doc.GetElementbyId("main-body").GetElementByClassName("post-list").ChildNodes.FirstOrDefault(n => n.HasClassName("post") && !n.HasClassName("none"))));
                        posts.Select(n => n.InReplyToId = postId);
                        break;
                    }
                    double postTime = 0;
                    if (posts.Any())
                    {
                        postTime = -(ReturnEpochTime(posts.Last().PostedDate));
                    }

                    return(new WebApiResponse(currentDate, postTime, posts));
                }
        }
Exemplo n.º 5
0
        protected TResponse _Delete <TResponse>(WebApiType type, int id)
        {
            _Init(type);
            var query = $"/{id}";
            var resp  = _HttpHandler.DeleteJson <TResponse>(query);

            return(resp);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Create the CallingMethod.
 /// </summary>
 /// <param name="name">The name of the method.</param>
 /// <param name="webApiType">The WebApi Type of the method.</param>
 /// <param name="parameters">The parameters information of the method.</param>
 /// <param name="thisObject">The object which contains the WebApi Method.</param>
 /// <param name="method">The method to call the WebApi.</param>
 public CallingMethod(string name, WebApiType webApiType, IEnumerable <CallingParameter> parameters, object thisObject, IWebApiMethod method)
 {
     Name        = name;
     WebApiType  = webApiType;
     Parameters  = parameters.ToList();
     _thisObject = thisObject;
     _method     = method;
 }
        public async Task <WebApiResponse> GetPostResponse(string postId, WebApiType type, string nextPageUrl)
        {
            AccessCheck();

            var baseUrl = $"https://miiverse.nintendo.net/posts/{postId}";

            switch (type)
            {
            case WebApiType.Replies:
                baseUrl += "/replies";
                break;
            }

            if (nextPageUrl != "")
            {
                baseUrl += nextPageUrl;
            }

            var req = new HttpRequestMessage(HttpMethod.Get, baseUrl);

            req.Headers.Add("X-Requested-With", "XMLHttpRequest");

            using (var result = await Client.SendAsync(req))
                using (var content = await result.Content.ReadAsStreamAsync())
                {
                    var doc = new HtmlDocument();
                    doc.Load(content, System.Text.Encoding.UTF8);

                    var posts = new List <Post>();

                    switch (type)
                    {
                    case WebApiType.Replies:
                        posts = ParsePosts(type, doc);
                        break;

                    case WebApiType.Posts:
                        posts.Add(ParsePost(doc.GetElementbyId("main-body").GetElementByClassName("post-list").ChildNodes.FirstOrDefault(n => n.HasClassName("post") && !n.HasClassName("none"))));
                        posts.Select(n => n.InReplyToId = postId);
                        break;
                    }
                    double postTime = 0;
                    if (posts.Any())
                    {
                        postTime = -(ReturnEpochTime(posts.Last().PostedDate));
                    }

                    var    nextPageUrlNode = doc.DocumentNode.Descendants("div").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("post-list"));
                    string nextNextPageUrl = nextPageUrlNode != null?nextPageUrlNode.GetAttributeValue("data-next-page-url", string.Empty) : "";

                    return(new WebApiResponse(nextNextPageUrl, posts));
                }
        }
Exemplo n.º 8
0
        protected void _Init(WebApiType type)
        {
            switch (type)
            {
            case WebApiType.City:
                _InitCityHttpUrl();
                break;

            case WebApiType.Airport:
                _InitAirportHttpUrl();
                break;

            case WebApiType.Plane:
                _InitPlaneHttpUrl();
                break;

            case WebApiType.Tutor:
                _InitTutorHttpUrl();
                break;

            default:
                break;
            }
        }
Exemplo n.º 9
0
        public async Task <WebApiResponse> GetWebApiResponse(Game game, WebApiType type, double lastPostTime = 0, double currentDate = 0)
        {
            AccessCheck();

            var baseUrl = "https://miiverse.nintendo.net";

            if (currentDate == 0)
            {
                currentDate = ReturnEpochTime(DateTime.Now);
            }

            switch (type)
            {
            case WebApiType.Diary:
                baseUrl += game.TitleUrl + "/diary";
                break;

            case WebApiType.Drawing:
                baseUrl += game.TitleUrl + "/artwork";
                break;

            case WebApiType.Discussion:
                baseUrl += game.TitleUrl + "/topic";
                break;

            case WebApiType.InGame:
                baseUrl += game.TitleUrl + "/in_game";
                break;

            case WebApiType.OldGame:
                baseUrl += game.TitleUrl + "/old";
                break;

            case WebApiType.Replies:
                baseUrl += game.TitleUrl.Replace("title", "posts") + "/replies";
                break;

            case WebApiType.Posts:
                baseUrl += game.TitleUrl.Replace("title", "posts");
                break;
            }

            if (lastPostTime != 0 && (type != WebApiType.Replies || type != WebApiType.Posts))
            {
                // I know it's JSON encoded and it would be better to just decode/encode it.
                // But the service it going away so screw it.
                baseUrl += $"?page_param=%7B%22upinfo%22%3A%22{lastPostTime * -1 }%2C{(int)currentDate}%2C{currentDate}%22%2C%22reftime%22%3A%22{lastPostTime}%22%2C%22order%22%3A%22desc%22%2C%22per_page%22%3A%2250%22%7D ";
            }
            else if (lastPostTime != 0)
            {
                baseUrl += $"?page_param=%7B%22upinfo%22%3A%22{lastPostTime * -1 }%2C{(int)currentDate}%2C{currentDate}%22%2C%22reftime%22%3A%22{lastPostTime}%22%2C%22per_page%22%3A120%2C%22order%22%3A%22asc%22%7D&selected=all";
            }

            var req = new HttpRequestMessage(HttpMethod.Get, baseUrl);

            req.Headers.Add("X-Requested-With", "XMLHttpRequest");
            using (var result = await Client.SendAsync(req))
                using (var content = await result.Content.ReadAsStreamAsync())
                {
                    var doc = new HtmlDocument();
                    doc.Load(content, System.Text.Encoding.UTF8);

                    var    posts    = ParsePosts(type, doc);
                    double postTime = 0;
                    if (posts.Any())
                    {
                        postTime = -(ReturnEpochTime(posts.Last().PostedDate));
                    }

                    return(new WebApiResponse(currentDate, postTime, posts));
                }
        }
        public async Task <WebApiResponse> GetWebApiResponse(Game game, WebApiType type, string nextPageUrl)
        {
            AccessCheck();

            var baseUrl = "https://miiverse.nintendo.net";

            if (nextPageUrl != "")
            {
                baseUrl += nextPageUrl;
            }
            else
            {
                switch (type)
                {
                case WebApiType.Diary:
                    baseUrl += game.TitleUrl + "/diary";
                    break;

                case WebApiType.Drawing:
                    baseUrl += game.TitleUrl + "/artwork";
                    break;

                case WebApiType.Discussion:
                    baseUrl += game.TitleUrl + "/topic";
                    break;

                case WebApiType.InGame:
                    baseUrl += game.TitleUrl + "/in_game";
                    break;

                case WebApiType.OldGame:
                    baseUrl += game.TitleUrl + "/old";
                    break;

                case WebApiType.Replies:
                    baseUrl += game.TitleUrl.Replace("title", "posts") + "/replies";
                    break;

                case WebApiType.Posts:
                    baseUrl += game.TitleUrl.Replace("title", "posts");
                    break;

                case WebApiType.Special:
                    baseUrl += game.TitleUrl;
                    break;
                }
            }

            var req = new HttpRequestMessage(HttpMethod.Get, baseUrl);

            req.Headers.Add("X-Requested-With", "XMLHttpRequest");
            using (var result = await Client.SendAsync(req))
                using (var content = await result.Content.ReadAsStreamAsync())
                {
                    var doc = new HtmlDocument();
                    doc.Load(content, System.Text.Encoding.UTF8);

                    var    posts    = ParsePosts(type, doc);
                    double postTime = 0;
                    if (posts.Any())
                    {
                        postTime = -(ReturnEpochTime(posts.Last().PostedDate));
                    }

                    HtmlNode nextPageUrlNode;

                    switch (type)
                    {
                    case WebApiType.Diary:
                    case WebApiType.Drawing:
                    case WebApiType.InGame:
                    case WebApiType.OldGame:
                    case WebApiType.Special:
                        nextPageUrlNode = doc.DocumentNode.Descendants("div").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("list post-list"));
                        break;

                    case WebApiType.Discussion:
                        nextPageUrlNode = doc.DocumentNode.Descendants("div").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("list multi-timeline-post-list"));
                        break;

                    default:
                        nextPageUrlNode = null;
                        break;
                    }
                    string nextNextPageUrl = nextPageUrlNode != null?HttpUtility.UrlDecode(nextPageUrlNode.GetAttributeValue("data-next-page-url", string.Empty)).Replace("&amp;", "&") : "";

                    return(new WebApiResponse(nextNextPageUrl, posts));
                }
        }