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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] как сохранить с помощью save2go.ru МНОГО ссылок? (http://forum.oszone.net/showthread.php?t=183508)

shadowbat 21-08-2010 14:36 1478603

как сохранить с помощью save2go.ru МНОГО ссылок?
 
как сохранить с помощью save2go.ru МНОГО ссылок?

есть 800 ссылок на страницы с флэш-видео. (не ютуб и не прочие социалки)
по одной ссылке доставать через сайт тяжко
как все 800 ссылок пропустить списком через сайт и получить список прямых ссылок?

как это можно реализовать через AutoIt ?

Creat0R 21-08-2010 15:57 1478648

Цитата:

Цитата shadowbat
как это можно реализовать через AutoIt ? »

Можно попробовать посылать запрос «http://save2go.ru/parse/?url=тут ссылка».

P.S
Есть сервис получше для этого, он извлекает все возможные флэш-ссылки на странице.

madmasles 21-08-2010 16:16 1478659

shadowbat,
Так можно попробовать:
Код:

#include <IE.au3>
#include <Array.au3>

Dim $aUrl[3] = ['http://mult.ru/projects/mas/mults/mult_7.html', _
        'http://mult.ru/projects/mas/mults/mult_8.html', _
        'http://mult.ru/projects/mas/mults/mult_9.html']
Dim $aLinks[1][3]
$j = 0
$oIE = _IECreate('http://save2go.ru/')

For $i = 0 To UBound($aUrl) - 1
    $oForm = _IEFormGetCollection($oIE, 0)
    $oInput = _IEFormElementGetObjByName($oForm, 'url')
    _IEFormElementSetValue($oInput, $aUrl[$i])
    _IEFormSubmit($oForm)
    $oDiv = _IEGetObjById($oIE, 'pageFiles')
    $j += 1
    ReDim $aLinks[UBound($aLinks) + 1][3]
    $aLinks[$j][0] = $aUrl[$i]
    $aLinks[$j][1] = _IEPropertyGet($oIE, 'locationurl')
    $aLinks[$j][2] = StringRegExpReplace(_IEPropertyGet($oDiv, 'innerhtml'), '(?s).*?target=_blank>(http://.*?)</A></B>?.*', '\1')
Next
_IEQuit($oIE)
$aLinks[0][0] = UBound($aLinks) - 1
_ArrayDisplay($aLinks)


Creat0R 21-08-2010 16:46 1478674

Цитата:

Цитата madmasles
Так можно попробовать »

Для этого IE не нужен:

Код:

#include <Array.au3>

Dim $aUrl[4] = [3, _
        'http://mult.ru/projects/mas/mults/mult_7.html', _
        'http://mult.ru/projects/mas/mults/mult_8.html', _
        'http://mult.ru/projects/mas/mults/mult_9.html']

Dim $aLinks[$aUrl[0]+1]
$aLinks[0] = $aUrl[0]

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $aLinks[$i] = StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1')
Next

_ArrayDisplay($aLinks)


shadowbat 21-08-2010 16:51 1478678

Creat0R
1. немного не понял, что имелось ввиду.
по Вашей ссылке
Цитата:

Невозможно получить данные со страницы сайта
если Вы предлагаете руками забивать все адреса, то это невозможно.

2. по поводу сервиса "получше" - к сожалению он ничего не находит по скармливаемым ссылкам. а save2go дает реальную ссылку на ролик.

3. madmasles отличное решение!
только результат выдается вот так:
http://www.site.ru/...s/video/0001.f4v, т.е. урезанно.
как это вылечить?

пробовал сократить табличку для вывода
читать дальше »
Код:

For $i = 0 To UBound($aUrl) - 1
    $oForm = _IEFormGetCollection($oIE, 0)
    $oInput = _IEFormElementGetObjByName($oForm, 'url')
    _IEFormElementSetValue($oInput, $aUrl[$i])
    _IEFormSubmit($oForm)
    $oDiv = _IEGetObjById($oIE, 'pageFiles')
    $j += 1
    ReDim $aLinks[UBound($aLinks) + 1][3]
    $aLinks[$j][2] = StringRegExpReplace(_IEPropertyGet($oDiv, 'innerhtml'), '(?s).*?target=_blank>(http://.*?)</A></B>?.*', '\1')
Next
_IEQuit($oIE)
$aLinks[0][0] = UBound($aLinks) - 1
_ArrayDisplay($aLinks)


но все хоть и количество выдаваемых столбцов уменьшилось с 3х до 1го. все равно сама таблица имеет формат 3х3, а самое главное - выходная ссылка видимо длинная или как... выдается в таком урезанном формате
Код:

http://www.site.ru/...s/video/0001.f4v
________________________________________________
4. Creat0R - как раз то, что нужно. ссылка получается полная, только перед ней ставится колонка Row
[2]|http://www....
как ее удалить, чтобы для копирования осталась чистая ссылка? (конечно можно и в ворде через замену :) но для чистоты эксперимента по=хорошему нужно здесь)

P.S. получился мини-парсер (сегодня узнал это слово) - мне кажется отличный вариант :)

madmasles 21-08-2010 16:51 1478679

Creat0R,
Согласен, с Вашим вариантом все это сделать можно гораздо быстрее и удобнее. :)


shadowbat,
В моем варианте попробуйте заменить эту строку:
Код:

$aLinks[$j][2] = StringRegExpReplace(_IEPropertyGet($oDiv, 'innerhtml'), '(?s).*?href="(http://.*?)"\n?.*', '\1')
Но я бы на Вашем месте воспользовался вариантом Creat0R`a.

Creat0R 21-08-2010 17:15 1478697

Цитата:

Цитата shadowbat
по Вашей ссылке »

Это был пример, вместо «тут ссылка» нужно подставить ссылку страницы с флэшками.

Цитата:

Цитата shadowbat
по поводу сервиса "получше" - к сожалению он ничего не находит по скармливаемым ссылкам »

Пример можно этих ссылок?

Цитата:

Цитата shadowbat
перед ней ставится колонка »

Это только при отображений, в массиве то их нет, вам нужно копировать список сразу в буфер? тогда так:

Код:

Dim $aUrl[4] = [3, _
        'http://mult.ru/projects/mas/mults/mult_7.html', _
        'http://mult.ru/projects/mas/mults/mult_8.html', _
        'http://mult.ru/projects/mas/mults/mult_9.html']

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLinks &= StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1') & @CRLF
Next

ClipPut(StringStripWS($sLinks, 3))


madmasles 21-08-2010 17:18 1478698

Цитата:

Цитата shadowbat
Только перед ней ставится колонка Row
[2]|http://www.... »

Или для сохранения в файл добавьте вначале скрипта #include <File.au3>, а в конце _FileWriteFromArray(@ScriptDir & '\MySuperLinks.txt', $aLinks, 1)

shadowbat 21-08-2010 17:23 1478703

Цитата:

Пример можно этих ссылок?
http://www.teachvideo.ru/v/5471
http://iqcomp.ru/v/e2545

Отлично! благодарю за помощь! итого получилось 2 решения:
сохранение ссылок в буфер обмена:
Код:

Dim $aUrl[4] = [3, _
        'http://mult.ru/projects/mas/mults/mult_7.html', _
        'http://mult.ru/projects/mas/mults/mult_8.html', _
        'http://mult.ru/projects/mas/mults/mult_9.html']

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLinks &= StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1') & @CRLF
Next

ClipPut(StringStripWS($sLinks, 3))

сохранение ссылок в файл:
Код:

#include <File.au3>
#include <Array.au3>

Dim $aUrl[4] = [3, _
        'http://mult.ru/projects/mas/mults/mult_7.html', _
        'http://mult.ru/projects/mas/mults/mult_8.html', _
        'http://mult.ru/projects/mas/mults/mult_9.html']

Dim $aLinks[$aUrl[0]+1]
$aLinks[0] = $aUrl[0]

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $aLinks[$i] = StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1')
Next

_ArrayDisplay($aLinks)       
_FileWriteFromArray(@ScriptDir & '\MySuperLinks.txt', $aLinks, 1)


Creat0R 21-08-2010 18:01 1478728

Цитата:

Цитата shadowbat
сохранение ссылок в файл »

Зачем городить огород:

Код:

Dim $aUrl = StringSplit( _
        'http://iqcomp.ru/v/e2545|' & _
        'http://teachvideo.ru/v/5471', _
        '|')

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLinks &= StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1') & @CRLF
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)

правда что то я не расмотрел там 800 ссылок :)

shadowbat 21-08-2010 18:26 1478743

Цитата:

правда что то я не расмотрел там 800 ссылок
на одном 1990 ссылок, на втором около 3000 ссылок
главное, что нашли решение - уверен не только мне пригодится, ибо я в сети ничего подходящего за день не нашел. благо OAC облегчает копирование самих ссылок со страниц :bow:

shadowbat 22-08-2010 14:49 1479312

читать дальше »
Цитата:

Dim $aUrl = StringSplit( _
'http://iqcomp.ru/v/e2545|' & _
'http://teachvideo.ru/v/5471', _
'|')

$sLinks = ""

For $i = 1 To $aUrl[0]
$sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
$sLinks &= StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1') & @CRLF
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)


тяжко забивать все ссылки
как сделать, чтобы ссылки брались из txt-списка? (в той же папке, где сам .au3 находится)

madmasles 22-08-2010 14:59 1479317

shadowbat,
Пример файла со списком ссылок приведите.

shadowbat 22-08-2010 15:03 1479321

Вложений: 1
обычный файл

madmasles 22-08-2010 15:29 1479339

shadowbat,
Попробуйте так:
Код:

#include <Array.au3>

Dim $aUrl[1]
$j = 0
$sFile = @ScriptDir & '\list.txt'

$hFile = FileOpen($sFile, 0)
$sText = FileRead($hFile)
FileClose($hFile)

$aUrlTemp = StringSplit($sText, @LF)

For $i = 1 To $aUrlTemp[0]
    If StringInStr($aUrlTemp[$i], 'http:') Then
        $j += 1
        ReDim $aUrl[UBound($aUrl) + 1]
        $aUrl[$j] = StringStripWS(StringStripCR($aUrlTemp[$i]), 8)
    EndIf
Next
$aUrl[0] = UBound($aUrl) - 1
_ArrayDisplay($aUrl)


Creat0R 22-08-2010 15:35 1479344

Цитата:

Цитата shadowbat
как сделать, чтобы ссылки брались из txt-списка? »

Код:

Dim $aUrl = StringSplit(StringStripCR(FileRead(@ScriptDir & "\List.txt")), @LF)

madmasles 22-08-2010 15:49 1479355

Creat0R,
А если есть пустые строки или случайные пробелы в ссылках или в конце строки со ссылкой?
Как-то , наверное, можно ссылки через StringRegExp() выдрать.

shadowbat 22-08-2010 16:02 1479362

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

2. madmasles, я не те ссылки дал, ваш скрипт их просто копирует в окошко и выдает пользователю, не пропуская их через сайт :)
нужен ведь аналог этого,
читать дальше »
Код:

Dim $aUrl = StringSplit( _
        'http://iqcomp.ru/v/e2545|' & _
        'http://teachvideo.ru/v/5471', _
        '|')

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLinks &= StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1') & @CRLF
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)


только с забором ссылок для посылки на сайт не из самого тела скрипта, а из внешнего файла. что похоже и сделал Creat0R

3. Creat0R
подставил строку,
читать дальше »
Код:

Dim $aUrl = StringSplit(StringStripCR(FileRead(@ScriptDir & "\List.txt")), @LF)

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLinks &= StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1') & @CRLF
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)



выдается странный MySuperLinks.txt в итоге. прикрепил к сообщению
(похоже копирует код html странички. в принципе можно брать из него ссылки из самого начала, а остальной код удалять :))

Creat0R 22-08-2010 16:07 1479366

Цитата:

Цитата madmasles
Как-то , наверное, можно ссылки через StringRegExp() выдрать. »

Код:

Dim $aUrl = StringSplit(StringStripWS(StringRegExpReplace(FileRead(@ScriptDir & "\List.txt"), '(?s).*?(https?://.*?)\r?\n.*?', '\1' & @LF), 3), @LF)
Цитата:

Цитата shadowbat
выдается странный MySuperLinks.txt в итоге »

Там видимо содержимое страницы, можно добавить “предохранитель” от подобных ситуаций:

Код:

Dim $aUrl = StringSplit(StringStripWS(StringRegExpReplace(FileRead(@ScriptDir & "\List.txt"), '(?s).*?(https?://.*?)\r?\n.*?', '\1' & @LF), 3), @LF)

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLink = StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1')

    If @extended > 0 And $sLink <> $sHtml Then
        $sLinks &= $sLink & @CRLF
    EndIf
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)


shadowbat 22-08-2010 16:14 1479371

Creat0R
Благодарю! то, что нужно

Creat0R 22-08-2010 16:19 1479376

shadowbat,
Если тема решена, то не стесняйся отмечать её таковой ;)

shadowbat 27-08-2010 17:41 1483077

хм...
скармливаем такой list.txt
Код:

http://www.teachvideo.ru/v/737
http://skillopedia.ru/material.php?id=8923
http://iqcomp.ru/learn/course.php?cid=7&lid=99

получаем на выходе MySuperLinks.txt
Код:

http://www.teachvideo.ru/content/antivir/dr_web/video/0102.flv
http://77.220.185.136/data/materials/1345/4bf20180dc737d6b58b8f0b9184d9182/video.flv

третью ссылку не берет никак.
хотя через браузер работает :not-me:

это из-за знака "&" в третьей ссылке?
как это лечится?

Creat0R 27-08-2010 20:28 1483158

Цитата:

Цитата shadowbat
хотя через браузер работает »

Ты уверен?

shadowbat 27-08-2010 20:37 1483162

http://iqcomp.ru/learn/course.php?cid=7 это же не полная ссылка? там не хватает например такого "&lid=128" в конце ссылки

Цитата:

уверен?

скрин. через браузер работает, а через скрипт не работает

P.S. у скрипта ориентировочная скорость обработки - 1 ссылка за 2,5 секунды. т.е. за час 1500 ссылок.

shadowbat 12-09-2010 14:15 1493675

как настроить скрипт, чтобы он сохранял все ссылки, если на одной странице их больше чем одна?

тут например 5 видео на одной странице.
save2go выдает все 5 для скачки
а скрипт забирает только первую

Creat0R 12-09-2010 17:12 1493800

Цитата:

Цитата shadowbat
через браузер работает, а через скрипт не работает »

Нужно кодировать адреса.

Возьми отсюда библиотеку Encoding.au3 и помести рядом со скриптом.

Код:

#include <Encoding.au3>

Dim $aUrl = StringSplit(StringStripWS(StringRegExpReplace(FileRead(@ScriptDir & "\List.txt"), '(?s).*?(https?://.*?)\r?\n.*?', '\1' & @LF), 3), @LF)

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & _Encoding_URLToHex($aUrl[$i])))
    $sLink = StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1')

    If @extended > 0 And $sLink <> $sHtml Then
        $sLinks &= $sLink & @CRLF
    EndIf
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)

Цитата:

Цитата shadowbat
скрипт забирает только первую »

А как их сортировать, или это не важно?

Код:

#include <Encoding.au3>

Dim $aUrl = StringSplit(StringStripWS(StringRegExpReplace(FileRead(@ScriptDir & "\List.txt"), '(?s).*?(https?://.*?)\r?\n.*?', '\1' & @LF), 3), @LF)

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & _Encoding_URLToHex($aUrl[$i])))
    $aLinks = StringRegExp($sHtml, '.*<b><a href="(.*)" target="_blank" onclick=".*">', 3)

    If Not @error Then
        For $sLink In $aLinks
            $sLinks &= $sLink & @CRLF
        Next
    EndIf
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)


Listans 02-05-2017 00:00 2733441

Здравствуйте, подскажите как отредактировать этот код, чтобы в итоговом файле была не только ссылка на флеш, но и сам урл из файла List.txt. Можно через пробел, тире или любой другой вариант.

Код:

Dim $aUrl = StringSplit(StringStripWS(StringRegExpReplace(FileRead(@ScriptDir & "\List.txt"), '(?s).*?(https?://.*?)\r?\n.*?', '\1' & @LF), 3), @LF)

$sLinks = ""

For $i = 1 To $aUrl[0]
    $sHtml = BinaryToString(InetRead("http://save2go.ru/parse/?url=" & $aUrl[$i]))
    $sLink = StringRegExpReplace($sHtml, '(?s).*?<b><a href="(.*?)" target="_blank" onclick=".*">.*</a>.*', '\1')

    If @extended > 0 And $sLink <> $sHtml Then
        $sLinks &= $sLink & @CRLF
    EndIf
Next

$sLinks = StringStripWS($sLinks, 3)

;В буфер обмена
ClipPut($sLinks)

;В файл
FileWrite(@ScriptDir & '\MySuperLinks.txt', $sLinks)


Creat0R 02-05-2017 22:25 2733599

Listans,

Код:

$sLinks &= $sLink & @CRLF
замени на

Код:

$sLinks &= $sLink & ' ' & $aUrl[$i] & @CRLF


Время: 18:00.

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