Как стать автором
Обновить

Комментарии 37

Один вопрос: надеюсь, вы не указали свой настоящий userkey в этой статье?
Нет конечно. А где он кроме хабрасторежда используется?
Наверное, нигде, но просто это неаккуратно как-то. :)
Это превосходно, спасибо.
Спасибо за статью. Это очень полезно. А если кому-то интересно, могу найти как запускать (например psi+) с параметрами из любой папки «аля portable».
О! было бы шикарно
iteye.ru/1794/how-to-get-the-application-folder-from-automator-application

пси должен лежать в папке application в любом месте. рядом с этот папкой наш автоматоровский скрипт.
т.е.

myfolder -
-------- | - application (внутри лежит psi)
-------- | - psiStart.app
Спасибо! Не знал вообще о таких возможностях в системе — теперь будет повод поиграться с этим! :)
Очень круто, спасибо! :) Кстати, прямо сейчас колдуем над HS.
Только не сломайте! :)
Это хорошо. А почИните возможность прямой загрузки из браузера по FileAPI файлов размером более 10КБ?

Напомню, что ещё летом интересовался возможностью загрузки, чтобы не использовать Flash, сделал, но обнаружился баг, выражающийся в том, что в файле картинки остаются строчки-разделители вида:

....
-----------------------------57648741364
Content-Disposition: form-data; name="Filedata"; filename="5e7kqHg.jpg"
Content-Type: image/jpeg

яШяа.....

Картинка, конечно, ломается, файл не отображается.
Ссылка на свежий пример такой загрузки, из которой взята одна из таких строчек: habrastorage.org/storage3/296/126/089/296126089e3e540d19ddc04616d9226b.jpg (30 КБ). Если файл — меньше 10КБ, то загружается всё нормально (хотя иногда, редко бывают ошибки).

Техподдержка Хабра тогда ответила, что надо пользоваться немного другим поддоменом. Я его протестировал — обнаружилось, что только Хром на нём стал работать нормально, у Firefox и старой Оперы — те же ошибки. Поэтому в скрипт не стал внедрять поддержку только для Хрома. Прочие способы (не браузеры), как и описываемый в статье, видимо, нормально работают, потому что не разбивают изображение при закачке на секции, а все браузеры (не тестировал Safari) — разбивают, но серверная часть сайта этого не учитывает (надо просто выкусывать разделители). И странным образом учитывает только Хром на другом поддомене, несмотря на то, что тоже отправляет файл с разделителями секций.

Почему на другом поддомене неудобно? Токен надо брать на habrastorage.org в одном фрейме, потом загрузку по FileAPI надо делать на другом (насколько помню, legacy.habrastorage.org), показывать — снова на первом, потому что там юзер опознан и отображается приветствие. Мне кажется, что что-то недоделано в плане реализации закачки по FileAPI. Но далее техподдержка не отвечала, потому что был ответ один: информация принята, а работы по этому механизму не велись.

Если сейчас в этом направлении ведутся работы — сделайте, пожалуйста поддержку файлов больше 10К. И лучше на основном домене, или создайте, пожалуйста, опознавание юзера на домене legacy…. Окажу посильную помощь в налаживании закачки файлов через браузеры.

Сейчас заливка картинок перетаскиванием в окно до 10 КБ в 3 браузерах выполнена в юзерскрипте HabrAjax (надо зайти на домен habrastorage.org и затащить картинку в окно).

Пример затащенного малого файла в Firefox:
Подтверждаю, проблема есть даже во флешевом загрузчике — из десятка файлов несколько оказываются битыми, заливаю заново тот же файл, все нормально.

Что-то не хочет он работать у меня =(
Хм, вот так заработало.
image
Жду, когда дропбокс заблокирует файлик за хотлинкинг:)
Это же не картинка, его качали только те, кому он нужен.
Эх, всё бы отдал, если бы загружало на яндекс.фотки.
Разве там нет API?
Есть, но там надо делать запрос на Oauth, получать ключ, я так с этим и не разобрался, да и времени нету.
А потом с этим ключом можно работать неограниченно долго?
Сейчас глянул — время жизни токена не менее года.
Интересная задачка…
Вот готовое api на питоне. Обернуть его в вызов шелла, и передавать параметр.
Я смог реализовать эту задачку, но нужно время чтобы оформить это топиком. Предварительно могу выслать вам инструкцию о том, как это всё собрать.
Да в принципе я уже всё сам сделал, но завязано на одного юзера, получил вручную oauth токен и делаю запросы через api-fotki.yandex.ru/post/?oauth_token=token

Получилось гораздо проще, чем думал.
Как вы смогли получить oauth-токен без регистрации приложения или вы как то его зарегистрировали? Я просто прочитал api.yandex.ru/fotki/doc/overview/authorization.xml и там в секции по oauth написано про регистрацию приложения… Поэтому сделал все на Fimp-токене.

И второй вопрос — смогли ли вы сделать, чтобы когда выбираешь несколько картинок — чтобы они все отправлялись?
Всё. Смог реализовать загрузку подряд несколько картинок (когда выбрано несколько файлов). Собственно вот предварительный AppleScript, который можно загрузить в Automator.

image

Нужно только заменить токен на свой. И заменить mylogin в адресе.

Исходник
on run
	set TOKEN to "2d1da421fdd3404318e81c0a0442105e"
	set ALBUM to "http://api-fotki.yandex.ru/api/users/mylogin/photos/"
	
	tell application "Finder"
		set selectedFiles to (get selection)
		
		if (count of selectedFiles) > 0 then
			repeat with i from 1 to the count of selectedFiles
				set filePath to POSIX path of (item i of selectedFiles as alias)
				set responseCode to do shell script "curl -sL -w %{http_code} --header \"Authorization: FimpToken realm=\"fotki.yandex.ru\", token=" & TOKEN & "\" -F \"image=@" & filePath & "\" --request POST " & ALBUM & " -o /dev/null"
				if (responseCode is not "201") then
					display alert "Произошла ошибка:" message "Не удалось загрузить: " & filePath
				end if
				
			end repeat
			
			display notification "Загрузка картинок завершена" with title "fotki.yandex.ru"
		end if
		
	end tell
end run



Чтобы получить токен, нужно скачать реализацию RSA от Yandex download.yandex.ru/api-fotki/c-yamrsa.tar.gz затем распаковать и сделать make encrypt

Затем в этой же папке создать shell-скрипт
#!/bin/sh

### config

USERNAME=mylogin
PASSWORD=mypassword

CURRENT_DIR=$(pwd)

PATH_TO_ENCRYPT="$CURRENT_DIR/encrypt"

### yandex.magic

YAMRSA_CODE=0

while [ $YAMRSA_CODE -ne 200 ]; do
  echo "Get new public RSA key from Yandex..."
  YAMRSA_CODE=$(curl -sL -w %{http_code} http://auth.mobile.yandex.ru/yamrsa/key/ -o yamrsa.txt)
  sleep 2
done;

KEY=$(cat yamrsa.txt | grep key | awk -F "<key>" '{print $2}' | awk -F "</key>" '{print $1}')
REQUEST_ID=$(cat yamrsa.txt | grep request_id | awk -F "<request_id>" '{print $2}' | awk -F "</request_id>" '{print $1}')
CREDENTIAL=$($PATH_TO_ENCRYPT $KEY "<credentials login=\"$USERNAME\" password=\"$PASSWORD\"/>")

echo "RSA: $KEY"
echo "REQUEST_ID: $REQUEST_ID"
echo "CREDENTIAL: $CREDENTIAL"

TOKEN_CODE=502

while [ $TOKEN_CODE -eq 502 ]; do
  echo "Get new token from Yandex..."
  TOKEN_CODE=$(curl -sL -w %{http_code} -d request_id=$REQUEST_ID --data-urlencode credentials=$CREDENTIAL --request POST http://auth.mobile.yandex.ru/yamrsa/token/ -o token.txt)
  sleep 2
done;

TOKEN=$(cat token.txt | grep token | awk -F "<token>" '{print $2}' | awk -F "</token>" '{print $1}')

echo "TOKEN: $TOKEN"



Во shell скрипте нужно mylogin заменить на свой логин и mypassword соответсвенно тоже. Результатом выполнения скрипта будет строчка:

TOKEN is 2d1da421fdd3404318e81c0a0442105e

Срок действия токена не менее года.
Чтобы загружать фотки не в общую коллекцию, нужно предварительно создать, например запароленный альбом (или выбрать имеющийся) и посмотреть его URL в браузере. Например вот: fotki.yandex.ru/users/mylogin/album/200491/

Теперь чтобы AppleScript мог загружать фотки в этот альбом, необходимо строку:

set ALBUM to "http://api-fotki.yandex.ru/api/users/mylogin/photos/"

заменить на:

set ALBUM to "http://api-fotki.yandex.ru/api/users/mylogin/album/200491/photos/"
Вы уж как-то слишком все усложнили.
НЛО прилетело и опубликовало эту надпись здесь
Всё работает. Читайте внимательнее.
Делай раз
Делай два
Делай три:
НЛО прилетело и опубликовало эту надпись здесь
У меня курл не срабатывает :( в итоге копирует в буфер пустую строку
А в консоли?
В консоли пробовал запускать, ничего вообще не возвращается, логин и ключ нашел правильные
Должно что-то возвращаться. Если вот так:
 curl -F "Filedata=@Адрес файла" "http://habrastorage.org/uploadController/?username=&userkey="
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации