Updated watch-news.ps1

This commit is contained in:
Markus Fleschutz 2024-11-04 17:09:39 +01:00
parent 70ebba06ff
commit cf34f7dae2

View File

@ -1,35 +1,39 @@
<#
.SYNOPSIS
Watch the latest headlines
Watch the news
.DESCRIPTION
This PowerShell script lists the latest headlines by using a RSS (Really Simple Syndication) feed.
.PARAMETER RSS_URL
This PowerShell script continuously lists the latest headlines by using a RSS (Really Simple Syndication) feed.
.PARAMETER URL
Specifies the URL to the RSS feed (Yahoo World News by default)
.PARAMETER lines
Specifies the initial number of headlines
.PARAMETER timeInterval
Specifies the time interval in seconds between the Web requests
Specifies the time interval in seconds between two Web requests (30 seconds by default)
.EXAMPLE
PS> ./watch-news.ps1
Niger coup: Ecowas deadline sparks anxiety in northern Nigeria
UTC Yahoo News - Latest News & Headlines - https://www.yahoo.com/news/world
--- -----------------------------------------------------------------------
14:29 Niger coup: Ecowas deadline sparks anxiety in northern Nigeria
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$RSS_URL = "https://news.yahoo.com/rss/world", [int]$lines = 10, [int]$timeInterval = 30) # in seconds
param([string]$URL = "https://news.yahoo.com/rss/world", [int]$lines = 10, [int]$timeInterval = 30) # in seconds
function PrintLatestHeadlines([string]$previous, [int]$maxLines) {
[xml]$content = (Invoke-WebRequest -URI $RSS_URL -useBasicParsing).Content
[xml]$content = (Invoke-WebRequest -URI $URL -useBasicParsing).Content
[string]$latest = ""
foreach ($item in $content.rss.channel.item) {
$itemTitle = "$($item.title)"
if ($latest -eq "") { $latest = $itemTitle }
if ($itemTitle -eq $previous) { break }
& "$PSScriptRoot/write-animated.ps1" "❇️ $itemTitle ❇️"
$title = $item.title
if ($latest -eq "") { $latest = $title }
if ($title -eq $previous) { break }
$time = $item.pubDate.Substring(11, 5)
& "$PSScriptRoot/write-typewriter.ps1" "❇️ $time $title" 10
$maxLines--
if ($maxLines -eq 0) { break }
}
@ -37,11 +41,18 @@ function PrintLatestHeadlines([string]$previous, [int]$maxLines) {
}
try {
[xml]$content = (Invoke-WebRequest -URI $URL -useBasicParsing).Content
$title = $content.rss.channel.title
$URL = $content.rss.channel.link
" "
" UTC $title - $URL"
" --- -----------------------------------------------------------------------"
$latest = ""
while ($true) {
do {
$latest = PrintLatestHeadlines $latest $lines
Start-Sleep -seconds $timeInterval
}
} while ($true)
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"