ananas 10.05.2011 21:57

СкриптыЗагрузка изображений в Picasaweb

Пробегал тут недавно обзор программ для просмотра изображений. Viewnior оказался тем, что нужно, так как умеет передавать изображения во внешние программы. Давно хотел подобную фичу к gpicview прикрутить, а тут уже все готово.

Теперь осталось приделать возможность отсылки фоток в вебальбом, и все будет полностью в шоколаде.

Итак, для прикручивания нужной функциональности понадобятся curl для работы с сетью, xsltproc для разбора безумного xml, отдаваемого google-овыми сервисами и yad для создания графического интерфейса

Для начала - сам скрипт
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#! /bin/bash
#
# Description: Upload image to Picasaweb
# Author: Victor Ananjevsky <ananasik@gmail.com>, 2011
#

AUTHFILE=${XDG_CACHE_HOME:-$HOME/.cache}/google.auth
YAD="yad --window-icon=web-browser --name=${0##*/}"

# create stylesheet
cat > /tmp/google.xsl <<EOF
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:gphoto='http://schemas.google.com/photos/2007'>
<xsl:output method="text" omit-xml-declaration="yes" encoding="utf-8"/>
<xsl:template match="//atom:feed">
GOOGLE_USER="<xsl:value-of select="atom:title"/>"
ALBUMS=(<xsl:for-each select="//atom:entry">
"<xsl:value-of select="gphoto:id"/>"
"<xsl:value-of select="atom:title"/>"
</xsl:for-each>)
</xsl:template>
</xsl:stylesheet>
EOF

# login
if [[ -e $AUTHFILE ]]; then
source $AUTHFILE
else
eval $($YAD --image=gtk-dialog-authentication --title="Picasa login" \
--text="<b>Login to google account</b>" --form \
--field="Login:" --field="Password::H" | awk -F'|' '{printf "EMAIL=%s\nPASS=%s\n", $1, $2}')
[[ -z $EMAIL || -z $PASS ]] && exit 1

eval $(curl https://www.google.com/accounts/ClientLogin -sS --insecure \
--data-urlencode Email="$EMAIL" --data-urlencode Passwd="$PASS" \
-d accountType=GOOGLE -d source="$0" -d service=lh2)

if [[ -z $Auth ]]; then
$YAD --title="Login error" --image=dialog-error --button=gtk-close --text="Login failed: $Error"
exit 1
fi

mkdir -p ${XDG_CACHE_HOME:-$HOME/.cache}
echo "Auth=$Auth" > $AUTHFILE
fi

# get albums list
eval $(curl --silent --header "Authorization: GoogleLogin auth=$Auth" \
"http://picasaweb.google.com/data/feed/api/user/default" | xsltproc /tmp/google.xsl -)
for ((i=1; i<${#ALBUMS[@]}; i+=2)); do
alb="$alb!${ALBUMS[$i]}"
done

# select album and file
eval $($YAD --title="Upload to picasa" --text="Upload to Picasa" \
--form --field="Album::CB" --field="Title:" --field="File::FL" \
"$alb" "" "$1" | awk -F'|' '{printf "ALBUM=\"%s\"\nTITLE=\"%s\"\nFILENAME=\"%s\"\n", $1, $2, $3}')
[[ -z $ALBUM || -z $FILENAME ]] && exit 1

for ((i=1; i<${#ALBUMS[@]}; i+=2)); do
if [[ $ALBUM == ${ALBUMS[$i]} ]]; then
URI=http://picasaweb.google.com/data/feed/api/user/$GOOGLE_USER/albumid/${ALBUMS[(($i-1))]}
break
fi
done
TYPE=$(file -bi $FILENAME | sed "s/;.*$//")

# upload file
curl --request POST --data-binary "@$FILENAME" --header "Slug: $TITLE" \
--header "Content-Type: $TYPE" --header "Authorization: GoogleLogin auth=$Auth" \
"$URI" 2>&1 > /tmp/res | $YAD --button=gtk-cancel:1 --title="Upload to Picasa" \
--text="Upload '$FILENAME' to '$ALBUM'" --progress --auto-close --auto-kill

if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
$YAD --title="Upload error" --image=dialog-error --button=gtk-close --text="Upload failed: $(< /tmp/res)"
fi

# cleanup
rm -f /tmp/res /tmp/google.xsl

exit 0


Пихаем скрипт куда-нибудь в /usr/local/bin под именем picasa.sh

Теперь надо научить viewnior использовать наш скрипт. Создаем файл $XDG_DATA_HOME/applications/picasa.desktop (ну или $HOME/.share/applications/picasa.desktop, если XDG_DATA_HOME не определен) с таким содержимым

 1
2
3
4
5
6
7
8
9
10
11
12
13
[Desktop Entry]
Version=1.0
Type=Application
Name=Picasaweb uploader
Name[ru]=Загрузка в Picasa
Comment=Upload image to Picasaweb album
Comment[ru]=Загрузка изображений в Picasaweb
Exec=picasa.sh %U
Icon=gimp
Terminal=false
Categories=Graphics;GTK;
StartupNotify=false
MimeType=image/bmp;image/gif;image/tiff;image/jpeg;image/png;


И последний штрих - обновление базы программ. Для этого запускаем
1
update-desktop-database $XDG_DATA_HOME/applications

Все. Задача решена.


Тэги: bash gtk picasa script yad
+ 7 -
Похожие Поделиться

pumbur 14.05.2011 22:27 #
чем gthumb не нравиться?
ananas 15.05.2011 11:18 #
раздутостью и зависимостями
alltiptop 14.05.2011 23:03 #
Gwenviev + Kipi-Plugins не угодил?
ananas 15.05.2011 11:19 #
не желаю иметь с qt/kde ничего общего
alltiptop 15.05.2011 23:08 #
Wine тоже полагаю не установлен?
ananas 15.05.2011 23:12 #
угадал
cppmm 16.05.2011 16:26 #
Офигенно!
Я хоть и пользователь gwenview, но скрипт просто замечателен.
ananas 16.05.2011 16:41 #
спасибо
EugeneHill 29.10.2011 20:11 #
а если у меня ничего из этого нет : Создаем файл $XDG_DATA_HOME/applications/picasa.desktop (ну или $HOME/.share/applications/picasa.desktop, если XDG_DATA_HOME не определен) с таким содержимым

mironov_orig 29.10.2011 20:51 #
тогда всё пиздец мы все умрём
EugeneHill 29.10.2011 21:17 #
тебе больше негде словоблудием заниматься?
mironov_orig 29.10.2011 21:24 #
Конечно негде, не везде же такие кадры, как ты попадаются.
EugeneHill 29.10.2011 20:12 #
по команде - update-desktop-database $HOME/.share/applications/picasa.desktop/applications

ошибка -
No directories in update-desktop-database search path could be processed and updated.
ananas 30.10.2011 06:11 #
потому что команда должна быть update-desktop-database $HOME/.share/applications
EugeneHill 01.11.2011 14:41 #
по этой команде - No directories in update-desktop-database search path could be processed and updated.
ananas 01.11.2011 15:13 #
так а ты каталог создал? и .desktop туда положил?
EugeneHill 01.11.2011 15:35 #
да, вот этот $HOME/.share/applications/picasa.desktop
EugeneHill 01.11.2011 15:16 #
да, вот этот $HOME/.share/applications/picasa.desktop