Private/Get-DmmDataObject.ps1

function Get-DmmDataObject {
    [CmdletBinding()]
    [OutputType([pscustomobject])]
    param (
        [Parameter(Position = 0)]
        [string]$Name,
        [Parameter(Position = 1)]
        [string]$Url,
        [string]$AltName
    )

    begin {
        Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] Function started"
        $movieDataObject = @()
    }

    process {
        if ($Url) {
            $dmmUrl = $Url
        } else {
            # ! Current limitation: relies on the video being available on R18.com to generate the DMM link
            $r18Url = Get-R18Url -Name $Name -AltName $AltName
            if ($null -eq $r18Url) {
                Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] Search [$Name] not matched; Skipping..."
                Write-Verbose "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] Search [$Name] not matched on Dmm"
                return
            }
            $r18Id = (($r18Url -split 'id=')[1] -split '\/')[0]
            $dmmUrl = 'https://www.dmm.co.jp/digital/videoa/-/detail/=/cid=' + $r18Id
            Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] R18 ID is: $r18Id"
            Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] DMM url is: $dmmUrl"
        }

        if ($null -ne $dmmUrl) {
            try {
                Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] Performing [GET] on Uri [$dmmUrl]"
                $webRequest = Invoke-WebRequest -Uri $dmmUrl -Method Get -Verbose:$false
            } catch {
                throw $_
            }

            $movieDataObject = [pscustomobject]@{
                Source        = 'dmm'
                Url           = $dmmUrl
                ContentId     = Get-DmmContentId -WebRequest $webRequest
                Title         = Get-DmmTitle -WebRequest $webRequest
                Description   = Get-DmmDescription -WebRequest $webRequest
                Date          = Get-DmmReleaseDate -WebRequest $webRequest
                Year          = Get-DmmReleaseYear -WebRequest $webRequest
                Runtime       = Get-DmmRuntime -WebRequest $webRequest
                Director      = Get-DmmDirector -WebRequest $webRequest
                Maker         = Get-DmmMaker -WebRequest $webRequest
                Label         = Get-DmmLabel -WebRequest $webRequest
                Series        = Get-DmmSeries -WebRequest $webRequest
                Rating        = Get-DmmRating -WebRequest $webRequest
                RatingCount   = Get-DmmRatingCount -WebRequest $webRequest
                Actress       = Get-DmmActress -WebRequest $webRequest
                Genre         = Get-DmmGenre -WebRequest $webRequest
                CoverUrl      = Get-DmmCoverUrl -WebRequest $webRequest
                ScreenshotUrl = Get-DmmScreenshotUrl -WebRequest $webRequest
                #TrailerUrl = Get-DmmTrailerUrl -WebRequest $webRequest
            }
        }

        Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] DMM data object:"
        $movieDataObject | Format-List | Out-String | Write-Debug
        Write-Output $movieDataObject
    }

    end {
        Write-Debug "[$(Get-TimeStamp)][$($MyInvocation.MyCommand.Name)] Function ended"
    }
}

function Get-DmmContentId {
    param (
        [object]$WebRequest
    )

    process {
        $contentId = ((($WebRequest.Content -split '<td align="right" valign="top" class="nw">品番:<\/td>')[1] -split '<\/td>')[0] -split '<td>')[1]
        $contentId = Convert-HtmlCharacter -String $contentId
        Write-Output $contentId
    }
}

function Get-DmmTitle {
    param (
        [object]$WebRequest
    )

    process {
        $title = (($WebRequest.Content -split '<h1 id="title" class="item fn">')[1] -split '<\/h1>')[0]
        $title = Convert-HtmlCharacter -String $title
        Write-Output $title
    }
}

function Get-DmmDescription {
    param (
        [object]$WebRequest
    )

    process {
        $description = (($WebRequest.Content -split '<meta name="description" content=')[1] -split '\/>')[0]
        # Remove the first 14 characters of the description string
        # This will remove the 'Fanza' string prepending the description in the html
        $description = $description.Substring(14)
        # Remove the last 2 characters of the description string
        # This will remove the extra quotation mark at the end of the description
        $description = $description.Substring(0, $description.Length - 2)
        $description = Convert-HtmlCharacter -String $description
        $description = $description -replace '<([^>]+)>', ''
        $description = (($description -split '\.\*\.')[0]).Trim()
        Write-Output $description
    }
}

function Get-DmmReleaseDate {
    param (
        [object]$WebRequest
    )

    process {
        $releaseDate = ((($WebRequest.Content -split '<td align="right" valign="top" class="nw">配信開始日:<\/td>')[1] -split '<\/td>')[0] -split '<td>')[1]
        $releaseDate = Convert-HtmlCharacter -String $releaseDate
        $year, $month, $day = $releaseDate -split '/'
        $releaseDate = Get-Date -Year $year -Month $month -Day $day -Format "yyyy-MM-dd"
        Write-Output $releaseDate
    }
}

function Get-DmmReleaseYear {
    param (
        [object]$WebRequest
    )

    process {
        $releaseYear = Get-DmmReleaseDate -WebRequest $WebRequest
        $releaseYear = ($releaseYear -split '-')[0]
        Write-Output $releaseYear
    }
}

function Get-DmmRuntime {
    param (
        [object]$WebRequest
    )

    process {
        $length = ((($WebRequest.Content -split '<td align="right" valign="top" class="nw">収録時間:<\/td>')[1] -split '<\/td>')[0] -split '<td>')[1]
        $length = ($length -split '分')[0]
        Write-Output $length
    }
}

