Что нового

[Сеть, интернет] Размещение объявления с помощью Winhttp и TCP/IP

demox

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

Описание:
Нужно написать скрипт для размещения объявления о продаже дома или квартиры.
Параметры (площадь, адрес и т. д.) не входные, т.е. просто указать какой-нибудь пример прямо в форме отправки. Желательно, чтобы при этом размещалась хотя бы одна тестовая фотография к объявлению. Самое главное - это размещенное объявление и фото, если оно поддерживается сайтом.

Сайты следующие:
[list type=decimal]
[*]rosrealt.ru
[*]kemerovo.stoboy.ru
[*]avito.ru
[*]mirkvartir.ru
[*]barahla.net
[*]kemdom.ru
[/list]
Примечания:
Библиотеку IE использовать не надо, т.е. все должно размещаться без помощи браузера.
Для примера вот написанное мною размещение на сайт realty.ngs42.ru, только там используются входные параметры.
Код:
;;;;;;;;;;;; АВТОРИЗАЦИЯ ;;;;;;;;;;;;;;;;;
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', 'http://realty.ngs42.ru/cp/login?login='&$login&'&pass='&$pass&'&cp=1')
$oHTTP.Send()
$oHTTP.WaitForResponse
$cookie = $oHTTP.GetResponseHeader('Set-Cookie')

;;;;;;;;;;;; ЗАГРУЗКА ФАЙЛОВ ;;;;;;;;;;;;;;
$media = ''
	Local 	$hFileOpen
	Local	$sFileRead
	Local	$sBoundary
	Local	$sData
	Local	$iDatasize
	Local	$sHeader
	Local	$sCommand
	Local	$socket
	Local	$sResive
	Local	$Rstext = ''
	Local	$sNameOfFileInForm = 'files'
	Local	$sPHP = '/record/upload/'
	Local	$sHost = 'cottage.ngs42.ru'
	$media = '['
	For $i = 1 To $last_pos - 1
		$sFile = $temp_dir & 'R_'&$i&'.jpg'
		$hFileOpen = FileOpen($sFile)
		$sFileRead = FileRead($hFileOpen)
		FileClose($hFileOpen)
		$sBoundary = StringFormat('----WebKitFormBoundary%s%s%s', @MIN, @HOUR, @SEC)
		$sData = '--' & $sBoundary & @CRLF & _
					'Content-Disposition: form-data; name="' & $sNameOfFileInForm & '"; filename="' & StringRegExpReplace($sFile, '^.*\\', '') & '"' & @CRLF & @CRLF & _
					$sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF
		$iDataSize = StringLen($sData)
		$sHeader = 'POST http://' & $sHost & $sPHP & ' HTTP/1.1' & @CRLF & _
					'Host: ' & $sHost & @CRLF & _
					'Content-Type: multipart/form-data; boundary=' & $sBoundary & @CRLF & _
					'Content-Length: ' & $iDataSize & @CRLF & @CRLF
		$sCommand = $sHeader & $sData
		TCPStartup()
		$socket = TCPConnect(TCPNameToIP($sHost), 80)
		TCPSend($socket, $sCommand)
		$Rstext = ''
		While 1
			$sResive = TCPRecv($socket, 2000)
			If StringLen($sResive) <> 0 Then
				$Rstext &= $sResive & @CRLF
				ExitLoop
			EndIf
			Sleep(50)
		WEnd
		$aRes = StringRegExp($Rstext, '(\"+[id]+\"+:+\"+[0-9]+\")', 3)
		$aRes = StringSplit($aRes[0], ":")
		$file_id = StringReplace ($aRes[2],"""","")
		$media &= '{"comment":"","id":"' & $file_id & '","position":'& ($i-1) & '}'
		If ($i < $last_pos - 1) Then
			$media &= ','
		EndIf
		TCPShutdown()
	Next
	$media &= ']'


;;;;;;;;;;;;;;;;; ДОБАВЛЕНИЕ ОБЪЯВЛЕНИЯ ;;;;;;;;;;;;;;;;;;;;;;

$oHTTP.Open('POST', 'http://cottage.ngs42.ru/cp/records/sell/add/')
$FormData = 'action=1' & _
'&curr_category=2' & _						; категория коттеджи дома
'&_realty_RecordsCategories_id=2' & _  		; тип сделки
'&intOption2=' & $p1 & _					; id населенный пункт
'&intOption3=' & $p2 & _					; район
'&intOption25=' & $p3_1 & _				; id улицы
'&strOption25=' & $p3_2 & _				; название улицы
'&intOption9=' & $p4 & _					; этажность
'&intOption10=' & $p5 & _					; материал
'&intOption11=' & $p6 & _					; колличество комнат
'&intOption8=' & $p7 & _					; площадь земельного участка, соток
'&intOption5=' & $p9 & _					; общая площадь
'&intOption6=' & $p10 & _					; жилая площадь
'&intOption7=' & $p11 & _					; площадь кухни
'&intOption13=' & $p28 & _					; тип санузла
'&intOption31=' & $p17 & _					; тип отопления
'&intOption1=' & $p19 & _					; цена
'&intOption18=' & $p20 & _					; торг
'&intOption20=' & $p21 & _					; обмен
'&intOption19=' & $p22 & _					; чистая продажа
'&intOption21=' & $p25 & _					; ипотека
'&intOption35=' & $p23 & _					; внесен задаток
'&intOption34=' & $p24 & _					; находится в залоге
'&intOption29=' & $p14 & _					; электричество
'&intOption33=' & $p15 & _					; водоснабжение
'&intOption30=' & $p16 & _					; отопление
'&contactName=' & $p29 & _					; контактное лицо
'&contactPhone[]=' & $p13 & _				; контактный телефон
'&objectDescription=' & $comment & _		; комментарий
'&media=' & $media & _								; фотографии
'&objectHomeNumber=' & _					; номер дома
'&charOption27=' & _						; ориентир
'&intOption36=' & _							; направление выезда
'&intOption4=507' & _						; тип объекта (дом)
'&intOption12=' & _							; планировка
'&intOption14=' & _							; колличество балконов
'&intOption27=' & _							; колличество лоджий
'&_isAgency=' & _							; от частного лица или агентства
'&_isSendToAgencies=1' & _					; отправить агентствам
'&contactOrganization=' & _					; название организации
'&phoneDescription[]=' & _					; примечание
'&contactAddress=' & _						; адрес офиса
'&contactEmail=' & _						; email
'&contactICQ=' & _							; ICQ
'&check_rules=' & _							; согласие с условиями
'&referer=http://realty.ngs42.ru/cp/' & _	; реферер в header (hidden)
'&success=1' & _							; success (hidden)
'&add_type=custom'							; add_type (hidden)

$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oHTTP.SetRequestHeader('Cookie', $cookie)
$oHTTP.Send($FormData)
$oHTTP.WaitForResponse
Примерно таким же способом нужно написать скрипты для других сайтов.

Принимаю любые предложения! ;)
 

Вложения

  • NGS.au3
    4.5 КБ · Просмотры: 3
Автор
D

demox

Новичок
Сообщения
2
Репутация
0
[Сеть, интернет] Re: [Сеть, интернет] Размещение объявления с помощью Winhttp и TCP/IP

Пытался написать для rosrealt.ru
Код:
;;;;;;;;;;;;;;;; АВТОРИЗАЦИЯ ;;;;;;;;;;;;;;;

$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', 'http://www.rosrealt.ru/rosrealt/myrosrealt.php?act=check&Email='&$login&'&Password='&$pass)
$oHTTP.Send()
$oHTTP.WaitForResponse
$cookie = $oHTTP.GetResponseHeader('Set-Cookie')

;;;;;;;;;;;;; ДОБАВЛЕНИЕ ОБЪЯВЛЕНИЯ ;;;;;;;;;;
$street = URLEncode('Ленина пр-кт.')

$com = URLEncode('Это очень хороший домик, мне очень нравится, лучший не найдете, это я вам гарантирую! Если не понравится можете не покупать!')

$oHTTP.Open('POST', 'http://www.rosrealt.ru/rosrealt/myrosrealt.php?act=addrealty')
$FormData = 'Region=55' & _
'&City=327' & _
'&District=81832' & _
'&Type_realty=2' & _
'&Kind=1' & _
'&Street=' & $street & _
'&Square=75' & _
'&Landsquare=11' & _
'&Landvid=1' & _
'&Landnazn=1' & _
'&Klass=null' & _
'&Contactinfo=89999999999' & _
'&Text=' & $com & _
'&Cost=5700000' & _
'&Type_realty=2' & _
'&Sdelka=1'

$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oHTTP.SetRequestHeader('Cookie', $cookie)
$oHTTP.Send($FormData)
$oHTTP.WaitForResponse
$res = $oHTTP.ResponseText

Func URLEncode($urlText)
    $url = ""
    For $i = 1 To StringLen($urlText)
		$achar = StringMid($urlText, $i, 1)
        $acode = Asc($achar)
        Select
            Case ($acode >= 48 And $acode <= 57) Or _
                    ($acode >= 65 And $acode <= 90) Or _
                    ($acode >= 97 And $acode <= 122)
                $url = $url & StringMid($urlText, $i, 1)
            Case $acode = 32
                $url = $url & "+"
            Case Else
				$str = StringToBinary($achar)
				$str = StringRight($str,StringLen($str)-2)
                $url = $url & "%" & $str
        EndSelect
    Next
    Return $url
EndFunc
Но вот фото не получается загрузить, оно загружалось, но почему то не прикреплялось к объявлению. Само объявление разместить удалось.

На stoboy.ru не удается даже нормально залогиниться. В ответе выдает ошибку на сайте, хотя в теле страницы видно имя пользователя.
Вот
Код:
;;;;;;;;;;;; АВТОРИЗАЦИЯ ;;;;;;;;;;;;;;;;;
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', 'http://stoboy.ru/users/sign_in')
$oHTTP.SetRequestHeader('Host', 'stoboy.ru')
$oHTTP.Send()
$oHTTP.WaitForResponse
$resp = $oHTTP.GetAllResponseHeaders
$aRes = StringSplit($resp,@LF,2)
$j=0
For $i = 0 To UBound($aRes)-1
	if (StringRegExp($aRes[$i], '(^[Set]+[-]+[Cookie]+.*$)', 0)) Then
		$aTemp = StringSplit($aRes[$i],':')
		If (StringLeft($aTemp[2],2) = ' s') Then
			$cookie1 = StringRight($aRes[$i],StringLen($aRes[$i])-12)
		EndIf
		If (StringLeft($aTemp[2],2) = ' o') Then
			$cookie2 = StringRight($aRes[$i],StringLen($aRes[$i])-12)
		EndIf
		If (StringLeft($aTemp[2],2) = ' _') Then
			$cookie3 = StringRight($aRes[$i],StringLen($aRes[$i])-12)
		EndIf
	EndIf
Next
$aRes = StringRegExp($oHTTP.ResponseText, '(\"+[authenticity_token]+\"+\s[type]+[=]\"+[hidden]+\"+\s[value]+[=]\"+.*\")', 3)
$aRes = StringSplit($aRes[0],'=')
$authenticity_token = StringReplace ($aRes[3],"""","")

$oHTTP.Open('POST', 'http://stoboy.ru/users/sign_in')
$FormData ='utf8=%2310003' & _
'&authenticity_token=' & $authenticity_token & _
'&user[email]=' & $login & _
'&user[password]=' & $pass & _
'&user[remember_me]=1' & _
'&commit=' & URLEncode('Вход')
$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oHTTP.Send($FormData)
$oHTTP.WaitForResponse
$resp = $oHTTP.ResponseText

Func URLEncode($urlText)
    $url = ""
    For $i = 1 To StringLen($urlText)
        $achar = StringMid($urlText, $i, 1)
        $acode = Asc($achar)
        Select
            Case ($acode >= 48 And $acode <= 57) Or _
                    ($acode >= 65 And $acode <= 90) Or _
                    ($acode >= 97 And $acode <= 122)
                $url = $url & StringMid($urlText, $i, 1)
            Case $acode = 32
                $url = $url & "+"
            Case Else
                $str = StringToBinary($achar)
                $str = StringRight($str,StringLen($str)-2)
                $url = $url & "%" & $str
        EndSelect
    Next
    Return $url
EndFunc
 
Верх