Что нового

Перебор на ebay и выдёргивание ISBN

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt: 3.

Описание:
На етот раз задача немного иная. Чем в предудущей теме которую я открыл и которую мне помогли решить.

Вообещем
Имеа список item артикл от ebay в текстовом файле (столбиком), мне нужно что бы программа переберала каждый номер и B каждом артикле - товаре искала ISBN номер, етот номер исползуется длja книг. На ebay есть стандартные бланки и по ним можно выташить ИСБН номер.

Primer s Formuljarom

http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=290532178642&ssPageName=STRK:MEWNX:IT

Но иногда люди не пользуются етими формулярами. И просто сами в описании Книги пишут етот номер, в любом месте где угодно, и вот как раз сдесь возникает проблема. по скольку существует ISBN:10 и ISBN:13 в описанни может присутситвовать и тот и тот, длинна их различна.
Primer bez formuljara
http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=130507275696&ssPageName=STRK:MEWNX:IT

Вообшем мне нужно что бы переберая Item (item должен браться из *.тхт который я должен открыть - библиотека вообшем), в конце создовался тхт файл в котором находилися бы номера (item товаров) и на против все ISBN которые были найдены на страницы етого товара.
Например

item 456546656465464 ISBN 34894894489
ISBN 98489498499

item 848484848484844 ISBN 84849030400

если же етого номера нет,или программа не смогла распознать его, если например ISBN номер указан вот так 9-86-546-88-9-3 то просто остаBлять поле в ISBN разделе пустым.

Вот вообщем )
Примечания:
Вся сложнaсть на мой взгляд заключается B том что бы сделать умный распозноBатель, но что бы силно не усложнять, можно пока и на обычном поиске "Буква в букву" остановится.


ps
писал транслитом. просьба ошибки не обсуждать
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Сохраняет в TXT по вашему шаблону + на всякий случай в ini... вдруг захочется ещё, что-нибудь сделать с этим массивом... :smile: (Так проще будет его вытаскивать... :smile:)

Код:
#include <array.au3>
	
	$Fname="Item.txt"    ;Файл из которого брать Item
	$Fname2="ISBN.txt"	 ;Файл в который сохранять полученые ISBN TXT
	$Fname3="ISBN.ini"   ;Файл в который сохранять полученые ISBN INI
	
	$i=1
	Dim $items[$i+1][1]
	FileOpen($Fname, 0)
	$timer=TimerInit()
	While FileReadLine($Fname, $i)
	redim $items[$i+1][1]
	$Items[$i][0]=FileReadLine($Fname, $i)
	$i+=1
	toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
	WEnd
	FileClose($Fname)
	$maxItems=UBound($Items)
	$maxItems2=1
	$Items[0][0]=UBound($Items)-1
	
	$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
	$WinUrl ='http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=' & $Items[$i][0] & '&ssPageName=STRK:MEWNX:IT'
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    $oHTTP.Open('GET', $WinUrl & $i, False)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse
    $sHTML = $oHTTP.ResponseText
    $aLinksRaw = StringRegExp($sHTML,'(?si)ISBN.+?headers=.+?">([\d]+?)</td>', 3)
	For $j=1 to uBound($aLinksRaw)
		ReDim $Items[$maxItems][$MaxItems2+1]
		$Items[$i][$j]=$aLinksRaw[$j-1]
		If $j=$MaxItems2 Then
			$MaxItems2+=1
			$Items[0][1]=$MaxItems2
		EndIf
	Next
   Next
;~ 	_ArrayDisplay($Items)
	
	
	
	;      Сохранение в txt
	FileOpen($Fname2, 2)
	For $i=1 to UBound($Items)-1
		toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
		FileWriteLine($Fname2, "Item  " & $Items[$i][0] & "  ISBN " & $Items[$i][1])
	For $j=2 to $items[0][1]-1
		If $Items[$i][$j]="" then exitloop
		FileWriteLine($Fname2, @TAB&@TAB&"   ISBN " & $Items[$i][$j])
	Next
	Next
	FileClose($Fname2)
	
	;		Сохранение в Ini
For $i=1 to UBound($Items)-1 ;Цикл в котором идет работа с ini-файлом... присвоение настроек если уже есть. иначе создает новый ini.
	toolTip("Запись в ini = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
IniWrite(@ScriptDir & "\" & $Fname3, "", "$Item" & $i, $Items[$i][0])
	For $j=1 to $items[0][1]-1
		If $Items[$i][$j]="" then exitloop
		IniWrite(@ScriptDir & "\" & $Fname3, "", "$IBSN" & $i & "-" & $J, $Items[$i][$j])
	Next
next

P.S. обрабатывает ~40 items в минуту. Т.е. на все "notebook" уйдет примерно: 4 дня 15 часов.. :smile: А для "notebook lenovo s" 8.5 минут... :smile:
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
У меня показывает ошибку. что не так ?

: ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
FileWriteLine($Fname2, "Item " & $Items[$i][0] & " ISBN " & $Items[$i][1])
FileWriteLine($Fname2, "Item " & $Items[$i][0] & " ISBN " & ^ ERROR
>Exit code: 1 Time: 1.764
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
А txt файл с результатами от 1-го скрипта лежит в папке с этим скриптом?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
zlo-kazan сказал(а):
А txt файл с результатами от 1-го скрипта лежит в папке с этим скриптом?
да. всё на месте. Идёт перебор но в конце как я понемаю когда идёт запись Bыдаёт эту ошибку.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Пришли файлик txt... сильно смущает:
Dk сказал(а):
Больно быстро пробегает... даже для 1-й запси. Возможно файл пустой?

P.S.
Угу... попробовал с пустым файлом... выдает ошибку.
P.S.S. в окне где пишешь ответ слева доп.опции и там можно прикрепить к посту. :smile:
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Прикрепил,
я взял толкько маленкий кусочек тхт. для использования а то результат долго ждать.
Вообшем я укоротил его.

ps.
Пробегает не быстро. Длится как надо вообшем, но когда дело доходит до конца то пишет ошибку.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
:scratch: Мда не предусмотрел, что после перебора массива не будет ни одной ISBN... Поправил... теперь все :ok:
Код:
#include <array.au3>
   
    $Fname="Item.txt"    ;Файл из которого брать Item
    $Fname2="ISBN.txt"   ;Файл в который сохранять полученые ISBN TXT
    $Fname3="ISBN.ini"   ;Файл в который сохранять полученые ISBN INI
   
    $i=1
    Dim $items[$i+1][2]
	$Items[0][1]=2
    FileOpen($Fname, 0)
    $timer=TimerInit()
    While FileReadLine($Fname, $i)
    redim $items[$i+1][2]
    $Items[$i][0]=FileReadLine($Fname, $i)
    $i+=1
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    WEnd
    FileClose($Fname)
    $maxItems=UBound($Items)
    $maxItems2=2
    $Items[0][0]=UBound($Items)-1
   
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=' & $Items[$i][0] & '&ssPageName=STRK:MEWNX:IT'
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    $oHTTP.Open('GET', $WinUrl & $i, False)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse
    $sHTML = $oHTTP.ResponseText
    $aLinksRaw = StringRegExp($sHTML,'(?si)ISBN.+?headers=.+?">([\d]+?)</td>', 3)
    For $j=1 to uBound($aLinksRaw)
        ReDim $Items[$maxItems][$MaxItems2+1]
        $Items[$i][$j]=$aLinksRaw[$j-1]
        If $j=$MaxItems2 Then
            $MaxItems2+=1
            $Items[0][1]=$MaxItems2
        EndIf
    Next
   Next
;~  _ArrayDisplay($Items)
   
   
   
    ;      Сохранение в txt
    FileOpen($Fname2, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname2, "Item  " & $Items[$i][0] & "  ISBN " & $Items[$i][1])
	For $j=2 to $items[0][1]-1
        If $Items[$i][$j]="" then exitloop
        FileWriteLine($Fname2, @TAB&@TAB&"   ISBN " & $Items[$i][$j])
    Next
    Next
    FileClose($Fname2)
   
    ;       Сохранение в Ini
For $i=1 to UBound($Items)-2 ;Цикл в котором идет работа с ini-файлом... присвоение настроек если уже есть. иначе создает новый ini.
    toolTip("Запись в ini = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
IniWrite(@ScriptDir & "\" & $Fname3, "", "$Item" & $i, $Items[$i][0])
    For $j=1 to $items[0][1]-1
        If $Items[$i][$j]="" then exitloop
        IniWrite(@ScriptDir & "\" & $Fname3, "", "$IBSN" & $i & "-" & $J, $Items[$i][$j])
    Next
next
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Всё работает ))) Мега Спасибо :ok: :ok: :ok: :ok:

Маленкий токо вопросик, как мне сделать если я хочу другой поиск не компов а книг, просто прописать сылку резуальтата поиска щ ебаы таким же образом как компов ?

пс всё будет Помечано :ok:
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
ищет по умолчанию во всех категориях... :smile:
Хм...
В первой проге есть строчка:
Код:
$WinUrl ='httр://shop.ebay.com/?_from=R40&_trksid=p3910.m570.l1313&_nkw=' & $_sSearch & '&_sacat=See-All-Categories&_pgn='

Попробуй поменять на:
Код:
$Catigoriya='See-All-Categories'
$WinUrl ='httр://shop.ebay.com/?_from=R40&_trksid=p3910.m570.l1313&_nkw=' & $_sSearch & '&_sacat=' & $Catigoriya & '&_pgn='

И вместо 'See-All-Categories' подставлять нужную категорию у книг например '267'.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
К сожалению не работает.
пишет
: ==> Variable used without being declared.:
Global $WinUrl ='htt?://shop.ebay.com/?_from=R40&_trksid=p3910.m570.l1313&_nkw=' & $_sSearch & '&_sacat=' & $Catigoriya & '&_pgn='
Global $WinUrl ='htt?://shop.ebay.com/?_from=R40&_trksid=p3910.m570.l1313&_nkw=' & ^ ERROR

Потом я решил просто вставит мне нужную категорию.
выбрал вот ето и вставил.

http://shop.ebay.com/?_from=R40&_trksid=m570&_nkw=I%27m+Glad+I%27m+a+Mom+

там Bсего 5 книг на одной странице.
Когда включаю, он ищет и ищет без конца так я до 600 аж дошёл

:-[ :-\

в начале попробывал 267 а потом и просто books

мне именно нужно что бы не по поисковому слову а по категориям.
Мне интерессны например
Все Книги. Но полностю сразу все книги ебаы не показывает, всегда нужно выбрать ещё один подраздел. Но ето не страшно.

Просто выглядит ето так

books ---> Fiction & Literature ----> и выбор Auctions only.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Variable used without being declared
Говорит о том, что не объявлена такая переменная... :smile:
Скорее всего это из-за: Кавычек... " " и ' '.

Если поисковое слово:
I'm Glad I'm a Mom
То получается так:
Код:
$_sSearch = 'I'm Glad I'm a Mom'

Часть m Glad I за пределами кавычек. Можно попробовать:
Код:
$_sSearch = "I'm Glad I'm a Mom"
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Так ну с этим я разобрался. Теперь осталась последняя часть 3 - тия, новую тему не буду открывать пока.


Вообшем теперь когда у меня есть Item, ISBN мне нуже третий столбик цена етой книги с www.amazon.de

Мне нужно что бы, программа переберала по ISBN списку наwww.amazon.de и выдавала мне цену на ету книгу, но не на новую а на поддержанную. и потом записывалa как третий столбик в тхт сумму на против каждой ISBN.

Если ето будет сделанно, то я буду просто ну вообще ))
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=0736923810
тут нужно вытащить: 6 gebraucht ab EUR 2,41 ?
Кстати оставлять ил Item с пустыми ISBN?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
zlo-kazan сказал(а):
http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=0736923810
тут нужно вытащить: 6 gebraucht ab EUR 2,41 ?
Кстати оставлять ил Item с пустыми ISBN?
Сдесь мне нужна только самая дешёвая цена - перBая, тоесть 2,41

Нет пустые лутше будет не оставлять
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Работает где-то в 1.5 раза медленнее чем предыдущие скрипты... из-за особенностей http://www.amazon.de/... WinHTTP отказывается видеть цену. Пришлось делать через <IE.au3>. Мышь и клавиатуру также не трогает, но будут слышны щелчки при открытии невидимой странички.
Код:
#include <array.au3>
    #include <IE.au3>
    $Fname="Item.txt"    
    $Fname2="ISBN.txt"   
    $Fname3="ISBN.ini"   
	$Fname4="item-ISBN-Preis.txt" ; Конечный файл.
	$timer=TimerInit()
   
	$i=1
	$k=1
	$maxItems2=3
	dim $items[1][2]
	$temp=IniRead($Fname3, "", "$Item" & $i,0)
	While $temp<>""
		toolTip("Строчка = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
		If IniRead($Fname3, "", "$IBSN" & $i & "-" & 1, "")<>"" then
		redim $items[$k+1][$maxItems2]
		$items[$k][0] = IniRead($Fname3, "", "$Item" & $i,"")
		For $j=1 to $maxItems2 -1
		If $items[$k][0]=$items[$k-1][0] Then 
		$k-=1
		exitloop
		EndIf
		ReDim $items[$k+1][$maxItems2]
		$items[$k][$j] = IniRead($Fname3, "", "$IBSN" & $i & "-" & $j,"")
		If IniRead($Fname3, "", "$IBSN" & $i & "-" & $maxitems2+1, "")<>"" Then $maxItems2+=1
		next
		$k+=1
		EndIf
		$i+=1
		if $i>100 then exitloop
		$temp=IniRead($Fname3, "", "$Item" & $i,0)
	WEnd
;~ 	_ArrayDisplay($Items)
	Dim $items2[1][3]
	$k=1
	For $i=1 to UBound($items)-1 
	For $j=1 to UBound($items, 2)-1
	ReDim $items2[$k+1][3]
	$Items2[$k][0]=$items[$i][0]
	$Items2[$k][1]=$items[$i][$j]
	$k+=1
	Next
	Next
	ReDim $items[$k][3]
	For $i=1 to UBound($Items2)-1
	$Items[$i][0]=$items2[$i][0]
	$Items[$i][1]=$items2[$i][1]
	$Items[$i][2]=0
	Next
;~ 	_ArrayDisplay($items)
    
    $maxItems=UBound($Items)
    $maxItems2=2
    $Items[0][0]=UBound($Items)-1
   
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=' & $Items[$i][1]
;~		$oHTTP.Open('GET', $WinUrl & $i, False)
;~		$oHTTP.Send('')
;~		$oHTTP.WaitForResponse
;~		$sHTML = $oHTTP.ResponseText
;~		$aLinksRaw = StringRegExp($sHTML,'(?si)()', 3)
;~		_ArrayDisplay($aLinksRaw)
;~		$Items[$i][2]=$aLinksRaw[0]

	toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
	$oIE=_IECreate($WinUrl,0,0)
	$sText = _IEDocReadHTML($oIE)
	$Word = StringRegExp($sText, '(?si)gebraucht.+?EUR[\s](.+?)</span>',3)
;~ 	_ArrayDisplay($word)
	$oIE=_IEquit($oIE)
	$Items[$i][2]=$Word[0]
	Next
;~ 	_ArrayDisplay($Items)
  

    ;      Сохранение в txt
    FileOpen($Fname4, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname4, "Item  " & $Items[$i][0] & "  ISBN " & $Items[$i][1] & " Preis " & $Items[$i][2])
    Next
    FileClose($Fname4)
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
zlo-kazan сказал(а):
Работает где-то в 1.5 раза медленнее чем предыдущие скрипты... из-за особенностей http://www.amazon.de/... WinHTTP отказывается видеть цену. Пришлось делать через <IE.au3>. Мышь и клавиатуру также не трогает, но будут слышны щелчки при открытии невидимой странички.
Код:
#include <array.au3>
    #include <IE.au3>
    $Fname="Item.txt"    
    $Fname2="ISBN.txt"   
    $Fname3="ISBN.ini"   
	$Fname4="item-ISBN-Preis.txt" ; Конечный файл.
	$timer=TimerInit()
   
	$i=1
	$k=1
	$maxItems2=3
	dim $items[1][2]
	$temp=IniRead($Fname3, "", "$Item" & $i,0)
	While $temp<>""
		toolTip("Строчка = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
		If IniRead($Fname3, "", "$IBSN" & $i & "-" & 1, "")<>"" then
		redim $items[$k+1][$maxItems2]
		$items[$k][0] = IniRead($Fname3, "", "$Item" & $i,"")
		For $j=1 to $maxItems2 -1
		If $items[$k][0]=$items[$k-1][0] Then 
		$k-=1
		exitloop
		EndIf
		ReDim $items[$k+1][$maxItems2]
		$items[$k][$j] = IniRead($Fname3, "", "$IBSN" & $i & "-" & $j,"")
		If IniRead($Fname3, "", "$IBSN" & $i & "-" & $maxitems2+1, "")<>"" Then $maxItems2+=1
		next
		$k+=1
		EndIf
		$i+=1
		if $i>100 then exitloop
		$temp=IniRead($Fname3, "", "$Item" & $i,0)
	WEnd
;~ 	_ArrayDisplay($Items)
	Dim $items2[1][3]
	$k=1
	For $i=1 to UBound($items)-1 
	For $j=1 to UBound($items, 2)-1
	ReDim $items2[$k+1][3]
	$Items2[$k][0]=$items[$i][0]
	$Items2[$k][1]=$items[$i][$j]
	$k+=1
	Next
	Next
	ReDim $items[$k][3]
	For $i=1 to UBound($Items2)-1
	$Items[$i][0]=$items2[$i][0]
	$Items[$i][1]=$items2[$i][1]
	$Items[$i][2]=0
	Next
;~ 	_ArrayDisplay($items)
    
    $maxItems=UBound($Items)
    $maxItems2=2
    $Items[0][0]=UBound($Items)-1
   
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=' & $Items[$i][1]
;~		$oHTTP.Open('GET', $WinUrl & $i, False)
;~		$oHTTP.Send('')
;~		$oHTTP.WaitForResponse
;~		$sHTML = $oHTTP.ResponseText
;~		$aLinksRaw = StringRegExp($sHTML,'(?si)()', 3)
;~		_ArrayDisplay($aLinksRaw)
;~		$Items[$i][2]=$aLinksRaw[0]

	toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
	$oIE=_IECreate($WinUrl,0,0)
	$sText = _IEDocReadHTML($oIE)
	$Word = StringRegExp($sText, '(?si)gebraucht.+?EUR[\s](.+?)</span>',3)
;~ 	_ArrayDisplay($word)
	$oIE=_IEquit($oIE)
	$Items[$i][2]=$Word[0]
	Next
;~ 	_ArrayDisplay($Items)
  

    ;      Сохранение в txt
    FileOpen($Fname4, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname4, "Item  " & $Items[$i][0] & "  ISBN " & $Items[$i][1] & " Preis " & $Items[$i][2])
    Next
    FileClose($Fname4)


К сожалению не работает.
Примерно на 5 ой странице или даже уже на первой, стопорIтся. Не идёт ни щётчик времени, ни перебор страниц. ((
Ждал примерно 20 минут, всё замерло. Окончательный файл тоже не был создан. Думал может дело в болших листах, сделал литс с 20 Item, SBN, но всё равно также.


Я понял так что отказывается прочитать
сдесь

Ведь етот адрес вроде используется

http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=0736923810

Может стоит попробывать сдесь

http://www.amazon.de/gp/offer-listing/0736923810/ref=sr_1_1_olp?ie=UTF8&qid=1303240607&sr=8-1&condition=used


тот же самый адрес, толко углублённей, когда сылка приводит сразу к разделу гебраухт. В первом сылка вела к выбору между тем и тем. МожeT там что :-[


разумеется ISBN 0736923810 взял прсото в пример ...

Иногда выдаёт

(78) : ==> Subscript used with non-Array variable.:
$Items[$i][2]=$Word[0]
$Items[$i][2]=$Word^ ERROR
>Exit code: 1 Time: 389.046
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
По 2-й находит. :smile: Но столкнулся с проблемой.
у item... 2 ISBN...
Item 270729867365
ISBN 0310237432
ISBN 9780310237433
Через ссылку 0310237432 находит. 9780310237433 (404 ошибка - страница не найдена), но если через поиск забить, то выводит тот же товар и номер в ссылке 0310237432. Бывает ли, что есть только 2-й номер 9780310237433?

Исправил ошибку в предыдущем коде который работает с item.txt и сохраняет ISBN... (съедал последний элемент)
И поставил доработку, чтобы в следующем скрипте нормально находило конец файла.
Код:
#include <array.au3>
   
    $Fname="Item.txt"    ;Файл из которого брать Item
    $Fname2="ISBN.txt"   ;Файл в который сохранять полученые ISBN TXT
    $Fname3="ISBN.ini"   ;Файл в который сохранять полученые ISBN INI
   
    $i=1
    Dim $items[$i+1][2]
    $Items[0][1]=2
    FileOpen($Fname, 0)
    $timer=TimerInit()
    While FileReadLine($Fname, $i)
    redim $items[$i+1][2]
    $Items[$i][0]=FileReadLine($Fname, $i)
    $i+=1
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    WEnd
    FileClose($Fname)
    $maxItems=UBound($Items)
    $maxItems2=2
    $Items[0][0]=UBound($Items)-1
   
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=' & $Items[$i][0] & '&ssPageName=STRK:MEWNX:IT'
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    $oHTTP.Open('GET', $WinUrl & $i, False)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse
    $sHTML = $oHTTP.ResponseText
    $aLinksRaw = StringRegExp($sHTML,'(?si)ISBN.+?headers=.+?">([\d]+?)</td>', 3)
    For $j=1 to uBound($aLinksRaw)
        ReDim $Items[$maxItems][$MaxItems2+1]
        $Items[$i][$j]=$aLinksRaw[$j-1]
        If $j=$MaxItems2 Then
            $MaxItems2+=1
            $Items[0][1]=$MaxItems2
        EndIf
    Next
   Next
;~  _ArrayDisplay($Items)
   
   
   
    ;      Сохранение в txt
    FileOpen($Fname2, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname2, "Item  " & $Items[$i][0] & "  ISBN " & $Items[$i][1])
    For $j=2 to $items[0][1]-1
        If $Items[$i][$j]="" then exitloop
        FileWriteLine($Fname2, @TAB&@TAB&"   ISBN " & $Items[$i][$j])
    Next
    Next
    FileClose($Fname2)
   
    ;       Сохранение в Ini
For $i=1 to UBound($Items)-1 ;Цикл в котором идет работа с ini-файлом... присвоение настроек если уже есть. иначе создает новый ini.
    toolTip("Запись в ini = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
IniWrite(@ScriptDir & "\" & $Fname3, "", "$Item" & $i, $Items[$i][0])
    For $j=1 to $items[0][1]-1
        If $Items[$i][$j]="" then exitloop
        IniWrite(@ScriptDir & "\" & $Fname3, "", "$IBSN" & $i & "-" & $J, $Items[$i][$j])
    Next
next
IniWrite(@ScriptDir & "\" & $Fname3, "", "$Item" & $i+1, "exit")

Код:
#include <array.au3>
    #include <IE.au3>
    $Fname="Item.txt"    
    $Fname2="ISBN.txt"  
    $Fname3="ISBN.ini"  
    $Fname4="item-ISBN-Preis.txt" ; Конечный файл.
    $timer=TimerInit()
   
    $i=1
    $k=1
    $maxItems2=4
    dim $items[1][4]
    While 1
        toolTip("Строчка = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        If IniRead($Fname3, "", "$IBSN" & $i & "-" & 1, "")<>"" then
        redim $items[$k+1][$maxItems2]
        $items[$k][0] = IniRead($Fname3, "", "$Item" & $i,"")
        For $j=1 to $maxItems2 -1
        If $items[$k][0]=$items[$k-1][0] Then
        $k-=1
        exitloop
        EndIf
        ReDim $items[$k+1][$maxItems2]
        $items[$k][$j] = IniRead($Fname3, "", "$IBSN" & $i & "-" & $j,"")
        If IniRead($Fname3, "", "$IBSN" & $i & "-" & $maxitems2+1, "")<>"" Then $maxItems2+=1
        next
        $k+=1
        EndIf
        $i+=1
        If IniRead($Fname3, "", "$Item" & $i,0)="exit" then exitloop
    WEnd
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://www.amazon.de/gp/offer-listing/' & $Items[$i][1] & '/ref=sr_1_1_olp?ie=UTF8&qid=' & $Items[$i][1] & '&sr=8-1&condition=used'
     $oHTTP.Open('GET', $WinUrl & $i, False)
     $oHTTP.Send('')
     $oHTTP.WaitForResponse
     $sHTML = $oHTTP.ResponseText
     $aLinksRaw = StringRegExp($sHTML,'(?si)Gebraucht:.+?class="price">EUR[\s](.+?)</a>', 3)
;~      _ArrayDisplay($aLinksRaw)
;~ 	msgbox(0,"",$i & @CRLF & $Items[$i][1])
     $Items[$i][3]=$aLinksRaw[0]			
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    Next
;~  _ArrayDisplay($Items)
 

    ;      Сохранение в txt
    FileOpen($Fname4, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname4, "Item: " & $Items[$i][0] & "    ISBN-10: " & $Items[$i][1] & "    ISBN-13: " & $Items[$i][2] & "    Preis: " & $Items[$i][3] & " EUR")
    Next
    FileClose($Fname4)
	
	

Func _Exit()
    _IEQuit($oIE)
    Exit
EndFunc   ;==>_Exit

[box title=txt-файл на выходе]
Item: 270729867365 ISBN-10: 0310237432 ISBN-13: 9780310237433 Preis: 0,35 EUR
Item: 290541404225 ISBN-10: 0310237416 ISBN-13: 9780310237419 Preis: 0,06 EUR
Item: 150578240741 ISBN-10: 0310248175 ISBN-13: 9780310248170 Preis: 0,99 EUR
Item: 160563014576 ISBN-10: 0736914994 ISBN-13: 9780736914994 Preis: 4,75 EUR
Item: 300518066085 ISBN-10: 0736923810 ISBN-13: 9780736923811 Preis: 2,41 EUR
[/box]
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
zlo-kazan сказал(а):
По 2-й находит. :smile: Но столкнулся с проблемой.
у item... 2 ISBN...
Item 270729867365
ISBN 0310237432
ISBN 9780310237433
Через ссылку 0310237432 находит. 9780310237433 (404 ошибка - страница не найдена), но если через поиск забить, то выводит тот же товар и номер в ссылке 0310237432. Бывает ли, что есть только 2-й номер 9780310237433?

Исправил ошибку в предыдущем коде который работает с item.txt и сохраняет ISBN... (съедал последний элемент)
И поставил доработку, чтобы в следующем скрипте нормально находило конец файла.
Код:
#include <array.au3>
   
    $Fname="Item.txt"    ;Файл из которого брать Item
    $Fname2="ISBN.txt"   ;Файл в который сохранять полученые ISBN TXT
    $Fname3="ISBN.ini"   ;Файл в который сохранять полученые ISBN INI
   
    $i=1
    Dim $items[$i+1][2]
    $Items[0][1]=2
    FileOpen($Fname, 0)
    $timer=TimerInit()
    While FileReadLine($Fname, $i)
    redim $items[$i+1][2]
    $Items[$i][0]=FileReadLine($Fname, $i)
    $i+=1
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    WEnd
    FileClose($Fname)
    $maxItems=UBound($Items)
    $maxItems2=2
    $Items[0][0]=UBound($Items)-1
   
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=' & $Items[$i][0] & '&ssPageName=STRK:MEWNX:IT'
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    $oHTTP.Open('GET', $WinUrl & $i, False)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse
    $sHTML = $oHTTP.ResponseText
    $aLinksRaw = StringRegExp($sHTML,'(?si)ISBN.+?headers=.+?">([\d]+?)</td>', 3)
    For $j=1 to uBound($aLinksRaw)
        ReDim $Items[$maxItems][$MaxItems2+1]
        $Items[$i][$j]=$aLinksRaw[$j-1]
        If $j=$MaxItems2 Then
            $MaxItems2+=1
            $Items[0][1]=$MaxItems2
        EndIf
    Next
   Next
;~  _ArrayDisplay($Items)
   
   
   
    ;      Сохранение в txt
    FileOpen($Fname2, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname2, "Item  " & $Items[$i][0] & "  ISBN " & $Items[$i][1])
    For $j=2 to $items[0][1]-1
        If $Items[$i][$j]="" then exitloop
        FileWriteLine($Fname2, @TAB&@TAB&"   ISBN " & $Items[$i][$j])
    Next
    Next
    FileClose($Fname2)
   
    ;       Сохранение в Ini
For $i=1 to UBound($Items)-1 ;Цикл в котором идет работа с ini-файлом... присвоение настроек если уже есть. иначе создает новый ini.
    toolTip("Запись в ini = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
IniWrite(@ScriptDir & "\" & $Fname3, "", "$Item" & $i, $Items[$i][0])
    For $j=1 to $items[0][1]-1
        If $Items[$i][$j]="" then exitloop
        IniWrite(@ScriptDir & "\" & $Fname3, "", "$IBSN" & $i & "-" & $J, $Items[$i][$j])
    Next
next
IniWrite(@ScriptDir & "\" & $Fname3, "", "$Item" & $i+1, "exit")

Код:
#include <array.au3>
    #include <IE.au3>
    $Fname="Item.txt"    
    $Fname2="ISBN.txt"  
    $Fname3="ISBN.ini"  
    $Fname4="item-ISBN-Preis.txt" ; Конечный файл.
    $timer=TimerInit()
   
    $i=1
    $k=1
    $maxItems2=4
    dim $items[1][4]
    While 1
        toolTip("Строчка = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        If IniRead($Fname3, "", "$IBSN" & $i & "-" & 1, "")<>"" then
        redim $items[$k+1][$maxItems2]
        $items[$k][0] = IniRead($Fname3, "", "$Item" & $i,"")
        For $j=1 to $maxItems2 -1
        If $items[$k][0]=$items[$k-1][0] Then
        $k-=1
        exitloop
        EndIf
        ReDim $items[$k+1][$maxItems2]
        $items[$k][$j] = IniRead($Fname3, "", "$IBSN" & $i & "-" & $j,"")
        If IniRead($Fname3, "", "$IBSN" & $i & "-" & $maxitems2+1, "")<>"" Then $maxItems2+=1
        next
        $k+=1
        EndIf
        $i+=1
        If IniRead($Fname3, "", "$Item" & $i,0)="exit" then exitloop
    WEnd
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://www.amazon.de/gp/offer-listing/' & $Items[$i][1] & '/ref=sr_1_1_olp?ie=UTF8&qid=' & $Items[$i][1] & '&sr=8-1&condition=used'
     $oHTTP.Open('GET', $WinUrl & $i, False)
     $oHTTP.Send('')
     $oHTTP.WaitForResponse
     $sHTML = $oHTTP.ResponseText
     $aLinksRaw = StringRegExp($sHTML,'(?si)Gebraucht:.+?class="price">EUR[\s](.+?)</a>', 3)
;~      _ArrayDisplay($aLinksRaw)
;~ 	msgbox(0,"",$i & @CRLF & $Items[$i][1])
     $Items[$i][3]=$aLinksRaw[0]			
    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    Next
;~  _ArrayDisplay($Items)
 

    ;      Сохранение в txt
    FileOpen($Fname4, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname4, "Item: " & $Items[$i][0] & "    ISBN-10: " & $Items[$i][1] & "    ISBN-13: " & $Items[$i][2] & "    Preis: " & $Items[$i][3] & " EUR")
    Next
    FileClose($Fname4)
	
	

Func _Exit()
    _IEQuit($oIE)
    Exit
EndFunc   ;==>_Exit

[box title=txt-файл на выходе]
Item: 270729867365 ISBN-10: 0310237432 ISBN-13: 9780310237433 Preis: 0,35 EUR
Item: 290541404225 ISBN-10: 0310237416 ISBN-13: 9780310237419 Preis: 0,06 EUR
Item: 150578240741 ISBN-10: 0310248175 ISBN-13: 9780310248170 Preis: 0,99 EUR
Item: 160563014576 ISBN-10: 0736914994 ISBN-13: 9780736914994 Preis: 4,75 EUR
Item: 300518066085 ISBN-10: 0736923810 ISBN-13: 9780736923811 Preis: 2,41 EUR
[/box]

Вторая программа работает отлично.
3 - поселдняя программа выдаёт мне ошибку

(46) : ==> Subscript used with non-Array variable.:
$Items[$i][3]=$aLinksRaw[0]
$Items[$i][3]=$aLinksRaw^ ERROR
>Exit code: 1 Time: 8.338

:-\
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Скорее всего нет цены "Gebraucht". Сделал Так что будет выдавать самую первую. Если нет её то 2-ю... если её нет, то 3-ю...
Код:
#include <array.au3>
    #include <IE.au3>
    $Fname="Item.txt"    
    $Fname2="ISBN.txt"  
    $Fname3="ISBN.ini"  
    $Fname4="item-ISBN-Preis.txt" ; Конечный файл.
    $timer=TimerInit()
   
    $i=1
    $k=1
    $maxItems2=4
    dim $items[1][4]
    While 1
        toolTip("Строчка = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        If IniRead($Fname3, "", "$IBSN" & $i & "-" & 1, "")<>"" then
        redim $items[$k+1][$maxItems2]
        $items[$k][0] = IniRead($Fname3, "", "$Item" & $i,"")
        For $j=1 to $maxItems2 -1
        If $items[$k][0]=$items[$k-1][0] Then
        $k-=1
        exitloop
        EndIf
        ReDim $items[$k+1][$maxItems2]
        $items[$k][$j] = IniRead($Fname3, "", "$IBSN" & $i & "-" & $j,"")
        If IniRead($Fname3, "", "$IBSN" & $i & "-" & $maxitems2+1, "")<>"" Then $maxItems2+=1
        next
        $k+=1
        EndIf
        $i+=1
        If IniRead($Fname3, "", "$Item" & $i,0)="exit" then exitloop
    WEnd
    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $k=0
    $i=0
    $timer=TimerInit()
    Dim $aLinks[1]
    For $i=1 to UBound($Items)-1
    $WinUrl ='http://www.amazon.de/gp/offer-listing/' & $Items[$i][1] & '/ref=sr_1_1_olp?ie=UTF8&qid=' & $Items[$i][1] & '&sr=8-1&condition=used'
     $oHTTP.Open('GET', $WinUrl & $i, False)
     $oHTTP.Send('')
     $oHTTP.WaitForResponse
     $sHTML = $oHTTP.ResponseText
	$aLinksRaw = StringRegExp($sHTML,'(?si)class="price">EUR[\s](.+?)</a>', 3)
	$Items[$i][3]=$aLinksRaw[0]

    toolTip("Страница = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
    Next
;~  _ArrayDisplay($Items)
 

    ;      Сохранение в txt
    FileOpen($Fname4, 2)
    For $i=1 to UBound($Items)-1
        toolTip("Запись в txt = " & $i & " Прошло времени = " & round((Timerdiff($timer)/1000), 0) & " сек", 0,0)
        FileWriteLine($Fname4, "Item: " & $Items[$i][0] & "    ISBN-10: " & $Items[$i][1] & "    ISBN-13: " & $Items[$i][2] & "   Price: " & $Items[$i][3] & " EUR")
    Next
    FileClose($Fname4)
   
   

Func _Exit()
    _IEQuit($oIE)
    Exit
EndFunc   ;==>_Exit
 
Верх