Пример #1
0
        public static IEnumerable <WPTerm> GetPostTags(
            this XElement @this)
        {
            var categoryNodes = @this.Elements(
                XName.Get("category"));

            foreach (var categoryNode in categoryNodes)
            {
                var domainAttribute = categoryNode.Attribute(XName.Get("domain"));
                if (domainAttribute == null)
                {
                    throw new XmlException(
                              $"This \"category\" node has no \"domain\" attribute.");
                }

                if (domainAttribute.Value != "post_tag")
                {
                    continue;
                }

                var nicenameAttribute = categoryNode.Attribute(XName.Get("nicename"));
                var tagName           = categoryNode.Value;
                var cultureWarsTag    = WPTerm.FromNameOrNull(tagName);

                if (cultureWarsTag == null)
                {
                    if (nicenameAttribute == null)
                    {
                        throw new XmlException(
                                  $"This \"category\" node has no \"nicename\" attribute.");
                    }

                    cultureWarsTag = new WPTerm(
                        -1,                         // TODO fix
                        tagName,
                        nicenameAttribute.Value,
                        tagName);
                }

                yield return(cultureWarsTag);
            }
        }
        public static IEnumerable <WPPostItem> GetWPPosts()
        {
            Console.WriteLine($"Generating WordPress Posts...");
            Console.WriteLine();

            var archiveApi   = new InternetArchiveAPI();
            var queryBuilder = InternetArchiveQueryBuilder
                               .Builder
                               .WithUploader("Dr. E. Michael Jones")
                               .WithSort(
                IAQueryFields.Title,
                IASortDirection.Ascending)
                               .WithFields(
                IAQueryFields.Creator,
                IAQueryFields.Date,
                IAQueryFields.Description,
                IAQueryFields.Identifier,
                IAQueryFields.MediaType,
                IAQueryFields.Title)
                               .WithRows(5000)
                               .WithOutputKind(APIDataOutputKind.JSON)
                               .WithCallback("callback")
                               .WithShouldSave(true);

            //var addedTags = new List<WPTerm>();
            //addedTags.AddRange(WPTerm.AllTags);

            //foreach (var cwTag in WPTerm.AllTags)
            //{
            //	var wpTerm = new Term(
            //		(ulong)cwTag.CultureWarsTagID,
            //		cwTag.TagFriendlyName,
            //		cwTag.HtmlEncodedTagName);

            //	Console.WriteLine($"  <term ID=\"{cwTag.CultureWarsTagID}\" Name={cwTag.TagName.Quote()} FriendlyName={cwTag.TagFriendlyName.Quote()} HtmlEncoded={cwTag.HtmlEncodedTagName.Quote()}\\>");

            //	//	context.Terms.Add(wpTerm);
            //}

            //var index = 87ul;
            var thumbnailIndex = 1;

            foreach (var archiveItem in archiveApi.Query(queryBuilder))
            {
                foreach (var file in archiveItem.GetItemFiles())
                {
                    if (!file.FileName.EndsWith(".mp4"))
                    {
                        continue;
                    }

                    var uploadIndex = archiveItem.Identifier.Replace("emj-archive-", "");

                    var decodedFileName = file.FileName.UrlDecode();

                    var localJsonFilePath = JsonMetadataFileAssociator
                                            .GetAssociatedJsonFile(uploadIndex, file.FileName, out var matchedDistance);

                    var jsonResultMetadata = JsonYouTubeMetadataParser
                                             .ParseJsonYouTubeMetadata(localJsonFilePath);

                    var flattenedMetadata        = new YouTubeVideoFlattenedMetadata(jsonResultMetadata);
                    var encodedFileNameCharArray = file
                                                   .Title
                                                   .ToLower()
                                                   .Replace(" ", "-")
                                                   .Where(t => t.IsLetterOrDigit() || t == '-')
                                                   .ToArray();

                    var videoThumbnail =
                        AlternativeThumbnailAssociator.GetPrimaryAssociatedThumbnailFileUrl(file);

                    var thumbnailUrl = videoThumbnail;

                    var encodedFileName = new string(encodedFileNameCharArray);

                    var linkPath = $@"/videos/{encodedFileName}";

                    var terms = new List <WPTerm>();

                    if (flattenedMetadata.TagList != null)
                    {
                        foreach (var tag in flattenedMetadata.TagList)
                        {
                            var titleCase = tag.ToTitleCase();
                            var term      = WPTerm.FromFriendlyNameOrNull(titleCase);

                            if (term != null)
                            {
                                terms.Add(term);
                            }
                            else
                            {
                            }
                        }
                    }

                    var postItem = WPPostItem
                                   .Builder
                                   .WithPostID(thumbnailIndex)
                                   .WithPostName(encodedFileName)
                                   .WithPostTitle(flattenedMetadata.Title)
                                   .WithPostLink(linkPath)
                                   .WithPostStatus(WPStatus.Publish)
                                   .WithAuthor(WPAuthor.EMichaelJones)
                                   .WithPublicationDate(flattenedMetadata.VideoPublishedDate)
                                   .WithPostDate(flattenedMetadata.VideoPublishedDate)
                                   .WithPostDateGmt(flattenedMetadata.VideoPublishedDate)
                                   .WithCategories(
                        WPCategory.CensoredVideos)
                                   .WithTerms(terms.ToArray())
                                   .WithPostComments(new List <WPPostComment>())
                                   .WithPostContent(
                        $@"<iframe src=""https://archive.org/download/{archiveItem.Identifier}/{file.FileName}"" width=""640"" height=""480"" frameborder=""0"" webkitallowfullscreen=""true"" mozallowfullscreen=""true"" allowfullscreen=""""></iframe>")
                                   .WithPostExcerpt(flattenedMetadata.Description)
                                   .WithPostThumbnailId(thumbnailIndex + 1)
                                   .Build();

                    var thumbnailItem = WPAttachmentItem
                                        .Builder
                                        .WithPostID(thumbnailIndex + 1)
                                        .WithPostName($"")
                                        .WithPostLink($"")
                                        .WithPostTitle($"")
                                        .WithAttachmentUrl($"{videoThumbnail}")
                                        .WithStatus("inherit")
                                        .WithAuthor(WPAuthor.EMichaelJones)
                                        .WithPublicationDate(flattenedMetadata.VideoPublishedDate)
                                        .WithPostDate(flattenedMetadata.VideoPublishedDate)
                                        .WithPostDateGmt(flattenedMetadata.VideoPublishedDate)
                                        .WithPostContent($"")
                                        .WithPostExcerpt($"")
                                        .Build();

                    yield return(postItem);

                    thumbnailIndex += 2;



                    //if (flattenedMetadata.TagList != null)
                    //{
                    //	foreach (var tagText in flattenedMetadata.TagList)
                    //	{
                    //		var titleCase = tagText.ToTitleCase();
                    //		var existing = addedTags.Any(t => t.TagFriendlyName == titleCase);
                    //		if (!existing)
                    //		{
                    //			var cwTag = new WPTerm((int)index, titleCase);

                    //			var wpTerm = new Term(
                    //				index,
                    //				cwTag.TagFriendlyName,
                    //				cwTag.HtmlEncodedTagName);

                    //			context.Terms.Add(wpTerm);

                    //			Console.WriteLine($"  <term ID=\"{cwTag.CultureWarsTagID}\" Name={cwTag.TagName.Quote()} FriendlyName={cwTag.TagFriendlyName.Quote()} HtmlEncoded={cwTag.HtmlEncodedTagName.Quote()}\\>");
                    //			index++;
                    //		}
                    //	}
                    //}
                }


                Console.WriteLine($"Generation complete.");
                //	context.SaveChanges();
                Console.WriteLine($"saved to sql");
            }
        }
Пример #3
0
        public static void GenerateCSTagDeclarationsFromXml()
        {
            var addedTags = new List <WPTerm>();

            addedTags.AddRange(WPTerm.AllTags);

            var archiveApi = new InternetArchiveAPI();

            var queryBuilder = InternetArchiveQueryBuilder
                               .Builder
                               .WithUploader("Dr. E. Michael Jones")
                               .WithSort(
                IAQueryFields.Title,
                IASortDirection.Ascending)
                               .WithFields(
                IAQueryFields.Creator,
                IAQueryFields.Date,
                IAQueryFields.Description,
                IAQueryFields.Identifier,
                IAQueryFields.MediaType,
                IAQueryFields.Title)
                               .WithRows(5000)
                               .WithOutputKind(APIDataOutputKind.JSON)
                               .WithCallback("callback")
                               .WithShouldSave(true);

            var index = addedTags.Count;

            foreach (var archiveItem in archiveApi.Query(queryBuilder))
            {
                foreach (var file in archiveItem.GetItemFiles())
                {
                    if (!file.FileName.EndsWith(".mp4"))
                    {
                        continue;
                    }

                    var uploadIndex = archiveItem.Identifier.Replace("emj-archive-", "");

                    var decodedFileName = file.FileName.UrlDecode();

                    var localJsonFilePath = JsonMetadataFileAssociator
                                            .GetAssociatedJsonFile(uploadIndex, file.FileName, out var matchedDistance);

                    var jsonResultMetadata = JsonYouTubeMetadataParser
                                             .ParseJsonYouTubeMetadata(localJsonFilePath);

                    var flattenedMetadata = new YouTubeVideoFlattenedMetadata(jsonResultMetadata);

                    if (flattenedMetadata.TagList != null)
                    {
                        foreach (var tagText in flattenedMetadata.TagList)
                        {
                            var wpTerm = new WPTerm(index, tagText);

                            var existing         = addedTags.Any(t => t.TagFriendlyName == wpTerm.TagFriendlyName);
                            var existingCsharpID = addedTags.Any(t => t.TagName == wpTerm.TagName);

                            if (!existing && !existingCsharpID)
                            {
                                addedTags.Add(wpTerm);
                                Console.WriteLine($"public static readonly WPTerm {wpTerm.TagName} = new WPTerm({wpTerm.WPTermID}, {wpTerm.TagName.Quote()}, {wpTerm.TagFriendlyName.Quote()}, {wpTerm.HtmlEncodedTagName.Quote()};");
                                Console.WriteLine();
                                //								Console.WriteLine($"  <term ID=\"{wpTag.CultureWarsTagID}\" Name={wpTag.TagName.Quote()} FriendlyName={wpTag.TagFriendlyName.Quote()} HtmlEncoded={wpTag.HtmlEncodedTagName.Quote()}\\>");
                                index++;
                            }
                            else
                            {
                                Console.WriteLine($"//public static readonly WPTerm {wpTerm.TagName} = new WPTerm(-1, {wpTerm.TagName.Quote()}, {wpTerm.TagFriendlyName.Quote()}, {wpTerm.HtmlEncodedTagName.Quote()};");
                                Console.WriteLine();
                            }
                        }
                    }
                }
            }
        }