PIX^ : Pixup outil bash pour publier des photos sur forum

Bonjour, tlm …

Je vais présenter un petit outil, un script bash, dont le but est d’envoyer une image sur un hébergeur d’image, afin de restituer le lien utile pour l’insertion dans un post.

Il se nomme PixUP !
L’information principale est sur le forum de la communauté ubuntu : forum.ubuntu-fr.org/viewtopic.php?id=1027431
Cela utilise l’outil Curl et l’interface Zenity. Veillez à leur installation :wink:

Je suis entrain de développer une nouvelle version, où j’ai remanié beaucoup le code, et où j’ai intégré principalement deux autres hébergeurs basés sur le même service (lut.im et framapic.org) que l’on retrouve sur mon dépôt github :
github.com/hucste/pixup
Pour la gestion de ces services, cela nécessite l’installation de l’outil jq - il faut au minimum le dépôt backport pour wheezy … - car le “lutim” a eu la très bonne idée de renvoyer des informations, au format JSON !

S’il y a des volontaires pour tester, sachant que ce qui est sur mon dépôt est une version de dév, donc de test !
En tout cas, j’ai trouvé l’idée sympa et utile, c’est pourquoi j’ai donné de mon temps, pour essayer d’aider à l’améliorer :smiley:

Je veux bien tester mais auparavant, une question :
Est-ce plus rapide que de passer par le wiki de Lol http://pix.isalo.org/ ?

Installé ou installable chez moi : curl, zenity, jq.
Sur ton site, j’ai vu le zip à TC.
Comment se présente-t-il une fois éclaté ?
Un .deb ; un script à placer dans un fichier, à rendre exe ?
Ensuite, le côté pratique, ça se résume à quoi ?
Développe, STP.

[quote=“ricardo”]Je veux bien tester mais auparavant, une question :
Est-ce plus rapide que de passer par le wiki de Lol http://pix.isalo.org/ ?[/quote]

Plus rapide, qu’en sais-je, ricardo ! ?
Quoiqu’il en soit, tu peux faire en mode console, ou graphique, sans ouvrir ton browser web !
De ce que j’en sais, le but est justement d’éviter cette phase-là…

D’ailleurs, tu veux que je rajoute ton pix ?

On s’est croisé, j’ai édité et j’attends le développement du processus.
Éventuellement, je veux bien que tu rajoutes le pix de notre forum.

EDIT :
Développe comme suit stp :
“Image1” présente sur mon ordi dans ~/images
Je veux qu’elle soit insérée dans la présente réponse.
Quels sont les processus intermédiaires à effectuer :question:

[quote=“ricardo”]On s’est croisé, j’ai édité et j’attends le développement du processus.
Éventuellement, je veux bien que tu rajoutes le pix de notre forum.
[/quote]
Pix ajouté ! :116

[quote=“ricardo”]
EDIT :
Développe comme suit stp :
“Image1” présente sur mon ordi dans ~/images
Je veux qu’elle soit insérée dans la présente réponse.
Quels sont les processus intermédiaires à effectuer :question:[/quote]
Désolé, moi pas comprendre l’ensemble de ton édit ! :017

Supposons que j’aie une image “image1” dans ma machine à ~/images et que je veuille la placer dans une réponse au présent fil.
Quelles sont les étapes, l’une après l’autre, à effectuer.
C’est plus clair ?

Retour cet AM.

[quote=“ricardo”]Supposons que j’aie une image “image1” dans ma machine à ~/images et que je veuille la placer dans une réponse au présent fil.
Quelles sont les étapes, l’une après l’autre, à effectuer.
(…)[/quote]
Ahhh …
tu publies avec le script ton image sur l’hébergeur de ton choix, au hasard ton pix :stuck_out_tongue:
tu copies-colles soit l’url de l’image qui t’es restitué, soit le code forum pour inclure l’image :wink:

Pendant que j’y suis, à moi de te questionner : tu as mis une temporisation quelconque à ton pix ?
Parce que j’ai quasiment tout le temps comme réponse : Le service ne semble pas opérationnel !
J’ai pu téléverser une image, mais depuis aucune autre !

Non, à ma connaissance, il fonctionne. Je viens de TC cette image.:

Pour ton soft, je vais l’installer mais pas forcément tout de suite.
Je te donnerai mon avis ensuite, pour dire s’il y a un avantage (ou gain de temps), par rapport à la manœuvre actuelle.
@+

Image-test

Fait mais 2x plus long qu’en passant directement par le wiki

Avantage : on a le choix dans les serveurs d’image

Je teste avec une image entière et un autre serveur

Je fais ça en tant qu’user et via une console graphique mais j’ai ce message ???

???

[quote=“ricardo”]Je fais ça en tant qu’user et via une console graphique mais j’ai ce message ???

???[/quote]

Message d’erreur généré par zenity.
J’en ai d’autres, tel que :

Mais aucune idée du pourquoi et du comment les éviter !

Héhé, c’est comme le script pixup dans handylinux :slightly_smiling:

git.framasoft.org/handylinux/ha … ixup.py#L0

C’est réellement pratique seulement s’il est associé à une action personnalisée (par exemple dans thunar : git.framasoft.org/handylinux/ha … ca.xml#L37)

Excellent !

Bon, à-priori, je viens de télécharger la dernière version du code sur mon dépôt github : github.com/hucste/pixup

L’intégration OS est prévue dans sa future version python … c’est-à-dire fonctionnel à-partir du menu d’applications, et intégration systray.
On verra après pour l’intégration dans un gestionnaire de fichiers ou l’autre ! :wink:

Pixup : Poster une image rapidement sur un forum [mono]Le 03/09/2012, à 15:05[/mono]

[code][18:22:09]:~$ cat .bin/pixup.sh
#!/bin/bash

Script d’upload d’image vers des services d’hebergement

lancez pixup --help pour plus d’info

Services disponibles :

- toile-libre.org →→ Faire un don : http://www.toile-libre.org/fr/don

- casimages.com

- hostingpics.net

v2.1

Auteur: cracolinux [cracolinux@mailoo.org]

2012

Dépendances : curl et zenity

Merci de l’aide de byte_bucket reçu sur le canal #curl de freenode

Merci à Ansuzpeorth :wink:

et à Hush !

LICENCE:

LICENCE PUBLIQUE RIEN À BRANLER

Version 1, Mars 2009

Copyright © 2009 Sam Hocevar

14 rue de Plaisance, 75014 Paris, France

La copie et la distribution de copies exactes de cette licence sont

autorisées, et toute modification est permise à condition de changer

le nom de la licence.

CONDITIONS DE COPIE, DISTRIBUTION ET MODIFICATION

DE LA LICENCE PUBLIQUE RIEN À BRANLER

0. Faites ce que vous voulez, j’en ai RIEN À BRANLER.

modifier cette valeur pour changer le service par défaut (utilisation console)

servicepardefaut=“Toile-libre.org

serviceliste=( “Toile-libre.org” “Casimages.com” “Hostingpics.net” )

#lancement graphique ou console
versionconsole=false
[ -n “$1” ] && versionconsole=true

variables et constantes diverses

NORMAL="\033[0;39m"
ROUGE="\033[1;31m"
servicechoisi="“
fichier=”"

F_aide () {

echo -e “”$ROUGE"Syntaxe"$NORMAL" : pixup [option] parametre"
echo
echo -e “”$ROUGE"Options"$NORMAL" :“
echo
echo " -s ou --service [choix du service d’hébergement]“
echo
echo " t pour pix.toile-libre.org"
echo " c pour casimages.com"
echo " h pour hostingpics.net"
echo
echo " -h ou --help pour lire la présente aide"
echo
echo " Si l’option -s n’est pas fournie, le script utilisera le"
echo " service par défaut ${servicepardefaut} modifiable au début"
echo " du script"
echo
echo -e “”$ROUGE"Parametre”$NORMAL” :“
echo
echo " Le fichier à uploader"
echo
echo -e “”$ROUGE"Exemples”$NORMAL" :"
echo
echo " pixup /home/john/rambo/tutu.png"
echo " → upload du fichier /home/john/rambo/tutu.png vers"
echo " le service par défaut"
echo
echo " pixup -s t toto.jpg"
echo " → upload du fichier ./toto.jpg vers pix.toile-libre.org"
echo
echo "N’hésitez pas à améliorer ce script et à proposer vos idées à"
echo “cracolinux@mailoo.org

}

cette fonction crée, si nécessaire, le chemin de fichier absolu

un chemin relatif type …/trucmuche n’est pas encore géré (je ne sais pas faire, si vous pouvez aider :slight_smile:

dans tout les cas, une vérification à lieu avant toutes tentatives d’envoi

F_checkfichier () {

    if ${versionconsole} ; then
            if [ "${fichier:0:1}" = "/" ] ; then
                    absolufichier="${fichier}"
                    fichier="${fichier##*/}"
            elif [ "${fichier:0:2}" = ".." ] ; then
                    echo "Les chemins relatifs de ce type ne sont pas encore pris en charge..."
                    exit 1
            else
                    absolufichier="${PWD}/${fichier}"
            fi

            # le fichier choisi n'existe pas
            [ ! -f "${absolufichier}" ] && echo "Une erreur est survenue au niveau du chemin de fichier" && exit 2

    elif ! ${versionconsole} ; then
            absolufichier="${fichier}"
            fichier="${fichier##*/}"

            # le fichier choisi n'existe pas
            [ ! -f "${absolufichier}" ] && zenity --warning --text="Une erreur est survenue au niveau du chemin de fichier" && exit 2
    fi
    }

permet d’obtenir l’extension-type du fichier, minusculée pour les besoins de la requète POST, de façon sûre

F_get_extension () {
extension=$(tr [:upper:] [:lower:] <<< $(file “${absolufichier}” | cut -d ‘:’ -f 2 | cut -d ’ ’ -f 2))
}

fonctions des différents services proposés

pix.toile-libre.org

F_toile_libre () {
curl -v -L --form “MAX_FILE_SIZE=15360000” --form “img=@${absolufichier};type=image/${extension};filename=${fichier}” “http://pix.toile-libre.org/?action=upload” 2>/dev/null | grep -B 2 “textarea” | sed “s/

//g;s/</td>//g;s///g;s/</textarea>//g;s#é#é#;s#à#à#;1,4d” > ${tampon}
    if ! ${versionconsole} ; then
            zenity --title="Pix.toile-libre.org - Fichier uploadé" --width=1100 --height=500 --text-info --filename=${tampon} &

    else
            cat ${tampon}
    fi

}

casimages.com

F_casimages () {
url_codes=$(curl -v -L --form “cat=12” --form “image=@${absolufichier};type=image/${extension};filename=${fichier}” “http://www.casimages.com/upload_ano.php” | grep ‘document.location.href’ | cut -d’"’ -f2)
curl “http://www.casimages.com/${url_codes}” > ${tampon}

    urlmini=$(grep -m 1 "nsa" ${tampon} | cut -d "'" -f 8)
    urlimage=${urlmini/mini_/}
    urlmini="[url=${urlimage}][img]${urlmini}[/img][/url]"

    F_montrerlesresultats "Casimages.com"
    }

hostingpics.net

F_hostingpics () {
curl -v -L --form “photo1=@${absolufichier};type=image/${extension};filename=${fichier}” “http://www.hostingpics.net/envoi.html” > ${tampon}

    urlmini=$(grep "value=" ${tampon} | grep "mini" | grep -Eo "\[url.*\[\/url\]")
    urlimage=$(grep -Eo "http.*\.[[:alnum:]]{3}\]" <<< ${urlmini})
    urlimage=${urlimage%?} # suppression du dernier caractère ] de urlimage

    F_montrerlesresultats "Hostingpics.net"
    }

F_montrerlesresultats () {
if ! ${versionconsole} ; then
zenity --info --title=""${1}" - Fichier uploadé" --width=800 --height=200 --text=“Miniature pour forum : \n${urlmini}\n\nAccès à l’image:\n${urlimage}” &

    else
            clear
            echo -e "\nMiniature pour forum : \n${urlmini}"
            echo -e "\nAccès à l'image : \n${urlimage}"
    fi
    }

le corps du script (amen)

Obtenir les informations en console :

if ${versionconsole} ; then

    while true
    do

            case "$1" in

                    -h|--help)

                            F_aide ; exit 0;;

                    -s|--service)

                            case "$2" in

                                    t|T) servicechoisi="Toile-libre.org" ;;
                                    c|C) servicechoisi="Casimages.com" ;;
                                    h|H) servicechoisi="Hostingpics.net" ;;
                                    *) echo "-s ${2} : argument non valide" && exit 3 ;;
                            esac

                            shift 2
                            ;;

                    -*) echo ""$1" option inconnue" && exit 3 ;;

                    *) break ;;
            esac
    done

    [ -z "$1" ] && echo "argument manquant (pas de fichier ?)" && exit 3
    fichier="$1"
    [ -z ${servicechoisi} ] && echo "Service par défaut : ${servicepardefaut}" && servicechoisi="${servicepardefaut}"

ou bien graphiquement :

else

    if fichier=$(zenity --file-selection --title="Fichier à uploader") && [ -n "$fichier" ] ; then
            true
    else
            exit 0  # si annuler, on sort
    fi


    if servicechoisi=$(zenity --list --title="Choisissez un service d'upload" --column="Services disponibles" "${serviceliste[@]}") && [ -n $servicechoisi ] ; then
            true
    else
            exit 0  # si annuler, on sort
    fi

fi

Vérification de la validité du fichier et obtention du type de fichier

F_checkfichier
F_get_extension

création d’un fichier temporaire pour la réception des infos

et envoi du fichier sur le service choisi

tampon=$(mktemp)

case ${servicechoisi} in

    "Toile-libre.org" )
            F_toile_libre ;;

    "Casimages.com" )
            F_casimages ;;

    "Hostingpics.net" )
            F_hostingpics ;;

esac

exit 0
[18:22:15]:~$
[/code]

@Belzebuth: oui ?

Mais encore :question:

À quoi ça sert de mettre un “code” sans aucune explication ?

PengouinPDT, pourrais-tu me faire un script sur mesure “allégé” :
Pas besoin de fenêtre de choix pour “uploader une image” (seule fonction qui m’intéresse).
Pas besoin de fenêtre de choix pour les différents services (seul Debian-fr m’intéresse)
Pas besoin de la fenêtre ’info’ qui est facultative d’ailleurs.
Pas besoin de fenêtre de choix en “mode privé”.

si ça n’est pas possible, donne au moins la possibilité de taper “entrée” pour valider.
Merci.

Tu as essayé de le lancer en mode console ???

./pixup -h

Console F+2-6, tu veux dire ?
Non, seulement avec Konsole en graphique.
Ça devrait changer quoi ?

Lances-le dans un terminal console :wink:

Pour l’aide :

Comme je viens de me rendre compte, que le code gérant le service par défaut, en mode console, bogue, dans l’immédiat, fais-donc :

Bon, dans l’immédiat, tu “subiras” l’étape des informations facultatives … mais, je vais m’y atteler …