Что нового

Нужна помощь с ImageShack API

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Вот нашёл API сервиса ImageShack, но как их использовать ума не приложу, я до этого ни разу не видел даже как это делается.

Кто понимает, хотя бы обьясните как выгружать изображения:

ImageShack API
 
Автор
sforce5

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Помогите составить API-инъекцию

Код:
http://www.imageshack.us/upload_api.php?fileupload=C:\image.jpg

Выдаёт:
Код:
<links>
   <error id="parameter_missing">
        Sorry, but we've detected that unexpected data is received. Required parameter 'fileupload' is missing or your post is not multipart/form-data
    </error>
</links>
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
sforce5 [?]
Помогите составить API-инъекцию
Там нужен ещё Reg-код, который можно получить запросом по почте (читаем инструкции по API), и кроме этого, нужно составить POST запрос в режиме «multipart/form-data», мне пока не удалось это сделать на AutoIt'е.
 
Автор
sforce5

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
CreatoR сказал(а):
и кроме этого, нужно составить POST запрос в режиме «multipart/form-data», мне пока не удалось это сделать на AutoIt'е.

Что за «multipart/form-data»?
 
Автор
sforce5

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Medic84 сказал(а):

Блин, что-то составил похожее, но всё равно выдаёт всякую бяку:

Код:
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST", "http://www.imageshack.us/upload_api.php")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") ; вот это непойму
$oHTTP.SetRequestHeader("Accept-Language", "ru")
$oHTTP.SetRequestHeader("Referer","http://www.imageshack.us/upload_api.php")
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded") ; и это
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
$oHTTP.SetRequestHeader("Host", "imageshack.us")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.Send("fileupload=C:\image.jpg&key=$DEV_KEY&a_username=$LOGIN&a_password=$PASSWORD") ; тут реальные данные
$oHTTP.WaitForResponse
FileWrite(@ScriptDir &"\response.txt",$oHTTP.ResponseText)


Выдаёт:
Код:
<links>
<error id="parameter_missing">Sorry, but we've detected that unexpected data is received. Required parameter 'fileupload' is missing or your post is not multipart/form-data</error>
</links>
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
В принципе это делается примерно так:

Код:
$sFile = "C:\imbge.gif"
$hFile = FileOpen($sFile, 16)
$sBinaryRead = FileRead($hFile)
FileClose($hFile)

$sKey = "тут ключ от ImageShack API"

$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST", "http://www.imageshack.us/upload_api.php")
;$oHTTP.SetTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Content-Type", 'multipart/form-data;')
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
$oHTTP.Send('fileupload="' & $sBinaryRead & '"&key=' & $sKey)
$oHTTP.WaitForResponse()
$sResponse = $oHTTP.ResponseText()

ConsoleWrite($sResponse)


но оно возвращает ту же ошибку :( ...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
sforce5 [?]
обязательно в бинарном виде передавать файл?
Не уверен, оно ведь не работает ни в каком виде :laugh:

Чтобы не мучаться, предлагаю использовать DLL'ку для загрузки на разные сервисы (всего 56 kb), прилагаю её вместе с простым загрузчиком (с прогресс-баром) на ImageShack.us и примером ниже, демонстрирующий загрузку на ImageShack.us и TurboUpload.com, плюс простой .

Пример:
Код:
#include <Array.au3>

$sFile = @SystemDir & "\oobe\images\merlin.gif"

_UploadToImageShack_Example($sFile)
_UploadToTurboUpload_Example($sFile)

Func _UploadToImageShack_Example($sFile, $iRet_Type = 0)
	Local $Ret = DllCall(@ScriptDir & "\UploadFile.dll", _
		"str", "UploadFile", _
		"str", "http://www.imageshack.us/upload_api.php", _ ;Action
		"str", "fileupload", _ ;Form Name
		"str", "image/" & StringRight($sFile, 3), _ ;Content-Type
		"str", $sFile) ;File path
	
	If @error Then Return SetError(1)
	
	Local $aRet[4] = _
		[ _
			StringRegExpReplace($Ret[0], '(?is).*<(image_link)>(.*?)</\1>.*', '\2'), _
			StringRegExpReplace($Ret[0], '(?is).*<(image_html)>(.*?)</\1>.*', '\2'), _
			StringRegExpReplace($Ret[0], '(?is).*<(image_bb)>(.*?)</\1>.*', '\2'), _
			StringRegExpReplace($Ret[0], '(?is).*<(image_bb2)>(.*?)</\1>.*', '\2') _
		]
	
	_ArrayDisplay($aRet)
	If $iRet_Type < 0 Or $iRet_Type > 3 Then $iRet_Type = 0
	
	InputBox('Result - _UploadToImageShack', 'Show the image?', $aRet[$iRet_Type])
	If Not @error Then ShellExecute($Ret)
EndFunc

Func _UploadToTurboUpload_Example($sFile)
	Local $Ret = DllCall(@ScriptDir & "\UploadFile.dll", _
		"str", "UploadFile", _
		"str", "http://s2.turboupload.com/cgi-bin/upload.cgi?upload_id=", _ ;Action
		"str", "file", _ ;Form Name
		"str", "image/" & StringRight($sFile, 3), _ ;Content-Type
		"str", $sFile) ;File path
	
	If @error Then Return SetError(1)
	
	Local $Tmp_File = @TempDir & '\~TurboUpload_Link.tmp'
	Local $Location = StringStripWS(StringRegExpReplace($Ret[0], '(?is).*?Location: (.*?)\r\n.*?', '\1'), 3)
	
	InetGet($Location, $Tmp_File, 1, 0)
	$Ret = FileRead($Tmp_File)
	FileDelete($Tmp_File)
	
	$Ret = StringRegExpReplace($Ret, '(?is).*Direct Link:</b></td><td><input id=.*?value="(.*?)"></td><td>.*', '\1')
	
	InputBox('Result - _UploadToTurboUpload', 'Show the image?', $Ret)
	If Not @error Then ShellExecute($Ret)
EndFunc
 
Автор
sforce5

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
CreatoR сказал(а):
Не уверен, оно ведь не работает ни в каком виде :laugh:

Мда, это окрыляет...

Чтобы не мучаться, предлагаю использовать DLL'ку для загрузки на разные сервисы (всего 56 kb), прилагаю её вместе с простым загрузчиком (с прогресс-баром) на ImageShack.us и примером ниже, демонстрирующий загрузку на ImageShack.us и TurboUpload.com, плюс простой .

Подумаю, если уж совсем безнадёжно, без DLL никак, то придётся пользовать с DLL
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
sforce5 сказал(а):
Начал использовать твой метод выгрузки, всё работает, но есть один минус файл выгруженный после выгрузки не удаляется, не знаю что делать
Да, замечал такое. Это Dll'ка держит файл, перезапуск скрипта решает данную проблему, но это конечно не выход. Попробую связаться с автором Dll'ки...
 

evg64

Новичок
Сообщения
6
Репутация
0
CreatoR сказал(а):
Local $Ret = DllCall(@ScriptDir & "\UploadFile.dll", _
"str", "UploadFile", _
"str", "http://www.imageshack.us/upload_api.php", _ ;Action
"str", "fileupload", _ ;Form Name
"str", "image/" & StringRight($sFile, 3), _ ;Content-Type
"str", $sFile) ;File path
А где искать 3-й параметр DllCall (строка, где коммент "Action"), если нужно организовать загрузку на другие обменники картинок?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
evg64 [?]
где искать 3-й параметр DllCall (строка, где коммент "Action"), если нужно организовать загрузку на другие обменники картинок?
В исходнике страницы, обычно в форме где есть «multipart/form-data» (значение «action=»).

:smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
agikon [?]
где скачать эту дллку?
А зачем она? Можно обойтись и без неё (см. исходники CaptureIt).
Эта dll'ка не распространялась в открытом доступе, хотя и присутствует в CaptureIt (в старых версиях).
 

agikon

Знающий
Сообщения
789
Репутация
17
CreatoR [?]
А зачем она? Можно обойтись и без неё (см. исходники CaptureIt).
CaptureIt потрясающая программа!
я уже давно про неё знаю.
но в ней реально слишком много кода, плюс подключено сто тысяч инклудов, я просто не пойму как вы могли столько строк кода создатьи не потерятьлогику.
для меня копатся в каптуреит всё равно что смотреть на устройство атомной бомбы.

но дело в том что вот у меня лежит картинка по пути D:\photo\1.jpg и требуется просто запустить скрипт который бы эту картинку залил на любой хостинг картинок, а в буфер обмена получить ссылку на эту картинку. и всё.

так вот примеров много а от такую просьтенькую задачку не пойму как решить.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
agikon
Тебе нужна только папка Src\Includes\iUploader, подключать нужно оттуда лишь файл iUploader.au3, вот простой пример:

Код:
#include "Includes\iUploader\iUploader.au3"

;Тут вместо TinyPic можно использовать другие сервисы, указанные в самом iUploader.au3.
$sData = _HostTinyPicUpload("D:\photo\1.jpg")
$aLinks = _HostTinyPicExtractLinks($sData)

If Not @error Then
	_ArrayDisplay($aLinks)
	ClipPut($aLinks[0])
EndIf
 

agikon

Знающий
Сообщения
789
Репутация
17
при компиляции ругается на 209-тую строку инклуда iUploader.au3
поискав и действительно функция IsFunc() вроде бы нигде и не обьявляется, во всяком случае в iUploader.au3 нет.

вот скрин
http://www.imagebam.com/image/180656404919684
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
agikon
Обнови AutoIt, или замени IsFunc($hUpldPrgrs_Callback_Func) на VarGetType($hUpldPrgrs_Callback_Func) = 'Function'.
 
Верх