VeeFriends.WikiImporter
5.0.208
dotnet add package VeeFriends.WikiImporter --version 5.0.208
NuGet\Install-Package VeeFriends.WikiImporter -Version 5.0.208
<PackageReference Include="VeeFriends.WikiImporter" Version="5.0.208" />
<PackageVersion Include="VeeFriends.WikiImporter" Version="5.0.208" />
<PackageReference Include="VeeFriends.WikiImporter" />
paket add VeeFriends.WikiImporter --version 5.0.208
#r "nuget: VeeFriends.WikiImporter, 5.0.208"
#:package VeeFriends.WikiImporter@5.0.208
#addin nuget:?package=VeeFriends.WikiImporter&version=5.0.208
#tool nuget:?package=VeeFriends.WikiImporter&version=5.0.208
VeeFriends.WikiImporter 📘🌍
VeeFriends.WikiImporter is a .NET library designed to automate the import and transformation of character data from ClickUp into a structured format, incorporating AI-driven enhancements and media assets. The library integrates with multiple services, including Google Drive, Cloudinary, and ChatGPT, to enrich character data with link previews, images, and more.
Features
- Automated import of character data from ClickUp
- AI-driven content processing via ChatGPT
- Integration with Google Drive for media assets
- Cloudinary support for optimized image storage
- Link preview generation for social and media content
- Caching and error handling for efficient processing
- Dependency Injection support for seamless integration
Installation
Install the VeeFriends.WikiImporter NuGet package in your project:
dotnet add package VeeFriends.WikiImporter
Usage
CLI: Medium Blog Preview
Generate the VeeFriends WebPageModel JSON for a Medium/blog URL without writing to Cosmos.
The CLI uses the full blog importer path, including SEO generation and Cloudinary asset upload/reuse:
VF_MEDIUM_API_KEY=... \
OPENAI_API_KEY=... \
CLOUDINARY_CLOUD_NAME=... \
CLOUDINARY_API_KEY=... \
CLOUDINARY_API_SECRET=... \
LINKPREVIEW_API_KEY=... \
dotnet run --project VeeFriends.WikiImporter.Cli -- \
blog import-url "https://blog.veefriends.com/example-title-abc123def456" \
--out out/blog-page.json
The CLI accepts a Medium URL, blog.veefriends.com URL, or raw 12-character Medium article ID.
It reads Medium, generates SEO, ensures Cloudinary-backed assets exist, and writes JSON locally.
LinkPreview config is required because the production importer registers the social preview service, even when the specific blog article may not use it.
Cosmos comparison and upsert should happen in the calling workflow after an explicit dry run and approval.
Slack importer notifications are disabled by default for CLI runs; pass --send-slack only when needed.
1. Configuration
Configure the necessary services in your Startup.cs or Program.cs file:
using Microsoft.Extensions.DependencyInjection;
using VeeFriends.WikiImporter;
var services = new ServiceCollection();
services.AddWikiImporter(
configureChatGpt: options => { options.ApiKey = "your-api-key"; options.Model = "gpt-4"; },
configureSystemPrompt: options => { options.Prompt = "Your system prompt here"; },
configureClickUp: options => { options.ApiKey = "your-clickup-api-key"; },
configureCloudinary: options => { options.CloudName = "your-cloudinary-name"; },
configureGoogleDrive: options => { options.ApiKey = "your-google-drive-api-key"; },
linkPreviewOptions: options => { options.ApiKey = "your-link-preview-api-key"; },
configureDZineAi: options => { options.ApiKey = "your-dzine-ai-api-key"; }
);
2. Executing an Import
Inject the CharacterImporter service and call ExecuteImport to start importing character data:
public class WikiImportService
{
private readonly CharacterImporter _characterImporter;
public WikiImportService(CharacterImporter characterImporter)
{
_characterImporter = characterImporter;
}
public async Task ImportCharactersAsync()
{
var importOptions = new ImportOptions
{
OnProgress = (progress, _) => Console.WriteLine($"Progress: {progress}%"),
OnError = (error, _) => Console.WriteLine($"Error: {error.Message}"),
DelayBetweenRequests = TimeSpan.FromSeconds(1),
SkipCache = false
};
await _characterImporter.ExecuteImport(importOptions, CancellationToken.None);
}
}
3. Error Handling
The library provides structured error handling using logging and event-driven error reporting:
try
{
await _characterImporter.ExecuteImport(importOptions, CancellationToken.None);
}
catch (Exception ex)
{
Console.WriteLine($"Import failed: {ex.Message}");
}
Extending the Library
Adding a New Data Source
To extend the importer with a new data source:
- Implement a new data provider service that retrieves content.
- Modify
CharacterImporterto include the new source. - Integrate processing logic using
ModifyWithGoogleDriveorModifyWithLinkPreviewpatterns. - Register the new service in
ServiceCollectionExtensions.
Dependencies
VeeFriends.WikiImporter relies on several external services:
- ClickUp: For retrieving character wiki pages
- ChatGPT: For AI-driven text processing
- Google Drive: For media file storage and retrieval
- Cloudinary: For optimized image hosting
- Link Preview: For generating link previews of media content
- Microsoft.Extensions.DependencyInjection: For dependency injection support
License
This project is licensed under the MIT License. See the LICENSE file for more details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AWSSDK.S3 (>= 4.0.14)
- CloudinaryDotNet (>= 1.27.9)
- Google.Apis.Drive.v3 (>= 1.72.0.3970)
- InterpolatedParser (>= 1.1.5)
- LinkPreview (>= 1.4.2)
- Markdig (>= 0.44.0)
- MarkdigExtensions.Query (>= 1.0.9)
- Microsoft.Extensions.Logging.Console (>= 10.0.0)
- Microsoft.SemanticKernel.Connectors.OpenAI (>= 1.74.0)
- Mime-Detective (>= 25.8.1)
- Polly (>= 8.6.5)
- SixLabors.Fonts (>= 2.1.3)
- SixLabors.ImageSharp (>= 3.1.12)
- SixLabors.ImageSharp.Drawing (>= 2.1.7)
- Slugify.Core (>= 5.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.0.208 | 38 | 6/11/2026 |
| 5.0.206 | 204 | 6/10/2026 |
| 5.0.205 | 6,133 | 3/21/2026 |
| 5.0.203 | 8,091 | 12/15/2025 |
| 5.0.202 | 300 | 12/15/2025 |
| 5.0.201 | 856 | 12/10/2025 |
| 5.0.200 | 1,075 | 12/5/2025 |
| 5.0.199 | 287 | 12/5/2025 |
| 5.0.198 | 485 | 12/4/2025 |
| 5.0.197 | 1,125 | 12/3/2025 |
| 5.0.196 | 1,111 | 12/2/2025 |
| 5.0.195 | 899 | 12/2/2025 |
| 5.0.194 | 752 | 11/24/2025 |
| 5.0.193 | 231 | 11/24/2025 |
| 5.0.192 | 1,536 | 11/6/2025 |
| 5.0.191 | 1,345 | 11/5/2025 |
| 5.0.190 | 226 | 11/5/2025 |
| 5.0.188 | 233 | 11/3/2025 |
| 5.0.187 | 977 | 10/31/2025 |
| 5.0.186 | 1,750 | 10/23/2025 |