Что нового

Вытаскивание ISBN номмеров из аукционав на Ebay

Dk

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

Смысл такой, программа вытаскивает ISBN номмера из аукционав из Ebay исползуя список Item номмеров (номера аукционав) к примеру сдесь http://www.ebay.de/itm/170865924878 ISBN-10:3540850163 ISBN-13:9783540850168

Вот скрипт этой программы

Код:
#include <array.au3>
   
    $Fname="Item.txt"    
    $Fname2="ISBN.txt"  
    $Fname3="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)
   
   
   
   
    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 
    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")


Примечания:

К сожалению программа работает не совсем правильно.
Она считывает ISBN номера, с ауктионав в которых их совсем нет наприме как сдесь http://www.ebay.de/itm/370625478791

Откуда она эти номера считывает, я не знаю и получается, что в результате большое колличество совершенно "левых номмеров".
Так же программа иногда не считывает ISBN номера, там где они есть

Посмотрите пожалуйсто скрипт, возможно вы найдёте причину или сможите модернизировать где то его.
Пс
Сам скрипт писал не я.
Я искал подходящий раздел для этой темы и пришёл всё таки сюда.

Важное примечание
Да и ещё есть такая любопытная деталь.
В то время когда программа работает (переберает номера). Я лазию по аукционам, но через Firefox. Сама програма идёт через IE.
Возможно ли что программа из за етого каким то оброзом считывает именно там где я лазию. Потому что вроде номера потом в списке, который сделала програма иногда совпадают с ISBN намерами тех аукционав на которыe я заходил сам. (Или может это всё же совпадение)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Ребята ну помогите пожалуйсто.


Добавлено:
Сообщение автоматически объединено:

Мне кажется вот где то сдесь ошибка :whistle:

Код:
$aLinksRaw = StringRegExp($sHTML,'(?si)ISBN.+?headers=.+?">([\d]+?)</td>', 3)
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Вообшем 30 евра заплачу тому кто сделает скрипт нормалным.
Оплата через PayPal или Денежным Переводом WesternUnion
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dk [?]
кто сделает скрипт нормалным
Что значить нормальным?
Для работы нужно тех. задание (описание требуемых действий для получения конечного результата).

Вот вам нормальная функция для получения ISBN-10 и ISBN-13
Функцию можно заключить в цикл (желательно с небольшой задержкой для уменьшения нагрузки на сервер)
Код:
$sItm = 170865924878 ; ISBN-10 или ISBN-13 есть
;~ $sItm = 370625478791 ; ISBN-10, ISBN-13 нет

_GetISBN($sItm)

Func _GetISBN($s_Itm)
	
	Local $s_URL = 'http://www.ebay.de/itm/'& $sItm 
	$s_Result = InetRead($s_URL)
	If @error Then _
		Return SetError(1, 0 , 0)
	
	$s_Result = BinaryToString($s_Result)
	$s_Result = StringRegExpReplace($s_Result, '<[^>]*>' , '$1')
	$a_ISBN = StringRegExp($s_Result, '(?<=ISBN-1[0|3]:)\s\d+', 3)
	
	If IsArray($a_ISBN) Then
		; если найдены ISBN-10 и ISBN-13 записываем их в конец файла.
		; формат записи: itm | ISBN-10 | ISBN-13
		; ВНИМАНИЕ! проверки на существование записи в файле нет
		Local $h_File = FileOpen('isbn.txt', 1)
		If $h_File = -1 Then
			Return SetError(2, 0 , 1)
		EndIf
		FileWrite($h_File, $s_Itm & '|' & $a_ISBN[0] & '|' & $a_ISBN[1] & @CRLF)
		FileClose($h_File)
		Return SetError(0, 0 , 1)
	Else
		Return SetError(0, 0 , 0)
	EndIf
EndFunc ;==>_GetISBN
 
Автор
D

Dk

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

Вы бы могли вмонтировать эту функцыю в тот скрипт, у меня очень маленькие познания в аутоите.

Мне нужно что бы программа, показывала, сколько всего номмеров item будет проверят, сколько проверила, сколько времени прошло. Всё это уже есть в том скрипте, который я выложил, мне ещё нужно что бы если программа прервалась к примеру отключил електричество, то она записала бы последний номмер в файл. В скрипте, который я выложил к сожалению при збое программы ниодин номмер не сохранятся пока не дойдёт до конца.
Если вы мне поможите, и всё будет работать так как я описал (самое главное что бы не вытаскивала номера от туда где их нет), то готов оплатить.

И обязательно нужно что бы конечный файл выглядел фот так

Item 261052642932 ISBN
Item 110903583675 ISBN 9783827327840
ISBN 3827327849
Item 160830791725 ISBN 9783894496289
ISBN 3894496282
Item 120938229446 ISBN 3083617054
ISBN 9783083617051

