예제 #1
0
        public IResult <EdgeOwnerToTimelineMedia> GetAllUserMedias(string username, int limitPerPage = 12)
        {
            EdgeOwnerToTimelineMedia EdgeOwnerToTimelineMedia = new EdgeOwnerToTimelineMedia();

            EdgeOwnerToTimelineMedia.Edges = new List <EdgeOwnerToTimelineMediaEdges>();

            var _userAllTimelineMedias = GetAllUserMediasInit(username, limitPerPage);

            var ImageMedias   = _userAllTimelineMedias.Data.Edges.Where(c => c.Node.Typename == MediaType.Image).ToList();
            var SidecarMedias = _userAllTimelineMedias.Data.Edges.Where(c => c.Node.Typename == MediaType.Sidecar).ToList();
            var VideosMedias  = _userAllTimelineMedias.Data.Edges.Where(c => c.Node.Typename == MediaType.Video).ToList();

            foreach (var image in ImageMedias)
            {
                EdgeOwnerToTimelineMedia.Edges.Add(new EdgeOwnerToTimelineMediaEdges()
                {
                    Node = image.Node
                });
            }

            foreach (var sidecar in SidecarMedias)
            {
                var shortcode = sidecar.Node.Shortcode;

                var sidecarShortcodeData = GetShortcodeMedia(shortcode);

                EdgeOwnerToTimelineMedia.Edges.Add(new EdgeOwnerToTimelineMediaEdges()
                {
                    Node = sidecarShortcodeData.Data
                });
            }

            foreach (var video in VideosMedias)
            {
                var shortcode = video.Node.Shortcode;

                var videoShortcodeData = GetShortcodeMedia(shortcode);

                EdgeOwnerToTimelineMedia.Edges.Add(new EdgeOwnerToTimelineMediaEdges()
                {
                    Node = videoShortcodeData.Data
                });
            }

            return(Result.Success(EdgeOwnerToTimelineMedia));
        }
예제 #2
0
        private IResult <EdgeOwnerToTimelineMedia> GetAllUserMediasInit(string username, int limitPerPage)
        {
            try
            {
                EdgeOwnerToTimelineMedia _EdgeOwnerToTimelineMedia = new EdgeOwnerToTimelineMedia();
                _EdgeOwnerToTimelineMedia.Edges = new List <EdgeOwnerToTimelineMediaEdges>();

                var user = GetUser(username).Data;
                _EdgeOwnerToTimelineMedia.Edges = user.EdgeOwnerToTimelineMedia.Edges;

                var userId    = user.Id;
                var endCursor = user.EdgeOwnerToTimelineMedia.PageInfo.EndCursor;

                var uri = string.Format(InstagramCustomApiConstants.USER_TIMELINE_URL, userId, limitPerPage, endCursor);

                var variables = string.Format("{0}:{{\"id\":\"{1}\",\"first\":{2},\"after\":\"{3}\"}}", _user.UserRhxGis, userId, limitPerPage, endCursor);
                var signature = ApplicationHelper.CreateMD5(variables);

                var request = HttpHelper.GetDefaultRequest(uri);
                request.Headers["X-Instagram-GIS"] = signature;
                request.Headers["Cookie"]          = _user.UserCookie;

                var response = HttpHelper.GetDefaultResponse(request);
                var json     = response.ReadAsString();

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <EdgeOwnerToTimelineMedia>(response, json));
                }

                var    objRetorno      = JsonConvert.DeserializeObject <UserMedias>(json);
                var    medias          = objRetorno.Data.User.EdgeOwnerToTimelineMedia;
                string endCursorMedias = objRetorno.Data.User.EdgeOwnerToTimelineMedia.PageInfo.EndCursor;

                if (medias.PageInfo.HasNextPage)
                {
                    bool has_next_page = true;

                    do
                    {
                        var uriMedias = string.Format(InstagramCustomApiConstants.USER_TIMELINE_URL, userId, limitPerPage, endCursorMedias);

                        var variablesMedias = string.Format("{0}:{{\"id\":\"{1}\",\"first\":{2},\"after\":\"{3}\"}}", _user.UserRhxGis, userId, limitPerPage, endCursorMedias);
                        var signatureMedias = ApplicationHelper.CreateMD5(variablesMedias);

                        var requestMedias = HttpHelper.GetDefaultRequest(uriMedias);
                        requestMedias.Headers["X-Instagram-GIS"] = signatureMedias;
                        requestMedias.Headers["Cookie"]          = _user.UserCookie;

                        var responseMedias = HttpHelper.GetDefaultResponse(requestMedias);
                        var jsonMedias     = responseMedias.ReadAsString();

                        if (responseMedias.StatusCode != HttpStatusCode.OK)
                        {
                            return(Result.UnExpectedResponse <EdgeOwnerToTimelineMedia>(responseMedias, jsonMedias));
                        }

                        var objRetornoMedias = JsonConvert.DeserializeObject <UserMedias>(jsonMedias);

                        objRetornoMedias.Data.User.EdgeOwnerToTimelineMedia.Edges.ForEach(c => medias.Edges.Add(c));

                        has_next_page = objRetornoMedias.Data.User.EdgeOwnerToTimelineMedia.PageInfo.HasNextPage;

                        endCursorMedias = objRetornoMedias.Data.User.EdgeOwnerToTimelineMedia.PageInfo.EndCursor;
                    } while (has_next_page);
                }

                medias.Edges.ForEach(c => _EdgeOwnerToTimelineMedia.Edges.Add(c));

                return(Result.Success(_EdgeOwnerToTimelineMedia));
            }
            catch (Exception ex)
            {
                return(Result.Fail <EdgeOwnerToTimelineMedia>(ex.Message));
            }
        }