diff --git a/JSMR.Application/Integrations/Ports/IChobitClient.cs b/JSMR.Application/Integrations/Chobit/Ports/IChobitClient.cs similarity index 85% rename from JSMR.Application/Integrations/Ports/IChobitClient.cs rename to JSMR.Application/Integrations/Chobit/Ports/IChobitClient.cs index a1978c1..2c5b30a 100644 --- a/JSMR.Application/Integrations/Ports/IChobitClient.cs +++ b/JSMR.Application/Integrations/Chobit/Ports/IChobitClient.cs @@ -1,6 +1,6 @@ using JSMR.Application.Integrations.Chobit.Models; -namespace JSMR.Application.Integrations.Ports; +namespace JSMR.Application.Integrations.Chobit.Ports; public interface IChobitClient { diff --git a/JSMR.Application/Integrations/Ports/ICienClient.cs b/JSMR.Application/Integrations/Cien/Ports/ICienClient.cs similarity index 78% rename from JSMR.Application/Integrations/Ports/ICienClient.cs rename to JSMR.Application/Integrations/Cien/Ports/ICienClient.cs index fd2a33b..2979813 100644 --- a/JSMR.Application/Integrations/Ports/ICienClient.cs +++ b/JSMR.Application/Integrations/Cien/Ports/ICienClient.cs @@ -1,6 +1,6 @@ using JSMR.Application.Integrations.Cien.Models; -namespace JSMR.Application.Integrations.Ports; +namespace JSMR.Application.Integrations.Cien.Ports; public interface ICienClient { diff --git a/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWork.cs b/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWork.cs new file mode 100644 index 0000000..851bccb --- /dev/null +++ b/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWork.cs @@ -0,0 +1,10 @@ +namespace JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; + +public record ReleasedWork +{ + public required string ProductId { get; init; } + public required string Title { get; init; } + public required string MaskedTitle { get; init; } + public required string Description { get; init; } + public required string MaskedDescription { get; init; } +} \ No newline at end of file diff --git a/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWorksRequest.cs b/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWorksRequest.cs new file mode 100644 index 0000000..4e597f8 --- /dev/null +++ b/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWorksRequest.cs @@ -0,0 +1,9 @@ +using JSMR.Application.Enums; + +namespace JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; + +public record ReleasedWorksRequest( + Locale Locale, + DateOnly Date, + int Period +); \ No newline at end of file diff --git a/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWorksResponse.cs b/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWorksResponse.cs new file mode 100644 index 0000000..075371b --- /dev/null +++ b/JSMR.Application/Integrations/DLSite/Models/ReleasedWorks/ReleasedWorksResponse.cs @@ -0,0 +1,6 @@ +namespace JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; + +public class ReleasedWorksCollection : Dictionary +{ + +} \ No newline at end of file diff --git a/JSMR.Application/Integrations/DLSite/Ports/IDLSiteClient.cs b/JSMR.Application/Integrations/DLSite/Ports/IDLSiteClient.cs new file mode 100644 index 0000000..0e2c980 --- /dev/null +++ b/JSMR.Application/Integrations/DLSite/Ports/IDLSiteClient.cs @@ -0,0 +1,10 @@ +using JSMR.Application.Integrations.DLSite.Models; +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; + +namespace JSMR.Application.Integrations.DLSite.Ports; + +public interface IDLSiteClient +{ + Task GetVoiceWorkDetailsAsync(string[] productIds, CancellationToken cancellationToken = default); + Task GetReleasedWorksAsync(ReleasedWorksRequest request, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/JSMR.Application/Integrations/Ports/IDLSiteClient.cs b/JSMR.Application/Integrations/Ports/IDLSiteClient.cs deleted file mode 100644 index 85d8516..0000000 --- a/JSMR.Application/Integrations/Ports/IDLSiteClient.cs +++ /dev/null @@ -1,8 +0,0 @@ -using JSMR.Application.Integrations.DLSite.Models; - -namespace JSMR.Application.Integrations.Ports; - -public interface IDLSiteClient -{ - Task GetVoiceWorkDetailsAsync(string[] productIds, CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/JSMR.Application/Jobs/IJobProgressWriter.cs b/JSMR.Application/Jobs/IJobProgressWriter.cs new file mode 100644 index 0000000..22d92b4 --- /dev/null +++ b/JSMR.Application/Jobs/IJobProgressWriter.cs @@ -0,0 +1,10 @@ +namespace JSMR.Application.Jobs; + +public interface IJobProgressWriter +{ + Task SetStepAsync(int jobId, string step, CancellationToken cancellationToken); + Task SetProgressAsync(int jobId, int? current, int? total, CancellationToken cancellationToken); + Task SetHeartbeatAsync(int jobId, CancellationToken cancellationToken); + Task CompleteAsync(int jobId, string? summary, CancellationToken cancellationToken); + Task FailAsync(int jobId, string error, CancellationToken cancellationTokenct); +} \ No newline at end of file diff --git a/JSMR.Application/Jobs/IJobRepository.cs b/JSMR.Application/Jobs/IJobRepository.cs new file mode 100644 index 0000000..c5829d0 --- /dev/null +++ b/JSMR.Application/Jobs/IJobRepository.cs @@ -0,0 +1,15 @@ +using JSMR.Domain.Entities; + +namespace JSMR.Application.Jobs; + +public interface IJobRepository +{ + Task AddAsync(Job job, CancellationToken cancellationToken); + Task GetByIdAsync(int id, CancellationToken cancellationToken); + Task> GetRecentAsync(int take, CancellationToken cancellationToken); + + Task AnyRunningAsync(CancellationToken cancellationToken); + Task TryClaimNextQueuedAsync(string workerName, CancellationToken cancellationToken); + + Task SaveChangesAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/JSMR.Application/Scanning/Ports/IReleasedWorksProvider.cs b/JSMR.Application/Scanning/Ports/IReleasedWorksProvider.cs new file mode 100644 index 0000000..7e3e1a6 --- /dev/null +++ b/JSMR.Application/Scanning/Ports/IReleasedWorksProvider.cs @@ -0,0 +1,9 @@ +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; +using JSMR.Application.Scanning.Contracts; + +namespace JSMR.Application.Scanning.Ports; + +public interface IReleasedWorksProvider +{ + Task GetReleasedWorksAsync(VoiceWorkScanResult scanResult, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/JSMR.Application/Scanning/ScanVoiceWorksHandler.cs b/JSMR.Application/Scanning/ScanVoiceWorksHandler.cs index 87b3fe5..ff46032 100644 --- a/JSMR.Application/Scanning/ScanVoiceWorksHandler.cs +++ b/JSMR.Application/Scanning/ScanVoiceWorksHandler.cs @@ -1,7 +1,9 @@ using JSMR.Application.Common.Caching; using JSMR.Application.Integrations.Chobit.Models; +using JSMR.Application.Integrations.Chobit.Ports; using JSMR.Application.Integrations.DLSite.Models; -using JSMR.Application.Integrations.Ports; +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; +using JSMR.Application.Integrations.DLSite.Ports; using JSMR.Application.Scanning.Contracts; using JSMR.Application.Scanning.Ports; @@ -13,6 +15,7 @@ public sealed class ScanVoiceWorksHandler( IDLSiteClient dlsiteClient, IChobitClient chobitClient, ISpamCircleCache spamCircleCache, + IReleasedWorksProvider releasedWorksProvider, IVoiceWorkSearchUpdater searchUpdater) { public async Task HandleAsync(ScanVoiceWorksRequest request, CancellationToken cancellationToken) @@ -47,11 +50,14 @@ public sealed class ScanVoiceWorksHandler( string[] productIds = [.. scanResult.Works.Where(x => !string.IsNullOrWhiteSpace(x.ProductId)).Select(x => x.ProductId!)]; VoiceWorkDetailCollection voiceWorkDetails = await dlsiteClient.GetVoiceWorkDetailsAsync(productIds, cancellationToken); ChobitResultCollection chobitResults = await chobitClient.GetSampleInfoAsync(productIds, cancellationToken); + ReleasedWorksCollection releasedWorkCollection = await releasedWorksProvider.GetReleasedWorksAsync(scanResult, cancellationToken); VoiceWorkIngest[] ingests = [.. scanResult.Works.Select(work => { voiceWorkDetails.TryGetValue(work.ProductId!, out VoiceWorkDetails? value); chobitResults.TryGetValue(work.ProductId, out ChobitResult? chobit); + releasedWorkCollection.TryGetValue(work.ProductId, out ReleasedWork? releasedWork); + return VoiceWorkIngest.From(work, value, chobit); })]; diff --git a/JSMR.Domain/Entities/Job.cs b/JSMR.Domain/Entities/Job.cs new file mode 100644 index 0000000..9f888d0 --- /dev/null +++ b/JSMR.Domain/Entities/Job.cs @@ -0,0 +1,33 @@ +using JSMR.Domain.Enums; + +namespace JSMR.Domain.Entities; + +public sealed class Job +{ + public int Id { get; set; } + + public string Code { get; set; } = null!; + public JobStatus Status { get; set; } + + public string? RequestedByUserId { get; set; } + public string RequestedSource { get; set; } = "Manual"; + + public string? ParametersJson { get; set; } + + public DateTime CreatedUtc { get; set; } + public DateTime? StartedUtc { get; set; } + public DateTime? CompletedUtc { get; set; } + public DateTime? HeartbeatUtc { get; set; } + + public string? WorkerName { get; set; } + public string? CurrentStep { get; set; } + + public int? ProgressCurrent { get; set; } + public int? ProgressTotal { get; set; } + + public string? ResultSummary { get; set; } + public string? Error { get; set; } + + public bool CancellationRequested { get; set; } + public int AttemptCount { get; set; } +} \ No newline at end of file diff --git a/JSMR.Domain/Enums/JobStatus.cs b/JSMR.Domain/Enums/JobStatus.cs new file mode 100644 index 0000000..7d802bc --- /dev/null +++ b/JSMR.Domain/Enums/JobStatus.cs @@ -0,0 +1,10 @@ +namespace JSMR.Domain.Enums; + +public enum JobStatus +{ + Queued = 0, + Running = 1, + Succeeded = 2, + Failed = 3, + Cancelled = 4 +} \ No newline at end of file diff --git a/JSMR.Infrastructure/DI/InfrastructureServiceCollectionExtensions.cs b/JSMR.Infrastructure/DI/InfrastructureServiceCollectionExtensions.cs index db7f406..9fa1c56 100644 --- a/JSMR.Infrastructure/DI/InfrastructureServiceCollectionExtensions.cs +++ b/JSMR.Infrastructure/DI/InfrastructureServiceCollectionExtensions.cs @@ -5,7 +5,9 @@ using JSMR.Application.Common.Caching; using JSMR.Application.Creators.Ports; using JSMR.Application.Creators.Queries.Search.Ports; using JSMR.Application.Enums; -using JSMR.Application.Integrations.Ports; +using JSMR.Application.Integrations.Chobit.Ports; +using JSMR.Application.Integrations.DLSite.Ports; +using JSMR.Application.Jobs; using JSMR.Application.Scanning.Ports; using JSMR.Application.Tags.Ports; using JSMR.Application.Tags.Queries.Search.Ports; @@ -19,6 +21,7 @@ using JSMR.Infrastructure.Common.SupportedLanguages; using JSMR.Infrastructure.Common.Time; using JSMR.Infrastructure.Data.Repositories.Circles; using JSMR.Infrastructure.Data.Repositories.Creators; +using JSMR.Infrastructure.Data.Repositories.Jobs; using JSMR.Infrastructure.Data.Repositories.Tags; using JSMR.Infrastructure.Data.Repositories.Users; using JSMR.Infrastructure.Data.Repositories.VoiceWorks; @@ -50,6 +53,8 @@ public static class InfrastructureServiceCollectionExtensions services.AddKeyedScoped(Locale.English); services.AddScoped(); + services.AddScoped(); + services.AddKeyedScoped(Locale.Japanese); services.AddKeyedScoped(Locale.English); services.AddScoped(); @@ -68,6 +73,9 @@ public static class InfrastructureServiceCollectionExtensions services.AddScoped(); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddSingleton(); services.AddSingleton(); diff --git a/JSMR.Infrastructure/Data/AppDbContext.cs b/JSMR.Infrastructure/Data/AppDbContext.cs index af261ea..c0a515a 100644 --- a/JSMR.Infrastructure/Data/AppDbContext.cs +++ b/JSMR.Infrastructure/Data/AppDbContext.cs @@ -18,6 +18,7 @@ public class AppDbContext(DbContextOptions options) : DbContext(op public DbSet Series { get; set; } public DbSet VoiceWorkSearches { get; set; } public DbSet Users { get; set; } + public DbSet Jobs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { diff --git a/JSMR.Infrastructure/Data/Configuration/JobConfiguration.cs b/JSMR.Infrastructure/Data/Configuration/JobConfiguration.cs new file mode 100644 index 0000000..904f07b --- /dev/null +++ b/JSMR.Infrastructure/Data/Configuration/JobConfiguration.cs @@ -0,0 +1,44 @@ +using JSMR.Domain.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace JSMR.Infrastructure.Data.Configuration; + +public sealed class JobConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable("Jobs"); + + builder.HasKey(x => x.Id); + + builder.Property(x => x.Code) + .HasMaxLength(100) + .IsRequired(); + + builder.Property(x => x.RequestedByUserId) + .HasMaxLength(100); + + builder.Property(x => x.RequestedSource) + .HasMaxLength(50) + .IsRequired(); + + builder.Property(x => x.WorkerName) + .HasMaxLength(200); + + builder.Property(x => x.CurrentStep) + .HasMaxLength(500); + + builder.Property(x => x.ResultSummary) + .HasMaxLength(2000); + + builder.Property(x => x.Error) + .HasColumnType("TEXT"); + + builder.Property(x => x.ParametersJson) + .HasColumnType("LONGTEXT"); + + builder.HasIndex(x => new { x.Status, x.CreatedUtc }); + builder.HasIndex(x => x.Code); + } +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Data/Repositories/Jobs/JobProgressWriter.cs b/JSMR.Infrastructure/Data/Repositories/Jobs/JobProgressWriter.cs new file mode 100644 index 0000000..5d0030a --- /dev/null +++ b/JSMR.Infrastructure/Data/Repositories/Jobs/JobProgressWriter.cs @@ -0,0 +1,80 @@ +using JSMR.Application.Jobs; +using JSMR.Domain.Entities; +using JSMR.Domain.Enums; +using Microsoft.EntityFrameworkCore; + +namespace JSMR.Infrastructure.Data.Repositories.Jobs; + +public sealed class JobProgressWriter(AppDbContext dbContext) : IJobProgressWriter +{ + public async Task SetStepAsync(int jobId, string step, CancellationToken canellationToken) + { + Job? job = await dbContext.Jobs.FirstOrDefaultAsync(x => x.Id == jobId, canellationToken); + + if (job is null) + return; + + job.CurrentStep = step; + job.HeartbeatUtc = DateTime.UtcNow; + + await dbContext.SaveChangesAsync(canellationToken); + } + + public async Task SetProgressAsync(int jobId, int? current, int? total, CancellationToken canellationToken) + { + Job? job = await dbContext.Jobs.FirstOrDefaultAsync(x => x.Id == jobId, canellationToken); + + if (job is null) + return; + + job.ProgressCurrent = current; + job.ProgressTotal = total; + job.HeartbeatUtc = DateTime.UtcNow; + + await dbContext.SaveChangesAsync(canellationToken); + } + + public async Task SetHeartbeatAsync(int jobId, CancellationToken canellationToken) + { + Job? job = await dbContext.Jobs.FirstOrDefaultAsync(x => x.Id == jobId, canellationToken); + + if (job is null) + return; + + job.HeartbeatUtc = DateTime.UtcNow; + + await dbContext.SaveChangesAsync(canellationToken); + } + + public async Task CompleteAsync(int jobId, string? summary, CancellationToken canellationToken) + { + Job? job = await dbContext.Jobs.FirstOrDefaultAsync(x => x.Id == jobId, canellationToken); + + if (job is null) + return; + + job.Status = JobStatus.Succeeded; + job.CompletedUtc = DateTime.UtcNow; + job.HeartbeatUtc = DateTime.UtcNow; + job.ResultSummary = summary; + job.CurrentStep = "Completed"; + + await dbContext.SaveChangesAsync(canellationToken); + } + + public async Task FailAsync(int jobId, string error, CancellationToken canellationToken) + { + Job? job = await dbContext.Jobs.FirstOrDefaultAsync(x => x.Id == jobId, canellationToken); + + if (job is null) + return; + + job.Status = JobStatus.Failed; + job.CompletedUtc = DateTime.UtcNow; + job.HeartbeatUtc = DateTime.UtcNow; + job.Error = error; + job.CurrentStep = "Failed"; + + await dbContext.SaveChangesAsync(canellationToken); + } +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Data/Repositories/Jobs/JobRepository.cs b/JSMR.Infrastructure/Data/Repositories/Jobs/JobRepository.cs new file mode 100644 index 0000000..e41ac88 --- /dev/null +++ b/JSMR.Infrastructure/Data/Repositories/Jobs/JobRepository.cs @@ -0,0 +1,52 @@ +using JSMR.Application.Jobs; +using JSMR.Domain.Entities; +using JSMR.Domain.Enums; +using Microsoft.EntityFrameworkCore; + +namespace JSMR.Infrastructure.Data.Repositories.Jobs; + +public sealed class JobRepository(AppDbContext dbContext) : IJobRepository +{ + public async Task AddAsync(Job job, CancellationToken cancellationToken) + { + await dbContext.Jobs.AddAsync(job, cancellationToken); + + return job; + } + + public Task GetByIdAsync(int id, CancellationToken cancellationToken) + => dbContext.Jobs.FirstOrDefaultAsync(x => x.Id == id, cancellationToken); + + public async Task> GetRecentAsync(int take, CancellationToken cancellationToken) + => await dbContext.Jobs + .OrderByDescending(x => x.CreatedUtc) + .Take(take) + .ToListAsync(cancellationToken); + + public Task AnyRunningAsync(CancellationToken cancellationToken) + => dbContext.Jobs.AnyAsync(x => x.Status == JobStatus.Running, cancellationToken); + + public async Task TryClaimNextQueuedAsync(string workerName, CancellationToken cancellationToken) + { + Job? next = await dbContext.Jobs + .Where(x => x.Status == JobStatus.Queued) + .OrderBy(x => x.CreatedUtc) + .FirstOrDefaultAsync(cancellationToken); + + if (next is null) + return null; + + next.Status = JobStatus.Running; + next.StartedUtc = DateTime.UtcNow; + next.HeartbeatUtc = DateTime.UtcNow; + next.WorkerName = workerName; + next.AttemptCount += 1; + + await dbContext.SaveChangesAsync(cancellationToken); + + return next; + } + + public Task SaveChangesAsync(CancellationToken ct) + => dbContext.SaveChangesAsync(ct); +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Globalization/LocaleMap.cs b/JSMR.Infrastructure/Globalization/LocaleMap.cs new file mode 100644 index 0000000..3c441b7 --- /dev/null +++ b/JSMR.Infrastructure/Globalization/LocaleMap.cs @@ -0,0 +1,48 @@ +using JSMR.Application.Enums; + +namespace JSMR.Infrastructure.Globalization; + +internal class LocaleMapper +{ + // TODO: Deprecate + public static readonly IReadOnlyDictionary Map = + new Dictionary + { + { Locale.Japanese, ("jp", "ja_JP") }, + { Locale.English, ("en", "en_US") }, + { Locale.ChineseSimplified, ("zh-cn", "zh_CN") }, + { Locale.ChineseTraditional, ("zh-tw", "zh_TW") }, + { Locale.Korean, ("ko", "ko_KR") }, + }; + + + public static string ToDLSiteLocale(Locale locale) => locale switch + { + Locale.Japanese => "ja-jp", + Locale.English => "en-us", + Locale.ChineseSimplified => "zh-cn", + Locale.ChineseTraditional => "zh-tw", + Locale.Korean => "ko-kr", + _ => throw new NotSupportedException($"Locale '{locale}' is not supported.") + }; + + public static string ToDLSiteApiLocale(Locale locale) => locale switch + { + Locale.Japanese => "ja_JP", + Locale.English => "en_US", + Locale.ChineseSimplified => "zh_CN", + Locale.ChineseTraditional => "zh_TW", + Locale.Korean => "ko_KR", + _ => throw new NotSupportedException($"Locale '{locale}' is not supported.") + }; + + public static string ToAbbreviation(Locale locale) => locale switch + { + Locale.Japanese => "jp", + Locale.English => "en", + Locale.ChineseSimplified => "zh-cn", + Locale.ChineseTraditional => "zh-tw", + Locale.Korean => "ko", + _ => throw new NotSupportedException($"Locale '{locale}' is not supported.") + }; +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Integrations/Chobit/ChobitClient.cs b/JSMR.Infrastructure/Integrations/Chobit/ChobitClient.cs index ec47962..6f62457 100644 --- a/JSMR.Infrastructure/Integrations/Chobit/ChobitClient.cs +++ b/JSMR.Infrastructure/Integrations/Chobit/ChobitClient.cs @@ -1,5 +1,5 @@ using JSMR.Application.Integrations.Chobit.Models; -using JSMR.Application.Integrations.Ports; +using JSMR.Application.Integrations.Chobit.Ports; using JSMR.Infrastructure.Http; using Microsoft.Extensions.Logging; diff --git a/JSMR.Infrastructure/Integrations/DLSite/DLSiteClient.cs b/JSMR.Infrastructure/Integrations/DLSite/DLSiteClient.cs index 83bd7a1..cd7af39 100644 --- a/JSMR.Infrastructure/Integrations/DLSite/DLSiteClient.cs +++ b/JSMR.Infrastructure/Integrations/DLSite/DLSiteClient.cs @@ -1,8 +1,11 @@ using JSMR.Application.Integrations.DLSite.Models; -using JSMR.Application.Integrations.Ports; +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; +using JSMR.Application.Integrations.DLSite.Ports; +using JSMR.Infrastructure.Globalization; using JSMR.Infrastructure.Http; using JSMR.Infrastructure.Integrations.DLSite.Mapping; using JSMR.Infrastructure.Integrations.DLSite.Models; +using JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; using Microsoft.Extensions.Logging; namespace JSMR.Infrastructure.Integrations.DLSite; @@ -23,4 +26,23 @@ public class DLSiteClient(HttpClient http, ILogger logger) : ApiCl return DLSiteToDomainMapper.Map(productInfoCollection); } + + public async Task GetReleasedWorksAsync(ReleasedWorksRequest request, CancellationToken cancellationToken = default) + { + string locale = LocaleMapper.ToDLSiteLocale(request.Locale); + string date = request.Date.ToString("yyyy-MM-dd"); + string url = $"maniax/new/work/api?locale={locale}&date={date}&period={request.Period}"; + + NewWorksApiResponse response = await GetJsonAsync(url, cancellationToken: cancellationToken); + + if (response.Meta.Code != 200) + { + throw new InvalidOperationException( + $"DLsite returned code {response.Meta.Code}. " + + $"ErrorType: {response.Meta.ErrorType}. " + + $"ErrorMessage: {response.Meta.ErrorMessage}"); + } + + return DLSiteReleasedWorksMapper.Map(response); + } } \ No newline at end of file diff --git a/JSMR.Infrastructure/Integrations/DLSite/DLSiteClientRegistration.cs b/JSMR.Infrastructure/Integrations/DLSite/DLSiteClientRegistration.cs index dc372d1..f1d6b6b 100644 --- a/JSMR.Infrastructure/Integrations/DLSite/DLSiteClientRegistration.cs +++ b/JSMR.Infrastructure/Integrations/DLSite/DLSiteClientRegistration.cs @@ -1,8 +1,8 @@ -using JSMR.Application.Integrations.Ports; -using JSMR.Infrastructure.Integrations.DLSite.Serialization; -using Microsoft.Extensions.DependencyInjection; +//using JSMR.Application.Integrations.Ports; +//using JSMR.Infrastructure.Integrations.DLSite.Serialization; +//using Microsoft.Extensions.DependencyInjection; -namespace JSMR.Infrastructure.Integrations.DLSite; +//namespace JSMR.Infrastructure.Integrations.DLSite; public static class DLSiteClientRegistration { diff --git a/JSMR.Infrastructure/Integrations/DLSite/Mapping/DLSiteReleasedWorksMapper.cs b/JSMR.Infrastructure/Integrations/DLSite/Mapping/DLSiteReleasedWorksMapper.cs new file mode 100644 index 0000000..0d06519 --- /dev/null +++ b/JSMR.Infrastructure/Integrations/DLSite/Mapping/DLSiteReleasedWorksMapper.cs @@ -0,0 +1,34 @@ +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; +using JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; + +namespace JSMR.Infrastructure.Integrations.DLSite.Mapping; + +public static class DLSiteReleasedWorksMapper +{ + public static ReleasedWorksCollection Map(NewWorksApiResponse response) + { + ReleasedWorksCollection result = []; + + if (response.Data.Products.Length == 0) + return result; + + foreach (NewWorksApiProduct product in response.Data.Products) + { + result.Add(product.Id, Map(product)); + } + + return result; + } + + private static ReleasedWork Map(NewWorksApiProduct product) + { + return new ReleasedWork + { + ProductId = product.Id, + Title = product.Name ?? string.Empty, + MaskedTitle = product.NameMasked ?? string.Empty, + Description = product.Description ?? string.Empty, + MaskedDescription = product.DescriptionMasked ?? string.Empty + }; + } +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiData.cs b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiData.cs new file mode 100644 index 0000000..1898253 --- /dev/null +++ b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiData.cs @@ -0,0 +1,9 @@ +using System.Text.Json.Serialization; + +namespace JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; + +public record NewWorksApiData +{ + [JsonPropertyName("products")] + public required NewWorksApiProduct[] Products { get; init; } +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiMeta.cs b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiMeta.cs new file mode 100644 index 0000000..e753000 --- /dev/null +++ b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiMeta.cs @@ -0,0 +1,15 @@ +using System.Text.Json.Serialization; + +namespace JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; + +public record NewWorksApiMeta +{ + [JsonPropertyName("code")] + public int Code { get; init; } + + [JsonPropertyName("errorMessage")] + public string ErrorMessage { get; init; } = string.Empty; + + [JsonPropertyName("errorType")] + public string ErrorType { get; init; } = string.Empty; +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiProduct.cs b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiProduct.cs new file mode 100644 index 0000000..29bba0b --- /dev/null +++ b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiProduct.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; + +namespace JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; + +public record NewWorksApiProduct +{ + [JsonPropertyName("id")] + public required string Id { get; init; } + + [JsonPropertyName("name")] + public string? Name { get; init; } + + [JsonPropertyName("nameMasked")] + public string? NameMasked { get; init; } + + [JsonPropertyName("description")] + public string? Description { get; init; } + + [JsonPropertyName("descriptionMasked")] + public string? DescriptionMasked { get; init; } +} \ No newline at end of file diff --git a/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiResponse.cs b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiResponse.cs new file mode 100644 index 0000000..241d86f --- /dev/null +++ b/JSMR.Infrastructure/Integrations/DLSite/Models/NewWorks/NewWorksApiResponse.cs @@ -0,0 +1,12 @@ +using System.Text.Json.Serialization; + +namespace JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; + +public record NewWorksApiResponse +{ + [JsonPropertyName("meta")] + public required NewWorksApiMeta Meta { get; init; } + + [JsonPropertyName("data")] + public required NewWorksApiData Data { get; init; } +} \ No newline at end of file diff --git a/JSMR.Infrastructure/JSMR.Infrastructure.csproj b/JSMR.Infrastructure/JSMR.Infrastructure.csproj index b696a67..892ab6a 100644 --- a/JSMR.Infrastructure/JSMR.Infrastructure.csproj +++ b/JSMR.Infrastructure/JSMR.Infrastructure.csproj @@ -35,4 +35,8 @@ + + + + diff --git a/JSMR.Infrastructure/Scanning/DLSiteSearchFilterBuilder.cs b/JSMR.Infrastructure/Scanning/DLSiteSearchFilterBuilder.cs index 74c62e0..4a27273 100644 --- a/JSMR.Infrastructure/Scanning/DLSiteSearchFilterBuilder.cs +++ b/JSMR.Infrastructure/Scanning/DLSiteSearchFilterBuilder.cs @@ -1,5 +1,6 @@ using JSMR.Application.Enums; using JSMR.Domain.ValueObjects; +using JSMR.Infrastructure.Globalization; namespace JSMR.Infrastructure.Scanning; @@ -90,7 +91,10 @@ public sealed class DLSiteSearchFilterBuilder public string BuildSearchQuery(int pageNumber, int pageSize) { - var (localeAbbreviation, localeCode) = LocaleMap.Map[_locale]; + //string localeAbbreviation = LocaleMapper.ToAbbreviation(_locale); + //string localeCode = LocaleMapper.ToDLSiteLocale(_locale); + + var (localeAbbreviation, localeCode) = LocaleMapper.Map[_locale]; using (var writer = new StringWriter()) { diff --git a/JSMR.Infrastructure/Scanning/LocaleMap.cs b/JSMR.Infrastructure/Scanning/LocaleMap.cs deleted file mode 100644 index ce295bc..0000000 --- a/JSMR.Infrastructure/Scanning/LocaleMap.cs +++ /dev/null @@ -1,16 +0,0 @@ -using JSMR.Application.Enums; - -namespace JSMR.Infrastructure.Scanning; - -internal class LocaleMap -{ - public static readonly IReadOnlyDictionary Map = - new Dictionary - { - { Locale.Japanese, ("jp", "ja_JP") }, - { Locale.English, ("en", "en_US") }, - { Locale.ChineseSimplified, ("zh-cn", "zh_CN") }, - { Locale.ChineseTraditional, ("zh-tw", "zh_TW") }, - { Locale.Korean, ("ko", "ko_KR") }, - }; -} \ No newline at end of file diff --git a/JSMR.Infrastructure/Scanning/ReleasedWorksProvider.cs b/JSMR.Infrastructure/Scanning/ReleasedWorksProvider.cs new file mode 100644 index 0000000..04fff10 --- /dev/null +++ b/JSMR.Infrastructure/Scanning/ReleasedWorksProvider.cs @@ -0,0 +1,39 @@ +using JSMR.Application.Enums; +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; +using JSMR.Application.Integrations.DLSite.Ports; +using JSMR.Application.Scanning.Contracts; +using JSMR.Application.Scanning.Ports; + +namespace JSMR.Infrastructure.Scanning; + +public class ReleasedWorksProvider(IDLSiteClient dlsiteClient) : IReleasedWorksProvider +{ + public async Task GetReleasedWorksAsync(VoiceWorkScanResult scanResult, CancellationToken cancellationToken) + { + DateOnly[] salesDates = + [ + .. scanResult.Works + .Where(x => x.SalesDate.HasValue) + .Select(x => x.SalesDate!.Value) + ]; + + if (salesDates.Length == 0) + return []; + + DateOnly minDate = salesDates.Min(); + DateOnly maxDate = salesDates.Max(); + + DateOnly requestDate = minDate.AddDays(-1); + DateOnly requestEndDate = maxDate.AddDays(1); + + int period = (requestEndDate.DayNumber - requestDate.DayNumber) + 1; + + ReleasedWorksRequest releasedWorksRequest = new( + Locale: Locale.English, + Date: requestDate, + Period: period + ); + + return await dlsiteClient.GetReleasedWorksAsync(releasedWorksRequest, cancellationToken); + } +} \ No newline at end of file diff --git a/JSMR.Tests/Http/FakeHttpMessageHandler.cs b/JSMR.Tests/Http/FakeHttpMessageHandler.cs index d5563c1..3028eb5 100644 --- a/JSMR.Tests/Http/FakeHttpMessageHandler.cs +++ b/JSMR.Tests/Http/FakeHttpMessageHandler.cs @@ -1,9 +1,60 @@ -namespace JSMR.Tests.Http; +using Microsoft.AspNetCore.WebUtilities; +using Shouldly; + +namespace JSMR.Tests.Http; internal sealed class FakeHttpMessageHandler(Func handler) : HttpMessageHandler { + public List Requests { get; } = []; + protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { + Requests.Add(request); + return Task.FromResult(handler(request)); } -} \ No newline at end of file +} + +public static class HttpRequestMessageAssertions +{ + public static void ShouldHavePath(this HttpRequestMessage request, string expectedPath) + { + request.RequestUri.ShouldNotBeNull(); + request.RequestUri!.AbsolutePath.ShouldBe(expectedPath); + } + + public static void ShouldHaveQueryParam(this HttpRequestMessage request, string key, string expectedValue) + { + request.RequestUri.ShouldNotBeNull(); + + var query = QueryHelpers.ParseQuery(request.RequestUri!.Query); + query[key].ToString().ShouldBe(expectedValue); + } +} + +//internal sealed class FakeHttpMessageHandler : HttpMessageHandler +//{ +// private readonly Func _handler; + +// public List Requests { get; } = []; + +// public FakeHttpMessageHandler(Func handler) +// { +// _handler = handler; +// } + +// public FakeHttpMessageHandler(Func handler) +// : this((request, _) => handler(request)) +// { +// } + +// protected override Task SendAsync( +// HttpRequestMessage request, +// CancellationToken cancellationToken) +// { +// Requests.Add(request); + +// HttpResponseMessage response = _handler(request, cancellationToken); +// return Task.FromResult(response); +// } +//} \ No newline at end of file diff --git a/JSMR.Tests/Integrations/DLSite/DLSiteClientTests.cs b/JSMR.Tests/Integrations/DLSite/DLSiteClientTests.cs index ba19f6e..1602b3e 100644 --- a/JSMR.Tests/Integrations/DLSite/DLSiteClientTests.cs +++ b/JSMR.Tests/Integrations/DLSite/DLSiteClientTests.cs @@ -1,9 +1,12 @@ -using JSMR.Application.Integrations.DLSite.Models; +using JSMR.Application.Enums; +using JSMR.Application.Integrations.DLSite.Models; +using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks; using JSMR.Domain.Enums; using JSMR.Domain.ValueObjects; using JSMR.Infrastructure.Integrations.DLSite; using JSMR.Infrastructure.Integrations.DLSite.Mapping; using JSMR.Infrastructure.Integrations.DLSite.Models; +using JSMR.Infrastructure.Integrations.DLSite.Models.NewWorks; using JSMR.Tests.Http; using JSMR.Tests.Utilities; using Microsoft.Extensions.Logging; @@ -21,11 +24,11 @@ public class DLSiteClientTests return await ResourceHelper.ReadAsync($"JSMR.Tests.Integrations.DLSite.{resourceName}"); } - private static async Task GetDLSiteClientThatReturns(string resourceName) + private static async Task<(DLSiteClient Client, FakeHttpMessageHandler Handler)> GetDLSiteClientThatReturns(string resourceName) { string content = await ReadJsonResourceAsync(resourceName); - FakeHttpMessageHandler handler = new(request => + FakeHttpMessageHandler handler = new(_ => { return new HttpResponseMessage(HttpStatusCode.OK) { @@ -41,13 +44,27 @@ public class DLSiteClientTests var logger = Substitute.For>(); var client = new DLSiteClient(httpClient, logger); - return client; + return (client, handler); + } + + [Fact] + public async Task GetVoiceWorkDetailsAsync_Should_Call_Expected_Request() + { + var (client, handler) = await GetDLSiteClientThatReturns("Product-Info.json"); + await client.GetVoiceWorkDetailsAsync(["RJ01230163", "RJ01536422"], CancellationToken.None); + + handler.Requests.Count.ShouldBe(1); + + HttpRequestMessage httpRequest = handler.Requests[0]; + httpRequest.Method.ShouldBe(HttpMethod.Get); + httpRequest.ShouldHavePath("/maniax/product/info/ajax"); + httpRequest.ShouldHaveQueryParam("product_id", "RJ01230163,RJ01536422"); } [Fact] public async Task Deserialize_Product_Info_Collection() { - var client = await GetDLSiteClientThatReturns("Product-Info.json"); + var (client, handler) = await GetDLSiteClientThatReturns("Product-Info.json"); var result = await client.GetVoiceWorkDetailsAsync(["RJ01230163", "RJ01536422"], CancellationToken.None); result.Count.ShouldBe(2); @@ -144,4 +161,78 @@ public class DLSiteClientTests secondVoiceWorkDetails.Translation.Language.ShouldBe(Language.English); secondVoiceWorkDetails.Translation.Kind.ShouldBe(TranslationKind.Official | TranslationKind.Recommended); } + + [Fact] + public async Task GetReleasedWorksAsync_Should_Call_Expected_Request() + { + var (client, handler) = await GetDLSiteClientThatReturns("Released-Works.json"); + + ReleasedWorksRequest request = new(Locale.English, new(2025, 1, 1), 1); + + await client.GetReleasedWorksAsync(request, CancellationToken.None); + + handler.Requests.Count.ShouldBe(1); + + HttpRequestMessage httpRequest = handler.Requests[0]; + httpRequest.Method.ShouldBe(HttpMethod.Get); + httpRequest.ShouldHavePath("/maniax/new/work/api"); + httpRequest.ShouldHaveQueryParam("locale", "en-us"); + httpRequest.ShouldHaveQueryParam("date", "2025-01-01"); + httpRequest.ShouldHaveQueryParam("period", "1"); + } + + [Fact] + public async Task Map_Basic_Released_Work_Collection() + { + NewWorksApiResponse response = new() + { + Meta = new() + { + Code = 200 + }, + Data = new() + { + Products = + [ + new() + { + Id = "RG1", + Name = "The Title", + NameMasked = "Masked Title", + Description = "The description", + DescriptionMasked = "The masked description" + } + ] + } + }; + + ReleasedWorksCollection collection = DLSiteReleasedWorksMapper.Map(response); + collection.Count.ShouldBe(1); + collection.ShouldContainKey("RG1"); + + ReleasedWork releasedWork = collection["RG1"]; + releasedWork.ProductId.ShouldBe("RG1"); + releasedWork.Title.ShouldBe("The Title"); + releasedWork.MaskedTitle.ShouldBe("Masked Title"); + releasedWork.Description.ShouldBe("The description"); + releasedWork.MaskedDescription.ShouldBe("The masked description"); + } + + [Fact] + public async Task Deserialize_Released_Work_Collection() + { + var (client, handler) = await GetDLSiteClientThatReturns("Released-Works.json"); + var request = new ReleasedWorksRequest(Locale.English, new(2025, 1, 1), 1); + var result = await client.GetReleasedWorksAsync(request, CancellationToken.None); + + result.Count.ShouldBe(13); + + result.ShouldContainKey("RJ01588345"); + + ReleasedWork releasedWork = result["RJ01588345"]; + releasedWork.Title.ShouldBe("魔都一贅肉のスゴイデブ"); + releasedWork.MaskedTitle.ShouldBe("魔都一贅肉のスゴイデブ"); + releasedWork.Description.ShouldBe("圧巻の超連続・激太りご褒美パラダイス、ここに!全24ページ描き下ろし!太→激太への肥満化シークエンスが11作収録!餌付け、自己肥育、お風呂、縛り…などなど多種多様の太り方でご褒美を堪能せよ!"); + releasedWork.MaskedDescription.ShouldBe("圧巻の超連続・激太りご褒美パラダイス、ここに!全24ページ描き下ろし!太→激太への肥満化シークエンスが11作収録!餌付け、自己肥育、お風呂、縛り…などなど多種多様の太り方でご褒美を堪能せよ!"); + } } \ No newline at end of file diff --git a/JSMR.Tests/Integrations/DLSite/Released-Works.json b/JSMR.Tests/Integrations/DLSite/Released-Works.json new file mode 100644 index 0000000..9eb5160 --- /dev/null +++ b/JSMR.Tests/Integrations/DLSite/Released-Works.json @@ -0,0 +1,4922 @@ +{ + "meta": { + "code": 200, + "errorMessage": "", + "errorType": "" + }, + "data": { + "products": [ + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01588345", + "inservice": 1, + "name": "\u9b54\u90fd\u4e00\u8d05\u8089\u306e\u30b9\u30b4\u30a4\u30c7\u30d6", + "nameMasked": "\u9b54\u90fd\u4e00\u8d05\u8089\u306e\u30b9\u30b4\u30a4\u30c7\u30d6", + "description": "\u5727\u5dfb\u306e\u8d85\u9023\u7d9a\u30fb\u6fc0\u592a\u308a\u3054\u8912\u7f8e\u30d1\u30e9\u30c0\u30a4\u30b9\u3001\u3053\u3053\u306b\uff01\u516824\u30da\u30fc\u30b8\u63cf\u304d\u4e0b\u308d\u3057\uff01\u592a\u2192\u6fc0\u592a\u3078\u306e\u80a5\u6e80\u5316\u30b7\u30fc\u30af\u30a8\u30f3\u30b9\u304c11\u4f5c\u53ce\u9332\uff01\u990c\u4ed8\u3051\u3001\u81ea\u5df1\u80a5\u80b2\u3001\u304a\u98a8\u5442\u3001\u7e1b\u308a\u2026\u306a\u3069\u306a\u3069\u591a\u7a2e\u591a\u69d8\u306e\u592a\u308a\u65b9\u3067\u3054\u8912\u7f8e\u3092\u582a\u80fd\u305b\u3088\uff01", + "descriptionMasked": "\u5727\u5dfb\u306e\u8d85\u9023\u7d9a\u30fb\u6fc0\u592a\u308a\u3054\u8912\u7f8e\u30d1\u30e9\u30c0\u30a4\u30b9\u3001\u3053\u3053\u306b\uff01\u516824\u30da\u30fc\u30b8\u63cf\u304d\u4e0b\u308d\u3057\uff01\u592a\u2192\u6fc0\u592a\u3078\u306e\u80a5\u6e80\u5316\u30b7\u30fc\u30af\u30a8\u30f3\u30b9\u304c11\u4f5c\u53ce\u9332\uff01\u990c\u4ed8\u3051\u3001\u81ea\u5df1\u80a5\u80b2\u3001\u304a\u98a8\u5442\u3001\u7e1b\u308a\u2026\u306a\u3069\u306a\u3069\u591a\u7a2e\u591a\u69d8\u306e\u592a\u308a\u65b9\u3067\u3054\u8912\u7f8e\u3092\u582a\u80fd\u305b\u3088\uff01", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01588345.html", + "category": "doujin", + "fileType": "PNG", + "dlFormat": 0, + "img": { + "fileName": "RJ01588345_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_main_240x240.jpg", + "altName": "\u9b54\u90fd\u4e00\u8d05\u8089\u306e\u30b9\u30b4\u30a4\u30c7\u30d6 [ZeaL]", + "altNameMasked": "\u9b54\u90fd\u4e00\u8d05\u8089\u306e\u30b9\u30b4\u30a4\u30c7\u30d6 [ZeaL]" + }, + "maker": { + "id": "RG01064326", + "name": "ZeaL", + "nameEn": "ZeaL", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG01064326.html" + }, + "type": { + "id": "ICG", + "label": "CG + Illustrations", + "idConfig": "illust", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/ICG", + "book": null + }, + "price": 1430, + "officialPrice": 1430, + "localePrice": { + "en_US": 9.01, + "ar_AE": 9.01, + "es_ES": 7.77, + "de_DE": 7.77, + "fr_FR": 7.77, + "it_IT": 7.77, + "pt_BR": 7.77, + "zh_TW": 288, + "zh_CN": 62.17, + "ko_KR": 13491, + "id_ID": 152859, + "vi_VN": 236090, + "th_TH": 293.75, + "sv_SE": 84 + }, + "localeOfficialPrice": { + "en_US": 9.01, + "ar_AE": 9.01, + "es_ES": 7.77, + "de_DE": 7.77, + "fr_FR": 7.77, + "it_IT": 7.77, + "pt_BR": 7.77, + "zh_TW": 288, + "zh_CN": 62.17, + "ko_KR": 13491, + "id_ID": 152859, + "vi_VN": 236090, + "th_TH": 293.75, + "sv_SE": 84 + }, + "currencyPrice": { + "JPY": 1430, + "USD": 9.00684142038519, + "EUR": 7.766239451084368, + "GBP": 6.721371422984834, + "TWD": 287.7958460795363, + "CNY": 62.170399064400705, + "KRW": 13490.566037735849, + "IDR": 152859.43345804382, + "VND": 236090.47383193, + "THB": 293.7491012920852, + "SEK": 83.99560638366609, + "HKD": 70.50586727147224, + "SGD": 11.518890577789163, + "CAD": 12.389759300767038, + "MYR": 35.62451265417567, + "BRL": 47.24305394958539, + "AUD": 12.92042194664679, + "PHP": 539.5208451235616, + "MXN": 160.30850980348197, + "NZD": 15.454664336578812, + "INR": 845.3535114684322 + }, + "currencyOfficialPrice": { + "JPY": 1430, + "USD": 9.00684142038519, + "EUR": 7.766239451084368, + "GBP": 6.721371422984834, + "TWD": 287.7958460795363, + "CNY": 62.170399064400705, + "KRW": 13490.566037735849, + "IDR": 152859.43345804382, + "VND": 236090.47383193, + "THB": 293.7491012920852, + "SEK": 83.99560638366609, + "HKD": 70.50586727147224, + "SGD": 11.518890577789163, + "CAD": 12.389759300767038, + "MYR": 35.62451265417567, + "BRL": 47.24305394958539, + "AUD": 12.92042194664679, + "PHP": 539.5208451235616, + "MXN": 160.30850980348197, + "NZD": 15.454664336578812, + "INR": 845.3535114684322 + }, + "discountPercentage": null, + "point": 65, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": false, + "tags": [ + { + "id": 63, + "label": "Buttocks", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/63" + }, + { + "id": 182, + "label": "Big Breasts", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/182" + }, + { + "id": 473, + "label": "Chubby \/ Fat", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/473" + } + ], + "tagsReplaced": [ + { + "id": 63, + "label": "Buttocks", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/63" + }, + { + "id": 182, + "label": "Big Breasts", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/182" + }, + { + "id": 473, + "label": "Chubby \/ Fat", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/473" + } + ], + "siteId": "maniax", + "options": [ "JPN", "ENG", "TRI", "DLP", "REV", "OLY" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 115, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 3, + "averageStar": 50 + }, + "review": { + "url": "https:\/\/www.dlsite.com\/maniax\/work\/reviewlist\/=\/product_id\/RJ01588345.html", + "count": "1" + }, + "reviewCount": "1", + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01588345.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01588345.html", + "authors": null, + "icons": [ + { + "class": "TRI", + "label": "Trial version", + "title": "Trial version" + }, + { + "class": "REV", + "label": "Reviews", + "title": "Reviews" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1774018800, + "salesDate": false, + "touchStyle1": [ "type_exclusive_01" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp1.jpg", + "file_size": "1039237", + "file_size_unit": "1014.88KB", + "width": "2000", + "height": "1333", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:04", + "id": "68878971", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp1.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp1" + }, + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp2.jpg", + "file_size": "1473269", + "file_size_unit": "1.41MB", + "width": "1426", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:04", + "id": "68878972", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp2.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp2" + }, + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp3.jpg", + "file_size": "1091199", + "file_size_unit": "1.04MB", + "width": "1426", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:04", + "id": "68878973", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp3.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp3" + }, + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp4.jpg", + "file_size": "1198466", + "file_size_unit": "1.14MB", + "width": "2000", + "height": "1426", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:04", + "id": "68878974", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp4.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp4" + }, + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp5.jpg", + "file_size": "1115444", + "file_size_unit": "1.06MB", + "width": "1426", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:04", + "id": "68878975", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp5.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp5" + }, + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp6.jpg", + "file_size": "1236151", + "file_size_unit": "1.18MB", + "width": "2000", + "height": "1426", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:04", + "id": "68878976", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp6.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp6" + }, + { + "workno": "RJ01588345", + "type": "image_sample", + "file_name": "RJ01588345_img_smp7.jpg", + "file_size": "1095046", + "file_size_unit": "1.04MB", + "width": "1426", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:32:05", + "id": "68878977", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp7.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588345_img_smp7.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp7.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp7" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_main.jpg", + "width": 560, + "height": 373 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp1.jpg", + "width": 2000, + "height": 1333 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp2.jpg", + "width": 1426, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp3.jpg", + "width": 1426, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp4.jpg", + "width": 2000, + "height": 1426 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp5.jpg", + "width": 1426, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp6.jpg", + "width": 2000, + "height": 1426 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588345_img_smp7.jpg", + "width": 1426, + "height": 2000 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01587672", + "inservice": 1, + "name": "Zagradia(Book)", + "nameMasked": "Zagradia(Book)", + "description": "Las er\u00f3ticas aventuras de la demonio.", + "descriptionMasked": "Las er\u00f3ticas aventuras de la demonio.", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01587672.html", + "category": "doujin", + "fileType": "PNG", + "dlFormat": 0, + "img": { + "fileName": "RJ01587672_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_main_240x240.jpg", + "altName": "Zagradia(Book) [GQuarz]", + "altNameMasked": "Zagradia(Book) [GQuarz]" + }, + "maker": { + "id": "RG65003", + "name": "GQuarz", + "nameEn": null, + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG65003.html" + }, + "type": { + "id": "ICG", + "label": "CG + Illustrations", + "idConfig": "illust", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/ICG", + "book": null + }, + "price": 990, + "officialPrice": 990, + "localePrice": { + "en_US": 6.24, + "ar_AE": 6.24, + "es_ES": 5.38, + "de_DE": 5.38, + "fr_FR": 5.38, + "it_IT": 5.38, + "pt_BR": 5.38, + "zh_TW": 199, + "zh_CN": 43.04, + "ko_KR": 9340, + "id_ID": 105826, + "vi_VN": 163447, + "th_TH": 203.36, + "sv_SE": 58.15 + }, + "localeOfficialPrice": { + "en_US": 6.24, + "ar_AE": 6.24, + "es_ES": 5.38, + "de_DE": 5.38, + "fr_FR": 5.38, + "it_IT": 5.38, + "pt_BR": 5.38, + "zh_TW": 199, + "zh_CN": 43.04, + "ko_KR": 9340, + "id_ID": 105826, + "vi_VN": 163447, + "th_TH": 203.36, + "sv_SE": 58.15 + }, + "currencyPrice": { + "JPY": 990, + "USD": 6.235505598728208, + "EUR": 5.376627312289178, + "GBP": 4.653257138989501, + "TWD": 199.2432780550636, + "CNY": 43.04104550612357, + "KRW": 9339.622641509433, + "IDR": 105825.76162479956, + "VND": 163447.25111441308, + "THB": 203.36476243298208, + "SEK": 58.15080441946114, + "HKD": 48.8117542648654, + "SGD": 7.974616553854036, + "CAD": 8.577525669761796, + "MYR": 24.663124145198537, + "BRL": 32.70672965740527, + "AUD": 8.9449075015247, + "PHP": 373.5144312393888, + "MXN": 110.98281447933367, + "NZD": 10.69938300224687, + "INR": 585.2447387089146 + }, + "currencyOfficialPrice": { + "JPY": 990, + "USD": 6.235505598728208, + "EUR": 5.376627312289178, + "GBP": 4.653257138989501, + "TWD": 199.2432780550636, + "CNY": 43.04104550612357, + "KRW": 9339.622641509433, + "IDR": 105825.76162479956, + "VND": 163447.25111441308, + "THB": 203.36476243298208, + "SEK": 58.15080441946114, + "HKD": 48.8117542648654, + "SGD": 7.974616553854036, + "CAD": 8.577525669761796, + "MYR": 24.663124145198537, + "BRL": 32.70672965740527, + "AUD": 8.9449075015247, + "PHP": 373.5144312393888, + "MXN": 110.98281447933367, + "NZD": 10.69938300224687, + "INR": 585.2447387089146 + }, + "discountPercentage": null, + "point": 45, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": false, + "tags": null, + "tagsReplaced": null, + "siteId": "maniax", + "options": [ "ENG", "DLP", "OLY", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 0, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 0, + "averageStar": 0 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01587672.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01587672.html", + "authors": null, + "icons": null, + "isSmartphoneOnlyIcon": false, + "registDate": 1773990000, + "salesDate": false, + "touchStyle1": [ "type_exclusive_01" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01587672", + "type": "image_sample", + "file_name": "RJ01587672_img_smp1.jpg", + "file_size": "123443", + "file_size_unit": "120.55KB", + "width": "524", + "height": "697", + "hash": null, + "display_mode": "", + "update_date": "2026-03-20 13:09:04", + "id": "68949935", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp1.jpg", + "path_short": "doujin\/RJ01588000\/RJ01587672_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp1" + }, + { + "workno": "RJ01587672", + "type": "image_sample", + "file_name": "RJ01587672_img_smp2.jpg", + "file_size": "95041", + "file_size_unit": "92.81KB", + "width": "508", + "height": "604", + "hash": null, + "display_mode": "", + "update_date": "2026-03-20 13:09:04", + "id": "68949936", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp2.jpg", + "path_short": "doujin\/RJ01588000\/RJ01587672_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp2" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_main.jpg", + "width": 381, + "height": 200 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp1.jpg", + "width": 524, + "height": 697 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01588000\/RJ01587672_img_smp2.jpg", + "width": 508, + "height": 604 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01568844", + "inservice": 1, + "name": "\u3010\u4e2d\u82f1\u65e5\u3011\u7d42\u7109\u306e\u9b54\u5973", + "nameMasked": "\u3010\u4e2d\u82f1\u65e5\u3011\u7d42\u7109\u306e\u9b54\u5973", + "description": "\u3053\u308c\u306f\u30c0\u30fc\u30af\u30d5\u30a1\u30f3\u30bf\u30b8\u30fc\u98a8\u306e\u6a2a\u30b9\u30af\u30ed\u30fc\u30eb\u30a2\u30af\u30b7\u30e7\u30f3\u30b2\u30fc\u30e0\u3067\u3059\u3002 \u68ee\u3001\u5730\u4e0b\u6d1e\u7a9f\u3001\u57ce\u7826\u306a\u3069\u3001\u8907\u6570\u306e\u30b9\u30c6\u30fc\u30b8\u304c\u767b\u5834\u3059\u308b\u3002 \u9ad8\u54c1\u8cea\u306a\u30b9\u30ad\u30eb\u30a8\u30d5\u30a7\u30af\u30c8", + "descriptionMasked": "\u3053\u308c\u306f\u30c0\u30fc\u30af\u30d5\u30a1\u30f3\u30bf\u30b8\u30fc\u98a8\u306e\u6a2a\u30b9\u30af\u30ed\u30fc\u30eb\u30a2\u30af\u30b7\u30e7\u30f3\u30b2\u30fc\u30e0\u3067\u3059\u3002 \u68ee\u3001\u5730\u4e0b\u6d1e\u7a9f\u3001\u57ce\u7826\u306a\u3069\u3001\u8907\u6570\u306e\u30b9\u30c6\u30fc\u30b8\u304c\u767b\u5834\u3059\u308b\u3002 \u9ad8\u54c1\u8cea\u306a\u30b9\u30ad\u30eb\u30a8\u30d5\u30a7\u30af\u30c8", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01568844.html", + "category": "doujin", + "fileType": "EXE", + "dlFormat": 0, + "img": { + "fileName": "RJ01568844_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_main_240x240.jpg", + "altName": "\u3010\u4e2d\u82f1\u65e5\u3011\u7d42\u7109\u306e\u9b54\u5973 [K.O\u5de5\u623f]", + "altNameMasked": "\u3010\u4e2d\u82f1\u65e5\u3011\u7d42\u7109\u306e\u9b54\u5973 [K.O\u5de5\u623f]" + }, + "maker": { + "id": "RG01059365", + "name": "K.O\u5de5\u623f", + "nameEn": "", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG01059365.html" + }, + "type": { + "id": "ACN", + "label": "Action", + "idConfig": "game", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/ACN", + "book": null + }, + "price": 1782, + "officialPrice": 1980, + "localePrice": { + "en_US": 11.22, + "ar_AE": 11.22, + "es_ES": 9.68, + "de_DE": 9.68, + "fr_FR": 9.68, + "it_IT": 9.68, + "pt_BR": 9.68, + "zh_TW": 359, + "zh_CN": 77.47, + "ko_KR": 16811, + "id_ID": 190486, + "vi_VN": 294205, + "th_TH": 366.06, + "sv_SE": 104.67 + }, + "localeOfficialPrice": { + "en_US": 12.47, + "ar_AE": 12.47, + "es_ES": 10.75, + "de_DE": 10.75, + "fr_FR": 10.75, + "it_IT": 10.75, + "pt_BR": 10.75, + "zh_TW": 398, + "zh_CN": 86.08, + "ko_KR": 18679, + "id_ID": 211652, + "vi_VN": 326895, + "th_TH": 406.73, + "sv_SE": 116.3 + }, + "currencyPrice": { + "JPY": 1782, + "USD": 11.223910077710775, + "EUR": 9.67792916212052, + "GBP": 8.3758628501811, + "TWD": 358.6379004991145, + "CNY": 77.47388191102242, + "KRW": 16811.32075471698, + "IDR": 190486.37092463922, + "VND": 294205.05200594355, + "THB": 366.0565723793677, + "SEK": 104.67144795503005, + "HKD": 87.86115767675771, + "SGD": 14.354309796937263, + "CAD": 15.439546205571233, + "MYR": 44.393623461357365, + "BRL": 58.872113383329484, + "AUD": 16.10083350274446, + "PHP": 672.3259762308998, + "MXN": 199.7690660628006, + "NZD": 19.258889404044368, + "INR": 1053.4405296760463 + }, + "currencyOfficialPrice": { + "JPY": 1980, + "USD": 12.471011197456416, + "EUR": 10.753254624578355, + "GBP": 9.306514277979002, + "TWD": 398.4865561101272, + "CNY": 86.08209101224713, + "KRW": 18679.245283018867, + "IDR": 211651.52324959912, + "VND": 326894.50222882617, + "THB": 406.72952486596415, + "SEK": 116.30160883892228, + "HKD": 97.6235085297308, + "SGD": 15.949233107708071, + "CAD": 17.15505133952359, + "MYR": 49.326248290397075, + "BRL": 65.41345931481054, + "AUD": 17.8898150030494, + "PHP": 747.0288624787776, + "MXN": 221.96562895866734, + "NZD": 21.39876600449374, + "INR": 1170.4894774178292 + }, + "discountPercentage": 10, + "point": 81, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1776351600, + "tags": [ + { + "id": 533, + "label": "Battle Fuck", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/533" + }, + { + "id": 324, + "label": "Interspecies Sex", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/324" + }, + { + "id": 146, + "label": "Restraint", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/146" + }, + { + "id": 128, + "label": "Internal Cumshot", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/128" + }, + { + "id": 204, + "label": "Blood \/ Bleeding", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/204" + }, + { + "id": 199, + "label": "Bizarre \/ Eccentric", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/199" + }, + { + "id": 313, + "label": "Ryona \/ Brutal", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/313" + } + ], + "tagsReplaced": [ + { + "id": 533, + "label": "Battle Fuck", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/533" + }, + { + "id": 324, + "label": "Interspecies Sex", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/324" + }, + { + "id": 146, + "label": "Restraint", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/146" + }, + { + "id": 128, + "label": "Internal Cumshot", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/128" + }, + { + "id": 204, + "label": "Blood \/ Bleeding", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/204" + }, + { + "id": 199, + "label": "Bizarre \/ Eccentric", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/199" + }, + { + "id": 313, + "label": "Ryona \/ Brutal", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/313" + } + ], + "siteId": "maniax", + "options": [ "SND", "TRI", "GRO", "ENG", "CHI", "CHI_HANT", "JPN", "OLY", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 1689, + "showDownload": 1, + "isShowRate": true, + "rate": { + "count": 93, + "averageStar": 40 + }, + "review": { + "url": "https:\/\/www.dlsite.com\/maniax\/work\/reviewlist\/=\/product_id\/RJ01568844.html", + "count": "3" + }, + "reviewCount": "3", + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01568844.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01568844.html", + "authors": null, + "icons": [ + { + "class": "SND", + "label": "Voice", + "title": "Voice" + }, + { + "class": "TRI", + "label": "Trial version", + "title": "Trial version" + }, + { + "class": "GRO", + "label": "Contains Grotesqueness", + "title": "Contains Grotesqueness" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "type_exclusive_01", "for_pc" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp1.jpg", + "file_size": "458496", + "file_size_unit": "447.75KB", + "width": "1440", + "height": "916", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929516", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp1.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp1" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp2.jpg", + "file_size": "452282", + "file_size_unit": "441.68KB", + "width": "1440", + "height": "810", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929517", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp2.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp2" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp3.jpg", + "file_size": "438851", + "file_size_unit": "428.57KB", + "width": "1910", + "height": "1055", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929518", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp3.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp3" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp4.jpg", + "file_size": "906906", + "file_size_unit": "885.65KB", + "width": "2000", + "height": "1268", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929519", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp4.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp4" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp5.jpg", + "file_size": "516211", + "file_size_unit": "504.11KB", + "width": "1351", + "height": "758", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929520", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp5.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp5" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp6.jpg", + "file_size": "921088", + "file_size_unit": "899.5KB", + "width": "2000", + "height": "1124", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929521", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp6.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp6" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp7.jpg", + "file_size": "1153817", + "file_size_unit": "1.1MB", + "width": "2000", + "height": "1128", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929522", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp7.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp7.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp7.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp7" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp8.jpg", + "file_size": "1095015", + "file_size_unit": "1.04MB", + "width": "2000", + "height": "1110", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929523", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp8.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp8.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp8.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp8" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp9.jpg", + "file_size": "1077586", + "file_size_unit": "1.03MB", + "width": "2000", + "height": "1269", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929524", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp9.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp9.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp9.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp9" + }, + { + "workno": "RJ01568844", + "type": "image_sample", + "file_name": "RJ01568844_img_smp10.jpg", + "file_size": "782713", + "file_size_unit": "764.37KB", + "width": "2000", + "height": "1268", + "hash": null, + "display_mode": "", + "update_date": "2026-03-19 15:33:04", + "id": "68929525", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp10.jpg", + "path_short": "doujin\/RJ01569000\/RJ01568844_img_smp10.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp10.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp10" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp1.jpg", + "width": 1440, + "height": 916 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp2.jpg", + "width": 1440, + "height": 810 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp3.jpg", + "width": 1910, + "height": 1055 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp4.jpg", + "width": 2000, + "height": 1268 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp5.jpg", + "width": 1351, + "height": 758 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp6.jpg", + "width": 2000, + "height": 1124 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp7.jpg", + "width": 2000, + "height": 1128 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp8.jpg", + "width": 2000, + "height": 1110 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp9.jpg", + "width": 2000, + "height": 1269 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01569000\/RJ01568844_img_smp10.jpg", + "width": 2000, + "height": 1268 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01581215", + "inservice": 1, + "name": "Bondage Orgasm Hospital 4", + "nameMasked": "Bondage Orgasm Hospital 4", + "description": "A story of Patient E, who is hospitalized and subjected to continuous climaxes under the guise of \"treatment.\" Various procedures are carried out in the name of improving her condition.", + "descriptionMasked": "A story of Patient E, who is hospitalized and subjected to continuous climaxes under the guise of \"treatment.\" Various procedures are carried out in the name of improving her condition.", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01581215.html", + "category": "doujin", + "fileType": "IJP", + "dlFormat": 0, + "img": { + "fileName": "RJ01581215_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_main_240x240.jpg", + "altName": "Bondage Orgasm Hospital 4 [Nyuruya]", + "altNameMasked": "Bondage Orgasm Hospital 4 [Nyuruya]" + }, + "maker": { + "id": "RG01034105", + "name": "Nyuruya", + "nameEn": "Nyuruya", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG01034105.html" + }, + "type": { + "id": "ICG", + "label": "CG + Illustrations", + "idConfig": "illust", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/ICG", + "book": null + }, + "price": 1650, + "officialPrice": 1650, + "localePrice": { + "en_US": 10.39, + "ar_AE": 10.39, + "es_ES": 8.96, + "de_DE": 8.96, + "fr_FR": 8.96, + "it_IT": 8.96, + "pt_BR": 8.96, + "zh_TW": 332, + "zh_CN": 71.74, + "ko_KR": 15566, + "id_ID": 176376, + "vi_VN": 272412, + "th_TH": 338.94, + "sv_SE": 96.92 + }, + "localeOfficialPrice": { + "en_US": 10.39, + "ar_AE": 10.39, + "es_ES": 8.96, + "de_DE": 8.96, + "fr_FR": 8.96, + "it_IT": 8.96, + "pt_BR": 8.96, + "zh_TW": 332, + "zh_CN": 71.74, + "ko_KR": 15566, + "id_ID": 176376, + "vi_VN": 272412, + "th_TH": 338.94, + "sv_SE": 96.92 + }, + "currencyPrice": { + "JPY": 1650, + "USD": 10.392509331213681, + "EUR": 8.961045520481962, + "GBP": 7.755428564982501, + "TWD": 332.0721300917727, + "CNY": 71.73507584353928, + "KRW": 15566.037735849057, + "IDR": 176376.26937466595, + "VND": 272412.0851906885, + "THB": 338.9412707216368, + "SEK": 96.91800736576856, + "HKD": 81.35292377477566, + "SGD": 13.291027589756725, + "CAD": 14.29587611626966, + "MYR": 41.10520690866423, + "BRL": 54.511216095675444, + "AUD": 14.908179169207834, + "PHP": 622.524052065648, + "MXN": 184.9713574655561, + "NZD": 17.832305003744786, + "INR": 975.407897848191 + }, + "currencyOfficialPrice": { + "JPY": 1650, + "USD": 10.392509331213681, + "EUR": 8.961045520481962, + "GBP": 7.755428564982501, + "TWD": 332.0721300917727, + "CNY": 71.73507584353928, + "KRW": 15566.037735849057, + "IDR": 176376.26937466595, + "VND": 272412.0851906885, + "THB": 338.9412707216368, + "SEK": 96.91800736576856, + "HKD": 81.35292377477566, + "SGD": 13.291027589756725, + "CAD": 14.29587611626966, + "MYR": 41.10520690866423, + "BRL": 54.511216095675444, + "AUD": 14.908179169207834, + "PHP": 622.524052065648, + "MXN": 184.9713574655561, + "NZD": 17.832305003744786, + "INR": 975.407897848191 + }, + "discountPercentage": null, + "point": 75, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": false, + "tags": [ + { + "id": 70, + "label": "Successive Orgasms", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/70" + }, + { + "id": 256, + "label": "Collar \/ Chain \/ Restraints", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/256" + }, + { + "id": 257, + "label": "Foreign Objects", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/257" + }, + { + "id": 160, + "label": "Anal", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/160" + }, + { + "id": 114, + "label": "Coercion \/ Compulsion", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/114" + }, + { + "id": 527, + "label": "Clit Teasing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/527" + }, + { + "id": 146, + "label": "Restraint", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/146" + }, + { + "id": 501, + "label": "Squirting \/ Gushing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/501" + } + ], + "tagsReplaced": [ + { + "id": 70, + "label": "Successive Orgasms", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/70" + }, + { + "id": 256, + "label": "Collar \/ Chain \/ Restraints", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/256" + }, + { + "id": 257, + "label": "Foreign Objects", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/257" + }, + { + "id": 160, + "label": "Anal", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/160" + }, + { + "id": 114, + "label": "Ordered \/ Compelled", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/114" + }, + { + "id": 527, + "label": "Clit Teasing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/527" + }, + { + "id": 146, + "label": "Restraint", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/146" + }, + { + "id": 501, + "label": "Squirting \/ Gushing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/501" + } + ], + "siteId": "maniax", + "options": [ "SND", "WPD", "ENG", "JPN", "DLP", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 549, + "showDownload": 1, + "isShowRate": true, + "rate": { + "count": 9, + "averageStar": 50 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01581215.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01581215.html", + "authors": null, + "icons": [ + { + "class": "SND", + "label": "Voice", + "title": "Voice" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": [ + { + "id": "77839", + "name": "\u306b\u3085\u308b\u306b\u3083", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E3%81%AB%E3%82%85%E3%82%8B%E3%81%AB%E3%82%83\/ana_flg\/all" + } + ], + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp1.jpg", + "file_size": "1365967", + "file_size_unit": "1.3MB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879475", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp1.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp1" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp2.jpg", + "file_size": "1302262", + "file_size_unit": "1.24MB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879476", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp2.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp2" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp3.jpg", + "file_size": "1053532", + "file_size_unit": "1MB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879477", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp3.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp3" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp4.jpg", + "file_size": "1001682", + "file_size_unit": "978.21KB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879478", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp4.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp4" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp5.jpg", + "file_size": "1251218", + "file_size_unit": "1.19MB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879479", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp5.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp5" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp6.jpg", + "file_size": "1093995", + "file_size_unit": "1.04MB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879480", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp6.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp6" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp7.jpg", + "file_size": "1254594", + "file_size_unit": "1.2MB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879481", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp7.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp7.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp7.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp7" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp8.jpg", + "file_size": "990959", + "file_size_unit": "967.73KB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879482", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp8.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp8.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp8.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp8" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp9.jpg", + "file_size": "931515", + "file_size_unit": "909.68KB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879483", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp9.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp9.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp9.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp9" + }, + { + "workno": "RJ01581215", + "type": "image_sample", + "file_name": "RJ01581215_img_smp10.jpg", + "file_size": "823138", + "file_size_unit": "803.85KB", + "width": "1417", + "height": "2000", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 17:41:05", + "id": "68879484", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp10.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581215_img_smp10.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp10.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp10" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp1.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp2.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp3.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp4.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp5.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp6.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp7.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp8.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp9.jpg", + "width": 1417, + "height": 2000 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581215_img_smp10.jpg", + "width": 1417, + "height": 2000 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01588156", + "inservice": 1, + "name": "\u30ac\u30fc\u30eb\u30ba\u30d3\u30fc\u30c8\uff01-\u30a4\u30fc\u30d3\u30eb \u30ea\u30a8-", + "nameMasked": "\u30ac\u30fc\u30eb\u30ba\u30d3\u30fc\u30c8\uff01-\u30a4\u30fc\u30d3\u30eb \u30ea\u30a8-", + "description": "\u7363\u5316\u3057\u305f\u91ce\u6027\u306e\u96cc\u30fb\u30ea\u30a8\u306b\u3001\u5727\u5012\u7684\u306a\u683c\u95d8\u6280\u3068\u6fc3\u539a\u30d5\u30a7\u30ed\u30e2\u30f3\u3067\u9aa8\u629c\u304d\u306b\u3055\u308c\u3066\u3044\u304f\u9006\u30ea\u30e7\u30ca\u6f2b\u753b\u3067\u3059\u3002\u591a\u5f69\u306a\u6253\u6483\u3084\u7d5e\u3081\u6280\u3001\u305d\u3057\u3066\u5897\u5e45\u3057\u305f\u91ce\u751f\u30d5\u30a7\u30ed\u30e2\u30f3\u3067\u8ffd\u3044\u8fbc\u307e\u308c\u308b\u30cf\u30fc\u30c9M\u683c\u95d8\u306a\u5185\u5bb9\u3067\u3059\u3002", + "descriptionMasked": "\u7363\u5316\u3057\u305f\u91ce\u6027\u306e\u96cc\u30fb\u30ea\u30a8\u306b\u3001\u5727\u5012\u7684\u306a\u683c\u95d8\u6280\u3068\u6fc3\u539a\u30d5\u30a7\u30ed\u30e2\u30f3\u3067\u9aa8\u629c\u304d\u306b\u3055\u308c\u3066\u3044\u304f\u9006\u30ea\u30e7\u30ca\u6f2b\u753b\u3067\u3059\u3002\u591a\u5f69\u306a\u6253\u6483\u3084\u7d5e\u3081\u6280\u3001\u305d\u3057\u3066\u5897\u5e45\u3057\u305f\u91ce\u751f\u30d5\u30a7\u30ed\u30e2\u30f3\u3067\u8ffd\u3044\u8fbc\u307e\u308c\u308b\u30cf\u30fc\u30c9M\u683c\u95d8\u306a\u5185\u5bb9\u3067\u3059\u3002", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01588156.html", + "category": "doujin", + "fileType": "IJP", + "dlFormat": 0, + "img": { + "fileName": "RJ01588156_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_main_240x240.jpg", + "altName": "\u30ac\u30fc\u30eb\u30ba\u30d3\u30fc\u30c8\uff01-\u30a4\u30fc\u30d3\u30eb \u30ea\u30a8- [The Nation of Head Scissors]", + "altNameMasked": "\u30ac\u30fc\u30eb\u30ba\u30d3\u30fc\u30c8\uff01-\u30a4\u30fc\u30d3\u30eb \u30ea\u30a8- [The Nation of Head Scissors]" + }, + "maker": { + "id": "RG15338", + "name": "The Nation of Head Scissors", + "nameEn": "The Nation of Head Scissors", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG15338.html" + }, + "type": { + "id": "MNG", + "label": "Manga", + "idConfig": "comic", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/MNG", + "book": null + }, + "price": 770, + "officialPrice": 770, + "localePrice": { + "en_US": 4.85, + "ar_AE": 4.85, + "es_ES": 4.18, + "de_DE": 4.18, + "fr_FR": 4.18, + "it_IT": 4.18, + "pt_BR": 4.18, + "zh_TW": 155, + "zh_CN": 33.48, + "ko_KR": 7264, + "id_ID": 82309, + "vi_VN": 127126, + "th_TH": 158.17, + "sv_SE": 45.23 + }, + "localeOfficialPrice": { + "en_US": 4.85, + "ar_AE": 4.85, + "es_ES": 4.18, + "de_DE": 4.18, + "fr_FR": 4.18, + "it_IT": 4.18, + "pt_BR": 4.18, + "zh_TW": 155, + "zh_CN": 33.48, + "ko_KR": 7264, + "id_ID": 82309, + "vi_VN": 127126, + "th_TH": 158.17, + "sv_SE": 45.23 + }, + "currencyPrice": { + "JPY": 770, + "USD": 4.849837687899718, + "EUR": 4.181821242891583, + "GBP": 3.619199996991834, + "TWD": 154.96699404282725, + "CNY": 33.476368726984994, + "KRW": 7264.1509433962265, + "IDR": 82308.92570817744, + "VND": 127125.63975565461, + "THB": 158.1725930034305, + "SEK": 45.228403437358665, + "HKD": 37.96469776156198, + "SGD": 6.202479541886472, + "CAD": 6.671408854259175, + "MYR": 19.182429890709972, + "BRL": 25.43856751131521, + "AUD": 6.957150278963656, + "PHP": 290.51122429730236, + "MXN": 86.31996681725951, + "NZD": 8.321742335080899, + "INR": 455.1903523291558 + }, + "currencyOfficialPrice": { + "JPY": 770, + "USD": 4.849837687899718, + "EUR": 4.181821242891583, + "GBP": 3.619199996991834, + "TWD": 154.96699404282725, + "CNY": 33.476368726984994, + "KRW": 7264.1509433962265, + "IDR": 82308.92570817744, + "VND": 127125.63975565461, + "THB": 158.1725930034305, + "SEK": 45.228403437358665, + "HKD": 37.96469776156198, + "SGD": 6.202479541886472, + "CAD": 6.671408854259175, + "MYR": 19.182429890709972, + "BRL": 25.43856751131521, + "AUD": 6.957150278963656, + "PHP": 290.51122429730236, + "MXN": 86.31996681725951, + "NZD": 8.321742335080899, + "INR": 455.1903523291558 + }, + "discountPercentage": null, + "point": 35, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": false, + "tags": [ + { + "id": 533, + "label": "Battle Fuck", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/533" + }, + { + "id": 251, + "label": "Kemo \/ Animalization \/ Transfur", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/251" + }, + { + "id": 405, + "label": "Wrestler \/ Fighter", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/405" + }, + { + "id": 12, + "label": "Fighting \/ Martial Arts", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/12" + }, + { + "id": 536, + "label": "Femdom", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/536" + }, + { + "id": 115, + "label": "Reverse Rape", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/115" + }, + { + "id": 144, + "label": "Verbal Humiliation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/144" + }, + { + "id": 156, + "label": "Submissive Man", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/156" + } + ], + "tagsReplaced": [ + { + "id": 533, + "label": "Battle Fuck", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/533" + }, + { + "id": 251, + "label": "Kemo \/ Animalization \/ Transfur", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/251" + }, + { + "id": 405, + "label": "Wrestler \/ Fighter", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/405" + }, + { + "id": 12, + "label": "Fighting \/ Martial Arts", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/12" + }, + { + "id": 536, + "label": "Femdom", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/536" + }, + { + "id": 115, + "label": "Reverse R", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/115" + }, + { + "id": 144, + "label": "Verbal Humiliation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/144" + }, + { + "id": 156, + "label": "Submissive Man", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/156" + } + ], + "siteId": "maniax", + "options": [ "VET", "WPD", "ENG", "JPN", "DLP", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 294, + "showDownload": 1, + "isShowRate": true, + "rate": { + "count": 5, + "averageStar": 40 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01588156.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01588156.html", + "authors": null, + "icons": null, + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01588156", + "type": "image_sample", + "file_name": "RJ01588156_img_smp1.jpg", + "file_size": "638974", + "file_size_unit": "624KB", + "width": "1240", + "height": "1754", + "hash": null, + "display_mode": "", + "update_date": "2026-03-22 20:09:04", + "id": "68852908", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp1.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588156_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp1" + }, + { + "workno": "RJ01588156", + "type": "image_sample", + "file_name": "RJ01588156_img_smp2.jpg", + "file_size": "704471", + "file_size_unit": "687.96KB", + "width": "1240", + "height": "1754", + "hash": null, + "display_mode": "", + "update_date": "2026-03-22 20:09:04", + "id": "68852909", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp2.jpg", + "path_short": "doujin\/RJ01589000\/RJ01588156_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp2" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp1.jpg", + "width": 1240, + "height": 1754 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01589000\/RJ01588156_img_smp2.jpg", + "width": 1240, + "height": 1754 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01572939", + "inservice": 1, + "name": "\u4ee4\u548cDE\u53e3\u30ea\u30db\u30a4Peppermint with KANON \u306f\u306a\u307e\u308b\u3048\u3067\u3043\u3057\u3087\u3093", + "nameMasked": "\u4ee4\u548cDE\u53e3\u30ea\u30db\u30a4Peppermint with KANON \u306f\u306a\u307e\u308b\u3048\u3067\u3043\u3057\u3087\u3093", + "description": "Peppermint\u672c\u7de8\u3068DLC\u304c\u30bb\u30c3\u30c8\u306b\u306a\u3063\u3066\u767b\u5834\uff01", + "descriptionMasked": "Peppermint\u672c\u7de8\u3068DLC\u304c\u30bb\u30c3\u30c8\u306b\u306a\u3063\u3066\u767b\u5834\uff01", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01572939.html", + "category": "doujin", + "fileType": "EXE", + "dlFormat": 0, + "img": { + "fileName": "RJ01572939_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_main_240x240.jpg", + "altName": "\u4ee4\u548cDE\u53e3\u30ea\u30db\u30a4Peppermint with KANON \u306f\u306a\u307e\u308b\u3048\u3067\u3043\u3057\u3087\u3093 [BLACK PANDA]", + "altNameMasked": "\u4ee4\u548cDE\u53e3\u30ea\u30db\u30a4Peppermint with KANON \u306f\u306a\u307e\u308b\u3048\u3067\u3043\u3057\u3087\u3093 [BLACK PANDA]" + }, + "maker": { + "id": "RG14727", + "name": "BLACK PANDA", + "nameEn": "BLACK PANDA", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG14727.html" + }, + "type": { + "id": "RPG", + "label": "Role-playing", + "idConfig": "game", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/RPG", + "book": null + }, + "price": 1848, + "officialPrice": 2640, + "localePrice": { + "en_US": 11.64, + "ar_AE": 11.64, + "es_ES": 10.04, + "de_DE": 10.04, + "fr_FR": 10.04, + "it_IT": 10.04, + "pt_BR": 10.04, + "zh_TW": 372, + "zh_CN": 80.34, + "ko_KR": 17434, + "id_ID": 197541, + "vi_VN": 305102, + "th_TH": 379.61, + "sv_SE": 108.55 + }, + "localeOfficialPrice": { + "en_US": 16.63, + "ar_AE": 16.63, + "es_ES": 14.34, + "de_DE": 14.34, + "fr_FR": 14.34, + "it_IT": 14.34, + "pt_BR": 14.34, + "zh_TW": 531, + "zh_CN": 114.78, + "ko_KR": 24906, + "id_ID": 282202, + "vi_VN": 435859, + "th_TH": 542.31, + "sv_SE": 155.07 + }, + "currencyPrice": { + "JPY": 1848, + "USD": 11.639610450959323, + "EUR": 10.036370982939799, + "GBP": 8.686079992780401, + "TWD": 371.9207857027854, + "CNY": 80.343284944764, + "KRW": 17433.962264150945, + "IDR": 197541.42169962585, + "VND": 305101.5354135711, + "THB": 379.61422320823317, + "SEK": 108.54816824966079, + "HKD": 91.11527462774875, + "SGD": 14.885950900527533, + "CAD": 16.01138125022202, + "MYR": 46.03783173770393, + "BRL": 61.0525620271565, + "AUD": 16.697160669512776, + "PHP": 697.2269383135257, + "MXN": 207.16792036142283, + "NZD": 19.97218160419416, + "INR": 1092.456845589974 + }, + "currencyOfficialPrice": { + "JPY": 2640, + "USD": 16.62801492994189, + "EUR": 14.33767283277114, + "GBP": 12.408685703972, + "TWD": 531.3154081468363, + "CNY": 114.77612134966284, + "KRW": 24905.66037735849, + "IDR": 282202.0309994655, + "VND": 435859.3363051015, + "THB": 542.3060331546188, + "SEK": 155.0688117852297, + "HKD": 130.16467803964107, + "SGD": 21.26564414361076, + "CAD": 22.873401786031454, + "MYR": 65.76833105386277, + "BRL": 87.21794575308071, + "AUD": 23.853086670732534, + "PHP": 996.0384833050367, + "MXN": 295.95417194488977, + "NZD": 28.531688005991654, + "INR": 1560.6526365571058 + }, + "discountPercentage": 30, + "point": 84, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1776351600, + "tags": [ + { + "id": 73, + "label": "Anime", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/73" + }, + { + "id": 431, + "label": "Dot \/ Pixel", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/431" + }, + { + "id": 207, + "label": "Loli", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/207" + }, + { + "id": 323, + "label": "Ahegao \/ Gapeface", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/323" + }, + { + "id": 501, + "label": "Squirting \/ Gushing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/501" + }, + { + "id": 132, + "label": "Childbirth", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/132" + }, + { + "id": 129, + "label": "Pregnancy \/ Impregnation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/129" + }, + { + "id": 183, + "label": "Tiny Breasts", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/183" + } + ], + "tagsReplaced": [ + { + "id": 73, + "label": "Anime", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/73" + }, + { + "id": 431, + "label": "Dot \/ Pixel", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/431" + }, + { + "id": 207, + "label": "Petite", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/207" + }, + { + "id": 323, + "label": "Ahegao \/ Gapeface", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/323" + }, + { + "id": 501, + "label": "Squirting \/ Gushing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/501" + }, + { + "id": 132, + "label": "Childbirth", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/132" + }, + { + "id": 129, + "label": "Pregnancy \/ Impregnation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/129" + }, + { + "id": 183, + "label": "Tiny Breasts", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/183" + } + ], + "siteId": "maniax", + "options": [ "SND", "MS2", "JPN", "ENG", "CHI_HANT", "CHI_HANS", "KO_KR", "CHI", "TRI", "ORW", "RegionHiddenFilter" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 149, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 3, + "averageStar": 40 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01572939.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01572939.html", + "authors": null, + "icons": [ + { + "class": "SND", + "label": "Voice", + "title": "Voice" + }, + { + "class": "MS2", + "label": "Music", + "title": "Music" + }, + { + "class": "TRI", + "label": "Trial version", + "title": "Trial version" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "for_pc" ], + "pcGameImgUrls": [], + "voiceBys": [ + { + "id": "17386", + "name": "\u5c71\u7530\u3058\u3047\u307f\u5b50", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E5%B1%B1%E7%94%B0%E3%81%98%E3%81%87%E3%81%BF%E5%AD%90\/ana_flg\/all" + }, + { + "id": "42765", + "name": "\u5c0f\u82b1\u8863\u3053\u3063\u3053", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E5%B0%8F%E8%8A%B1%E8%A1%A3%E3%81%93%E3%81%A3%E3%81%93\/ana_flg\/all" + }, + { + "id": "58834", + "name": "\u4e59\u5009\u3085\u3044", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E4%B9%99%E5%80%89%E3%82%85%E3%81%84\/ana_flg\/all" + } + ], + "creatorBys": [ + { + "id": "71665", + "name": "\u8179\u9ed2\u3071\u3093\u3060", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E8%85%B9%E9%BB%92%E3%81%B1%E3%82%93%E3%81%A0\/ana_flg\/all" + } + ], + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01572939", + "type": "image_sample", + "file_name": "RJ01572939_img_smp1.jpg", + "file_size": "792624", + "file_size_unit": "774.05KB", + "width": "1280", + "height": "960", + "hash": null, + "display_mode": "", + "update_date": "2026-03-01 16:37:06", + "id": "68489715", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp1.jpg", + "path_short": "doujin\/RJ01573000\/RJ01572939_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp1" + }, + { + "workno": "RJ01572939", + "type": "image_sample", + "file_name": "RJ01572939_img_smp2.jpg", + "file_size": "768197", + "file_size_unit": "750.19KB", + "width": "1280", + "height": "960", + "hash": null, + "display_mode": "", + "update_date": "2026-03-01 16:37:06", + "id": "68489716", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp2.jpg", + "path_short": "doujin\/RJ01573000\/RJ01572939_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp2" + }, + { + "workno": "RJ01572939", + "type": "image_sample", + "file_name": "RJ01572939_img_smp3.jpg", + "file_size": "848022", + "file_size_unit": "828.15KB", + "width": "1280", + "height": "960", + "hash": null, + "display_mode": "", + "update_date": "2026-03-01 16:37:06", + "id": "68489717", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp3.jpg", + "path_short": "doujin\/RJ01573000\/RJ01572939_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp3" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp1.jpg", + "width": 1280, + "height": 960 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp2.jpg", + "width": 1280, + "height": 960 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01573000\/RJ01572939_img_smp3.jpg", + "width": 1280, + "height": 960 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01578952", + "inservice": 1, + "name": "\u3010VR\u3011\u30cf\u30fc\u30ec\u30e0\u306a\u65e5\u5e38 - \u30a4\u30c1\u30b4(\u8ffd\u52a0\u30ad\u30e3\u30e9)", + "nameMasked": "\u3010VR\u3011\u30cf\u30fc\u30ec\u30e0\u306a\u65e5\u5e38 - \u30a4\u30c1\u30b4(\u8ffd\u52a0\u30ad\u30e3\u30e9)", + "description": "\u3010VR\u3011\u30cf\u30fc\u30ec\u30e0\u306a\u65e5\u5e38 - \u30a4\u30c1\u30b4\u8ffd\u52a0\u30ad\u30e3\u30e9 | \u30d1\u30b9\u30b9\u30eb\u30fc & \u30b7\u30fc\u30f3\u30e1\u30c3\u30b7\u30e5 & DepthAPI\u3001MetaQuest3, 3S\u306e\u6700\u65b0MR\u6a5f\u80fd\u3067\u3042\u306a\u305f\u306e\u90e8\u5c4b\u306b\u5973\u306e\u5b50\u305f\u3061\u304c\u51fa\u73fe! \u5de8\u5927\u5316\/\u5c0f\u4eba\u5316\u3001\u5de8\u4e73\u5316\/\u5fae\u4e73\u5316\u3001\u5973\u306e\u5b50\u3092\u81ea\u7531\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba!", + "descriptionMasked": "\u3010VR\u3011\u30cf\u30fc\u30ec\u30e0\u306a\u65e5\u5e38 - \u30a4\u30c1\u30b4\u8ffd\u52a0\u30ad\u30e3\u30e9 | \u30d1\u30b9\u30b9\u30eb\u30fc & \u30b7\u30fc\u30f3\u30e1\u30c3\u30b7\u30e5 & DepthAPI\u3001MetaQuest3, 3S\u306e\u6700\u65b0MR\u6a5f\u80fd\u3067\u3042\u306a\u305f\u306e\u90e8\u5c4b\u306b\u5973\u306e\u5b50\u305f\u3061\u304c\u51fa\u73fe! \u5de8\u5927\u5316\/\u5c0f\u4eba\u5316\u3001\u5de8\u4e73\u5316\/\u5fae\u4e73\u5316\u3001\u5973\u306e\u5b50\u3092\u81ea\u7531\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba!", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01578952.html", + "category": "doujin", + "fileType": "ET1", + "dlFormat": 0, + "img": { + "fileName": "RJ01578952_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_main_240x240.jpg", + "altName": "\u3010VR\u3011\u30cf\u30fc\u30ec\u30e0\u306a\u65e5\u5e38 - \u30a4\u30c1\u30b4(\u8ffd\u52a0\u30ad\u30e3\u30e9) [VR game shop]", + "altNameMasked": "\u3010VR\u3011\u30cf\u30fc\u30ec\u30e0\u306a\u65e5\u5e38 - \u30a4\u30c1\u30b4(\u8ffd\u52a0\u30ad\u30e3\u30e9) [VR game shop]" + }, + "maker": { + "id": "RG62059", + "name": "VR game shop", + "nameEn": "VR game shop", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG62059.html" + }, + "type": { + "id": "SLN", + "label": "Simulation", + "idConfig": "game", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/SLN", + "book": null + }, + "price": 231, + "officialPrice": 330, + "localePrice": { + "en_US": 1.45, + "ar_AE": 1.45, + "es_ES": 1.25, + "de_DE": 1.25, + "fr_FR": 1.25, + "it_IT": 1.25, + "pt_BR": 1.25, + "zh_TW": 46, + "zh_CN": 10.04, + "ko_KR": 2179, + "id_ID": 24693, + "vi_VN": 38138, + "th_TH": 47.45, + "sv_SE": 13.57 + }, + "localeOfficialPrice": { + "en_US": 2.08, + "ar_AE": 2.08, + "es_ES": 1.79, + "de_DE": 1.79, + "fr_FR": 1.79, + "it_IT": 1.79, + "pt_BR": 1.79, + "zh_TW": 66, + "zh_CN": 14.35, + "ko_KR": 3113, + "id_ID": 35275, + "vi_VN": 54482, + "th_TH": 67.79, + "sv_SE": 19.38 + }, + "currencyPrice": { + "JPY": 231, + "USD": 1.4549513063699153, + "EUR": 1.2545463728674748, + "GBP": 1.0857599990975502, + "TWD": 46.490098212848174, + "CNY": 10.0429106180955, + "KRW": 2179.245283018868, + "IDR": 24692.67771245323, + "VND": 38137.69192669639, + "THB": 47.451777901029146, + "SEK": 13.568521031207599, + "HKD": 11.389409328468593, + "SGD": 1.8607438625659416, + "CAD": 2.0014226562777524, + "MYR": 5.7547289672129915, + "BRL": 7.631570253394562, + "AUD": 2.087145083689097, + "PHP": 87.15336728919071, + "MXN": 25.895990045177854, + "NZD": 2.49652270052427, + "INR": 136.55710569874674 + }, + "currencyOfficialPrice": { + "JPY": 330, + "USD": 2.0785018662427364, + "EUR": 1.7922091040963926, + "GBP": 1.5510857129965, + "TWD": 66.41442601835453, + "CNY": 14.347015168707856, + "KRW": 3113.2075471698113, + "IDR": 35275.25387493319, + "VND": 54482.41703813769, + "THB": 67.78825414432735, + "SEK": 19.383601473153714, + "HKD": 16.270584754955134, + "SGD": 2.658205517951345, + "CAD": 2.859175223253932, + "MYR": 8.221041381732846, + "BRL": 10.902243219135089, + "AUD": 2.9816358338415667, + "PHP": 124.50481041312959, + "MXN": 36.99427149311122, + "NZD": 3.5664610007489568, + "INR": 195.08157956963822 + }, + "discountPercentage": 30, + "point": 10, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1775142000, + "tags": [ + { + "id": 509, + "label": "3D Works", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/509" + }, + { + "id": 71, + "label": "Cross-section View", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/71" + }, + { + "id": 8, + "label": "Slice of Life \/ Daily Living", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/8" + }, + { + "id": 194, + "label": "Supersize", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/194" + } + ], + "tagsReplaced": [ + { + "id": 509, + "label": "3D Works", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/509" + }, + { + "id": 71, + "label": "Cross-section View", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/71" + }, + { + "id": 8, + "label": "Slice of Life \/ Daily Living", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/8" + }, + { + "id": 194, + "label": "Supersize", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/194" + } + ], + "siteId": "maniax", + "options": [ "ENG", "CHI", "CHI_HANS", "CHI_HANT", "JPN", "KO_KR", "VRO", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 93, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 2, + "averageStar": 45 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01578952.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01578952.html", + "authors": null, + "icons": null, + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "for_pc" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01578952", + "type": "image_sample", + "file_name": "RJ01578952_img_smp1.jpg", + "file_size": "484922", + "file_size_unit": "473.56KB", + "width": "1024", + "height": "1024", + "hash": null, + "display_mode": "", + "update_date": "2026-03-10 17:41:06", + "id": "68701579", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp1.jpg", + "path_short": "doujin\/RJ01579000\/RJ01578952_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp1" + }, + { + "workno": "RJ01578952", + "type": "image_sample", + "file_name": "RJ01578952_img_smp2.jpg", + "file_size": "499154", + "file_size_unit": "487.46KB", + "width": "1024", + "height": "1024", + "hash": null, + "display_mode": "", + "update_date": "2026-03-10 17:41:06", + "id": "68701580", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp2.jpg", + "path_short": "doujin\/RJ01579000\/RJ01578952_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp2" + }, + { + "workno": "RJ01578952", + "type": "image_sample", + "file_name": "RJ01578952_img_smp3.jpg", + "file_size": "469095", + "file_size_unit": "458.1KB", + "width": "1024", + "height": "1024", + "hash": null, + "display_mode": "", + "update_date": "2026-03-10 17:41:06", + "id": "68701581", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp3.jpg", + "path_short": "doujin\/RJ01579000\/RJ01578952_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp3" + }, + { + "workno": "RJ01578952", + "type": "image_sample", + "file_name": "RJ01578952_img_smp4.jpg", + "file_size": "539121", + "file_size_unit": "526.49KB", + "width": "1080", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-10 17:41:06", + "id": "68701582", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp4.jpg", + "path_short": "doujin\/RJ01579000\/RJ01578952_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp4" + }, + { + "workno": "RJ01578952", + "type": "image_sample", + "file_name": "RJ01578952_img_smp5.jpg", + "file_size": "486689", + "file_size_unit": "475.28KB", + "width": "1024", + "height": "1024", + "hash": null, + "display_mode": "", + "update_date": "2026-03-10 17:41:06", + "id": "68701583", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp5.jpg", + "path_short": "doujin\/RJ01579000\/RJ01578952_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp5" + }, + { + "workno": "RJ01578952", + "type": "image_sample", + "file_name": "RJ01578952_img_smp6.jpg", + "file_size": "460164", + "file_size_unit": "449.38KB", + "width": "1024", + "height": "1024", + "hash": null, + "display_mode": "", + "update_date": "2026-03-10 17:41:06", + "id": "68701584", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp6.jpg", + "path_short": "doujin\/RJ01579000\/RJ01578952_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp6" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp1.jpg", + "width": 1024, + "height": 1024 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp2.jpg", + "width": 1024, + "height": 1024 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp3.jpg", + "width": 1024, + "height": 1024 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp4.jpg", + "width": 1080, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp5.jpg", + "width": 1024, + "height": 1024 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01579000\/RJ01578952_img_smp6.jpg", + "width": 1024, + "height": 1024 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01586155", + "inservice": 1, + "name": "The \"Impulsive Woman\" Keeping You", + "nameMasked": "The \"Impulsive Woman\" Keeping You", + "description": "If you were kept by a woman dealing with frustrations, what kind of life would you live? What would that love be to you? Please enjoy the size-fetish eroticism-infused love of this \"impulsive woman.\"", + "descriptionMasked": "If you were kept by a woman dealing with frustrations, what kind of life would you live? What would that love be to you? Please enjoy the size-fetish eroticism-infused love of this \"impulsive woman.\"", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01586155.html", + "category": "doujin", + "fileType": "MP3", + "dlFormat": 0, + "img": { + "fileName": "RJ01586155_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_main_240x240.jpg", + "altName": "The \"Impulsive Woman\" Keeping You [ShinyuPan Labs]", + "altNameMasked": "The \"Impulsive Woman\" Keeping You [ShinyuPan Labs]" + }, + "maker": { + "id": "RG01031047", + "name": "ShinyuPan Labs", + "nameEn": null, + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG01031047.html" + }, + "type": { + "id": "SOU", + "label": "Voice \/ ASMR", + "idConfig": "voice", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/SOU", + "book": null + }, + "price": 660, + "officialPrice": 660, + "localePrice": { + "en_US": 4.16, + "ar_AE": 4.16, + "es_ES": 3.58, + "de_DE": 3.58, + "fr_FR": 3.58, + "it_IT": 3.58, + "pt_BR": 3.58, + "zh_TW": 133, + "zh_CN": 28.69, + "ko_KR": 6226, + "id_ID": 70551, + "vi_VN": 108965, + "th_TH": 135.58, + "sv_SE": 38.77 + }, + "localeOfficialPrice": { + "en_US": 4.16, + "ar_AE": 4.16, + "es_ES": 3.58, + "de_DE": 3.58, + "fr_FR": 3.58, + "it_IT": 3.58, + "pt_BR": 3.58, + "zh_TW": 133, + "zh_CN": 28.69, + "ko_KR": 6226, + "id_ID": 70551, + "vi_VN": 108965, + "th_TH": 135.58, + "sv_SE": 38.77 + }, + "currencyPrice": { + "JPY": 660, + "USD": 4.157003732485473, + "EUR": 3.584418208192785, + "GBP": 3.102171425993, + "TWD": 132.82885203670907, + "CNY": 28.69403033741571, + "KRW": 6226.415094339623, + "IDR": 70550.50774986637, + "VND": 108964.83407627538, + "THB": 135.5765082886547, + "SEK": 38.76720294630743, + "HKD": 32.54116950991027, + "SGD": 5.31641103590269, + "CAD": 5.718350446507864, + "MYR": 16.44208276346569, + "BRL": 21.804486438270178, + "AUD": 5.963271667683133, + "PHP": 249.00962082625918, + "MXN": 73.98854298622244, + "NZD": 7.1329220014979136, + "INR": 390.16315913927644 + }, + "currencyOfficialPrice": { + "JPY": 660, + "USD": 4.157003732485473, + "EUR": 3.584418208192785, + "GBP": 3.102171425993, + "TWD": 132.82885203670907, + "CNY": 28.69403033741571, + "KRW": 6226.415094339623, + "IDR": 70550.50774986637, + "VND": 108964.83407627538, + "THB": 135.5765082886547, + "SEK": 38.76720294630743, + "HKD": 32.54116950991027, + "SGD": 5.31641103590269, + "CAD": 5.718350446507864, + "MYR": 16.44208276346569, + "BRL": 21.804486438270178, + "AUD": 5.963271667683133, + "PHP": 249.00962082625918, + "MXN": 73.98854298622244, + "NZD": 7.1329220014979136, + "INR": 390.16315913927644 + }, + "discountPercentage": null, + "point": 30, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": false, + "tags": [ + { + "id": 56, + "label": "Healing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/56" + }, + { + "id": 32, + "label": "Pure Love", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/32" + }, + { + "id": 539, + "label": "Body Size Disparity", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/539" + }, + { + "id": 13, + "label": "Heartwarming", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/13" + }, + { + "id": 135, + "label": "Masturbation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/135" + }, + { + "id": 194, + "label": "Supersize", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/194" + } + ], + "tagsReplaced": [ + { + "id": 56, + "label": "Healing", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/56" + }, + { + "id": 32, + "label": "Pure Love", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/32" + }, + { + "id": 539, + "label": "Body Size Disparity", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/539" + }, + { + "id": 13, + "label": "Heartwarming", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/13" + }, + { + "id": 135, + "label": "Masturbation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/135" + }, + { + "id": 194, + "label": "Supersize", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/194" + } + ], + "siteId": "maniax", + "options": [ "SND", "ENG", "CHI", "SPA", "CHI_HANS", "CHI_HANT", "JPN", "KO_KR", "DLP", "TRI", "OLY", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 61, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 0, + "averageStar": 0 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01586155.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01586155.html", + "authors": null, + "icons": [ + { + "class": "TRI", + "label": "Trial version", + "title": "Trial version" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "type_exclusive_01" ], + "pcGameImgUrls": [], + "voiceBys": [ + { + "id": "86960", + "name": "\u3042\u3055\u304e\u306d\u305a", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E3%81%82%E3%81%95%E3%81%8E%E3%81%AD%E3%81%9A\/ana_flg\/all" + } + ], + "creatorBys": [ + { + "id": "81885", + "name": "ShinyuPan \u89aa\u53cb\u30d1\u30f3", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/ShinyuPan+%E8%A6%AA%E5%8F%8B%E3%83%91%E3%83%B3\/ana_flg\/all" + } + ], + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01586155", + "type": "image_sample", + "file_name": "RJ01586155_img_smp1.jpg", + "file_size": "613576", + "file_size_unit": "599.2KB", + "width": "1920", + "height": "1440", + "hash": null, + "display_mode": "", + "update_date": "2026-03-23 13:52:04", + "id": "68874372", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_smp1.jpg", + "path_short": "doujin\/RJ01587000\/RJ01586155_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_smp1" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01587000\/RJ01586155_img_smp1.jpg", + "width": 1920, + "height": 1440 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01581002", + "inservice": 1, + "name": "BBQ\u5e30\u308a\u306e\u8eca\u5185\u3067\u8179\u75db\u306b\u8972\u308f\u308c\u305f\u30ae\u30e3\u30eb\u3061\u3083\u3093...\u3010\u8131\u7cde\u596e\u95d8\u8a18\u3011 \/ English ver.\u3007", + "nameMasked": "BBQ\u5e30\u308a\u306e\u8eca\u5185\u3067\u8179\u75db\u306b\u8972\u308f\u308c\u305f\u30ae\u30e3\u30eb\u3061\u3083\u3093...\u3010\u8131\u7cde\u596e\u95d8\u8a18\u3011 \/ English ver.\u3007", + "description": "BBQ\u306e\u83ef\u3068\u3057\u3066\u6025\u907d\u547c\u3070\u308c\u305f\u30ae\u30e3\u30eb\u306e\u3055\u3042\u3084\u306f\u5e30\u308a\u306e\u8eca\u3067\u8179\u75db\u306b\u8972\u308f\u308c\u3066\u3057\u307e\u3046...\u96a3\u306b\u5ea7\u3063\u3066\u3044\u308b\u3042\u306a\u305f\u306b\u300c\u304a\u306a\u3089\u3057\u3066\u3044\u3044?\u300d\u3068\u3068\u3093\u3067\u3082\u306a\u3044\u304a\u9858\u3044\u3092\u3059\u308b\u3002\u5f7c\u5973\u306e\u904b\u547d\u306f\u5982\u4f55\u306b...!?", + "descriptionMasked": "BBQ\u306e\u83ef\u3068\u3057\u3066\u6025\u907d\u547c\u3070\u308c\u305f\u30ae\u30e3\u30eb\u306e\u3055\u3042\u3084\u306f\u5e30\u308a\u306e\u8eca\u3067\u8179\u75db\u306b\u8972\u308f\u308c\u3066\u3057\u307e\u3046...\u96a3\u306b\u5ea7\u3063\u3066\u3044\u308b\u3042\u306a\u305f\u306b\u300c\u304a\u306a\u3089\u3057\u3066\u3044\u3044?\u300d\u3068\u3068\u3093\u3067\u3082\u306a\u3044\u304a\u9858\u3044\u3092\u3059\u308b\u3002\u5f7c\u5973\u306e\u904b\u547d\u306f\u5982\u4f55\u306b...!?", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01581002.html", + "category": "doujin", + "fileType": "MP4", + "dlFormat": 0, + "img": { + "fileName": "RJ01581002_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_main_240x240.jpg", + "altName": "BBQ\u5e30\u308a\u306e\u8eca\u5185\u3067\u8179\u75db\u306b\u8972\u308f\u308c\u305f\u30ae\u30e3\u30eb\u3061\u3083\u3093...\u3010\u8131\u7cde\u596e\u95d8\u8a18\u3011 \/ English ver.\u3007 [Dappyee]", + "altNameMasked": "BBQ\u5e30\u308a\u306e\u8eca\u5185\u3067\u8179\u75db\u306b\u8972\u308f\u308c\u305f\u30ae\u30e3\u30eb\u3061\u3083\u3093...\u3010\u8131\u7cde\u596e\u95d8\u8a18\u3011 \/ English ver.\u3007 [Dappyee]" + }, + "maker": { + "id": "RG47792", + "name": "Dappyee", + "nameEn": "Dappyee", + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG47792.html" + }, + "type": { + "id": "MOV", + "label": "Video", + "idConfig": "game", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/MOV", + "book": null + }, + "price": 220, + "officialPrice": 440, + "localePrice": { + "en_US": 1.39, + "ar_AE": 1.39, + "es_ES": 1.19, + "de_DE": 1.19, + "fr_FR": 1.19, + "it_IT": 1.19, + "pt_BR": 1.19, + "zh_TW": 44, + "zh_CN": 9.56, + "ko_KR": 2075, + "id_ID": 23517, + "vi_VN": 36322, + "th_TH": 45.19, + "sv_SE": 12.92 + }, + "localeOfficialPrice": { + "en_US": 2.77, + "ar_AE": 2.77, + "es_ES": 2.39, + "de_DE": 2.39, + "fr_FR": 2.39, + "it_IT": 2.39, + "pt_BR": 2.39, + "zh_TW": 89, + "zh_CN": 19.13, + "ko_KR": 4151, + "id_ID": 47034, + "vi_VN": 72643, + "th_TH": 90.38, + "sv_SE": 25.84 + }, + "currencyPrice": { + "JPY": 220, + "USD": 1.3856679108284908, + "EUR": 1.194806069397595, + "GBP": 1.0340571419976667, + "TWD": 44.27628401223635, + "CNY": 9.564676779138571, + "KRW": 2075.471698113208, + "IDR": 23516.835916622127, + "VND": 36321.61135875846, + "THB": 45.19216942955157, + "SEK": 12.922400982102475, + "HKD": 10.847056503303422, + "SGD": 1.7721370119675635, + "CAD": 1.9061168155026214, + "MYR": 5.480694254488564, + "BRL": 7.268162146090059, + "AUD": 1.9877572225610445, + "PHP": 83.0032069420864, + "MXN": 24.662847662074146, + "NZD": 2.3776406671659713, + "INR": 130.0543863797588 + }, + "currencyOfficialPrice": { + "JPY": 440, + "USD": 2.7713358216569817, + "EUR": 2.38961213879519, + "GBP": 2.0681142839953335, + "TWD": 88.5525680244727, + "CNY": 19.129353558277142, + "KRW": 4150.943396226416, + "IDR": 47033.671833244254, + "VND": 72643.22271751692, + "THB": 90.38433885910314, + "SEK": 25.84480196420495, + "HKD": 21.694113006606845, + "SGD": 3.544274023935127, + "CAD": 3.8122336310052427, + "MYR": 10.961388508977128, + "BRL": 14.536324292180119, + "AUD": 3.975514445122089, + "PHP": 166.0064138841728, + "MXN": 49.32569532414829, + "NZD": 4.755281334331943, + "INR": 260.1087727595176 + }, + "discountPercentage": 50, + "point": 10, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1774537200, + "tags": [ + { + "id": 509, + "label": "3D Works", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/509" + }, + { + "id": 49, + "label": "Clothed", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/49" + }, + { + "id": 161, + "label": "Scatology", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/161" + } + ], + "tagsReplaced": [ + { + "id": 509, + "label": "3D Works", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/509" + }, + { + "id": 49, + "label": "Clothed", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/49" + }, + { + "id": 161, + "label": "Scatology", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/161" + } + ], + "siteId": "maniax", + "options": [ "MV2", "DLP", "ENG", "JPN", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 56, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 0, + "averageStar": 0 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01581002.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01581002.html", + "authors": null, + "icons": null, + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01581002", + "type": "image_sample", + "file_name": "RJ01581002_img_smp1.jpg", + "file_size": "990218", + "file_size_unit": "967.01KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 15:50:05", + "id": "68598771", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp1.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581002_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp1" + }, + { + "workno": "RJ01581002", + "type": "image_sample", + "file_name": "RJ01581002_img_smp2.jpg", + "file_size": "848376", + "file_size_unit": "828.49KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 15:50:05", + "id": "68598772", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp2.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581002_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp2" + }, + { + "workno": "RJ01581002", + "type": "image_sample", + "file_name": "RJ01581002_img_smp3.jpg", + "file_size": "804105", + "file_size_unit": "785.26KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 15:50:05", + "id": "68598773", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp3.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581002_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp3" + }, + { + "workno": "RJ01581002", + "type": "image_sample", + "file_name": "RJ01581002_img_smp4.jpg", + "file_size": "873069", + "file_size_unit": "852.61KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-17 15:50:05", + "id": "68598774", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp4.jpg", + "path_short": "doujin\/RJ01582000\/RJ01581002_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp4" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp1.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp2.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp3.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01582000\/RJ01581002_img_smp4.jpg", + "width": 1920, + "height": 1080 + } + ] + }, + { + "rank": null, + "ageCategory": 3, + "sexCategory": 1, + "id": "RJ01534380", + "inservice": 1, + "name": "MANARI ~Half-Demon Shinobi~ Artbook", + "nameMasked": "MANARI ~Half-Demon Shinobi~ Artbook", + "description": "The digital artbook for \"Half-Demon Shinobi\" features an extensive collection of character illustrations, sketches, and scene artwork from the game, along with early character concepts that did not make it into the final release.", + "descriptionMasked": "The digital artbook for \"Half-Demon Shinobi\" features an extensive collection of character illustrations, sketches, and scene artwork from the game, along with early character concepts that did not make it into the final release.", + "url": "https:\/\/www.dlsite.com\/maniax\/work\/=\/product_id\/RJ01534380.html", + "category": "doujin", + "fileType": "PDF", + "dlFormat": 0, + "img": { + "fileName": "RJ01534380_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_main_240x240.jpg", + "altName": "MANARI ~Half-Demon Shinobi~ Artbook [Mango Party]", + "altNameMasked": "MANARI ~Half-Demon Shinobi~ Artbook [Mango Party]" + }, + "maker": { + "id": "RG01013218", + "name": "Mango Party", + "nameEn": null, + "url": "https:\/\/www.dlsite.com\/maniax\/circle\/profile\/=\/maker_id\/RG01013218.html" + }, + "type": { + "id": "ICG", + "label": "CG + Illustrations", + "idConfig": "illust", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/work_type\/ICG", + "book": null + }, + "price": 462, + "officialPrice": 660, + "localePrice": { + "en_US": 2.91, + "ar_AE": 2.91, + "es_ES": 2.51, + "de_DE": 2.51, + "fr_FR": 2.51, + "it_IT": 2.51, + "pt_BR": 2.51, + "zh_TW": 93, + "zh_CN": 20.09, + "ko_KR": 4358, + "id_ID": 49385, + "vi_VN": 76275, + "th_TH": 94.9, + "sv_SE": 27.14 + }, + "localeOfficialPrice": { + "en_US": 4.16, + "ar_AE": 4.16, + "es_ES": 3.58, + "de_DE": 3.58, + "fr_FR": 3.58, + "it_IT": 3.58, + "pt_BR": 3.58, + "zh_TW": 133, + "zh_CN": 28.69, + "ko_KR": 6226, + "id_ID": 70551, + "vi_VN": 108965, + "th_TH": 135.58, + "sv_SE": 38.77 + }, + "currencyPrice": { + "JPY": 462, + "USD": 2.9099026127398306, + "EUR": 2.5090927457349497, + "GBP": 2.1715199981951003, + "TWD": 92.98019642569635, + "CNY": 20.085821236191, + "KRW": 4358.490566037736, + "IDR": 49385.35542490646, + "VND": 76275.38385339278, + "THB": 94.90355580205829, + "SEK": 27.137042062415198, + "HKD": 22.778818656937187, + "SGD": 3.721487725131883, + "CAD": 4.002845312555505, + "MYR": 11.509457934425983, + "BRL": 15.263140506789124, + "AUD": 4.174290167378194, + "PHP": 174.30673457838142, + "MXN": 51.79198009035571, + "NZD": 4.99304540104854, + "INR": 273.1142113974935 + }, + "currencyOfficialPrice": { + "JPY": 660, + "USD": 4.157003732485473, + "EUR": 3.584418208192785, + "GBP": 3.102171425993, + "TWD": 132.82885203670907, + "CNY": 28.69403033741571, + "KRW": 6226.415094339623, + "IDR": 70550.50774986637, + "VND": 108964.83407627538, + "THB": 135.5765082886547, + "SEK": 38.76720294630743, + "HKD": 32.54116950991027, + "SGD": 5.31641103590269, + "CAD": 5.718350446507864, + "MYR": 16.44208276346569, + "BRL": 21.804486438270178, + "AUD": 5.963271667683133, + "PHP": 249.00962082625918, + "MXN": 73.98854298622244, + "NZD": 7.1329220014979136, + "INR": 390.16315913927644 + }, + "discountPercentage": 30, + "point": 21, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1776351600, + "tags": [ + { + "id": 63, + "label": "Buttocks", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/63" + }, + { + "id": 505, + "label": "Kunoichi (Ninja Girl)", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/505" + }, + { + "id": 125, + "label": "Foot Job", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/125" + }, + { + "id": 324, + "label": "Interspecies Sex", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/324" + }, + { + "id": 162, + "label": "Tentacle", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/162" + }, + { + "id": 128, + "label": "Internal Cumshot", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/128" + }, + { + "id": 116, + "label": "Orgy Sex", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/116" + }, + { + "id": 134, + "label": "Violation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/134" + } + ], + "tagsReplaced": [ + { + "id": 63, + "label": "Buttocks", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/63" + }, + { + "id": 505, + "label": "Kunoichi (Ninja Girl)", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/505" + }, + { + "id": 125, + "label": "Foot Job", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/125" + }, + { + "id": 324, + "label": "Interspecies Sex", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/324" + }, + { + "id": 162, + "label": "Tentacle", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/162" + }, + { + "id": 128, + "label": "Internal Cumshot", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/128" + }, + { + "id": 116, + "label": "Orgy Sex", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/116" + }, + { + "id": 134, + "label": "Violation", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/genre\/134" + } + ], + "siteId": "maniax", + "options": [ "DLP", "ENG", "CHI", "CHI_HANT", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 7, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 0, + "averageStar": 0 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/maniax\/mypage\/wishlist\/=\/product_id\/RJ01534380.html", + "cartUrl": "https:\/\/www.dlsite.com\/maniax\/cart\/=\/product_id\/RJ01534380.html", + "authors": null, + "icons": null, + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": [ + { + "id": "66353", + "name": "\u6a39\u61f6\u53eb\u5de5\u4f5c\u5ba4", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E6%A8%B9%E6%87%B6%E5%8F%AB%E5%B7%A5%E4%BD%9C%E5%AE%A4\/ana_flg\/all" + }, + { + "id": "79038", + "name": "\u7d33\u58eb\u5409\u5a03", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/%E7%B4%B3%E5%A3%AB%E5%90%89%E5%A8%83\/ana_flg\/all" + }, + { + "id": "89281", + "name": "Maker\u88fd\u9020\u6a5f", + "url": "https:\/\/www.dlsite.com\/maniax\/fsr\/=\/keyword_creater\/Maker%E8%A3%BD%E9%80%A0%E6%A9%9F\/ana_flg\/all" + } + ], + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01534380", + "type": "image_sample", + "file_name": "RJ01534380_img_smp1.jpg", + "file_size": "895396", + "file_size_unit": "874.41KB", + "width": "1921", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-02-11 01:57:07", + "id": "67131920", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp1.jpg", + "path_short": "doujin\/RJ01535000\/RJ01534380_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp1" + }, + { + "workno": "RJ01534380", + "type": "image_sample", + "file_name": "RJ01534380_img_smp2.jpg", + "file_size": "735088", + "file_size_unit": "717.86KB", + "width": "1921", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-02-11 01:57:07", + "id": "67131921", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp2.jpg", + "path_short": "doujin\/RJ01535000\/RJ01534380_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp2" + }, + { + "workno": "RJ01534380", + "type": "image_sample", + "file_name": "RJ01534380_img_smp3.jpg", + "file_size": "893673", + "file_size_unit": "872.73KB", + "width": "1921", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-02-11 01:57:07", + "id": "67131922", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp3.jpg", + "path_short": "doujin\/RJ01535000\/RJ01534380_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp3" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp1.jpg", + "width": 1921, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp2.jpg", + "width": 1921, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01535000\/RJ01534380_img_smp3.jpg", + "width": 1921, + "height": 1080 + } + ] + }, + { + "rank": null, + "ageCategory": 1, + "sexCategory": 1, + "id": "RJ01509602", + "inservice": 1, + "name": "\u308f\u308f\u306d\u3053\u306e\u3057\u307e", + "nameMasked": "\u308f\u308f\u306d\u3053\u306e\u3057\u307e", + "description": "\u304a\u306b\u304e\u308a\u3092\u307b\u304a\u3070\u3063\u3066\u307f\u3093\u306a\u3068\u4ef2\u826f\u304f\u3059\u308b\u3002\u98df\u3079\u305f\u3044\u308f\u305f\u3057\u306e\u304a\u306b\u304e\u308a\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u6c7a\u5b9a\u7248\uff01 \u300e\u308f\u308f\u306d\u3053\u306e\u3057\u307e\u300f\u306f \u304a\u306b\u304e\u308a\u3092\u307b\u304a\u3070\u308b\u3068\u72b6\u614b\u304c\u5909\u5316\u3059\u308b\u308f\u305f\u3057\u3092\u64cd\u4f5c\u3057\u3066\u306a\u305e\u306e\u3057\u307e\u306e\u8b0e\u306b\u8feb\u308a\u305f\u3044\u30b8\u30e3\u30f3\u30d7\u30a2\u30af\u30b7\u30e7\u30f3\u30b2\u30fc\u30e0\u3067\u3059\u3002", + "descriptionMasked": "\u304a\u306b\u304e\u308a\u3092\u307b\u304a\u3070\u3063\u3066\u307f\u3093\u306a\u3068\u4ef2\u826f\u304f\u3059\u308b\u3002\u98df\u3079\u305f\u3044\u308f\u305f\u3057\u306e\u304a\u306b\u304e\u308a\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u6c7a\u5b9a\u7248\uff01 \u300e\u308f\u308f\u306d\u3053\u306e\u3057\u307e\u300f\u306f \u304a\u306b\u304e\u308a\u3092\u307b\u304a\u3070\u308b\u3068\u72b6\u614b\u304c\u5909\u5316\u3059\u308b\u308f\u305f\u3057\u3092\u64cd\u4f5c\u3057\u3066\u306a\u305e\u306e\u3057\u307e\u306e\u8b0e\u306b\u8feb\u308a\u305f\u3044\u30b8\u30e3\u30f3\u30d7\u30a2\u30af\u30b7\u30e7\u30f3\u30b2\u30fc\u30e0\u3067\u3059\u3002", + "url": "https:\/\/www.dlsite.com\/home\/work\/=\/product_id\/RJ01509602.html", + "category": "doujin", + "fileType": "EXE", + "dlFormat": 0, + "img": { + "fileName": "RJ01509602_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_main_240x240.jpg", + "altName": "\u308f\u308f\u306d\u3053\u306e\u3057\u307e [KAJINOYU]", + "altNameMasked": "\u308f\u308f\u306d\u3053\u306e\u3057\u307e [KAJINOYU]" + }, + "maker": { + "id": "RG40345", + "name": "KAJINOYU", + "nameEn": "KAJINOYU", + "url": "https:\/\/www.dlsite.com\/home\/circle\/profile\/=\/maker_id\/RG40345.html" + }, + "type": { + "id": "ACN", + "label": "Action", + "idConfig": "game", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/work_type\/ACN", + "book": null + }, + "price": 110, + "officialPrice": 220, + "localePrice": { + "en_US": 0.69, + "ar_AE": 0.69, + "es_ES": 0.6, + "de_DE": 0.6, + "fr_FR": 0.6, + "it_IT": 0.6, + "pt_BR": 0.6, + "zh_TW": 22, + "zh_CN": 4.78, + "ko_KR": 1038, + "id_ID": 11758, + "vi_VN": 18161, + "th_TH": 22.6, + "sv_SE": 6.46 + }, + "localeOfficialPrice": { + "en_US": 1.39, + "ar_AE": 1.39, + "es_ES": 1.19, + "de_DE": 1.19, + "fr_FR": 1.19, + "it_IT": 1.19, + "pt_BR": 1.19, + "zh_TW": 44, + "zh_CN": 9.56, + "ko_KR": 2075, + "id_ID": 23517, + "vi_VN": 36322, + "th_TH": 45.19, + "sv_SE": 12.92 + }, + "currencyPrice": { + "JPY": 110, + "USD": 0.6928339554142454, + "EUR": 0.5974030346987975, + "GBP": 0.5170285709988334, + "TWD": 22.138142006118176, + "CNY": 4.7823383895692855, + "KRW": 1037.735849056604, + "IDR": 11758.417958311064, + "VND": 18160.80567937923, + "THB": 22.596084714775785, + "SEK": 6.461200491051238, + "HKD": 5.423528251651711, + "SGD": 0.8860685059837817, + "CAD": 0.9530584077513107, + "MYR": 2.740347127244282, + "BRL": 3.6340810730450297, + "AUD": 0.9938786112805222, + "PHP": 41.5016034710432, + "MXN": 12.331423831037073, + "NZD": 1.1888203335829857, + "INR": 65.0271931898794 + }, + "currencyOfficialPrice": { + "JPY": 220, + "USD": 1.3856679108284908, + "EUR": 1.194806069397595, + "GBP": 1.0340571419976667, + "TWD": 44.27628401223635, + "CNY": 9.564676779138571, + "KRW": 2075.471698113208, + "IDR": 23516.835916622127, + "VND": 36321.61135875846, + "THB": 45.19216942955157, + "SEK": 12.922400982102475, + "HKD": 10.847056503303422, + "SGD": 1.7721370119675635, + "CAD": 1.9061168155026214, + "MYR": 5.480694254488564, + "BRL": 7.268162146090059, + "AUD": 1.9877572225610445, + "PHP": 83.0032069420864, + "MXN": 24.662847662074146, + "NZD": 2.3776406671659713, + "INR": 130.0543863797588 + }, + "discountPercentage": 50, + "point": 5, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1774537200, + "tags": [ + { + "id": 431, + "label": "Dot \/ Pixel", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/431" + } + ], + "tagsReplaced": [ + { + "id": 431, + "label": "Dot \/ Pixel", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/431" + } + ], + "siteId": "home", + "options": [ "MS2", "JPN", "ENG", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 2, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 1, + "averageStar": 40 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/home\/mypage\/wishlist\/=\/product_id\/RJ01509602.html", + "cartUrl": "https:\/\/www.dlsite.com\/home\/cart\/=\/product_id\/RJ01509602.html", + "authors": null, + "icons": [ + { + "class": "GEN", + "label": "All Ages", + "title": "All Ages" + }, + { + "class": "MS2", + "label": "Music", + "title": "Music" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "for_pc" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": [ + { + "id": "23263", + "name": "\u304b\u3058\u306e\u3086", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/keyword_creater\/%E3%81%8B%E3%81%98%E3%81%AE%E3%82%86\/ana_flg\/all" + }, + { + "id": "23264", + "name": "KJY", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/keyword_creater\/KJY\/ana_flg\/all" + } + ], + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp1.jpg", + "file_size": "203371", + "file_size_unit": "198.6KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615238", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp1.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp1" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp2.jpg", + "file_size": "318490", + "file_size_unit": "311.03KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615239", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp2.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp2" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp3.jpg", + "file_size": "298472", + "file_size_unit": "291.48KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615240", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp3.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp3" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp4.jpg", + "file_size": "231004", + "file_size_unit": "225.59KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615241", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp4.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp4" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp5.jpg", + "file_size": "224512", + "file_size_unit": "219.25KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615242", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp5.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp5" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp6.jpg", + "file_size": "101652", + "file_size_unit": "99.27KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615243", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp6.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp6" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp7.jpg", + "file_size": "88230", + "file_size_unit": "86.16KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615244", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp7.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp7.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp7.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp7" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp8.jpg", + "file_size": "251066", + "file_size_unit": "245.18KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615245", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp8.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp8.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp8.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp8" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp9.jpg", + "file_size": "227652", + "file_size_unit": "222.32KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615246", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp9.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp9.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp9.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp9" + }, + { + "workno": "RJ01509602", + "type": "image_sample", + "file_name": "RJ01509602_img_smp10.jpg", + "file_size": "278746", + "file_size_unit": "272.21KB", + "width": "1920", + "height": "1080", + "hash": null, + "display_mode": "", + "update_date": "2026-03-06 11:07:08", + "id": "68615247", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp10.jpg", + "path_short": "doujin\/RJ01510000\/RJ01509602_img_smp10.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp10.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp10" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_main.jpg", + "width": 560, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp1.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp2.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp3.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp4.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp5.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp6.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp7.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp8.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp9.jpg", + "width": 1920, + "height": 1080 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01510000\/RJ01509602_img_smp10.jpg", + "width": 1920, + "height": 1080 + } + ] + }, + { + "rank": null, + "ageCategory": 1, + "sexCategory": 1, + "id": "RJ01548651", + "inservice": 1, + "name": "\u7570\u5909\u30ce\u89b3\u6e2c", + "nameMasked": "\u7570\u5909\u30ce\u89b3\u6e2c", + "description": "\u300c\u7570\u5909\u30ce\u89b3\u6e2c\u300d\u306f\u9593\u9055\u3044\u63a2\u3057\u30db\u30e9\u30fc\u30b2\u30fc\u30e0\u3067\u3059\u3002\u5404\u30b9\u30c6\u30fc\u30b860\u500b\u4ee5\u4e0a\u306e\u7570\u5909\u304c\u3042\u308a\u3001\u697d\u3057\u3081\u307e\u3059\uff01", + "descriptionMasked": "\u300c\u7570\u5909\u30ce\u89b3\u6e2c\u300d\u306f\u9593\u9055\u3044\u63a2\u3057\u30db\u30e9\u30fc\u30b2\u30fc\u30e0\u3067\u3059\u3002\u5404\u30b9\u30c6\u30fc\u30b860\u500b\u4ee5\u4e0a\u306e\u7570\u5909\u304c\u3042\u308a\u3001\u697d\u3057\u3081\u307e\u3059\uff01", + "url": "https:\/\/www.dlsite.com\/home\/work\/=\/product_id\/RJ01548651.html", + "category": "doujin", + "fileType": "EXE", + "dlFormat": 0, + "img": { + "fileName": "RJ01548651_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_main_240x240.jpg", + "altName": "\u7570\u5909\u30ce\u89b3\u6e2c [sirosiroDeveloper]", + "altNameMasked": "\u7570\u5909\u30ce\u89b3\u6e2c [sirosiroDeveloper]" + }, + "maker": { + "id": "RG01043964", + "name": "sirosiroDeveloper", + "nameEn": "sirosiroDeveloper", + "url": "https:\/\/www.dlsite.com\/home\/circle\/profile\/=\/maker_id\/RG01043964.html" + }, + "type": { + "id": "PZL", + "label": "Puzzle", + "idConfig": "game", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/work_type\/PZL", + "book": null + }, + "price": 616, + "officialPrice": 880, + "localePrice": { + "en_US": 3.88, + "ar_AE": 3.88, + "es_ES": 3.35, + "de_DE": 3.35, + "fr_FR": 3.35, + "it_IT": 3.35, + "pt_BR": 3.35, + "zh_TW": 124, + "zh_CN": 26.78, + "ko_KR": 5811, + "id_ID": 65847, + "vi_VN": 101701, + "th_TH": 126.54, + "sv_SE": 36.18 + }, + "localeOfficialPrice": { + "en_US": 5.54, + "ar_AE": 5.54, + "es_ES": 4.78, + "de_DE": 4.78, + "fr_FR": 4.78, + "it_IT": 4.78, + "pt_BR": 4.78, + "zh_TW": 177, + "zh_CN": 38.26, + "ko_KR": 8302, + "id_ID": 94067, + "vi_VN": 145286, + "th_TH": 180.77, + "sv_SE": 51.69 + }, + "currencyPrice": { + "JPY": 616, + "USD": 3.8798701503197743, + "EUR": 3.345456994313266, + "GBP": 2.895359997593467, + "TWD": 123.9735952342618, + "CNY": 26.781094981587998, + "KRW": 5811.320754716981, + "IDR": 65847.14056654196, + "VND": 101700.51180452369, + "THB": 126.5380744027444, + "SEK": 36.18272274988693, + "HKD": 30.37175820924958, + "SGD": 4.961983633509178, + "CAD": 5.337127083407339, + "MYR": 15.345943912567979, + "BRL": 20.350854009052167, + "AUD": 5.565720223170925, + "PHP": 232.4089794378419, + "MXN": 69.05597345380761, + "NZD": 6.6573938680647196, + "INR": 364.1522818633247 + }, + "currencyOfficialPrice": { + "JPY": 880, + "USD": 5.542671643313963, + "EUR": 4.77922427759038, + "GBP": 4.136228567990667, + "TWD": 177.1051360489454, + "CNY": 38.258707116554284, + "KRW": 8301.886792452831, + "IDR": 94067.34366648851, + "VND": 145286.44543503385, + "THB": 180.76867771820628, + "SEK": 51.6896039284099, + "HKD": 43.38822601321369, + "SGD": 7.088548047870254, + "CAD": 7.624467262010485, + "MYR": 21.922777017954257, + "BRL": 29.072648584360238, + "AUD": 7.951028890244178, + "PHP": 332.0128277683456, + "MXN": 98.65139064829658, + "NZD": 9.510562668663885, + "INR": 520.2175455190352 + }, + "discountPercentage": 30, + "point": 28, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1775142000, + "tags": [ + { + "id": 509, + "label": "3D Works", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/509" + }, + { + "id": 19, + "label": "Horror", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/19" + } + ], + "tagsReplaced": [ + { + "id": 509, + "label": "3D Works", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/509" + }, + { + "id": 19, + "label": "Horror", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/19" + } + ], + "siteId": "home", + "options": [ "MS2", "JPN", "ENG", "TRI", "OLY", "ORW" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 0, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 0, + "averageStar": 0 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/home\/mypage\/wishlist\/=\/product_id\/RJ01548651.html", + "cartUrl": "https:\/\/www.dlsite.com\/home\/cart\/=\/product_id\/RJ01548651.html", + "authors": null, + "icons": [ + { + "class": "GEN", + "label": "All Ages", + "title": "All Ages" + }, + { + "class": "MS2", + "label": "Music", + "title": "Music" + }, + { + "class": "TRI", + "label": "Trial version", + "title": "Trial version" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "type_exclusive_01", "for_pc" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp1.jpg", + "file_size": "271412", + "file_size_unit": "265.05KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895982", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp1.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp1" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp2.jpg", + "file_size": "265359", + "file_size_unit": "259.14KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895983", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp2.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp2" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp3.jpg", + "file_size": "54271", + "file_size_unit": "53KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895984", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp3.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp3" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp4.jpg", + "file_size": "316646", + "file_size_unit": "309.22KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895985", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp4.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp4" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp5.jpg", + "file_size": "271947", + "file_size_unit": "265.57KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895986", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp5.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp5" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp6.jpg", + "file_size": "266144", + "file_size_unit": "259.91KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895987", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp6.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp6" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp7.jpg", + "file_size": "229398", + "file_size_unit": "224.02KB", + "width": "1280", + "height": "720", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895988", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp7.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp7.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp7.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp7" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp8.jpg", + "file_size": "470955", + "file_size_unit": "459.92KB", + "width": "1365", + "height": "768", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895989", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp8.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp8.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp8.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp8" + }, + { + "workno": "RJ01548651", + "type": "image_sample", + "file_name": "RJ01548651_img_smp9.jpg", + "file_size": "296087", + "file_size_unit": "289.15KB", + "width": "1365", + "height": "768", + "hash": null, + "display_mode": "", + "update_date": "2026-03-18 11:03:05", + "id": "68895990", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp9.jpg", + "path_short": "doujin\/RJ01549000\/RJ01548651_img_smp9.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp9.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp9" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_main.jpg", + "width": 560, + "height": 315 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp1.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp2.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp3.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp4.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp5.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp6.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp7.jpg", + "width": 1280, + "height": 720 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp8.jpg", + "width": 1365, + "height": 768 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01549000\/RJ01548651_img_smp9.jpg", + "width": 1365, + "height": 768 + } + ] + }, + { + "rank": null, + "ageCategory": 1, + "sexCategory": 1, + "id": "RJ01582866", + "inservice": 1, + "name": "S-CLASS Lite \u2014 AI\u5c0f\u8aac\u30fbTRPG\u30fbRP\u7528 \u81e8\u5834\u611f\u63cf\u5199\u30d7\u30ed\u30f3\u30d7\u30c8", + "nameMasked": "S-CLASS Lite \u2014 AI\u5c0f\u8aac\u30fbTRPG\u30fbRP\u7528 \u81e8\u5834\u611f\u63cf\u5199\u30d7\u30ed\u30f3\u30d7\u30c8", + "description": "\u300c\u7dca\u5f35\u3057\u305f\u300d\u3068\u66f8\u304b\u306a\u3044\u3002\u3067\u3082\u8aad\u8005\u306e\u8eab\u4f53\u304c\u7dca\u5f35\u3059\u308b\u3002 \u5c0f\u8aac\u30fbRP\u30fbTRPG\u30fb\u57f7\u7b46\u88dc\u52a9\u2014\u2014\u3042\u3089\u3086\u308b\u5275\u4f5c\u306e\u6ca1\u5165\u611f\u3092\u5e95\u4e0a\u3052\u3059\u308b\u5b9f\u884c\u30d7\u30ed\u30c8\u30b3\u30eb\u3002 \u8a9e\u3089\u308c\u306a\u3044\u611f\u60c5\u304c\u3001\u6700\u3082\u91cd\u3044\u3002\u305d\u306e\u6587\u7ae0\u3092\u3001\u3042\u306a\u305f\u304c\u624b\u306b\u5165\u308c\u308b\u3002 \u300cBL\u30fb\u767e\u5408\u30fb\u803d\u7f8e\u30b7\u30fc\u30f3\u306e\u5f35\u529b\u63cf\u5199\u306b\u7279\u306b\u52b9\u679c\u7684\u300d", + "descriptionMasked": "\u300c\u7dca\u5f35\u3057\u305f\u300d\u3068\u66f8\u304b\u306a\u3044\u3002\u3067\u3082\u8aad\u8005\u306e\u8eab\u4f53\u304c\u7dca\u5f35\u3059\u308b\u3002 \u5c0f\u8aac\u30fbRP\u30fbTRPG\u30fb\u57f7\u7b46\u88dc\u52a9\u2014\u2014\u3042\u3089\u3086\u308b\u5275\u4f5c\u306e\u6ca1\u5165\u611f\u3092\u5e95\u4e0a\u3052\u3059\u308b\u5b9f\u884c\u30d7\u30ed\u30c8\u30b3\u30eb\u3002 \u8a9e\u3089\u308c\u306a\u3044\u611f\u60c5\u304c\u3001\u6700\u3082\u91cd\u3044\u3002\u305d\u306e\u6587\u7ae0\u3092\u3001\u3042\u306a\u305f\u304c\u624b\u306b\u5165\u308c\u308b\u3002 \u300cBL\u30fb\u767e\u5408\u30fb\u803d\u7f8e\u30b7\u30fc\u30f3\u306e\u5f35\u529b\u63cf\u5199\u306b\u7279\u306b\u52b9\u679c\u7684\u300d", + "url": "https:\/\/www.dlsite.com\/home\/work\/=\/product_id\/RJ01582866.html", + "category": "doujin", + "fileType": "TXT", + "dlFormat": 0, + "img": { + "fileName": "RJ01582866_img_main.jpg", + "originalUrl": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_main.jpg", + "resizeUrl": "\/\/img.dlsite.jp\/resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_main_240x240.jpg", + "altName": "S-CLASS Lite \u2014 AI\u5c0f\u8aac\u30fbTRPG\u30fbRP\u7528 \u81e8\u5834\u611f\u63cf\u5199\u30d7\u30ed\u30f3\u30d7\u30c8 [Black Box Studio \u00d7 Ideology]", + "altNameMasked": "S-CLASS Lite \u2014 AI\u5c0f\u8aac\u30fbTRPG\u30fbRP\u7528 \u81e8\u5834\u611f\u63cf\u5199\u30d7\u30ed\u30f3\u30d7\u30c8 [Black Box Studio \u00d7 Ideology]" + }, + "maker": { + "id": "RG01066925", + "name": "Black Box Studio \u00d7 Ideology", + "nameEn": null, + "url": "https:\/\/www.dlsite.com\/home\/circle\/profile\/=\/maker_id\/RG01066925.html" + }, + "type": { + "id": "TOL", + "label": "Tools \/ Accessories", + "idConfig": "etc", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/work_type\/TOL", + "book": null + }, + "price": 440, + "officialPrice": 550, + "localePrice": { + "en_US": 2.77, + "ar_AE": 2.77, + "es_ES": 2.39, + "de_DE": 2.39, + "fr_FR": 2.39, + "it_IT": 2.39, + "pt_BR": 2.39, + "zh_TW": 89, + "zh_CN": 19.13, + "ko_KR": 4151, + "id_ID": 47034, + "vi_VN": 72643, + "th_TH": 90.38, + "sv_SE": 25.84 + }, + "localeOfficialPrice": { + "en_US": 3.46, + "ar_AE": 3.46, + "es_ES": 2.99, + "de_DE": 2.99, + "fr_FR": 2.99, + "it_IT": 2.99, + "pt_BR": 2.99, + "zh_TW": 111, + "zh_CN": 23.91, + "ko_KR": 5189, + "id_ID": 58792, + "vi_VN": 90804, + "th_TH": 112.98, + "sv_SE": 32.31 + }, + "currencyPrice": { + "JPY": 440, + "USD": 2.7713358216569817, + "EUR": 2.38961213879519, + "GBP": 2.0681142839953335, + "TWD": 88.5525680244727, + "CNY": 19.129353558277142, + "KRW": 4150.943396226416, + "IDR": 47033.671833244254, + "VND": 72643.22271751692, + "THB": 90.38433885910314, + "SEK": 25.84480196420495, + "HKD": 21.694113006606845, + "SGD": 3.544274023935127, + "CAD": 3.8122336310052427, + "MYR": 10.961388508977128, + "BRL": 14.536324292180119, + "AUD": 3.975514445122089, + "PHP": 166.0064138841728, + "MXN": 49.32569532414829, + "NZD": 4.755281334331943, + "INR": 260.1087727595176 + }, + "currencyOfficialPrice": { + "JPY": 550, + "USD": 3.464169777071227, + "EUR": 2.9870151734939876, + "GBP": 2.585142854994167, + "TWD": 110.69071003059089, + "CNY": 23.911691947846425, + "KRW": 5188.679245283019, + "IDR": 58792.089791555314, + "VND": 90804.02839689616, + "THB": 112.98042357387892, + "SEK": 32.30600245525619, + "HKD": 27.117641258258555, + "SGD": 4.430342529918908, + "CAD": 4.765292038756553, + "MYR": 13.701735636221409, + "BRL": 18.17040536522515, + "AUD": 4.969393056402612, + "PHP": 207.508017355216, + "MXN": 61.65711915518537, + "NZD": 5.944101667914928, + "INR": 325.135965949397 + }, + "discountPercentage": 20, + "point": 20, + "pointEndDate": null, + "reductionRate": { + "standard": 5, + "advance": null + }, + "isFree": false, + "freeEndDate": false, + "freeOnly": false, + "campaignEndDate": 1776351600, + "tags": [ + { + "id": 508, + "label": "TRPG", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/508" + } + ], + "tagsReplaced": [ + { + "id": 508, + "label": "TRPG", + "url": "https:\/\/www.dlsite.com\/home\/fsr\/=\/genre\/508" + } + ], + "siteId": "home", + "options": [ "ENG", "CHI", "CHI_HANS", "CHI_HANT", "JPN", "DLP", "AIP", "ORW", "OLY" ], + "isLimitWork": false, + "isLimitSales": false, + "isLimitInStock": false, + "isTimesale": false, + "limitEndDate": null, + "salesPercentage": null, + "onSale": 1, + "coupling": null, + "gift": null, + "dlCount": 0, + "showDownload": 1, + "isShowRate": false, + "rate": { + "count": 0, + "averageStar": 0 + }, + "review": { + "url": null, + "count": 0 + }, + "reviewCount": 0, + "isAna": false, + "favUrl": "https:\/\/www.dlsite.com\/home\/mypage\/wishlist\/=\/product_id\/RJ01582866.html", + "cartUrl": "https:\/\/www.dlsite.com\/home\/cart\/=\/product_id\/RJ01582866.html", + "authors": null, + "icons": [ + { + "class": "GEN", + "label": "All Ages", + "title": "All Ages" + } + ], + "isSmartphoneOnlyIcon": false, + "registDate": 1773932400, + "salesDate": false, + "touchStyle1": [ "type_exclusive_01" ], + "pcGameImgUrls": [], + "voiceBys": null, + "creatorBys": null, + "announceComment": null, + "isReserveWork": false, + "sampleType": "images", + "isViewableSample": true, + "imageSamples": [ + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp1.jpg", + "file_size": "473147", + "file_size_unit": "462.06KB", + "width": "974", + "height": "823", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931125", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp1.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp1.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp1.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp1" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp2.jpg", + "file_size": "506681", + "file_size_unit": "494.81KB", + "width": "883", + "height": "839", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931127", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp2.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp2.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp2.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp2" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp3.jpg", + "file_size": "494141", + "file_size_unit": "482.56KB", + "width": "889", + "height": "821", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931129", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp3.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp3.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp3.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp3" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp4.jpg", + "file_size": "377713", + "file_size_unit": "368.86KB", + "width": "890", + "height": "628", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931131", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp4.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp4.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp4.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp4" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp5.jpg", + "file_size": "367915", + "file_size_unit": "359.29KB", + "width": "882", + "height": "616", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931133", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp5.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp5.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp5.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp5" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp6.jpg", + "file_size": "373937", + "file_size_unit": "365.17KB", + "width": "889", + "height": "647", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931135", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp6.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp6.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp6.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp6" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp7.jpg", + "file_size": "580806", + "file_size_unit": "567.19KB", + "width": "893", + "height": "976", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931137", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp7.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp7.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp7.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp7" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp8.jpg", + "file_size": "574290", + "file_size_unit": "560.83KB", + "width": "868", + "height": "967", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931138", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp8.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp8.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp8.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp8" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp9.jpg", + "file_size": "337624", + "file_size_unit": "329.71KB", + "width": "866", + "height": "927", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931140", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp9.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp9.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp9.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp9" + }, + { + "workno": "RJ01582866", + "type": "image_sample", + "file_name": "RJ01582866_img_smp10.jpg", + "file_size": "475790", + "file_size_unit": "464.64KB", + "width": "905", + "height": "1101", + "hash": null, + "display_mode": "", + "update_date": "2026-03-24 15:13:05", + "id": "68931142", + "upper(work_files.type)": "IMAGE_SAMPLE", + "extension": "jpg", + "relative_url": "modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp10.jpg", + "path_short": "doujin\/RJ01583000\/RJ01582866_img_smp10.jpg", + "url": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp10.jpg", + "resize_url": "resize\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp10" + } + ], + "dataSamples": [ + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_main.jpg", + "width": 555, + "height": 420 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp1.jpg", + "width": 974, + "height": 823 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp2.jpg", + "width": 883, + "height": 839 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp3.jpg", + "width": 889, + "height": 821 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp4.jpg", + "width": 890, + "height": 628 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp5.jpg", + "width": 882, + "height": 616 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp6.jpg", + "width": 889, + "height": 647 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp7.jpg", + "width": 893, + "height": 976 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp8.jpg", + "width": 868, + "height": 967 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp9.jpg", + "width": 866, + "height": 927 + }, + { + "thumb": "\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ01583000\/RJ01582866_img_smp10.jpg", + "width": 905, + "height": 1101 + } + ] + } + ], + "information": { + "nowRefDate": "2026-03-21", + "prevDate": "2026-03-19", + "from": 1773932400, + "to": 1774105199 + } + } +} \ No newline at end of file diff --git a/JSMR.Tests/JSMR.Tests.csproj b/JSMR.Tests/JSMR.Tests.csproj index 03d78a1..781f131 100644 --- a/JSMR.Tests/JSMR.Tests.csproj +++ b/JSMR.Tests/JSMR.Tests.csproj @@ -17,6 +17,7 @@ + @@ -29,6 +30,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/JSMR.Tests/Scanning/VoiceWorkScannerTests.cs b/JSMR.Tests/Scanning/VoiceWorkScannerTests.cs index 0bf3c7e..1d0a0d8 100644 --- a/JSMR.Tests/Scanning/VoiceWorkScannerTests.cs +++ b/JSMR.Tests/Scanning/VoiceWorkScannerTests.cs @@ -1,6 +1,6 @@ using JSMR.Application.Integrations.Chobit.Models; using JSMR.Application.Integrations.DLSite.Models; -using JSMR.Application.Integrations.Ports; +using JSMR.Application.Integrations.DLSite.Ports; using JSMR.Application.Scanning.Contracts; using JSMR.Application.Scanning.Ports; using JSMR.Infrastructure.Http;