示例#1
0
        public async Task <bool> AddAsync(CrawledPostDto model)
        {
            _sqlConnection.Open();
            var transaction = await _sqlConnection.BeginTransactionAsync();

            try
            {
                var post = new Post();
                post.UpdateWith(model);
                post.InsertDateMi = DateTime.Now;
                post.InsertDateSh = PersianDateTime.Now.ToString(PersianDateTimeFormat.Date);

                var postId = _sqlConnection.ExecuteSpCommand <int>("[Instagram].[InsertPost]",
                                                                   new { Post = post.ToTableValuedParameter("[dbo].[Tvp_Post]") }, transaction).FirstOrDefault();
                if (postId <= 0)
                {
                    return(false);
                }

                if (!model.IsAlbum)
                {
                    var postAsset = new PostAsset();
                    postAsset.UpdateWith(model);
                    postAsset.PostId       = postId;
                    postAsset.InsertDateMi = DateTime.Now;
                    postAsset.InsertDateSh = PersianDateTime.Now.ToString(PersianDateTimeFormat.Date);

                    await _sqlConnection.ExecuteSpCommandAsync <int>("[Instagram].[InsertPostAsset]",
                                                                     new { PostAsset = postAsset.ToTableValuedParameter("[dbo].[Tvp_PostAsset]") }, transaction);
                }
                else
                {
                    var postAssetList = new List <PostAsset>();
                    foreach (var item in model.Items)
                    {
                        var postAsset = new PostAsset();
                        postAsset.UpdateWith(item);
                        postAsset.PostId       = postId;
                        postAsset.InsertDateMi = DateTime.Now;
                        postAsset.InsertDateSh = PersianDateTime.Now.ToString(PersianDateTimeFormat.Date);

                        postAssetList.Add(postAsset);
                    }

                    await _sqlConnection.ExecuteSpCommandAsync <int>("[Instagram].[InsertPostAsset]",
                                                                     new { PostAsset = postAssetList.ToTableValuedParameter("[dbo].[Tvp_PostAsset]") }, transaction);
                }

                transaction.Commit();
                _sqlConnection.Close();
                return(true);
            }
            catch (Exception e)
            {
                FileLoger.Error(e);
                transaction.Rollback();
                _sqlConnection.Close();

                if (e.Message.Contains("unique index"))
                {
                    return(true);
                }
                return(false);
            }
        }
示例#2
0
        private CrawledPostDto ConvertToCrawledPostDto(edges post)
        {
            var newPost = new CrawledPostDto();

            switch (post.node.__typename)
            {
            case "GraphImage":
            {
                newPost.Type         = FileType.Image;
                newPost.FileUrl      = post.node.display_url;
                newPost.ThumbnailUrl = post.node.thumbnail_src;
                newPost.Dimension    = post.node.dimensions.width + "*" + post.node.dimensions.height;

                break;
            }

            case "GraphVideo":
            {
                newPost.Type         = FileType.Video;
                newPost.FileUrl      = post.node.video_url;
                newPost.ThumbnailUrl = post.node.thumbnail_src;
                newPost.ViewCount    = post.node.video_view_count;
                newPost.Dimension    = post.node.dimensions.width + "*" + post.node.dimensions.height;

                break;
            }

            case "GraphSidecar":
            {
                newPost.IsAlbum = true;
                newPost.Type    = FileType.Unknown;
                newPost.Items   = new List <CrawledPostDto>();

                foreach (var item in post.node.edge_sidecar_to_children.edges)
                {
                    #region Set PostItem Property
                    var newPostItem = new CrawledPostDto();
                    switch (item.node.__typename)
                    {
                    case "GraphImage":
                    {
                        newPostItem.Type         = FileType.Image;
                        newPostItem.FileUrl      = item.node.display_url;
                        newPostItem.ThumbnailUrl = item.node.thumbnail_src;
                        newPostItem.Dimension    = item.node.dimensions.width + "*" + item.node.dimensions.height;

                        break;
                    }

                    case "GraphVideo":
                    {
                        newPostItem.Type         = FileType.Video;
                        newPostItem.FileUrl      = item.node.video_url;
                        newPostItem.ThumbnailUrl = item.node.display_url;
                        newPostItem.ViewCount    = item.node.video_view_count;
                        newPostItem.Dimension    = item.node.dimensions.width + "*" + item.node.dimensions.height;

                        break;
                    }
                    }
                    newPostItem.UniqueId = item.node.id;
                    newPost.Items.Add(newPostItem);
                    #endregion
                }

                break;
            }
            }

            newPost.UniqueId     = post.node.id;
            newPost.LikeCount    = post.node.edge_Media_Preview_Like.count;
            newPost.CommentCount = post.node.edge_Media_To_Comment.count;
            newPost.CreateDateMi = Parser.ToDateTime(double.Parse(post.node.taken_at_timestamp));
            newPost.Description  = post.node.edge_Media_To_Caption.edges.Count == 0 ? string.Empty : post.node.edge_Media_To_Caption.edges[0].node.text;

            return(newPost);
        }