PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Thomas Bores : Apprende Python – Partie 5 – Création d’un extenseur d’url

mercredi 12 mars 2014 à 22:34
Logo de Twitonomy

Logo de Twitonomy

Cher lecteur, tu sais probablement déjà ce qu’est une URL réduite. Nous les utilisons tous les jours pour éviter de s’échanger des adresses complètes qui sont bien souvent trop longues pour tenir dans les tweets. Il existe plusieurs services qui permettent de réduire les urls, les plus connus sont: bit.ly et goo.gl

Dans le cadre de son doctorat, un ami étudie l’utilisation de Twitter faite par les journalistes. Pour cela, il génère des rapports d’utilisateurs de Twitter en utilisant le service Twitonomy. L’application Twitonomy permet de générer des fichiers Excel avec plusieurs Tweets d’une même personne. Bien sûr, les tweets contiennent des URLs qui sont réduites. Mais mon ami a besoin de remplacer les urls réduites par les urls réelles. Sachant qu’il a plus de 80 fichiers Excel à traiter et que chaque fichier peut contenir jusqu’à 5000 tweets, une approche manuelle est exclue. C’est alors que j’interviens.

Après une recherche rapide sur Google DuckDuckGo je trouve un service en ligne libre et gratuit qui permet, à partir d’une URL réduite, de retrouver l’URL originale. Ce dernier se nomme expandurl et met à disposition une API. Il suffit de passer l’url réduite comme paramètre à l’url du service. J’espère que vous arrivez toujours à me suivre :). Concrètement ça donne ça:

http://expandurl.me/expand?url=http://bit.ly/1lBjO6q

Le service répond ensuite ainsi:

{
"status": "OK",
"end_url": "http://blog.bores.fr/",
"redirects": 1,
"urls": [
	"http://bit.ly/1lBjO6q",
	"http://blog.bores.fr/"
],
"start_url": "http://bit.ly/1lBjO6q"
}

Il faut maintenant automatiser le tout. Résumons les librairies qui me sont nécessaires:

Pour compléter, je vais utiliser le module os, afin de pouvoir lire plusieurs fichiers E dans un même dossier et le module pickle pour enregistrer les urls déjà connues dans un fichier. Ce dernier point est important, il permet de créer un dictionnaire local de paires {url_réduite:url_réelle} et de l’enregistrer dans un fichier à la fermeture du programme. Ceci permet d’accélérer le traitement si l’on doit relancer le programme sur d’autres fichiers qui contiennent des urls réduites qui étaient déjà présentes dans les fichiers Excel précédents.

Il faut lier les briques ensemble et voilà ce que ça donne. Eh oui bien souvent, la programmation s’apparente au Lego!

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
 
"""
url_expander.py
 
This program enables user to parse excel files generated from twitony
and to convert shortened urls in expended urls.
It doesn't modify the input files but create new files instead.
 
Update the User configuration below for your usage.
"""
 
from xlrd import open_workbook
from xlutils.copy import copy
import urllib2
import ast
import pickle
import signal
import sys
import os
 
# User configuration, should be updated
INPUT_EXCEL_DIR = './excels/'
OUTPUT_EXCEL_DIR = './expanded_urls_excels/'
 
# Program Configuration
VERSION = 'v2.0'
SOCKET_TIMEOUT = 30
DICT_PATH = 'urls.pkl'
 
# Functions
def load_already_known_urls():
    """
Load urls that were saved during previous passes.
 
Return:
a dict of urls with key is the shortened url and value
the expanded url
"""
    urls = dict()
    print 'Try to load list of already known URL from '+DICT_PATH+'.'
    try:
        urls_file = open(DICT_PATH, 'rb')
        urls = pickle.load(urls_file)
        urls_file.close()
        print 'Found '+str(len(urls.keys()))+' urls.'
    except IOError, error:
        print error
        print 'The '+DICT_PATH+' file doen\\'t exists?'
        print 'It is normal the first start.'
    return urls
 
def save_url_list(urls):
    """
Save the found urls in a pickle file
"""
    print 'Save urls in '+DICT_PATH+'.'
    try:
        urls_file = open(DICT_PATH, 'wb')
        pickle.dump(urls, urls_file)
        urls_file.close()
    except IOError, error:
        print error
        print 'Couldn\\'t save url list for future usage!'
 
def signal_handler():
    """
Catch the + keyboard keys for saving results before quitting
"""
    print 'You pressed Ctrl+C!'
    save_url_list(urls_dict)
    sys.exit(0)
 
# -------------------------
# ----- Program Start -----
# -------------------------
print 'Welcome in url_expander.py '+VERSION
print 'Coded by Thomas Bores'
 
# Load already known urls
urls_dict = load_already_known_urls()
 
# Catch CTRL+C
signal.signal(signal.SIGINT, signal_handler)
 
# Check if INPUT_EXCEL_DIR exists
if os.path.exists(INPUT_EXCEL_DIR) == False:
    os.makedirs(INPUT_EXCEL_DIR)
# Check if OUTPUT_EXCEL_DIR exists
if os.path.exists(OUTPUT_EXCEL_DIR) == False:
    os.makedirs(OUTPUT_EXCEL_DIR)
 
# Open all exels files in INPUT_EXCEL_DIR and parse them
for f_xls in os.listdir(INPUT_EXCEL_DIR):
    if f_xls.endswith('.xls'):
        try:
            rb = open_workbook(INPUT_EXCEL_DIR+f_xls,
                               formatting_info=True)
            r_sheet = rb.sheet_by_index(0)
 
            wb = copy(rb)
            ws = wb.get_sheet(0)
 
            for c_row in range(r_sheet.nrows):
                content = r_sheet.cell(c_row, 3).value
                if 'http://' in content:
                    try:
                        print '--------------------'
                        print 'Find short url at row '+str(c_row)
                        pos1 = content.find('http://')
                        sub1 = content[pos1:]
                        pos2 = len(sub1)
 
                        if ' ' in sub1:
                            pos2 = sub1.find(' ')
 
                        url = sub1[:pos2]
                        print 'short url = \\"'+url+'\\"'
 
                        # Get real url
                        real_url = url
                        if url in urls_dict:
                            # Check if we already have it
                            print 'URL already in dict :)'
                            real_url = urls_dict[url]
                        else:
                            # Otherwise expand it with online expandurl service
                            print """URL is unknown :(,
we connect to expandurl service"""
                            try:
                                res = urllib2.urlopen(
                                            'http://expandurl.me/expand?url='+\\
                                            url,
                                            timeout=SOCKET_TIMEOUT).read()
                                res_as_dict = ast.literal_eval(res)
                                real_url = res_as_dict['end_url']
                                urls_dict[url] = real_url
                            except IOError, error:
                                print error
                                print "Timeout error"
                        print 'real url = \\"'+real_url+'\\"'
                        new_content = content.replace(url, real_url)
                        ws.write(c_row, 3, new_content)
 
                    except UnicodeEncodeError, error:
                        print error
                        print 'Cannot read content of row '+str(c_row)+\\
                              ' in file '+f_xls
 
            wb.save(OUTPUT_EXCEL_DIR+'expanded_url_'+f_xls)
        except IOError, error:
            print error
            print "Cannot read excel file "+f_xls
 
save_url_list(urls_dict)

Gravatar de Thomas Bores
Original post of Thomas Bores.Votez pour ce billet sur Planet Libre.

Tuxicoman : Dossier partagé entre utilisateurs sous Linux

mercredi 12 mars 2014 à 22:21

La problématique du jour est de faire un répertoire partagé entre les utilisateurs d’un même ordinateur sous linux.

Permissions Unix, la mauvaise solution

Les permissions Unix sont très performants pour restreindre les accès mais rendent la création d’un répertoire partagé impossible en pratique.

La solution classique serait de créer un groupe qui regroupe les utilisateurs et de faire en sorte que tous les fichiers partagés appartiennent à ce groupe. Ca fonctionne en théorie, mais dans la pratique, les utilisateurs créent/modifient/copient  des fichiers sans vouloir mettre à jour les permission groupes. Et seul le propriétaire du fichier peut modifier la permission de groupe du fichier, ce qui rend la chose ingérable.

Le SGID est également une fausse bonne idée pour propager les droits aux fichiers créés car il ne se propage pas aux fichiers copiés par l’utilisateur vers le dossier partagé.

ACL

La solution élégante et performante passe par les ACL ou Access Control List. Elle permet un contrôle bien plus fin et explicite.

Pour avoir accès aux droits ACL vous devez avoir ajouté l’option à votre /etc/fstab .
Ex :

/dev/hda6 /home ext3 options1,option2,option3,acl 0 0

Une fois fait, remontez le point de montage.

# mount -o remount,acl /home

Assignation des droits ACL

On crée un dossier en root /home/dossier_partage. Personne peut y accéder à part root. Jusqu’ici rien de spécial.

# cd /home
# mkdir dossier_partage
# chmod 770 dossier_partage

On ajoute des droits étendus pour que les utilisateurs alice et bob puisse tout faire dans ce dossier.

# setfacl -m u:alice:rwX dossier_partage
# setfacl -m u:bob:rwX dossier_partage

On ajoute des droits étendus pour que les fichiers/dossiers créés dans ce dossier aient par défaut les mêmes droits étendus.

# setfacl -m d:u:alice:rwX dossier_partage
# setfacl -m d:u:bob:rwX dossier_partage

On peut vérifier les droits finaux ainsi :

$ getfacl dossier_partage/

# file: dossier_partage/
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:rwx
group::rwx
mask::rwx
other::—
default:user::rwx
default:user:alice:rwx
default:user:bob:rwx
default:group::rwx
default:mask::rwx
default:other::—

Astuce sécurité

Par défaut, le /home/user des utilisateurs n’est pas privé sous Debian ! Si bien que Alice peut lire les fichier dans /home/bob .

Je vous recommande la lecture de ce document sur comment sécuriser Debian, surtout ces 2 points

Le plus important : Pour tous vos utilisateurs existants, assurez que le dossier home bloque bien l’accès aux autres utilisateurs :

# chmod 750 /home/bob

Ensuite, vous pouvez faire en sorte que soit créé automatiquement comme ça quand vous créez un utilisateur:

# dpkg-reconfigure adduser

et choississez Non

Vous pouvez également faire en sorte que les utilisateurs créént par défaut des fichiers que seuls eux peuvent voir :

# echo session optional pam_umask.so umask=027 >> /etc/pam.d/common-session

Dans /etc/login.defs, changez la valeur à UMASK 027

Pour vérifier les droits de l’utilisateur courant :

$ umask

Related Posts:

Gravatar de Tuxicoman
Original post of Tuxicoman.Votez pour ce billet sur Planet Libre.

Xavier Chotard : Firefox Australis Windows VS Kubuntu

mercredi 12 mars 2014 à 21:19

Si vous souhaitez tester la nouvelle interface de Firefox, Australis, vous pouvez télécharger une version nightly sur le ftp mozilla. Pour Kubuntu j'ai pris la version firefox-30.0a1.en-US.linux-x86_64.tar.bz2 et pour Windows la firefox-30.0a1.en-US.win64-x86_64.zip. Voici un aperçu sur les deux systèmes.

Kubuntu

Je dois dire que je trouve l'interface plutôt bien intégrée à KDE, très flatteuse, un renouveau très appréciable ;)

Windows

Là aussi c'est plutôt joli, mais j'avoue avoir une préférence pour la version Linux...

Gravatar de Xavier Chotard
Original post of Xavier Chotard.Votez pour ce billet sur Planet Libre.

La vache libre : Optimiser ses documents PDF avec Shrinkpdf

mercredi 12 mars 2014 à 20:00

Si vous possédez pas mal de fichiers pdf et que vous commencez à manquer de place sur un support externe, ou que vous avez envie de les exporter sur une plate-forme de stockage en ligne, une petite cure d’amaigrissement peut être utile. Shrinkpdf est un petit script sympathique signé Alfred Klomp, qui va vous permettre d’optimiser vos documents PDF et vous faire ainsi gagner quelques précieux Mo d’espace disque. Concrètement et pour vous la faire courte, Shrinkpdf utilise simplement Ghostscript afin de réduire la résolution des images à 72 dpi.

Comme vous pouvez le voir sur la capture ci-dessous, le résultat est assez impressionnant et nous passons d’un document pesant 21.7 Mo,  à un document optimisé de seulement 2,6 Mo après traitement. Alors certes il y a bien une perte de qualité (le contraire serait miraculeux), mais celle-ci ne se fait pas trop sentir à la lecture.
C’est vraiment un script très sympa, qui peut potentiellement vous rendre pas mal de services. Si ça vous tente et que vous avez envie de l’essayer, rien de plus facile. Il va falloir commencer par installer Ghostscript, qui est disponible dans la plupart des dépôts officiel de vos distributions GNU/Linux.

Installer Ghostscript sur Debian, Ubuntu et dérivés :

sudo apt-get install ghostscript

Sur Fedora et dérivés :

su
yum install ghostscript

Et sur Archlinux, Manjaro et dérivés :

su
pacman -Sy ghostscript

Une fois que c’est fait il va falloir télécharger le script et lui attribuer les droits d’exécution.

Entrez ceci dans votre terminal :

cd
wget http://www.alfredklomp.com/programming/shrinkpdf/shrinkpdf.sh
chmod +x shrinkpdf.sh

Vous voilà prêts à tâter du PDF et à leur offrir un petit régime maison. Pour optimiser un document il suffit simplement de lancer le script, suivi du nom du document concerné et du nom de sa copie:

Exemple :

./shrinkpdf.sh nom-du-fichier-original nom-du-fichier-optimisé.pdf

Sympa non ?!!

Amusez-vous bien.

source

Gravatar de La vache libre
Original post of La vache libre.Votez pour ce billet sur Planet Libre.

Framablog : Le web a 25 ans ! Tim Berners-Lee en appelle à une charte de l'Internet

mercredi 12 mars 2014 à 15:57

« Le 12 mars 1989, Tim Berners-Lee propose un projet pour en finir avec certaines problématiques rencontrées lors du partage des informations au CERN (Centre européen pour la recherche nucléaire). Sa proposition table sur la mise en place d’un système distribué s’appuyant largement sur les liens hypertexte. Comme on le sait, le principe a rencontré un succès tel qu’il a été généralisé les années suivantes pour toute sorte d’informations publiques. Le web était né. » (source PC Inpact)

Le problème c’est qu’envisagé au départ comme un bien commun à tous, il a subi depuis de nombreuses attaques de ce qu’on pourrait appeler « l’État/marché »…

Remarque : Ne pas confondre web et internet (le premier n’étant qu’une sous-partie du second).


Tim Berners-Lee


Une Magna Carta en ligne : Berners-Lee en appelle à une déclaration des droits pour le web

Jemima Kiss - 12 mars 2014 - The Guardian
(Traduction : Penguin, Jean-Marc Gailis, Juliette, diab, Achille, Diin, goofy, lamessen, Kcchouette, Mooshka)

An online Magna Carta: Berners-Lee calls for bill of rights for web

L’inventeur du web nous met en garde sur le fait que la neutralité subit des attaques soutenues des gouvernements et des entreprises.

L’inventeur du World Wide Web croit qu’une « Magna Carta » en ligne à l’échelle mondiale est nécessaire afin de protéger et d’ancrer l’indépendance du moyen de communication qu’il a créé et les droits de ses utilisateurs.

Sir Tim Berners-Lee a déclaré au Guardian que le web a fait l’objet d’attaques croissantes de la part des gouvernements et d’influentes sociétés, et que de nouvelles règles s’imposaient pour protéger « l’ouverture et la neutralité » du système.

Parlant exactement 25 ans après qu’il a écrit la première ébauche de la première proposition de ce qui allait devenir le World Wide Web, l’informaticien a déclaré : « Nous avons besoin d’une constitution mondiale – une déclaration des droits ».

L’idée d’une Grande Charte de Berners-Lee s’inscrit dans le cadre d’une initiative appelée Le web que nous voulons, nous invitant à créer un projet de lois numériques dans chaque pays – principes qu’il espère soutenus par des institutions publiques, des fonctionnaires gouvernementaux et des entreprises.

« Sauf à avoir un Internet libre et neutre sur lequel nous pouvons nous appuyer sans nous soucier de ce qui se passe en coulisses, nous ne pouvons pas avoir un gouvernement ouvert, une bonne démocratie, un bon système de santé, des communautés reliées entre elles et une diversité culturelle. Ce n’est pas naïf de croire que l’on peut avoir cela, mais c’est naïf de penser que l’on peut l’obtenir en restant les bras croisés. »

Berners-Lee a été un critique virulent de la surveillance des citoyens américains et anglais à la suite des révélations faites par le lanceur d’alerte de la NSA Edward Snowden. Compte tenu de ce qui a vu le jour, dit-il, les gens sont à la recherche d’une profonde révision dans la façon dont les services de sécurité ont été gérés.

Ses opinions font également écho dans l’industrie de la technologie, où il est particulièrement en colère sur les efforts fournis par la NSA et le GCHQ anglais pour saper les outils de sécurité et de cryptage – ce que beaucoup d’experts de sécurité affirment comme étant contre-productif et compromettant vis-à-vis de la sécurité de chacun.

Les principes de la vie privée, liberté d’expression et l’anonymat responsable seront étudiés dans cette Grande Charte. « Ces problèmes nous ont pris par surprise » a déclaré Berners-lee. « Nos droits sont bafoués de plus en plus souvent de tous les côtés et le danger est que nous nous y habituons. Je tiens donc à utiliser ce 25e anniversaire pour nous inviter à mettre la main à la pâte afin de reprendre la main et définir le web que nous voulons pour les 25 prochaines années. »

La proposition pour la constitution du web devrait aussi examiner l’impact des lois sur le copyright et les problèmes socio-culturels en rapport avec les éthiques de la technologie.

Alors que la régulation régionale et les sensibilités culturelles du web peuvent varier, Berners-Lee affirme croire en un document partagé sur les principes que pourrait apporter une norme internationale sur les valeurs d’un web ouvert.

Il demeure optimiste sur le le fait que cette campagne Le web que nous voulons puisse atteindre le grand public, malgré son manque apparent de prise de conscience dans l’affaire Snowden.

« Je ne dirais pas que les gens au Royaume-Uni sont indifférents. Je dirais qu’ils ont plus confiance en leur gouvernement que dans d’autres pays. Ils optent pour l’attitude : Comme nous avons voté pour eux, laissons les agir et faire leurs preuves. »

« Mais nous avons besoin que nos avocats et nos politiciens comprennent la programmation, comprennent ce qui peut être fait avec un ordinateur. Nous avons également besoin de revoir une grande partie de la législation, comme ces lois sur le copyright qui mettent les gens en prison pour protéger les producteurs de films. Il s’agit également de préserver et protéger l’expression des individus et la démocratie quotidienne dont nous avons besoin pour gérer le pays », poursuit-il.

Berners-Lee se prononce fermement en faveur du changement de l’élément à la fois clé et controversé de la gouvernance d’Internet qui supprimerait une petite, mais symbolique, partie du contrôle américain. Les États-Unis s’agrippent au contrat IANA, qui contrôle la base de données principale de tous les noms de domaines, mais ont fait face à une pression de plus en plus importante à la suite de l’affaire Snowden.

Il explique: « Notre demande du retrait du lien explicite menant vers la chambre du commerce des États-Unis est en souffrance depuis longtemps. Les États-Unis ne peuvent pas avoir une place prépondérante dans quelque chose qui n’est pas national. Il y a grand élan vers une séparation et une indépendance même si les États-Unis conservent une approche qui maintient les gouvernements et les entreprises à l’écart. »

Berners-Lee réitère aussi son inquiétude quant au fait que le web pourrait être balkanisé par des pays et des organisations qui morcelleraient l’espace numérique pour travailler selon leurs propres règles, qu’il s’agisse de censure, de régulation ou de commerce.

Nous avons tous un rôle à jouer dans ce futur, dit-il en citant les récents mouvements de résistance aux propositions de régulation du droit du copyright.

Il dit : « Le point-clé c’est d’amener les gens à se battre pour le web, de les amener à voir les dommages qui seraient causés par un web fracturé. Comme tout système humain, le web a besoin d’une régulation et bien-sûr que nous avons besoin de lois nationales, mais nous ne devons pas transformer le réseau en une série de cloisonnements nationaux. »

Berners-Lee fit également une apparition lors des Jeux Olympiques de Londres en 2012, en écrivant les mots “this is for everyone” (NdT : « Ceci est pour tout le monde ») sur un ordinateur au centre du stade. Il est demeuré fermement attaché au principe d’ouverture, d’inclusion et de démocratie depuis son invention du web en 1989, en choisissant de ne pas commercialiser son modèle. Il rejette l’idée qu’un contrôle gouvernemental ou commercial sur un moyen de communication aussi puissant soit inévitable, « Tant qu’ils ne m’auront pas ôté les mains du clavier, je continuerai à défendre cela. »

Le créateur du web accessible à tous

Ayant grandi dans le sud-ouest de Londres, Tim Berners-Lee était un fervent ferrovipathe, ce qui l’a amené à s’intéresser au modèle des chemins de fer puis à l’électronique.

Cela dit, les ordinateurs étaient déjà un concept familier dans la famille – ses deux parents ayant travaillé à la création du premier ordinateur commercialisé du monde, le Ferranti Mk1.

Berners-Lee sortit major de sa promotion en physique à Oxford et a ensuite travaillé à divers postes d’ingénieur. Mais ce fut au CERN, l’Organisation européenne pour la recherche nucléaire à Genève, qu’il prit part aux projets qui mèneront à la création du world wide web.

Son but était de permettre aux chercheurs du monde entier de partager des documents et ses premières propositions furent jugées « vagues mais intéressantes » par un directeur au CERN.

Il a combiné des technologies existantes telles que l’Internet et l’hypertexte pour produire un immense système interconnecté de stockage de documents. Berners-Lee l’appela le world wide web (NdT : la toile d’araignée mondiale), bien que ses collaborateurs francophones trouvaient cela difficile à prononcer.

Le web a d’abord été ouvert aux nouveaux utilisateurs en 1991. puis, en 1992, le premier navigateur a été créé pour parcourir et sélectionner les millions de documents déjà existants.

Bien que le web ait vu la création et la perte de fortunes innombrables, Berners-Lee et son équipe se sont assurés qu’il était libre d’utilisation pour tous.

Berners-Lee travaille maintenant, par le biais de diverses organisations, à s’assurer que le web soit accessible à tous et que le concept de neutralité du net soit respecté par les gouvernements et les entreprises.

Crédit photo : Wikimédia Commons

Gravatar de Framablog
Original post of Framablog.Votez pour ce billet sur Planet Libre.

I'm richer than you! infinity loop