Решено: bash:скрипт для автоматической загрузки на картинкохост (решение в 12ом посте)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

готовый сабж тут

пытаюсь написать сабж, не получается.
в качестве хостинга выбрал http://ipicture.ru
там после указания переменной userfile (согласно html коду http://ipicture.ru ) должна грузиться следующая страница с адресом типа http://ipicture.ru/Gallery/View/10198472.html
я так понимаю он должен передаваться курлу, однако этого не происходит. Возвращается страница с ошибкой. Собственно вопрос: как вытащить конечный адрес?
вот что сделал. собственно одну строчку исправить только

Код: Выделить всё

#!/bin/bash
pic1=`mktemp tmp_imgXXXXX.png`
echo Point area to take screenshot.
scrot -s $pic1
#по идее должна была бы возвращаться страница с адресом и я бы ее вот так вытянул:
next=`curl -i -F userfile=@"$pic1" http://ipicture.ru/Upload|egrep -o "http://ipicture.ru/Gallery/View/[0-9].html"`
# ну и для получения конечного результат вытягиваем интересующий нас адресок:
result=`curl "$next"|egrep -o "\[IMG\]http://(.*)\[\/IMG]"`
echo Your image URL for forum is $result
rm $pic1
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение /dev/random »

А не маловато один только userfile передавать? Форма там чуть ли не на всю страницу.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

/dev/random писал(а):
12.12.2008 04:07
А не маловато один только userfile передавать? Форма там чуть ли не на всю страницу.
да, возможно. только вот указал все переменные котторые нашел:

Код: Выделить всё

[11:03]deb:~ $ curl  -i -F "userfile=@1.png;uploadtype=1;orig_resize=;rotate=0;string_big_on=0;optimize=
0;ignorAllCheck=0;adult=0;status=1;quality=100;thumb_resize_on=200;ramka_off=0;s
t
ring_small_on=0" http://ipicture.ru/Upload|grep ipicture
однако результат не изменился. неправильно указал?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...
Контактная информация:

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение Atragor »

Надо добавить скрытое поле method в запрос:
next=`curl -s -i -F "userfile=@$pic1" -F "method=file" "http://ipicture.ru/Upload/" | egrep -o "http://ipicture.ru/Gallery/View/[0-9]+\.html"`
result=`curl -s "$next" | egrep -o "\[IMG\]http://(.*)\[/IMG\]" | grep -v 'thumbs' | sort | uniq`
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

Atragor писал(а):
12.12.2008 18:27
Надо добавить скрытое поле method в запрос:
next=`curl -s -i -F "userfile=@$pic1" -F "method=file" "http://ipicture.ru/Upload/" | egrep -o "http://ipicture.ru/Gallery/View/[0-9]+\.html"`
result=`curl -s "$next" | egrep -o "\[IMG\]http://(.*)\[/IMG\]" | grep -v 'thumbs' | sort | uniq`
неа. не все так просто :(
он все равно возвращает страничку с ошибкой. даже если добавить к моему списку переменнных.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...
Контактная информация:

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение Atragor »

Странно, у меня работает:

Код: Выделить всё

[roma::/home/roma/] % sh ipic.sh /storage/wallpapers/celestia.jpg
Picture: [IMG]http://pic.ipicture.ru/uploads/081213/V0W1ccM4mj.jpg[/IMG]


Кстати, если указывать все поля через точку с запятой, то не работает, поэтому я сделал несколько -F в curl.
Поворот картинки на 90 градусов:

Код: Выделить всё

next=`curl -s -i -F "userfile=@$1" -F "method=file" -F "rotate_on=on" -F "rotate=90" "http://ipicture.ru/Upload/" |egrep -o "http://ipicture.ru/Gallery/View/[0-9]+\.html"`
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

Atragor писал(а):
13.12.2008 20:44
Странно, у меня работает:

Код: Выделить всё

[roma::/home/roma/] % sh ipic.sh /storage/wallpapers/celestia.jpg
Picture: [IMG]http://pic.ipicture.ru/uploads/081213/V0W1ccM4mj.jpg[/IMG]

Код: Выделить всё

[21:02]deb:~ $ echo $pic1
1.png
[21:02]deb:~ $ ls -l|grep png
-rw-r--r-- 1 user user     955 Дек 12 00:47 1.png
[21:02]deb:~ $ curl -s -i -F "userfile=@$pic1" -F "method=file" "http://ipicture.ru/Upload/" | egrep -o "http://ipicture.ru/Gallery/View/[0-9]+\.html"
[21:03]deb:~ $ dpkg -l |grep curl
ii  curl                                          7.18.2-7                   Get a file from an HTTP, HTTPS or FTP server
ii  libcurl3                                      7.18.2-7                   Multi-protocol file transfer library (OpenSS
ii  libcurl3-gnutls                               7.18.2-7                   Multi-protocol file transfer library (GnuTLS
ii  php5-curl                                     5.2.6.dfsg.1-0.1+b1        CURL module for php5
[21:03]deb:~ $ dpkg -l |grep egrep
ii  grep                                          2.5.3~dfsg-6               GNU grep, egrep and fgrep
в чем тогда может быть проблема?
Atragor писал(а):
13.12.2008 20:44
Кстати, если указывать все поля через точку с запятой, то не работает, поэтому я сделал несколько -F в curl.
да, это я виноват, невнимательно ман прочитал. там через ";" можно тип указать а не все поля перечислить :)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...
Контактная информация:

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение Atragor »

Мои png грузить отказывается, ссылаясь на запрещенный тип файла. =)
Проблему решил так:

Код: Выделить всё

-F "userfile=@/storage/wallpapers/s.png;type=image/png"


Плюс file --mime-type...
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

Atragor писал(а):
13.12.2008 21:27
Мои png грузить отказывается, ссылаясь на запрещенный тип файла. =)
Проблему решил так:

Код: Выделить всё

-F "userfile=@/storage/wallpapers/s.png;type=image/png"


Плюс file --mime-type...
, да спасибо огромное. это действительно решило проблему. итоговый скрипт если кому интересно:

Код: Выделить всё

#!/bin/bash
name=`mktemp tmp_imgXXXXX`
pic1=$name\.png
echo Point area to take screenshot.
scrot -s $pic1
echo Uploading image, please wait...
next=`curl -i -F "userfile=@$pic1;type=image/png"  -F "method=file" http://ipicture.ru/Upload|egrep -o "http://ipicture.ru/Gallery/View/[0-9]+\.html"`
result=`curl -s "$next" | egrep -o "\[IMG\]http://(.*)\[/IMG\]" | grep -v thumbs | sort | uniq`
echo Done
echo Your image URL for forum is $result
rm $name
rm $pic1
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...
Контактная информация:

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение Atragor »

В шаблоне mktemp 6 последних символов должны быть XXXXXX, ошибку выдает.

А я и не знал, что scrot умеет скриншотить выбранную часть экрана.
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

Atragor писал(а):
13.12.2008 22:08
В шаблоне mktemp 6 последних символов должны быть XXXXXX, ошибку выдает.
да, спасибо, подправил.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено: bash:скрипт для автоматической загрузки на картинкохост

Сообщение SLEDopit »

стало неудобно юзать постоянным выделением экрана. добавил опции :)

Код: Выделить всё

#!/bin/bash
#Script to upload images to ipicture
#Curl & scrot are needed for work
#By SLEDopit
upload()
{
        echo -n Uploading image, please wait...
        next=`curl -s -i -F "userfile=@$1;type=image/png" -F "method=file" http://ipicture.ru/Upload|egrep -o "http://ipicture.ru/Gallery/View/[0-9]+\.html"`
        echo ...
        result=`curl -s "$next" | egrep -o "\[IMG\]http://(.*)\[/IMG\]"| sort`
        echo Done
        image=`echo $result|awk '{print $1}'`
        thumb=`echo $result|awk '{print $3}'`
        echo Your image URL for forum is $image
        echo Your thumb URL for forum is $thumb
}
all()
{
        name=`mktemp tmp_imgXXXXX`
        pic1=$name\.png
        echo Screenshoting...
        scrot $pic1
        upload $pic1
        rm $name
        rm $pic1

}

part()
{
        name=`mktemp tmp_imgXXXXX`
        pic1=$name\.png
        echo Point area to take screenshot:
        scrot -s $pic1
        upload $pic1
        rm $name
        rm $pic1
}

file()
{
        if [ -n "$1" ]; then
                ls $1 >/dev/null 2>/dev/null
                if [ "$?" -eq "0" ]; then
                        upload $1
                else
                echo No such file
                fi
        else
                echo Please specify file to upload
        exit
        fi
}

case "$1" in
  -a)
        all
       ;;
  -p)
        part
       ;;
  -f)
        file $2
       ;;
  *)
        echo "Usage: ./screen -option
        Options:
        -p Take a located part of screen
        -a Take whole screen
        -f Upload existing image" >&2
        exit 3
       ;;
esac
вроде работает :)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Ответить