All Stars Net Super Heros

Ce wiki a été archivé en 2018.

Le nouveau wiki se trouve à: ressources.labomedia.org

Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia.

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

Dans une tentative de soutien de La Quadrature du Net nous avons écrit un petit script qui tweete toutes les 3,14 heures l'un des 4992 Super Héros du Net.

En effet, quand on fait un don ici, on accède à une interface qui nous permet de personnaliser un Super-Héros en choisissant parmi 24 têtes, 13 corps et 16 jambes, soit 4992 possibilités.

Le script ci-dessous, écrit pour le module Python de Processing, permet de récupérer chacun de ces éléments et de reconstituer tous les Super Héros.

# La fonction setup() est propre à Processing.
# Elle s'execute en premier et une seule fois.

def setup():

    # On crée une image transparante de 1 pixel de côté qui sera utilisée
    # pour représenter l'abscence de choix de tête, de torse et de jambes
    img_vide = createImage(1, 1, ARGB)
    img_vide.pixels[0] = color(0, 0)

    # On crée des listes qui contiendront les images des têtes, torse et jambes
    # et on place l'image vide crée juste avant comme premier élément.
    global liste_torses, liste_tetes, liste_jambes
    liste_tetes = [img_vide]
    liste_torses = [img_vide]
    liste_jambes = [img_vide]

    # On lance le téléchargement de toutes les images nécessaires. 
    telechargement_images()

    # On fabrique les 1881 Super-Héros avec les images téléchargées.
    usine_super_heros()


def telechargement_images():

    # Sachant que chaque image est atteignable par une URL du type
    # http://soutien.laquadrature.net/images/bonus/head_01.png

    # On définit l'URL du dossier où sont situées les images.
    url = "http://soutien.laquadrature.net/images/bonus/"

    # On télécharge l'image du Super-Héros tout nu qui est placé au fond 
    # de chaque image et qui sert de base à tous les autres.
    global base
    base = loadImage(url + "base.png")

    # On télécharge les 24 têtes, les 13 torses et les 16 jambes.
    choix_image(url, "head_", liste_tetes, 24)
    choix_image(url, "torso_", liste_torses, 13)
    choix_image(url, "legs_", liste_jambes, 16)


def choix_image(url, nom, liste, nb_image):

    # Pour chaque nombre entre 1 et nb_image (0 est déjà occupé par img_vide),
    for i in range(1, nb_image):
        
        # on définit un numéro toujours composé de 2 chiffres. Ex: 05 pour 5,
        numero = str(i).zfill(2)
        # on récupère l'image en recomposant l'URL,
        image_recuperee = loadImage(url + nom + numero + ".png")
        # et on ajoute cette image dans la liste correspondante.
        liste.append(image_recuperee)


def usine_super_heros():

    # Sachant que toutes images récupérées ont la même taille (214x383)
    # et qu'elles sont des .png transparents dont le contenu trouve sa place
    # quand les images sont parfaitement supperposées .

    # On définit une variable qui va compter les 1881 Super-Héros.
    compteur = 0

    # Pour toutes les images de têtes,
    for tete in liste_tetes:

        # pour toutes les images de torses,
        for torse in liste_torses:

            # et pour toutes les images de jambes,
            for jambe in liste_jambes:

              # on crée un élément graphique de 214x383,
                super_hero = createGraphics(214, 383)
                # on démarre le dessin de l'élément graphique,
                super_hero.beginDraw()
                # on place un fond blanc,
                super_hero.background(255)
                # on place le Super-Héros tout nu aux coordonées 0, 0
                super_hero.image(base, 0, 0)
                # on place l'image des jambes en 0, 0
                super_hero.image(jambe, 0, 0)
                # on place l'image du torse en 0, 0
                super_hero.image(torse, 0, 0)
                # on place l'image de la tête en 0, 0
                super_hero.image(tete, 0, 0)
                # on clos le dessin de l'élément graphique,
                super_hero.endDraw()
                # on sauvegarde notre Super-Héros du Net dans le dossier data
                super_hero.save("data/super_heros-{0}.png".format(compteur))
                # et on incrémente le compteur de 1 avant de passer 
                # au Super-Héros suivant
                compteur += 1

Ensuite, ce script se charge de poster une image toutes les 3,14 heures en utilisant la lib Twython et en s'appuyant sur un fichier texte afin d'éviter les doublons.

# -*- coding: utf8 -*-

# Ce script permet d'envoyer un tweet avec une image.
# Il récupère dans une liste le numéro de l'image a envoyer,
# et enregistre le nombre de tweet déjà posté 
# pour pouvoir changer d'image à la prochaine exécution

import os
from twython import Twython
from time import sleep


# Clef d'authentification à obtenir sur https://dev.twitter.com
APP_KEY = "votre petite cléclé"
APP_SECRET = "une autre petit cléclé"
OAUTH_TOKEN = "encore une petite cléclé"
OAUTH_TOKEN_SECRET = "et encore une autre petite cléclé"

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

ordre = []
combien_deja_poste = 0
chemin_dossier = os.path.dirname(os.path.realpath(__file__))+"/"

def envoie_moi_donc_un_tweet_avec_une_image_de_Super_Heros_du_Net():

    # Récupère l'ordre des images à poster
    with open (chemin_dossier+"ordre.txt", 'r') as contenu:

            ordre = contenu.readline().rstrip('\n').split(",")

    # Récupère le nombre d'images déjà postées
    with open (chemin_dossier+"deja_poste.txt", 'r') as contenu:

        combien_deja_poste = int(contenu.readline().rstrip('\n\r'))

    # Récupère le numéro de l'image
    numero = int(ordre[combien_deja_poste])

    # Construit le chemin vers cette image
    chemin_image = chemin_dossier+"AllStar/SuperHeros-{0}.png".format(nume$

    # Charge l'image
    image = open(chemin_image, 'rb')

    # Forme le texte du tweet
    texte = ("Voici le Super-Héros du Net n°{0}\n"
             "Si ce n'est pas déjà fait, aide-le, lui et ses 4991 amis\n"
             "soutien.laquadrature.net").format(numero+1)

    # Envoie le tweet composé d'un texte et d'une image
    twitter.update_status_with_media(status=texte, media=image)

    # Met à jour le nombre d'images déjà postées
    with open (chemin_dossier+"deja_poste.txt", 'w') as contenu:

        contenu.write(str(combien_deja_poste + 1))

while True:

    envoie_moi_donc_un_tweet_avec_une_image_de_Super_Heros_du_Net()
    # toutes les 3,14 heures soit toutes les 11 304 secondes    
    sleep(11304)