Отправка запросов HTTP POST из PowerShell

    Прочитав топик Цитаты из forismatic.com в консоли (или fortune своими руками) из любопытства захотелось повторить тоже самое на PowerShell. Вот что получилось
    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
    Поделиться публикацией

    Похожие публикации

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое