#2326 Le 06/09/2011, à 18:23
- tshirtman
Re : /* Topic des codeurs couche-tard [5] */
oui, un "getimage?url=" serait fonctionnel je pense, en supposant que ton proxy de boite se base sur le domaine
et non c'est pas dur, je peux regarder en flask ce soir si tu veux…
Hors ligne
#2327 Le 06/09/2011, à 19:21
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
Bon It Works!
Je propre un peu le bousin, fait ce que j’ai à faire et ensuite je le poste.
(Tiendez, en attendant voilà dla lecture, chui tombé là‑dessus cet aprem)
Cela dit, si quelqu’un pond un truc à base de proxy, ça sera sûrement 42x mieux que ma bidouille
– le nom du propriétaire d'un fichier.
– le nom du groupe d'un fichier.
– les permissions d'un fichier, si possible de la forme « rwxr-xr-x »
os.stat
Ça ne t’irai pas ?
Ça te donne, entre autres, le mode (donc les droits en ), l’uid (donc y a moyen de retrouver facilement le nom du gus) et le gid (donc y a moyen de récuperer le nom du groupe).
Dernière modification par grim7reaper (Le 06/09/2011, à 19:25)
Hors ligne
#2328 Le 06/09/2011, à 19:34
- Elzen
Re : /* Topic des codeurs couche-tard [5] */
Bah j'dois effectivement pouvoir récupérer ce qu'il faut pour les droits ^^
Par contre, le problème pour le numéro de l'utilisateur/du groupe, c'est justement d'associer ce numéro à un nom, j'ai pas trouvé comment on faisait.
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#2329 Le 06/09/2011, à 19:44
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
associer ce numéro à un nom, j'ai pas trouvé comment on faisait.
import os
from stat import *
import pwd
import grp
st = os.stat("nom/du/fichier")
userinfo = pwd.getpwuid(st[ST_UID])
groupinfo = grp.getgrgid(st[ST_GID])
print "file owned by user:", userinfo[0]
print "file owned by group:", groupinfo[0]
Édit : Ha, et pour ça :
si j'arrive aussi à identifier les différents groupes auxquels appartient l'utilisateur actif).
Tu peux faire ça :
import os
import grp
for index, item in enumerate(map(grp.getgrgid, os.getgroups())):
print item[0]
Pardon aux familles, toussa…
Dernière modification par grim7reaper (Le 06/09/2011, à 19:57)
Hors ligne
#2330 Le 06/09/2011, à 20:01
- kamui57
Re : /* Topic des codeurs couche-tard [5] */
pour l'instant j'arrive à télécharger l'image et à l'afficher mais pas à l'envoyer sur toile-libre.
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#2331 Le 06/09/2011, à 20:08
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
Moi c’est OK tout fonctionne, mais la gestion des erreurs est pas encore en place (s’il n’y avait que ça qui n’était pas en place…).
Bon, vu que kamui57 marche sur mes plates‑bandes, je release alors
Attention les yeux, c’est du Perl (et je l’ai pas encore commenté) :
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:standard);
use WWW::Mechanize;
my $query = new CGI;
my $src = $query->param('src');
my $dest = $query->param('dest');
my $tags = $query->param('tags');
$tags = (defined($tags)) ? $tags : '';
if(!defined($src) || !defined($dest))
{
# BOUM !!!
exit 0;
}
my $bot = WWW::Mechanize->new;
my $filename = '/tmp'.substr($src, rindex($src, '/'));
$bot->get($src);
die $bot->res->status_line unless($bot->success);
$bot->save_content($filename);
$bot->get($dest);
die $bot->res->status_line unless($bot->success);
$bot->set_fields(img => $filename,
tags => $tags);
$bot->submit;
my $url = $bot->uri;
die $bot->res->status_line unless($bot->success);
unlink($filename);
print $query->header;
print $query->start_html(-style => '/const/style.css');
print h1('Success');
print "<p><a href=\"$url\">Image dispo.</a></p>";
print $query->end_html;
Testable ici
On met le lien direct vers l’image, on met le lien vers la page d’accueil du pic choisi.
On met éventuellement des tags, et roulez jeunesse !
Bon je voulais faire du FastCGI maismon serveur m’a saoulé donc je suis revenu au CGI de base…
Idem, là je sors Mechanize alors que LWP aurait probablement suffit mais bon…
@kamui57 : d’ailleurs, tu le fais en quoi toi ?
Dernière modification par grim7reaper (Le 06/09/2011, à 20:12)
Hors ligne
#2332 Le 06/09/2011, à 20:12
- kamui57
Re : /* Topic des codeurs couche-tard [5] */
grim : php, sur mon hébergement toile-libre
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#2333 Le 06/09/2011, à 20:39
- tshirtman
Re : /* Topic des codeurs couche-tard [5] */
code
#!/usr/bin/env python
from flask import Flask
from flask import make_response
app = Flask(__name__)
import urllib2
import mimetypes
@app.route('/')
def main():
return 'add an url to this address to get a proxyfied response'
@app.route('/<path:url>')
def proxy(url):
r = make_response(urllib2.urlopen(url).read())
r.mimetype=mimetypes.guess_type(url)[0]
return r
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5001, debug=False)
hum, ça ne semble pas marcher pour les pages "normales" par contre…
Dernière modification par tshirtman (Le 06/09/2011, à 20:40)
Hors ligne
#2334 Le 06/09/2011, à 20:43
- tshirtman
Re : /* Topic des codeurs couche-tard [5] */
je vois que grim fait des tests
(et oui, comme par hasard tous ses tests foirent )
edit; ah ouf, non pas le lien direct vers l'image, ça marche ça
Dernière modification par tshirtman (Le 06/09/2011, à 20:45)
Hors ligne
#2335 Le 06/09/2011, à 20:49
- Ras'
Re : /* Topic des codeurs couche-tard [5] */
Moi c’est OK tout fonctionne, mais la gestion des erreurs est pas encore en place (s’il n’y avait que ça qui n’était pas en place…).
Bon, vu que kamui57 marche sur mes plates‑bandes, je release alors
Attention les yeux, c’est du Perl (et je l’ai pas encore commenté) :#!/usr/bin/perl use strict; use warnings; use CGI qw(:standard); use WWW::Mechanize; my $query = new CGI; my $src = $query->param('src'); my $dest = $query->param('dest'); my $tags = $query->param('tags'); $tags = (defined($tags)) ? $tags : ''; if(!defined($src) || !defined($dest)) { # BOUM !!! exit 0; } my $bot = WWW::Mechanize->new; my $filename = '/tmp'.substr($src, rindex($src, '/')); $bot->get($src); die $bot->res->status_line unless($bot->success); $bot->save_content($filename); $bot->get($dest); die $bot->res->status_line unless($bot->success); $bot->set_fields(img => $filename, tags => $tags); $bot->submit; my $url = $bot->uri; die $bot->res->status_line unless($bot->success); unlink($filename); print $query->header; print $query->start_html(-style => '/const/style.css'); print h1('Success'); print "<p><a href=\"$url\">Image dispo.</a></p>"; print $query->end_html;
Testable ici
On met le lien direct vers l’image, on met le lien vers la page d’accueil du pic choisi.
On met éventuellement des tags, et roulez jeunesse !Bon je voulais faire du FastCGI maismon serveur m’a saoulé donc je suis revenu au CGI de base…
Idem, là je sors Mechanize alors que LWP aurait probablement suffit mais bon…@kamui57 : d’ailleurs, tu le fais en quoi toi ?
S'trou cool
J'n'ai plus qu'à le rendre un poil plus joli, et à mettre l'adresse de mon pix par défaut, et roulez
Merci merci merci
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#2336 Le 06/09/2011, à 20:50
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
@tshirtman : Ouais enfin au début, c’est mes tests qui étaient foireux (je me suis gourré de c/c, c’était pas un lien) ^^"
@Ras' : De rien
De mon côté je vais essayer de nettoyer le code et de le rendre un peu plus tolérant aux erreurs.
Ensuite, tu pourras même le mettre direct sur ton serveur (vu qu’actuellement je suis pas chez moi, je peux pas laisser mon « serveur » allumé 24/7 ).
Cela dit, si quelqu’un te met à dispo une solution via proxy ça sera certainement meilleur que ma bidouille ^^"
D’ailleurs tu peux jeter un œil à ce qu’a fait tshirtman, ça semble pas mal aussi.
Dernière modification par grim7reaper (Le 06/09/2011, à 20:55)
Hors ligne
#2337 Le 06/09/2011, à 20:58
- Ras'
Re : /* Topic des codeurs couche-tard [5] */
Oui et non, pour un proxy faut des ports ouverts, donc ta solution est bien aussi
Et je pense que pour simplifier au max le code tu peux mettre l'url de l'hébergeur du pix direct dans le code. Comme ça, chaque hébergeur d'un tel service héberge sur son pix à lui
(d'ailleurs, c'est quelque chose qui pourrait être intégré au pix, la récupération depuis une url plutôt que depuis la machine, mais je n'sais pas comment faire ça)
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#2338 Le 06/09/2011, à 21:02
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
Oui et non, pour un proxy faut des ports ouverts, donc ta solution est bien aussi
Ok, donc je la peaufinerai alors.
Et je pense que pour simplifier au max le code tu peux mettre l'url de l'hébergeur du pix direct dans le code. Comme ça, chaque hébergeur d'un tel service héberge sur son pix à lui
Oui, c’est faisable aussi.
Moi j’avais fait comme ça car je n’ai pas de pix d’installé sur mon serveur actuel.
(d'ailleurs, c'est quelque chose qui pourrait être intégré au pix, la récupération depuis une url plutôt que depuis la machine, mais je n'sais pas comment faire ça)
Oui, ça aussi ça doit être jouable mais là faut toucher au code de pix et je suppose que c’est du PHP.
Or le PHP c’est pas mon trip :]
Hors ligne
#2339 Le 06/09/2011, à 21:04
- Pylades
Re : /* Topic des codeurs couche-tard [5] */
Πυλάδης a écrit :Justement, comme tout le monde utilise le pix de toile-libre, ça n’est pas bien sorcier d’aller chercher dans /upload/original/…
Sinon on peut toujours se contenter de la miniature…
il veut dire que dans le topic des mêmes, certaines images ne sont pas uploadées par les posteurs mais trouvées sur internet, donc hébergées un peu partout, y compris sur des sites bloqués à son taf.
il mentionne pix.toile-libre.org pour éventuellement se baser sur son code.
Euh… si le type du pix est inconnu, comment veux-tu retrouver l’image originale ?
Pour l'instant le but est, en ayant le lien direct vers une image sur un hébergeur bloqué, de télécharger cette image, et de la réuploader ailleurs (non bloqué), automatiquement (une page web sur laquelle on colle le lien, on valide, et ça télécharge puis uploade). Comme le serveur a accès à l'image bloquée au taf' de Ras', il peut le faire.
Je voulais juste dire que si le mec poste une miniature de l’image ou un lien vers la page de l’image (avec le pix de toile-libre), on peut retrouver l’image originale en allant dans /upload/original/ ; et que si ce n’est pas le pix de toile-libre, il faut se contenter de la miniature ou rien.
Tu peux faire ça :
import os import grp for index, item in enumerate(map(grp.getgrgid, os.getgroups())): print item[0]
Plus simplement :
import os
import grp
for item in map(grp.getgrgid, os.getgroups()):
print item[0]
Sinon, tu acceptes de faire du Python, maintenant ?
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2340 Le 06/09/2011, à 21:13
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
Plus simplement :
Ho, je me doutais bien qu’on pouvais faire mieux (rien que mes print, ils ne passent pas en Python 3 ^^").
D’où mon « pardon aux familles, toussa… »
Sinon, tu acceptes de bidouiller du Python, maintenant ?
Fixed.
Nuance . Je ne connais pas Python, je bidouille un bout de code jusqu’à ce qu’il tombe en marche.
Plus sérieusement, ArkSeth fait une demande en Python donc ça serait moyennement constructif que je lui réponde en C ou en Haskell
Puis comme là c’est pas du gros code (comme les histoires de dbus, là aussi je postais du Python), je me donne la peine de chercher et de fournir du code en plus des explications.
Dernière modification par grim7reaper (Le 06/09/2011, à 21:14)
Hors ligne
#2341 Le 06/09/2011, à 22:35
- Elzen
Re : /* Topic des codeurs couche-tard [5] */
Ouaip, d'ailleurs, c'est tombé en marche chez moi aussi, du coup, merci ^^
Y a juste pour la fonction pour savoir si le rep actuel est inscriptible ou pas, j'ai toujours pas trouvé, et j'hésite à faire un parsage manuel des droits (vu que ça ne gérerait pas les ACL, ce que je suppose qu'une vraie récupération propre utilisant des outils faits pour ça ferait).
Donc si jamais d'aventure quelqu'un tombe sur la ligne de la doc que j'ai loupé, merci de faire signe (sinon, ç'pas grave, c'est juste pour ajouter une icône dans la barre de statut, pas l'plus important)
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#2342 Le 07/09/2011, à 08:49
- Rolinh
Re : /* Topic des codeurs couche-tard [5] */
Hey,
petite question simple en C (désolé si c'est ridicule...):
quelqu'un arriverait à m'expliquer dans quel contexte il est pertinent/utile de déclarer une variable en "extern" ?
Hors ligne
#2343 Le 07/09/2011, à 09:11
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
Tiens, ça me semble pas mal ça :
In many cases, you can leave off the extern qualifier and not notice any difference because the linker can collapse multiple definitions to one. But the intent is then unclear in the code, and the code is error prone in case of typos. It is much clearer to define the global in one place, and then declare extern references to it in all the other places. When refering to globals provided by a library, especially a shared library, this is even more important in order to ensure you are talking about the correct, common instance of the variable.
Si tu le mets pas ça fonctionne car les linker sont pas con (il me semble même que ce comportement est décrit dans la norme, à vérifier...) mais ça peut être plus sympa de le mettre pour expliciter où est la définition et où sont les déclarations.
Après, pour le coup des bibliothèques partagées dont il parle je ne peux rien dire car j'ai jamais eu de globale dans les bibliothèques que j'ai développé donc je ne sais pas si l'absence d'extern pose problème...
Si tu ne met aucun extern, il me semble que le comportement c'est :
- si une des déclarations est composée d'une initialisation ça devient la définition ;
- s'il y a plusieurs définitions, ça gueule et ça ne compile (enfin link) pas ;
- si tu n'as que des déclarations, le linker en choisi une au pif pour jouer le rôle de définition.
Dernière modification par grim7reaper (Le 07/09/2011, à 09:12)
Hors ligne
#2344 Le 07/09/2011, à 09:14
- kamui57
Re : /* Topic des codeurs couche-tard [5] */
Question en php
pourquoi avec ce code (pour le reupload de Ras')
j'obtiens
Erreur : Vous devez uploader un fichier de type .png, .gif, .jpg ou .jpeg
? page de test ici
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#2345 Le 07/09/2011, à 09:19
- Rolinh
Re : /* Topic des codeurs couche-tard [5] */
Merci pour cette explication. :-)
par contre, c'est violent ça:
- si tu n'as que des déclarations, le linker en choisi une au pif pour jouer le rôle de définition.
Bonjour le comportement aléatoire...
Hors ligne
#2346 Le 07/09/2011, à 09:26
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
@kamui57 : t'es sûr que faut envoyer $data au pix ?
Moi je lui fournirai plutôt $path.
@Rolinh : certe c'est violent (encore qu'il faudrait vérifier ce comportement dans la norme, là je sors ça de tête donc ça vaut ce que ça vaut).
Cela dit, ici c'est plus le dev qui est à blamer car déclarer une globale à de multiples endroits sans jamais lui donner une valeur initiale je trouve ça tout aussi violent (et c'est ça qui provoque le choix au pif) et c'est bien ça qui peut provoquer une comportement indéterminé.
Dernière modification par grim7reaper (Le 07/09/2011, à 09:27)
Hors ligne
#2347 Le 07/09/2011, à 09:40
- Ras'
Re : /* Topic des codeurs couche-tard [5] */
En mettant l'url de ton avatar en entrée, j'ai ça :
(même résultat avec ou sans le ?m=12349809 à la fin de l'url)
Dernière modification par Ras' (Le 07/09/2011, à 09:41)
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#2348 Le 07/09/2011, à 09:44
- Rolinh
Re : /* Topic des codeurs couche-tard [5] */
C'est sûr.
Bon, j'ai fait mes petits tests pour voir le comportement.
Je vois mieux le comportement mais en revanche je n'ai pas su recréer la situation du choix au pif.
Hors ligne
#2349 Le 07/09/2011, à 09:51
- grim7reaper
Re : /* Topic des codeurs couche-tard [5] */
Bah je vois mal comment tu veux le vérifier surtout .
Si aucune déclaration n'a d'initialisation, peut importe le choix du linker tu auras une valeur indéterminée. Donc pour retrouver quelle déclaration le linker à choisi ça me semble tendu.
Dernière modification par grim7reaper (Le 07/09/2011, à 09:52)
Hors ligne
#2350 Le 07/09/2011, à 09:55
- Ras'
Re : /* Topic des codeurs couche-tard [5] */
Bon, moi j'n'ai pas eu le temps de tester ça, peut être ce soir
Sinon, c'est possible de faire pareil pour des pages web ? Aspirer une page et son contenu (image/vidéo), et le sauvegarder dans un /www/rehost/page.html ?
Techniquement ça doit être jouable, non ?
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne