вторник, 18 декабря 2007 г.

CURL: Хитрости нашего пруда

< поскипан нудный и долгий рассказ про взаимоотношения провайдеров нашего городка >

У локальных (городских) хранилищ файлов все несколько попроще, чем например в http://www.depositfiles.com, и их вполне можно заюзать в несложных shell-скриптах. Например чтобы одной командой кинуть файл в хранилище я сделал такой алиас (shell: tcsh):

$ cat >> ~/.tcshrc
alias lg_up sh -c "'"'file="\!*"; \
[ -z "$file" ] && exit; \
/usr/local/bin/curl -F userfile=@$file -F action=1 -F \
agreelicense=checkbox http://share.service.ru/upload.php | \
grep -oE "http://share\.service\.ru/[0-9]+" | head -n 1'"'"

Если файл успешно закачался - выдается ссылка на него.
Пример использования: lg_up <имя_файла>

Можно пойти еще дальше и написать скрипт, который по заранее созданному списку выкачивает файлы с интернета и кидает их в хранилище. А пользователю отправляется письмо со ссылками на файлы в хранилище. Примерно так (download.sh)


#!/bin/bash

wget=$(which wget);
curl=$(which curl);
if [ -z "$wget" ] || [ -z "$curl" ]; then exit 1; fi;

curl_path='http://share.server.ru/upload.php'

if [ -f "$1" ];
then {
if [ ! -z "$2" ];
then {
limit="--limit-rate=$2";
} fi;
list=$(< $1);
pwd=$(pwd);
IFS="
";

for i in $list;
do {
echo "Качаем файл по адресу: $i";
file="$(echo -n "$i" | grep -oE '[^/]+$')";
if [ ! -z "$file" ];
then {
$wget --tries=3 -nv $limit -O $pwd/"$file" "$i"
if [ -f "$pwd/$file" ] && [ -s "$pwd/$file" ];
then {
url=`$curl -F userfile=@$pwd/$file -F action=1 \
-F agreelicense=checkbox $curl_path | \
grep -oE 'http://share\.server\.ru/[0-9]+' | \
head -n 1`;

echo "Файл $file доступен по адресу: $url";
};
else {
echo "Файл $file не существует или пуст";
} fi;
};
else {
echo "Неверное имя файла";
} fi;
echo;
} done;
};
else {
echo "Не задан файл со списком";
} fi;


А используется так: ./download.sh <файл со списком> | mail -s 'Downloaded files' my@mail.ru

Комментариев нет: