Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Парсер html файла (http://forum.oszone.net/showthread.php?t=279726)

alv1r 24-03-2014 13:38 2327883

Парсер html файла
 
Всем привет! Передо мной стоит следующая задача - имея ссылку на страничку в интернете проанализировать ее содержимое, скачать и сконвертировать в другой формат одну картинку (имя каждый раз разное, но есть характерные приметы), а так же скачать трейлер с ютуба. Картинку и клип положить в созданную папку. Исходная ссылка всегда имеет вид: http://www.luxorfilm.ru/film/хххх/названиефильма/ Где хххх - четыре цифры. Именно их нужно использовать в качестве имени для папки.

1 скрипт принимает ссылку как аргумент и создает папку из части этой ссылки. Каждый раз ссылка содержит четыре цифры, их и нужно взять в качестве имени
2 скачивает html файл по ссылке
3 читает содержимое файла и запишет в переменные без html тегов две ссылки:
- одна на картинку
- одна на ролик на ютубе
4 получает ссылку из переменной и конвертирует каринку в нужный формат
5 получает ссылку из переменной и скачивает видео с ютуба
6 складывает результаты шагов 4 и 5 в папку, созданную на шаге 1

Пока не получилось выдернуть необходимые куски текста из ссылки для скачивания картинки и ролика.

Что получилось:
0 создать директорию
1 скачать файл, получить из него части текста содержащие нужные значения
2 сконвертировать файл в нужный формат
3 скачать клип с ютуба

Основной скрипт:

Код:

пример запуска: имяскрипта.ps1 http://www.luxorfilm.ru/film/2161/Rio-2/
$source = "$args[0]#.Length"
$dir = ("$args[0]#.Length" -split '/')[4]
New-Item -ItemType Directory $dir
$file = "film.html"
Invoke-WebRequest $source -OutFile $file
# $wc.DownloadFile($source, $file)
Select-String "http://www.luxorfilm.ru/upload/movies/" film.html | Select-Object -ExpandProperty line
Select-String "youtube.com/embed" film.html | Select-Object -ExpandProperty line

Скачиваем и конвертируем картинку

Код:

$source = "http://www.luxorfilm.ru/upload/movies/2161/1000_rio2.jpg"
$destination = "poster.jpg"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source, $destination)
$sourceFile = "poster.jpg"
$saveFile = "poster.png"
Add-Type -AssemblyName system.drawing
$imageFormat = "System.Drawing.Imaging.ImageFormat" -as [type]
$image = [drawing.image]::FromFile($sourceFile)
$image.Save($saveFile, $imageFormat::png)

Скачиваем трейлер (используется youtube-dl. пока не переписал на PS)

Код:

пример запуска:
имяскрипа www.youtube.com/embed/2IZhz_0rwz4
echo off
set arg1=%1
youtube-dl.exe -o trailer.flv %arg1%


Kazun 24-03-2014 14:36 2327903

Код:

param($url,$folder = "C:\Test")

Add-Type -AssemblyName system.drawing

# Создадим папку
$dir = [regex]::match($url,"/(\d{4})/").Groups[1].ToString()
$path = Join-Path $folder $dir
$savefile = Join-Path $path poster.png
$saveyou = Join-Path $path trailer.flv

if(!(Test-Path $path)) {
        md $path | out-null
}

# Получим ссылку на картинку
$iw = Invoke-WebRequest $url
$image = Invoke-WebRequest ($iw.Links | Where href -match "/$dir/.*\.jpg").href

# Сохраним картинку в png
$m = New-Object IO.MemoryStream(,([byte[]]$image.content))
$st = [drawing.image]::FromStream($m)
$st.Save($saveFile, "png")

# Получим ссылку на youtube
$you = $iw.ParsedHtml.getElementsByName("ctl00_contentPlaceHolder_youtubeTrailerDiv") |
        Where innerHTML -match "www.youtube.com/embed" | Foreach {if($_.innerHTML -match 'src="//(.+)" frameBorder') {$matches[1]}}

youtube-dl.exe -o $saveyou $you

.\script.ps1 http://www.luxorfilm.ru/film/2161/Rio-2/


Время: 18:15.

Время: 18:15.
© OSzone.net 2001-