Что нового

API функции для работы с antigate.com

Статус
Закрыто для дальнейших ответов.

pad0nak66

Новичок
Сообщения
23
Репутация
2
Моя UDF для работы со всем известным сервисом распознавания капчи. Если у кого есть чем дополнить или поправить - буду рад обсудить.

Код:
#include-once
;Opt('MustDeclareVars', 1) ; декларирование переменных

; #INDEX# =======================================================================================================================
; Title .........: antigate.com
; AutoIt Version : 3.0
; Language ......: Russian
; Website: ......: http://antigate.com/?action=api
; Description ...: API функции для работы с сервисом разгадывания капчи http://antigate.com/
; Author(s) .....: SERJ
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;_antigatecom_balance:     Получение текущего денежного баланса
;_antigatecom_get:         Отправка изображения и получение текста капчи
;_antigatecom_bad:         Пожаловаться на неправильно разгаданный текст
;_antigatecom_stats:       Получение статистику использования аккаунта
;_antigatecom_statsSystem: Статистика системы в реальном времени
; ===============================================================================================================================

; #INTERNAL_USE_ONLY# ===========================================================================================================
;__antigatecom_upload:     Отправка изображения на сервер
;__antigatecom_check:      Получение статуса капчи
;__antigatecom_error:      Перевод текста ошибки на понятный язык
; ===============================================================================================================================

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_balance
; Description ...: Получение текущего денежного баланса
; Syntax.........: _antigatecom_balance($apiKey)
; Parameters ....: $apiKey - ключ аккаунта
; Return values .: Success: баланс
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_balance($apiKey)
  Local $sResp = InetRead('http://antigate.com/res.php?key=' & $apiKey & '&action=getbalance')
  $sResp = BinaryToString($sResp)
  Local $sOut = __antigatecom_error($sResp)
  If $_DEBUG Then ConsoleWrite('--> проверка баланса: ' & $sOut & @LF)
  If StringInStr($sResp, 'ERROR_') Then SetError(1)
  Return $sOut
EndFunc ;==> _antigatecom_balance

; #FUNCTION# ====================================================================================================================
; Name...........: __antigatecom_upload
; Description ...: Отправка изображения на сервер
; Syntax.........: __antigatecom_upload($apiKey, $pathFile)
; Parameters ....: $apiKey - ключ аккаунта
;                  $pathFile - путь до изображения с капчёй
; Return values .: Success: id капчи
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func __antigatecom_upload($apiKey, $pathFile)

  ;~~~ проверка существования файла
  If Not FileExists($pathFile) Then
    If $_DEBUG Then ConsoleWrite('--> файл "' & $pathFile & '" не найден' & @LF)
    SetError(1)
    Return 'ERROR_FILE_NOT_FOUND'
  EndIf

  ;~~~ читаем файл капчи
  Local $binFile = FileRead($pathFile)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> невозможно прочитать файл "' & $pathFile & '"' & @LF)
    SetError(2)
    Return 'ERROR_FILE_NOT_READ'
  EndIf

  ;~~~ определяем тип файла
  Local $ext = StringSplit($pathFile, '.')
  $ext = $ext[$ext[0]]
  Local $ContentType
  Switch $ext
    Case 'jpg'
      $ContentType = 'image/jpeg'
    Case 'gif'
      $ContentType = 'image/gif'
    Case 'png'
      $ContentType = 'image/png'
    Case Else
      If $_DEBUG Then ConsoleWrite('--> не поддерживаемый формат изображения "' & $ext & '"' & @LF)
      SetError(3)
      Return 'ERROR_IMAGE_TYPE_NOT_SUPPORT'
  EndSwitch

  ;~~~ собираем тело пакета
  Local $boundary = '----AFnIn7z0bMWeTdpy' ; задаём разделитель данных в HTTP запросе
  Local $content = '--$boundary' & @LF
  $content &= 'Content-Disposition: form-data; name="method"' & @LF & @LF
  $content &= 'post' & @LF ; метод передачи данных
  $content &= '--' & $boundary & @LF
  $content &= 'Content-Disposition: form-data; name="key"' & @LF & @LF
  $content &= $apiKey & @LF ; ключ
  ;$content &= '--' & $boundary & @LF
  ;$content &= 'Content-Disposition: form-data; name="regsense"' & @LF & @LF
  ;$content &= '1' & @LF ; с учетом регистра
  $content &= '--' & $boundary & @LF
  $content &= 'Content-Disposition: form-data; name="file"; filename="captcha.' & $ext & '"' & @LF
  $content &= 'Content-Type: ' & $ContentType & @LF & @LF
  $content &= $binFile & @LF ; содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком
  $content &= '--' & $boundary & '--'

  ;~~~ отправка капчи
  Local $oWinHttp = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаём COM-объект
  With $oWinHttp
    .Open('POST', 'http://antigate.com/in.php', 0) ; создаём соеденение, указываем адрес страницы
    .SetRequestHeader('Content-Type', 'multipart/form-data; boundary=' & $boundary) ; тип отправляемого запроса
    .SetRequestHeader('Content-Length', BinaryLen($binFile)) ; длина запроса
    .Send(StringToBinary($content, 1)) ; отправляем запрос
    Local $sResp = .ResponseText ; получаем ответ
  EndWith

  ;~~~ разбираем ответ отправки
  Dim $idCapcha = StringSplit($sResp, '|') ; парсим ответ
  If $idCapcha[1] = 'OK' Then
    $idCapcha = $idCapcha[2]
    If $_DEBUG Then ConsoleWrite('--> id капчи: ' & $idCapcha & @LF)
    Return $idCapcha
  Else
    Local $sOut = __antigatecom_error($sResp)
    If $_DEBUG Then ConsoleWrite('--> сервер вернул ошибку: ' & $sOut & @LF)
    SetError(4)
    Return $sOut
  EndIf

EndFunc ;==> __antigatecom_upload

; #FUNCTION# ====================================================================================================================
; Name...........: __antigatecom_check
; Description ...: Получение статуса капчи
; Syntax.........: __antigatecom_check($apiKey, $idCaptcha, $secTimeout)
; Parameters ....: $apiKey - ключ аккаунта
;                  $idCaptcha - id капчи
;                  $secTimeout - таймаут проверки капчи (минимум 5 сек.), не обязательно для указания
; Return values .: Success: текст капчи
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func __antigatecom_check($apiKey, $idCaptcha, $secTimeout = 5)
  ;If $secTimeout < 5 Then $secTimeout = 5
  Local $sResp
  While 1
    Sleep(1000*$secTimeout)
    $sResp = InetRead('http://antigate.com/res.php?key=' & $apiKey & '&action=get&id=' & $idCaptcha & '&rnd=' & Random())
    $sResp = BinaryToString($sResp)
    Local $textCaptcha = StringSplit($sResp, '|') ; парсим ответ
    If $textCaptcha[1] = 'OK' Then
      $textCaptcha = $textCaptcha[2]
      If $_DEBUG Then ConsoleWrite('--> текст капчи: ' & $textCaptcha & @LF)
      Return $textCaptcha
    ElseIf $sResp = 'CAPCHA_NOT_READY' Then
      If $_DEBUG Then ConsoleWrite('--> капча ещё не распознана' & @LF)
    Else
      Local $sOut = __antigatecom_error($sResp)
      If $_DEBUG Then ConsoleWrite('--> ошибка распознавания капчи: ' & $sOut & @LF)
      SetError(1)
      Return $sOut
    EndIf
  WEnd
EndFunc ;==> __antigatecom_check

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_bad
; Description ...: Пожаловаться на неправильно разгаданный текст
; Syntax.........: _antigatecom_bad($apiKey, $idCaptcha)
; Parameters ....: $apiKey - ключ аккаунта
;                  $idCaptcha - id капчи
; Return values .: Success: 1
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 17/06/2013
; ===============================================================================================================================
Func _antigatecom_bad($apiKey, $idCaptcha)
  If $_DEBUG Then ConsoleWrite('--> жалуемся на капчу с id #' & $idCaptcha & @LF)
  Local $sResp = InetRead('http://antigate.com/res.php?key=' & $apiKey & '&action=reportbad&id=' & $idCaptcha)
  $sResp = BinaryToString($sResp)
  Local $sOut = __antigatecom_error($sResp)
  If $sResp <> 'OK_REPORT_RECORDED' Then SetError(1)
  Return $sOut
EndFunc ;==> _antigatecom_bad

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_get
; Description ...: Отправка изображения и получение текста капчи
; Syntax.........: _antigatecom_get($apiKey, $pathFile, $secTimeout)
; Parameters ....: $apiKey - ключ аккаунта
;                  $pathFile - путь до изображения с капчёй
;                  $secTimeout - таймаут проверки капчи (минимум 5 сек.), не обязательно для указания
; Return values .: Success: текст капчи
;                  Failure: @error и текст ошибки
; Related .......: __antigatecom_upload, __antigatecom_check
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_get($apiKey, $pathFile, $secTimeout = 5)

  ;~~~ отправка изображения на сервер
  Local $idCaptcha = __antigatecom_upload($apiKey, $pathFile)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> ошибка отправки картинки: ' & $idCaptcha & @LF)
    SetError(1)
    Return 'ERROR_UPLOAD'
  EndIf

  If Not IsDeclared('_IDCAPTCHA') Then Global $_IDCAPTCHA
  $_IDCAPTCHA = $idCaptcha ; для того, чтобы можно было жаловаться

  ;~~~ получение текста капчи
  Local $textCaptcha = __antigatecom_check($apiKey, $idCaptcha, $secTimeout)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> ошибка получения текста капчи: ' & $textCaptcha & @LF)
    SetError(2)
    Return 'ERROR_CHECK'
  EndIf

  Return $textCaptcha
EndFunc ;==> _antigatecom_get

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_stats
; Description ...: Получение статистику использования аккаунта
; Syntax.........: _antigatecom_stats($apiKey, $date)
; Parameters ....: $apiKey - ключ аккаунта
;                  $date - дата, за которую требуется получить статистику (формат ДД.ММ.ГГГГ), не обязательно для указания
; Return values .: Success: текст капчи
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_stats($apiKey, $date = '')
  If Not $date Then $date = @MDAY & '.' & @MON & '.' & @YEAR
  MsgBox(0, '', $date)
  Local $aDate = StringSplit($date, '.')
  $date = $aDate[3] & '-' & $aDate[2] & '-' & $aDate[1]
  Local $sResp = InetRead('http://antigate.com/res.php?key=' & $apiKey & '&action=getstats&date=' & $date)
  $sResp = BinaryToString($sResp)
  Local $sOut = __antigatecom_error($sResp)
  If StringInStr($sResp, 'ERROR_') Then SetError(1)
  Return $sOut
EndFunc ;==> _antigatecom_stats

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_statsSystem
; Description ...: Статистика системы в реальном времени
; Syntax.........: _antigatecom_statsSystem()
; Parameters ....: none
; Return values .: необходимо доработать
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_statsSystem()
  ; waiting:                количество работников ожидающих капчу. Максимально показываемое число - 50.
  ; load:                   процент загрузки работников
  ; minbid:                 минимальная ставка необходимая для прохождения вашей капчи
  ; averageRecognitionTime: среднее время (в секундах) за которое в данный момент разгадываются капчи
  Local $sResp = InetRead('http://antigate.com/load.php')
  $sResp = BinaryToString($sResp)
  Return $sResp
EndFunc ;==> _antigatecom_statsSystem

; #FUNCTION# ====================================================================================================================
; Name...........: __antigatecom_error
; Description ...: Перевод текста ошибки на понятный язык
; Syntax.........: __antigatecom_error($sError)
; Parameters ....: $sError - текст ошибки, возвращаемый сервером
; Return values .: ...
; Author ........: SERJ
; Modified.......: 17/06/2013
; ===============================================================================================================================
Func __antigatecom_error($sError)
  Switch $sError
    Case 'ERROR_WRONG_USER_KEY'
      Return 'Неправильный формат ключа учетной записи (длина не равняется 32 байтам)'
    Case 'ERROR_KEY_DOES_NOT_EXIST'
      Return 'Вы использовали неверный captcha ключ в запросевы использовали неверный captcha ключ в запросе'
    Case 'ERROR_ZERO_BALANCE'
      Return 'Нулевой либо отрицательный баланс'
    Case 'ERROR_NO_SLOT_AVAILABLE'
      Return 'Нет свободных работников в данный момент, попробуйте позже либо повысьте свою максимальную ставку'
    Case 'ERROR_ZERO_CAPTCHA_FILESIZE'
      Return 'Размер капчи которую вы загружаете менее 100 байт'
    Case 'RROR_TOO_BIG_CAPTCHA_FILESIZE'
      Return 'Ваша капча имеет размер более 100 килобайт'
    Case 'ERROR_WRONG_FILE_EXTENSION'
      Return 'Ваша капча имеет неверное расширение, допустимые расширения JPG, JPEG, GIF, PNG'
    Case 'ERROR_IMAGE_TYPE_NOT_SUPPORTED'
      Return 'Невозможно определить тип файла капчи, принимаются только форматы JPG, GIF, PNG'
    Case 'ERROR_IP_NOT_ALLOWED'
      Return 'Запрос с этого IP адреса с текущим ключом отклонен. Пожалуйста смотрите раздел управления доступом по IP'
    Case 'CAPCHA_NOT_READY'
      Return 'Капча еще не распознана, повторите запрос через 1-5 секунд'
    Case 'ERROR_WRONG_ID_FORMAT'
      Return 'Некорректный идентификатор капчи, принимаются только цифры'
    Case 'ERROR_CAPTCHA_UNSOLVABLE'
      Return 'Капчу не смогли разгадать 5 разных работников'
    Case 'OK_REPORT_RECORDED'
      Return 'Жалоба на неверно разгаданную капчу принята'
    Case Else
      Return $sError
  EndSwitch
EndFunc ;==> __antigatecom_error
 
Автор
P

pad0nak66

Новичок
Сообщения
23
Репутация
2
Замечание принято. Будемс стараться предерживаться установленных правил :ok:
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
pad0nak66
Замечание:
А исправлять кто будет? ;)
 
Автор
P

pad0nak66

Новичок
Сообщения
23
Репутация
2
Тема API функции для работы с antigate.com, созданная в разделе Примеры и рабочие проекты, перемещена в UDF - Пользовательские функции. Чего ещё не хватает?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Немного смутные представления о библиотеке, хотелось бы работоспособный пример :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Распознавание каждой капчи стоит денег. Рабочего примера не получится :smile:
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Эх, если бы бесплатно было
OffTopic:
все вещи тоже :laugh:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
MnM сказал(а):
Эх, если бы бесплатно было
OffTopic:
все вещи тоже :laugh:
Цена кстати, там очень и очень небольшая. Открываешь у них свой счет, (перечисляешь на свой ЛК деньги откудованибудь) и там одна капча стоит чуть-ли не 0.01$ если память не изменяет. Это первый сервис который я использую в своих наработках в случае необходимости распознавания капчи. VKBot работает через этот же сервис.


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

antigate сказал(а):
Самая дешевая цена на рынке подобных услуг - от 0.7USD за 1000 изображений, в зависимости от объема. Это около 2 копеек РФ за каждую картинку.
Еще меньше чем я говорил :smile:
 

mystaf

Новичок
Сообщения
9
Репутация
0
что то постоянно ошибки вылазят, кто то может пример показать?
 

Venge911

Новичок
Сообщения
8
Репутация
1
файл не качается, поправьте, пожалуйста.

Пробовал из кода, приведенного в сообщении, брать функции, постоянно выдает ошибки
Есть ли контакты автора?
 

Venge911

Новичок
Сообщения
8
Репутация
1
Попробуйте вот этот.
увы не могу скачать. пишет:
Ошибка!
Вы не можете зайти в этот раздел

в джаб. конференции сказали, что сервер файл-сервер глючит.
можете залить куда-то?
 

spy686

Новичок
Сообщения
12
Репутация
0
может еще мануал есть, что бы прикрутить к десктоптому выпаданию капчи. Т.е. программа уже сама выкидывает капчу, надо ее отправить на antigate и вписать ответ.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Статус
Закрыто для дальнейших ответов.
Верх