Прочитав топик Цитаты из forismatic.com в консоли (или fortune своими руками) из любопытства захотелось повторить тоже самое на PowerShell. Вот что получилось
Ниже пояснения и пример использования
Функция возврящает XML-объект цитату. Использовать так:
Пояснения небольшие:
С моей точки зрения, здесь самое интересное — это преобразование в XML. В результате получается объект, с которым можно работать стандартными способаим PowerShell, например
Вернет коллекцию xml элементов типа:
Которую можно фильтровать, например вот так:
function get-random-quote()
{
$apiUrl = 'http://www.forismatic.com/api/1.0/'
$client = new-object System.Net.WebClient
$client.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
$client.Encoding = [System.Text.Encoding]::UTF8
[xml]$quote = $client.UploadString($apiUrl, 'method=getQuote&format=xml' )
$quote.forismatic.quote
}
Ниже пояснения и пример использования
Функция возврящает XML-объект цитату. Использовать так:
PS C:\Windows\system32> $quote = get-random-quote
______________________________________________________________________________________________________________________________________________________________________
PS C:\Windows\system32> $quote
quoteText quoteAuthor senderName senderLink
--------- ----------- ---------- ----------
Каждый миг наслаждения — это дар богов. Клод Адриан Гельвеций
______________________________________________________________________________________________________________________________________________________________________
PS C:\Windows\system32> $quote.quoteAuthor
Клод Адриан Гельвеций
Пояснения небольшие:
- Создаем .Net объект WebClient
- Настраиваем его, прописывая заголовки и кодировку
- Вызываем HTTP POST (если использовать UploadString c тремя параметрами, можно задать метод)
- Конвертируем результирующую строку в XML
- Выдираем из строки цитату
С моей точки зрения, здесь самое интересное — это преобразование в XML. В результате получается объект, с которым можно работать стандартными способаим PowerShell, например
$client = new-object System.Net.WebClient
$client.Encoding = [System.Text.Encoding]::UTF8
[xml]$habr = $client.DownloadString('http://habrahabr.ru/rss/9c1806bb61d9b6612943104ddbf830d9/')
$habr.rss.channel.item
Вернет коллекцию xml элементов типа:
title : title
guid : guid
link : habrahabr.ru/blogs/lenta/92187
description : description
pubDate : Tue, 27 Apr 2010 15:44:41 GMT
author : Mithgol
category : {военная техника, крылатые ракеты, Бирюза, Новатор...}
title : title
guid : guid
link : habrahabr.ru/blogs/startup/92152
description : description
pubDate : Tue, 27 Apr 2010 15:23:21 GMT
author : AynurEntre
category : {стартапы, монетизация, бизнес-модели, бизнес...}
....
Которую можно фильтровать, например вот так:
$habr.rss.channel.item | where { $_.author -eq 'mithgol' } | select link, category