# encoding: ascii
# api: powershell
# title: Get-WootDeal
# description: Gets the daily Woot! deal (www.woot.com) and emails it.
# version: 0.1
# type: script
# author: dragonmc77
# license: CC0
# x-poshcode-id: 1984
# x-archived: 2014-08-01T18:36:56
# x-published: 2010-07-19T12:17:00
#
#
    <#
        .Synopsis
	       Gets the daily woot deal from woot.com.
        .Description
            Gets product description and price of the daily woot deal from the woot.com website.
        .Outputs
            Custom object containing two (2) NoteProperties: Product and Price.
        .Parameter URL
            The URL to load and search for pricing.  Don't get funky, this HAS to be the woot website url, as the code
			won't work with anything else, because it screen scrapes for information.
		.Notes
			This script uses the Webrequest class to load a webpage (woot.com), then does a regex search of the html code
			to find some specific information (also known as 'screen scraping').  This was a learning exercise I inflicted
			upon myself with the goal of using xml parsers (such as the xmldocument class) to reliably extract information
			from xhtml-compliant websites (of which woot.com purports to be, at least according to their page headers :))
			It was a nightmare.  I ran into all kinds of compliance issues with the xml classes, and so after much
			frustration, achieved the goal using a completely different method.
    #>

param(
[Parameter(Position=0, Mandatory=$false)]
[string] $URL = "http://www.woot.com"
)

[string]$WorkingDir = Split-Path $MyInvocation.MyCommand.Path -Parent

$Request = [System.Net.Webrequest]::Create($URL)
$Response = $Request.GetResponse()
$RawStream = $Response.GetResponseStream()
$Encoding = [System.Text.Encoding]::GetEncoding("utf-8") ## better safe than sorry
$EncodedStream = New-Object System.IO.StreamReader($RawStream, $Encoding)
$Data = $EncodedStream.ReadToEnd()

$Product = [regex]::Match($Data,"(?<=<h2\sclass=`"fn`">).+(?=</h2>)").Value
$Price = [regex]::Match($Data,"(?<=<span\sclass=`"amount`">)[0-9\.]+(?=</span>)").Value

$Output = New-Object Object | 
    Add-Member NoteProperty -Name Product -Value $Product -PassThru |
    Add-Member NoteProperty -Name Price -Value $Price -PassThru
Write-Output $Output
Send-MailMessage    -To "<INSERT YOUR EMAIL HERE>" `
                    -From "dailydeal@woot.com" `
                    -Subject "Daily Woot! Deal" `
                    -Body ($Output | Format-Table -AutoSize | Out-String) `
                    -SmtpServer "<INSERT YOUR SMTP SERVER HERE>"
                    
$EncodedStream.Close()
$Response.Close()

break
#experimental stuff
Set-Content -Value $Data -Path "$WorkingDir\Get-Webpage_Data.xhtml" -Force

try {
    
} catch {
    Write-Host $_
} finally {
    $XmlReader.Close()
}