ПОчему то не выходит ровно - столбиком ((


Что бы не важно было какой ISBN там ISBN 10 или ISBN 13, что бы просто стояло ISBN.
Токой результат оформление очень важно так как в дальнейшем етот файл будет оркываться другим скриптом, для дальнейшей обработки
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Дайте ваш рабочий файл Item.txt
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
да, конечный файл должен называться isbn.txt

да, не важно какой ISBN лиж бы он был там на страничке.


но если было найдено два ISBN

то должно быть zаписанно вот так

Item 110903583675 ISBN 9783827327840
ISBN 3827327849

Ещё иногда ISBN называют ЕАN. Тоже такой же номмер просто называется по другому.
Он тоже должен читаться и записываться как ISBN


Добавлено:
Сообщение автоматически объединено:

Я прикрепил сюда другой лист, он короче.
И там как раз на первом же номере Старый скрипт вытаскивает ISBN номер которго вообще не существует.
Можете проверять свой скрипт с помощю етого Листа
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dk
Пробуйте.
Код:
Global $sOptions = 'options.ini'
Global $sPiece = '', $sTmp = ''

_Init()
If @error Then
	MsgBox(0, @ScriptName, 'Ошибка чтения INI файла!' & @CR)
	Exit
EndIf

If FileExists($sPathFileIsbn) And $iCountLine = 1 Then 
	FileDelete($sPathFileIsbn)
EndIf

; $t = TimerInit()

Local $hFileItem = FileOpen($sPathFileItem, 0)
If $hFileItem = -1 Then
	MsgBox(0, @ScriptName, 'Ошибка чтения '& $sPathFileItem &' файла!')
	Exit
EndIf
	
While 1
	
	Local $sLine = FileReadLine($hFileItem, $iCountLine)
	If @error = -1 Then
		IniWrite($sOptions, "options", "iCountLine", 1)
		ExitLoop
	Else
		$sPiece = _GetISBN($sLine)
		If @error Then ExitLoop
		If $sPiece <> '' Then 
			$sTmp &= $sPiece
			If BinaryLen(StringToBinary($sTmp)) > 1024 Then
				_FileWrite($sTmp)
				$sTmp = ''
			EndIf
			; ConsoleWrite('Ok: ' & $iCountLine &' - '& $sLine & @CR)
		EndIf

		$iCountLine += 1
		IniWrite($sOptions, "options", "iCountLine", $iCountLine)
	EndIf
WEnd

If BinaryLen(StringToBinary($sTmp)) <> 0 Then
	_FileWrite($sTmp)
EndIf

FileClose($hFileItem)

#Region Function

; ConsoleWrite(Round(TimerDiff($t)/1000, 1) & ' sec.' & @CR)

Func _Init() ;void
	
	If Not FileExists($sOptions) Then
		Local $a_Options[4][2] = [["sURL", "http://www.ebay.de/itm/"], _
								  ["iCountLine", 1], _
								  ["sPathFileItem", "item.txt"], _
								  ["sPathFileIsbn", "isbn.txt"]]
		
		IniWriteSection($sOptions, "Options", $a_Options, 0)
	EndIf

	Local $a_Options = IniReadSection($sOptions, "options")
	If @error Then
		Return SetError(1)
	Else
		For $i = 1 To $a_Options[0][0]
			Assign($a_Options[$i][0], $a_Options[$i][1], '2')
		Next
	EndIf
	Return SetError(0)
EndFunc ;==>_Init

Func _GetISBN($s_Itm) ;srting
	
	Local $s_Result = InetRead($sURL & $s_Itm)
	If @error Then Return SetError(1, 0 , 0)
	
	$s_Result = BinaryToString($s_Result)
	$s_Result = StringRegExpReplace($s_Result, '<[^>]*>' , '$1')
	$a_ISBN = StringRegExp($s_Result, '(?<=ISBN-1[0|3]:)\s[\d-]+', 3)
	
	If IsArray($a_ISBN) Then
		
		Local $s_Ret = 'ITEM ' & $s_Itm
		If UBound($a_ISBN) > 2 Then ReDim $a_ISBN[2]
		For $i = 0 To UBound($a_ISBN) -1
			$s_Ret &= ' ISBN ' & $a_ISBN[$i]
		Next
		$s_Ret &= @CRLF
		Return SetError(0, 0 , $s_Ret)
	Else
		Return SetError(0, 0 , '')
	EndIf
EndFunc ;==>_GetISBN

Func _FileWrite($s_Piece) ;void
	
	Local $h_FileIsbn = FileOpen($sPathFileIsbn, 1)
	If $h_FileIsbn = -1 Then
		MsgBox(0, @ScriptName, 'Ошибка чтения '& $sPathFileIsbn &' файла!')
		Exit
	EndIf				
	FileWrite($h_FileIsbn, $s_Piece)
	FileClose($h_FileIsbn)
EndFunc ;==>_FileWrite
	
#EndRegion Function
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Начал тестировать вставил большой лист займёт около 3-4 часов.

Но есть недостаток, программa не показывает сколько номераов она прошла, сколько всего номмеров, и сколько времени прошло.



Добавлено:
Сообщение автоматически объединено:

Протестировал.

1) Мне нужно добавить туда, время, отсчёт сколько номмеров всего, сколько осталось.
2)Нужно что бы так же искал EAN номера '(?<=ISBN-1[0|3]:smile:\s[\d-]+', 3) сдесь надо его вставить как я понимаю.
3)нужно что бы в конце сохранялся ещё в isbn.ini (про ето я раньше не говорил моя ошибка)
должен он выглядеть вот так
[]
$IBSN31-1=3540536884
$IBSN31-2=3894496282
$Item32=320936599472
$IBSN32-1=3083617054
$IBSN32-2=9783083617051
$Item33=120942112882
$IBSN33-1=3898791238
$IBSN33-2=9783898791236
$Item34=300735170558
$IBSN34-1=3540442898
$IBSN34-2=9783540442899
$Item35=120942113314
$IBSN35-1=3527408991
$IBSN35-2=9783527408993
$Item36=400307215940
$IBSN36-1=3125914205
$Item37=271008707910
$Item38=120942114447
$Item39=120942114811
$Item40=271008713012
$Item41=271008714732
$Item42=180918658084
$Item43=290735648318

4) Некоторые номера не находит напромер сдесь www.ebay.de/itm/330756338056 ili www.ebay.de/itm/200782722093
ISBN не вытаскивае, нужно исправить.

возможно он их не находит так как, так как почему то не считает такую ссылку ошибочной
хотя на dругие артикли так можно указат ссылку
такой вид не рабочий www.ebay.de/itm/330756338056

а если так указать,то сылка работает на етот номер http://www.ebay.de/itm/330756338056?ru=http%3A%2F%2Fwww.ebay.de%2Fsch%2Fi.html%3F_sacat%3D0%26_from%3DR40%26_nkw%3D330756338056%26_rdc%3D1
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
1. Постараюсь.
2. EAN это это тот же ISBN-13. смысл их вытаскивать? Однако, если надо, постараюсь.
3. Смысл в isbn.ini? У вас же есть isbn.txt
4. А что там искать? :blink: (картинка ниже)


Dk [?]
программa не показывает сколько номераов она прошла

сколько осталось
Так вам что нужно видеть, сколько осталось просмотреть номеров или сколько уже просмотрено?



Добавлено:
Сообщение автоматически объединено:

Dk [?]
а если так указать,то сылка работает
Вы не забывайте, что EBAY не вчера создан ;) Посему на нём могут встречаться разные ссылки в зависимости от срока давности, принадлежности к языковому сектору и т.д. и т.п.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
2)Если указан только EAN, то программа их не видит и пропускает.
3)ISBN.ini нужен, так как его будет читать другой скрипт (не я писал его, поетому приходится подстраиваться)

4) Если указать сылку так как в скрипте тоест просто прибавит к http://ebay.de/itm/ номер , то он не находит номер почему то, но если указат его так
http://www.ebay.de/itm/330756338056?ru=http%3A%2F%2Fhttp://ebay.de%2Fsch%2Fi.html%3F_sacat%3D0%26_from%3DR40%26_nkw%3D330756338056%26_rdc%3D1, то он находит его.



Добавлено:
Сообщение автоматически объединено:

Мне нужно что бы она показывала
Сколько всего номеров, сколько прошла номеров, и скольko время прошло
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dk [?]
Если указан только EAN
Дайте ссылку на страницу где только EAN.

ISBN.ini нужен, так как его будет читать другой скрипт
Понял.

то он не находит номер почему то
Понятно, просто нужно добавьте www
http://www.ebay.de/itm/330756338056
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Как назло не попадаются только с ЕАN.
Я поищу. нужно время


Добавлено:
Сообщение автоматически объединено:

Вот к примеру 3 номера

http://www.ebay.de/itm/130723318685
http://www.ebay.de/itm/180918988184
http://www.ebay.de/itm/110909593493
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dk [?]
На данный момент ищу оптимальный RegExp шаблон и алгоритм который должен получать нужные значения ISBN-10, ISBN-13, EAN, ISBN со всех страниц.
Полагаю, что мне удалось найти золотую середину, сейчас тестирую.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Ну как там тестирование? :( :(
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Куда пропал Garrett ??
 
Верх