当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

作者:精品下载站 日期:2024-12-14 07:47:19 浏览:14 分类:玩电脑

周五乐趣:使用 PowerShell 进行假日购物


假期购物季再次来临。但也许 PowerShell 可以让它变得更容易一点,或者至少更有趣一点。我相信你们很多人都在 NewEgg.com 上购物过。也许今年你计划再次为朋友、家人甚至你自己这样做。那么为什么不让 PowerShell 让这件事变得更容易一些呢。

NewEgg 足够精明,可以为其许多销售类别发布 RSS 提要。您可以在 http://www.newegg.com/RSS/Index.aspx 找到主列表。让我们来看看他们的每日交易。

$uri = "http://www.newegg.com/Product/RSS.aspx?Submit=RSSDailyDeals&Depa=0"

使用 Invoke-RestMethod,检索项目非常容易。

Invoke-RestMethod -Uri $uri

但它仍然有点混乱,所以让我们更有选择性。

$data = Invoke-RestMethod -Uri $uri | Select -property @{Name="Published";Expression= {$_.pubDate -as [datetime]}},Title,Link

我还创建了一个名为 Published 的新属性,它采用原始 PubDate 并将其视为日期,从而使数据更易于排序或过滤。

这是我检索到的内容的示例。

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

有了这些数据,我就可以使用 Out-Gridview 作为对象选择器。

$data | out-gridview -Title "Deal of the Day" -OutputMode Multiple | foreach { Start $_.link }

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

我可以选择多个条目,单击“确定”,每个链接都应该在我的浏览器中打开。

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

但让我们让事情变得更有趣一点。 Title 属性包括价格和描述。我不知道这些链接在世界其他地方是什么样子,因此您可能需要调整以下示例。

首先,我将定义一个正则表达式模式,以使用命名捕获来获取货币(在我的例子中为 $)、价格和商品描述。

[regex]$rx = "(?<currency>.)(?<price>\d+\.\d{2})\s-\s(?<item>.*)"

我将重新下载数据,跳过标题字段中没有价格的任何条目。

$dl = Invoke-RestMethod -Uri $uri | where {$_.Title -match "\d+\.\d{2}"}

我的目标是再次使用 Out-Gridview 并具有货币和价格的单独属性。我需要价格为数字,以便我可以对其进行排序。接下来我使用正则表达式获取货币符号。

$c = $rx.match($dl[0].title).groups["currency"].value

然后我可以处理其余的 RSS 数据,使用正则表达式对象解析价格和描述。

$data = $dl |
Select -property @{Name="Published";Expression= {$_.pubDate -as [datetime]}},
@{Name=$c;Expression = {$rx.match($_.title).groups["price"].value -as [double]}},
@{Name="Item";Expression = {$rx.match($_.title).groups["item"].value }},
Link

如果您注意到,我使用了货币值作为属性名称。现在,当我使用 Out-Gridview 时,我有更灵活的显示。

$data | Sort $c -descending | Out-GridView -Title $uri -OutputMode Multiple |
foreach {
#open each selected link
start $_.link
}

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

如果我要购买新笔记本电脑,我可以选择多个条目,单击“确定”并在浏览器中查看它们。

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

我可以通过更改 RSS feed 来重复该过程,对他们的 Shell Shocker 说

$uri = "http://www.newegg.com/Product/RSS.aspx?Submit=ShellShocker"

如果我重复前面的步骤,这将会失败,这就提出了使用正则表达式时需要记住的一些事情:了解你的数据。你必须知道你正在处理什么,并且它遵循可预测的模式。至少如果您想让正则表达式模式相对简单。这里的问题是只有一个项目。所以我获取货币数字的代码失败了,因为我没有数组。在这种情况下我可以这样做:

$c = $rx.match($dl.title).groups["currency"].value

尽管提出可以重复使用的代码可能更有意义。

$entry = $dl | select -first 1
$c = $rx.match($dl.title).groups["currency"].value

但从这里开始,代码是相同的。

[玩转系统] 周五乐趣:使用 PowerShell 进行假日购物

这可能是我想要研究的内容,尽管有时 RSS 源有点落后于网站。遗憾的是,在这种情况下,链接有效,但产品却是另一回事。但你明白了。

享受你的周末假期,出门要小心!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