function Get-DmmDirector {
    param (
        [object]$WebRequest
    )

    process {
        $director = ((($WebRequest.Content -split '監督:<\/td>')[1] -split '<\/a>')[0] -split '>')[2]
        $director = Convert-HtmlCharacter -String $director

        if ($director -eq '</tr') {
            $director = $null
        }

        Write-Output $director
    }
}

function Get-DmmMaker {
    param (
        [object]$WebRequest
    )

    process {
        $maker = ((($WebRequest.Content -split '<td align="right" valign="top" class="nw">メーカー:<\/td>')[1] -split '<\/a>')[0] -split '>')[2]
        $maker = Convert-HtmlCharacter -String $maker
        Write-Output $maker
    }
}

function Get-DmmLabel {
    param (
        [object]$WebRequest
    )

    process {
        $label = ((($WebRequest.Content -split '<td align="right" valign="top" class="nw">レーベル:<\/td>')[1] -split '<\/a>')[0] -split '>')[2]
        $label = Convert-HtmlCharacter -String $label

        if ($label -eq '</tr') {
            $label = $null
        }

        Write-Output $label
    }
}

function Get-DmmSeries {
    param (
        [object]$WebRequest
    )

    process {
        $series = ((($WebRequest.Content -split '<td align="right" valign="top" class="nw">シリーズ:<\/td>')[1] -split '<\/a>')[0] -split '>')[2]
        $series = Convert-HtmlCharacter -String $series

        if ($series -eq '</tr') {
            $series = $null
        }

        Write-Output $series
    }
}

function Get-DmmRating {
    param (
        [object]$WebRequest
    )

    process {
        $rating = (((($WebRequest.Content -split '<p class="d-review__average">')[1] -split '<\/strong>')[0] -split '<strong>')[1] -split '点')[0]
        # Multiply the rating value by 2 to conform to 1-10 rating standard
        $integer = [int]$rating * 2
        if ($integer -eq 0) {
            $integer = $null
        } else {
            $rating = $integer.Tostring()
        }

        Write-Output $rating
    }
}

function Get-DmmRatingCount {
    param (
        [object]$WebRequest
    )

    process {
        $ratingCount = (($WebRequest.Content -split '<p class="d-review__evaluates">')[1] -split '<\/p>')[0]
        $ratingCount = (($ratingCount -split '<strong>')[1] -split '<\/strong>')[0]
        Write-Output $ratingCount
    }
}

function Get-DmmActress {
    param (
        [object]$WebRequest
    )

    begin {
        $actressArray = @()
    }

    process {
        $actressHtml = ((($WebRequest.Content -split '出演者:<\/td>')[1] -split '<\/td>')[0] -split '<span id="performer">')[1]
        $actressHtml = $actressHtml -replace '<a href="\/digital\/videoa\/-\/list\/=\/article=actress\/id=(.*)\/">', ''
        $actressHtml = $actressHtml -split '<\/a>', ''

        if ($actressHtml[0] -ne '') {
            foreach ($actress in $actressHtml) {
                $actress = Convert-HtmlCharacter -String $actress
                if ($actress -ne '') {
                    $actressArray += $actress -replace '<\/a>', ''
                }
            }
            Write-Output $actressArray
        } else {
            $actressArray = $null
            Write-Output $actressArray
        }
    }
}

function Get-DmmGenre {
    param (
        [object]$WebRequest
    )

    begin {
        $genreArray = @()
    }

    process {
        $genre = (((($WebRequest.Content -split 'ジャンル:<\/td>')[1] -split '<\/td>')[0] -split '<td>')[1] -split '">')
        $genre = ($genre -replace '<\/a>', '') -replace '&nbsp;&nbsp;', ''
        $genre = $genre -replace '<a href="\/digital\/videoa\/-\/list\/=\/article=keyword\/id=(.*)\/'

        foreach ($entry in $genre) {
            $entry = Convert-HtmlCharacter -String $entry
            if ($entry -ne '') {
                $genreArray += $entry
            }
        }

        if ($genreArray.Count -eq 0) {
            $genreArray = $null
        }

        Write-Output $genreArray
    }
}

function Get-DmmCoverUrl {
    param (
        [object]$WebRequest
    )

    process {
        $coverUrl = ((($WebRequest.Content -split '<div class="center" id="sample-video">')[1] -split '" target')[0] -split '<a href="')[1]
        $coverUrl = Convert-HtmlCharacter -String $coverUrl
        Write-Output $coverUrl
    }
}
function Get-DmmScreenshotUrl {
    param (
        [object]$WebRequest
    )

    begin {
        $screenshotUrl = @()
    }

    process {
        $screenshotHtml = $WebRequest.Links | Where-Object { $_.name -eq 'sample-image' }
        $screenshotHtml = $screenshotHtml.'outerHTML'

        foreach ($screenshot in $screenshotHtml) {
            $screenshot = (($screenshot -split '<img src="')[1] -split '"')[0]
            $screenshotUrl += $screenshot -replace '-', 'jp-'
        }

        Write-Output $screenshotUrl
    }
}

# ! Unable to get trailer url from HTTP from main DMM video page
<# function Get-DmmTrailerUrl {
    param (
        [object]$WebRequest
    )
 
    begin {
        $trailerUrl = @()
    }
 
    process {
        $trailerHtml = $WebRequest.Content -split '\n'
        $trailerHtml = $trailerHtml | Select-String -Pattern 'https:\/\/cc3001\.dmm\.co\.jp\/litevideo\/freepv' -AllMatches
 
        foreach ($trailer in $trailerHtml) {
            $trailer = (($trailer -split '"')[1] -split '"')[0]
            $trailerUrl += $trailer
        }
 
        Write-Output $trailerUrl
    }
} #>