Différences entre les versions de « Utilisateur:Zoe.vds »

De {}
Aller à la navigation Aller à la recherche
 
(68 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
=@Poete_nrv: présentation du projet=
 +
 +
[[Fichier:Poete nrv presentation.png]]
 +
 +
[[Fichier:Poete nrv 2.png]]
 +
 +
[[Fichier:Poete nrv 3.png]]
 +
 +
 +
 +
=Writing Bot=
 +
 +
===@poete_nrv ===
 +
https://twitter.com/poete_nrv
 +
 +
==30.04==
 +
 +
<syntaxhighlight lang="python">
 +
#!python
 +
# -*- coding: utf-8 -*-
 +
 +
import mechanize
 +
import lxml.html as parser
 +
import cssselect
 +
import random
 +
import ssl
 +
import time
 +
import datetime
 +
from acces_twi import *
 +
import tweepy
 +
 +
def getHtmlTree(url):
 +
    data = br.open(url, timeout=10)
 +
    source = data.read()
 +
    tree = parser.fromstring(source)
 +
    return tree
 +
 +
def getRandomLink(url, cssselector, avoid):
 +
    tree = getHtmlTree(url)
 +
 +
    for selector in cssselect.parse(cssselector):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        links = tree.xpath(xpath_selector)
 +
    #Supprimer les avoid = derniers éléments de la liste
 +
    del links[len(links)-avoid:]
 +
 +
    return random.choice(links).get('href')
 +
 +
 +
 +
file = open("execution.txt", "r")
 +
derniere_execution = file.read()
 +
 +
moment_2 = datetime.datetime.now()
 +
 +
 +
if derniere_execution != '':
 +
    moment_1 = datetime.datetime.strptime(derniere_execution, '%Y-%m-%d %H:%M:%S.%f')
 +
    delai = moment_2-moment_1
 +
    delai = delai.total_seconds()
 +
else:
 +
    delai = 0
 +
 +
 +
if delai > 3600 or delai == 0 :
 +
 +
    #Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
 +
    #Pour ça : besoin d'un navigateur : déclaration + informations.
 +
    ssl._create_default_https_context = ssl._create_unverified_context
 +
    br = mechanize.Browser()
 +
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 +
    br.set_handle_robots(False)
 +
 +
 +
    #Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.
 +
 +
    #Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.
 +
 +
    link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)
 +
 +
    print(link_lettre)
 +
 +
    link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
 +
        #enelever certains liens du tableau
 +
 +
    print(link_auteur)
 +
 +
    link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)
 +
 +
    print(link_poeme)
 +
 +
 +
    #Étape 4 : récupérer les poèmes
 +
 +
    poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)
 +
 +
    for selector in cssselect.parse('.poem__content'):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        poems = poemeTree.xpath(xpath_selector)
 +
 +
        #print(poems[0].text_content())
 +
 +
        #Permet de conserver les retours à la ligne
 +
        for br in poems[0].xpath("//br"):
 +
            br.tail = "\n" + br.tail if br.tail else "\n"
 +
 +
 +
        #print(poems[0].text_content())
 +
        #test ok
 +
 +
        #Étape 5 : décomposer le poème en lignes
 +
        vers = poems[0].text_content().split("\n")
 +
 +
        #Étape 6 : isoler le dernier caractère
 +
        vers_vers = random.choice(vers)
 +
        last_sign = vers_vers[-1:]
 +
 +
        #print(last_sign)
 +
 +
        #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions
 +
 +
        expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
 +
        expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
 +
        expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]
 +
 +
        vers_final = vers_vers
 +
 +
        if last_sign == "," :
 +
            vers_final += random.choice(expr_virgule)
 +
            print(vers_final)
 +
 +
        elif last_sign == ":" :
 +
            vers_final += random.choice(expr_virgule)
 +
            print(vers_final)
 +
 +
        elif last_sign == ";":
 +
            vers_final += random.choice(expr_virgule)
 +
            print(vers_final)
 +
 +
        elif last_sign == ".":
 +
            vers_final += random.choice(expr_point)
 +
            print(vers_final)
 +
 +
        elif last_sign == "!":
 +
            vers_final += random.choice(expr_point)
 +
            print(vers_final)
 +
 +
        elif last_sign == "?":
 +
            vers_final += random.choice(expr_point)
 +
            print(vers_final)
 +
 +
        else:
 +
            vers_final += random.choice(expr_autre)
 +
            print(vers_final)
 +
 +
 +
 +
    file = open("execution.txt", "w")
 +
    file.write(moment_2.strftime('%Y-%m-%d %H:%M:%S.%f'))
 +
    file.close
 +
 +
    #Étape 8 : poster sur Twitter
 +
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 +
    auth.set_access_token(access_token, access_token_secret)
 +
 +
    api = tweepy.API(auth)
 +
 +
    api.update_status(status=vers_final)
 +
   
 +
</syntaxhighlight>
 +
<syntaxhighlight lang="python">
 +
#!python
 +
# -*- coding: utf-8 -*-
 +
 +
import mechanize
 +
import lxml.html as parser
 +
import cssselect
 +
import random
 +
import ssl
 +
import time
 +
import datetime
 +
 +
 +
def getHtmlTree(url):
 +
    data = br.open(url, timeout=10)
 +
    source = data.read()
 +
    tree = parser.fromstring(source)
 +
    return tree
 +
 +
def getRandomLink(url, cssselector, avoid):
 +
    tree = getHtmlTree(url)
 +
 +
    for selector in cssselect.parse(cssselector):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        links = tree.xpath(xpath_selector)
 +
    #Supprimer les avoid = derniers éléments de la liste
 +
    del links[len(links)-avoid:]
 +
 +
    return random.choice(links).get('href')
 +
 +
 +
 +
file = open("execution.txt", "r")
 +
derniere_execution = file.read()
 +
 +
moment_2 = datetime.datetime.now()
 +
 +
if derniere_execution != '':
 +
    moment_1 = datetime.datetime.strptime(derniere_execution, '%Y-%m-%d %H-%M-%S.%f')
 +
    delai = moment_1-moment_2
 +
else:
 +
    delai = 0
 +
   
 +
print(delai.total_seconds())
 +
 +
 +
if delai.total_seconds() > 3600 :
 +
 +
    #Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
 +
    #Pour ça : besoin d'un navigateur : déclaration + informations.
 +
    ssl._create_default_https_context = ssl._create_unverified_context
 +
    br = mechanize.Browser()
 +
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 +
    br.set_handle_robots(False)
 +
 +
 +
    #Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.
 +
 +
    #Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.
 +
 +
    link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)
 +
 +
    print(link_lettre)
 +
 +
    link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
 +
        #enelever certains liens du tableau
 +
 +
    print(link_auteur)
 +
 +
    link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)
 +
 +
    print(link_poeme)
 +
 +
 +
    #Étape 4 : récupérer les poèmes
 +
 +
    poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)
 +
 +
    for selector in cssselect.parse('.poem__content'):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        poems = poemeTree.xpath(xpath_selector)
 +
 +
        #print(poems[0].text_content())
 +
 +
        #Permet de conserver les retours à la ligne
 +
        for br in poems[0].xpath("//br"):
 +
            br.tail = "\n" + br.tail if br.tail else "\n"
 +
 +
 +
        #print(poems[0].text_content())
 +
        #test ok
 +
 +
        #Étape 5 : décomposer le poème en lignes
 +
        vers = poems[0].text_content().split("\n")
 +
 +
        #Étape 6 : isoler le dernier caractère
 +
        vers_vers = random.choice(vers)
 +
        last_sign = vers_vers[-1:]
 +
 +
        #print(last_sign)
 +
 +
        #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions
 +
 +
        expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
 +
        expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
 +
        expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]
 +
 +
        vers_final = vers_vers
 +
 +
        if last_sign == "," :
 +
            vers_final += random.choice(expr_virgule)
 +
            print(vers_final)
 +
 +
        elif last_sign == ":" :
 +
            vers_final += random.choice(expr_virgule)
 +
            print(vers_final)
 +
 +
        elif last_sign == ";":
 +
            vers_final += random.choice(expr_virgule)
 +
            print(vers_final)
 +
 +
        elif last_sign == ".":
 +
            vers_final += random.choice(expr_point)
 +
            print(vers_final)
 +
 +
        elif last_sign == "!":
 +
            vers_final += random.choice(expr_point)
 +
            print(vers_final)
 +
 +
        elif last_sign == "?":
 +
            vers_final += random.choice(expr_point)
 +
            print(vers_final)
 +
 +
        else:
 +
            vers_final += random.choice(expr_autre)
 +
            print(vers_final)
 +
 +
   
 +
 +
    file = open("execution.txt", "w")
 +
    file.write(moment_2)
 +
    file.close
 +
 +
    #Étape 8 : poster sur Twitter
 +
    from acces_twi import *
 +
    import tweepy
 +
 +
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 +
    auth.set_access_token(access_token, access_token_secret)
 +
 +
    api = tweepy.API(auth)
 +
 +
    api.update_status(status=vers_final)
 +
 +
</syntaxhighlight>
 +
 +
==23.04==
 +
 +
<syntaxhighlight lang="python">
 +
#!python
 +
# -*- coding: utf-8 -*-
 +
 +
import mechanize
 +
import lxml.html as parser
 +
import cssselect
 +
import random
 +
import ssl
 +
 +
#Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
 +
#Pour ça : besoin d'un navigateur : déclaration + informations.
 +
ssl._create_default_https_context = ssl._create_unverified_context
 +
br = mechanize.Browser()
 +
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 +
br.set_handle_robots(False)
 +
 +
 +
#Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.
 +
 +
def getHtmlTree(url):
 +
    data = br.open(url, timeout=10)
 +
    source = data.read()
 +
    tree = parser.fromstring(source)
 +
    return tree
 +
 +
def getRandomLink(url, cssselector, avoid):
 +
    tree = getHtmlTree(url)
 +
   
 +
    for selector in cssselect.parse(cssselector):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        links = tree.xpath(xpath_selector)
 +
    #Supprimer les avoid = derniers éléments de la liste
 +
    del links[len(links)-avoid:] 
 +
   
 +
    return random.choice(links).get('href')
 +
 +
#Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs. 
 +
 +
link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)
 +
 +
print(link_lettre)
 +
 +
link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
 +
#enelever certains liens du tableau
 +
 +
print(link_auteur)
 +
 +
link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)
 +
 +
print(link_poeme)
 +
 +
 +
#Étape 4 : récupérer les poèmes
 +
 +
poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)
 +
 +
for selector in cssselect.parse('.poem__content'):
 +
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
    poems = poemeTree.xpath(xpath_selector)
 +
   
 +
    #print(poems[0].text_content())
 +
 +
    #Permet de conserver les retours à la ligne
 +
    for br in poems[0].xpath("//br"):
 +
        br.tail = "\n" + br.tail if br.tail else "\n"
 +
 +
   
 +
    #print(poems[0].text_content())
 +
    #test ok
 +
   
 +
    #Étape 5 : décomposer le poème en lignes
 +
    vers = poems[0].text_content().split("\n") 
 +
   
 +
    #Étape 6 : isoler le dernier caractère
 +
    vers_vers = random.choice(vers).split(" ")
 +
    last_sign = vers_vers[-1:]
 +
   
 +
    #print(last_sign)
 +
   
 +
    #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions
 +
   
 +
    expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
 +
    expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
 +
    expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]
 +
   
 +
    if last_sign == "," :
 +
        vers_final = vers + random.choice(expr_virgule)
 +
        print(vers_final)
 +
   
 +
    elif last_sign == ":" :
 +
        vers_final = vers + random.choice(expr_virgule)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == ";":
 +
        vers_final = vers + random.choice(expr_virgule)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == ".":
 +
        vers_final = vers + random.choice(expr_point)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == "!":
 +
        vers_final = vers + random.choice(expr_point)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == "?":
 +
        vers_final = vers + random.choice(expr_point)
 +
        print(vers_final)
 +
       
 +
    else:
 +
        vers_final = vers + random.choice(expr_autre)
 +
        print(vers_final)
 +
   
 +
   
 +
   
 +
   
 +
    #vers_final = random.choice(vers)+random.choice(us_expressions)
 +
    #print(vers_final)
 +
 
 +
    '''
 +
    #Étape 8 : poster sur Twitter
 +
    from acces_twi import *
 +
    import tweepy
 +
 +
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 +
    auth.set_access_token(access_token, access_token_secret)
 +
 +
    api = tweepy.API(auth)
 +
 +
    api.update_status(status=vers_final)
 +
   
 +
    #Déclencher le programme à heure fixe : utiliser un fichier txt annexe où inscrire date et heure
 +
    #fonction pour ajouter du contenu à un fichier texte = write
 +
    #f = open('execution.txt', 'a')
 +
   
 +
    '''
 +
 +
 +
</syntaxhighlight>
 +
 +
==ALLER PLUS LOIN : UP (20.04)==
 +
 +
Derniers réglages à effectuer sur la ponctuation. Créer de nouvelles conditions et de nouveaux tableaux répertoriant les diverses expressions.
 +
 +
Étapes :
 +
*Après avoir récupéré un vers aléatoire, le programme divise le vers en suite de mots : utiliser la fonction split.
 +
*Poser ensuite une série de conditions sur le dernier caractère de la suite (utiliser longueur de la chaîne -1 pour cibler le dernier)
 +
*Remarque : en utilisant [:-1] pas besoin de décomposer le tout en mots puisque prend en compte la longueur de toute la chaîne de caractère!
 +
 +
Trois cas de figures sont possibles :
 +
*Le vers se termine par une virgule/un point-virgule/deux points
 +
*Le vers se termine par un point/un point d'exclamation/un point d'interrogation
 +
*Le vers ne se termine par une lettre de l'alphabet ou un autre signe de ponctuation (comme des guillemets)
 +
 +
<syntaxhighlight lang="python">
 +
#Étape 6 : isoler le dernier caractère
 +
    vers_vers = random.choice(vers).split(" ")
 +
    last_sign = vers_vers[-1:]
 +
   
 +
    #print(last_sign)
 +
   
 +
    #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions
 +
   
 +
    expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
 +
    expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
 +
    expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]
 +
   
 +
    if last_sign == "," :
 +
        vers_final = vers + random.choice(expr_virgule)
 +
        print(vers_final)
 +
   
 +
    elif last_sign == ":" :
 +
        vers_final = vers + random.choice(expr_virgule)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == ";":
 +
        vers_final = vers + random.choice(expr_virgule)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == ".":
 +
        vers_final = vers + random.choice(expr_point)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == "!":
 +
        vers_final = vers + random.choice(expr_point)
 +
        print(vers_final)
 +
       
 +
    elif last_sign == "?":
 +
        vers_final = vers + random.choice(expr_point)
 +
        print(vers_final)
 +
       
 +
    else:
 +
        vers_final = vers + random.choice(expr_autre)
 +
        print(vers_final)
 +
</syntaxhighlight>
 +
 +
Message d'erreur : TypeError: can only concatenate list (not "str") to list
 +
 +
==GÉRER L'EXÉCUTION DU PROGRAMME==
 +
 +
'''But''': travailler avec un fichier texte en parallèle, reprenant tous les moments où le programme a été exécuté.
 +
 +
Étape 1 : créer un fichier texte annexe.
 +
Étapes 2 : récupérer le moment d'exécution du programme.
 +
Étape 3 : inscrire ce moment dans le programme. (cf exemple)
 +
 +
Pour faire cela, utiliser la fonction write comme dans l'exemple ci-dessous :
 +
 +
<syntaxhighlight lang="python">
 +
# file-append.py
 +
f = open('helloworld.txt','a')
 +
f.write('\n' + 'hello world')
 +
f.close()
 +
</syntaxhighlight>
 +
 +
==ALLER PLUS LOIN (15.04)==
 +
 +
'''Proposition de modification du scénario du programme :'''
 +
*À la place d'ajouter "ta mère" le programme utilise une série d'expressions tirées du langage des ghettos américain.
 +
*Pour aller plus loin : créer une base données permettant au programme de remplacer certains usages français par des expressions "slang" (argot américain) - fonctionne si les éléments récupérés par le programme sont reconnus comme des chaînes de caractères (dés lors, utiliser des balises de conditions : si homme est contenu dans vers alors remplacer homme par dude en utilisant la fonction replace).
 +
 +
Série de sources pour les expressions langagières :
 +
*https://fr.babbel.com/fr/magazine/expressions-americaines-a-connaitre-absolument
 +
*https://www.maathiildee.com/expressions-insultes-et-interjections-mes-mots-danglais-fetiches/
 +
*http://www.peevish.co.uk/slang/
 +
 +
Le nombre d'expressions étant limité, je pense simplement créer un tableau les reprenant toutes, le programme en choisira une au hasard à ajouter au vers.
 +
 +
<syntaxhighlight lang="python">
 +
#Étape 6 : ajouter une expression US
 +
    us_expressions = ["y'all.", "yo","so keep your shit together.","shit happens!","mind blowing!","fair enough","try me",", damn it.",",dude",",bro","yassss.",",man",". What the hell!",",whatever","alright","that's right","you know","anyway","listen","oooh","aight","cuz","for sure","know what I'm sayin?","I'm easy","now piss off","shit","that's cool","awesome","yo", "wassup", "and this is dope", "for sure", "This is nuts!", "and that pisses me off", "yolo", "crumbs!", "awright!", "Blow it!", "By gum!",]
 +
   
 +
    vers_final = random.choice(vers)+random.choice(us_expressions)
 +
    print(vers_final)
 +
</syntaxhighlight>
 +
 +
'''Exemple de résultats''' :
 +
*Au teint pâle, aux yeux bleus, si pures et si belles for sure
 +
*Une tête sur le pavé yo
 +
*Qui me mit dans le feu me retirant de l'onde ? shit happens!
 +
*J'avais de grands yeux purs comme le clair des lunes ;shit
 +
*Un dimanche est dans mon coeur, that's right
 +
*D'autant ou plus vous me soyez cruelle.cuz
 +
 +
==POSTER SUR TWITTER==
 +
 +
<syntaxhighlight lang="python">
 +
    #Étape 6 : poster sur Twitter
 +
    from acces_twi import *
 +
    import tweepy
 +
 +
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 +
    auth.set_access_token(access_token, access_token_secret)
 +
 +
    api = tweepy.API(auth)
 +
    api.update_status(status=vers_final)
 +
</syntaxhighlight>
 +
 +
==DERNIÈRE VERSION DU PROGRAMME (2.04)==
 +
 +
Code modifié avec l'ajout du module ''del'' permettant de supprimer les éléments inutiles du tableau de liens à récupérer (ici en l'occurence les lettres X, Y et Z).
 +
 +
<syntaxhighlight lang="python">
 +
#!python
 +
# -*- coding: utf-8 -*-
 +
 +
import mechanize
 +
import lxml.html as parser
 +
import cssselect
 +
import random
 +
import ssl
 +
 +
#Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
 +
#Pour ça : besoin d'un navigateur : déclaration + informations.
 +
ssl._create_default_https_context = ssl._create_unverified_context
 +
br = mechanize.Browser()
 +
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 +
br.set_handle_robots(False)
 +
 +
 +
#Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.
 +
 +
def getHtmlTree(url):
 +
    data = br.open(url, timeout=10)
 +
    source = data.read()
 +
    tree = parser.fromstring(source)
 +
    return tree
 +
 +
def getRandomLink(url, cssselector, avoid):
 +
    tree = getHtmlTree(url)
 +
 +
    for selector in cssselect.parse(cssselector):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        links = tree.xpath(xpath_selector)
 +
 +
        #supprimer les "avoid" derniers éléments de la liste links
 +
        del links[len(links)-avoid:]
 +
       
 +
        return random.choice(links).get('href')
 +
 +
#Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs. 
 +
 +
link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)
 +
 +
print(link_lettre)
 +
 +
link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
 +
 +
print(link_auteur)
 +
 +
link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)
 +
 +
print(link_poeme)
 +
 +
 +
#Étape 4 : récupérer les poèmes
 +
 +
poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)
 +
 +
for selector in cssselect.parse('.poem__content'):
 +
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
    poems = poemeTree.xpath(xpath_selector)
 +
 +
    #print(poems[0].text_content())
 +
 +
    #Permet de conserver les retours à la ligne
 +
    for br in poems[0].xpath("//br"):
 +
        br.tail = "\n" + br.tail if br.tail else "\n"
 +
 +
    #print(poems[0].text_content())
 +
    #test ok
 +
 +
    #Étape 5 : décomposer le poème en lignes
 +
 +
    vers = poems[0].text_content().split("\n") 
 +
 +
    print(random.choice(vers)+", ta mère.")
 +
 +
 +
 +
 +
</syntaxhighlight>
 +
 +
==UP==
 +
 +
'''Objectif de cette semaine :'''
 +
*Retirer certains liens de la source à parser (lettres XYZ ne contenant pas de noms d'auteur)
 +
 +
'''Recherches :'''
 +
J’ai trouvé 3 opérateurs qui permettent de supprimer les éléments d’une liste : pop, del et remove. J’ai vite écarté remove qui s’intéresse à la valeur de l’élément et non à son indice comme le fait del ou pop. Mon but est donc d’enlever les 3 derniers liens de ma liste, du coup une tranche de ma liste. Je sais que l’opération del peut fonctionner avec une tranche, mais ça ne semble pas être le cas avec pop. Cette tranche peut s’exprimer comme ça : [23:] (je me suis basée sur l’idée qu’il y avait 26 lettres dans l’alphabet donc 26 liens). Il faudrait donc que j’ajoute del[23:] à mon code.
 +
 +
==CODE==
 +
 +
Le code fonctionne. Néanmoins quelques améliorations sont encore possibles :
 +
*Définir des rangs précis lorsque le programme choisi parmi les lettres de l'alphabet (absence d'auteurs pour les lettre X, Y et Z) >> à régler en posant une condition ?
 +
 +
<syntaxhighlight lang="python">
 +
#!python
 +
# -*- coding: utf-8 -*-
 +
 +
import mechanize
 +
import lxml.html as parser
 +
import cssselect
 +
import random
 +
import ssl
 +
 +
#Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
 +
#Pour ça : besoin d'un navigateur : déclaration + informations.
 +
ssl._create_default_https_context = ssl._create_unverified_context
 +
br = mechanize.Browser()
 +
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 +
br.set_handle_robots(False)
 +
 +
 +
#Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.
 +
 +
def getHtmlTree(url):
 +
    data = br.open(url, timeout=10)
 +
    source = data.read()
 +
    tree = parser.fromstring(source)
 +
    return tree
 +
 +
def getRandomLink(url, cssselector):
 +
    tree = getHtmlTree(url)
 +
   
 +
    for selector in cssselect.parse(cssselector):
 +
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
        links = tree.xpath(xpath_selector)
 +
        return random.choice(links).get('href')
 +
 +
#Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs. 
 +
 +
link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a')
 +
 +
print(link_lettre)
 +
 +
link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link')
 +
 +
print(link_auteur)
 +
 +
link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link')
 +
 +
print(link_poeme)
 +
 +
 +
#Étape 4 : récupérer les poèmes
 +
 +
poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)
 +
 +
for selector in cssselect.parse('.poem__content'):
 +
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
 +
    poems = poemeTree.xpath(xpath_selector)
 +
   
 +
    #print(poems[0].text_content())
 +
 +
    #Permet de conserver les retours à la ligne
 +
    for br in poems[0].xpath("//br"):
 +
        br.tail = "\n" + br.tail if br.tail else "\n"
 +
   
 +
    #print(poems[0].text_content())
 +
    #test ok
 +
   
 +
    #Étape 5 : décomposer le poème en lignes
 +
   
 +
    vers = poems[0].text_content().split("\n") 
 +
 +
    print(random.choice(vers)+", ta mère.")
 +
</syntaxhighlight>
 +
 +
==SCENARIO @POETE_NRV==
 +
 +
*Le programme utilise une base de donnée (le site web : https://poesie.webnet.fr/lesgrandsclassiques/Authors) dans laquelle il pioche au hasard un vers de poème. Pour effectuer cette manipulation, il faut d'abord sélectionner une lettre de l'alphabet au hasard, puis un auteur, un poème et enfin un vers.
 +
*Il faut créer un programme permettant de scraper les données d'une page web et les exporter dans fichier. Source tutoriel : https://zestedesavoir.com/billets/2057/scraper-des-donnees-sur-une-page-web-en-python-avec-beautifulsoup-1/
 +
 +
*À partir de ce vers, le programme ajoute ",ta mère."
 +
*Le programme envoie le tweet sur Twitter. Un nouveau tweet est posté toutes les 30 minutes.
 +
 +
==ÉNONCÉS DE DIFFÉRENTS BOTS==
 +
 +
*Un bot sur Pingu qui tweet Noot Noot toutes les heures (le nombre de noot faisant référence à l'heure exacte?).
 +
 +
*Un bot qui tweet une série d'onomatopées dans diverses langues (cf. https://www.wikiwand.com/fr/Liste_d%27onomatopées_dans_différentes_langues). Le bot ferait référence à la chanson What Does The Fox Say? (https://www.youtube.com/watch?v=jofNR_WkoCE) et proposerait diverses combinaisons à partir de la liste d'onomatopées. Le bot posterait toutes les 20 minutes.
 +
 +
*Un bot qui terminerait ses phrases par "ta mère". Les sources textuelles seraient des poèmes de Victor Hugo, Baudelaire, Verlaine, Rimbaud et autres poètes romantiques. Ce qui donnerait des combinaisons comme : "demain dés l'aube ta mère" ou "l'éternité ta mère" > @poete_nrv
 +
*''Autre version possible : reprendre les grands titres de l'actualité et les ponctuer par "ta mère"''
 +
 +
*Un bot qui tweet une image représentant des fleurs (ou un bouquet de fleur) ainsi qu'un texte se rapprochant d'une insulte (ex. boudin, avorton, fumier,...). Le nom du bot serait "dites le avec des fleurs". Les images pourraient être trouvées à partir d'une bibliothèque (google image? à partir de la recherche "bouquet de fleurs") et les textes proviendraient d'une page Wikipédia recensant des insultes françaises. Le bot posterait toutes les heures.
 +
 
=Poésie Binaire=  
 
=Poésie Binaire=  
  
==Code binaire==  
+
==Poème en code binaire==  
 +
 
 +
<pre>
 
1011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001011110011110100110100011011011100101110111011101000100000110110011001010100000110001111011111100100010100011001010101001010111000011011010010110010111100001100101111010011010011110100110100111011111101110010110000011011011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001111000011110101111010001000001100001010000011011001100001010000011011001101001110011111011101100101010110000011011000011010011111001011110011111010001000001110101110111001000001110011110010111000111110010110010111101000101110
 
1011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001011110011110100110100011011011100101110111011101000100000110110011001010100000110001111011111100100010100011001010101001010111000011011010010110010111100001100101111010011010011110100110100111011111101110010110000011011011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001111000011110101111010001000001100001010000011011001100001010000011011001101001110011111011101100101010110000011011000011010011111001011110011111010001000001110101110111001000001110011110010111000111110010110010111101000101110
 +
</pre>
  
----
+
==Traduction==
 
 
Traduction :
 
  
 +
<pre>
 
Zeros et uns
 
Zeros et uns
 
Rythment le cod(e).
 
Rythment le cod(e).
Ligne 14 : Ligne 793 :
 
Saut a la ligne,
 
Saut a la ligne,
 
C'est un secret.
 
C'est un secret.
 +
</pre>
  
==Programme==
+
=Manipulations du poème=
  
Le programme demande à l’utilisateur: « Je peux te confier un secret? (oui ou non) »
+
==Création d'un programme==
  
Si l’utilisateur répond non,
+
<syntaxhighlight lang="python">
Le programme entre dans une boucle de répétition de la question.  
+
Le programme permute les mots de moins de 3 lettres, et les mots de plus de 5 lettres.
 +
</syntaxhighlight>
  
Si l’utilisateur répond oui,
+
Résolution [http://curlybraces.be/wiki/ERG::Code-2019-2#Le_programme_de_Zo.C3.A9|ici]
Le programme lit le poème mot à mot pour chaque ligne, en isolant la lettre S, il fait une brève pause (0,5) à la fin de chaque ligne.  
 
  
ou
+
==Le code de Violette==
 
 
Le programme permute les mots de moins de 3 lettres, et les mots de plus de 5 lettres.
 
 
 
==Résolution==
 
  
 
Résolution du code de [[Utilisateur:Violette|Violette]]
 
Résolution du code de [[Utilisateur:Violette|Violette]]
Ligne 36 : Ligne 812 :
 
print ("Quel est ton nom?")
 
print ("Quel est ton nom?")
 
name = raw_input()
 
name = raw_input()
print (name+" est ton nom de poète.")
+
print (name+" est ton nom de poète.")  
 
 
#Etape 2 : le poème
 
  
 
with open ('Poetry','r') as POEME:
 
with open ('Poetry','r') as POEME:
Ligne 49 : Ligne 823 :
 
print (y)
 
print (y)
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
==Dernier énoncé==
 +
 +
<syntaxhighlight lang="python">
 +
#!python
 +
# -*- coding: utf-8 -*-
 +
 +
#Définition des ≠ tableaux 
 +
   
 +
article = ["Les", "Le", "une", "un", "le", "L", "la"]
 +
nom = ["editions", "Canape", "mission", "roman", "larme", "code", "ORDINATEUR", "Circuits", "zero", "repetition", "saut", "ligne", "secret"]
 +
complement = ["grand", "transformiste", "vrai", "faux", "nomr", "blanc", "bien", "binaire", "claire", "Immenses"]
 +
verbe = ["avaient donne", "est", "est", "est", "rythment", "est"]
 +
   
 +
#random = module permettant de générer de l'aléatoire 
 +
#new_vers = nouveau tableau vide à remplir avec éléments article/nom/compl/verbe
 +
   
 +
from random import *
 +
       
 +
#Génération du programme dans une boucle de répétition selon le nb demandé par utilisateur
 +
 +
print("Combien de vers veux-tu générer?")
 +
nombre_lignes = int(raw_input())
 +
   
 +
for compteur in range (0, nombre_lignes):
 +
    new_article = choice(article)
 +
    new_nom = choice(nom)
 +
    new_complement = choice(complement)
 +
    new_verbe = choice(verbe)
 +
    print(new_article + " " + new_nom + " " + new_complement + " " + new_verbe)
 +
</syntaxhighlight>
 +
 +
==Shuffle.py==
 +
 +
<syntaxhighlight lang="python">
 +
with open ('Poetry','r') as POEME:
 +
poeme = POEME.read()
 +
lignes = poeme.splitlines()
 +
from random import * 
 +
shuffle(lignes)
 +
for lignes in lignes :
 +
    print(lignes)
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="python">
 +
Saut a la ligne,
 +
transformiste.
 +
m'avaient donne
 +
une mission :
 +
Repetition,
 +
C'est un secret.
 +
Cest nomr ou blanc
 +
Cest vrai ou faux
 +
Zeros et uns
 +
touts est tres claire
 +
un ou zero
 +
L ORDINATEUR
 +
larme amme bien
 +
Zeros et uns
 +
Les editions
 +
le code binaire
 +
Rythment le cod(e).
 +
un grand roman
 +
Circuits Immenses
 +
"Le Canape"
 +
 +
 +
touts est tres claire
 +
le code binaire
 +
un ou zero
 +
m'avaient donne
 +
transformiste.
 +
Zeros et uns
 +
larme amme bien
 +
Saut a la ligne,
 +
Cest vrai ou faux
 +
un grand roman
 +
"Le Canape"
 +
Les editions
 +
Cest nomr ou blanc
 +
Repetition,
 +
une mission :
 +
Zeros et uns
 +
Rythment le cod(e).
 +
C'est un secret.
 +
L ORDINATEUR
 +
Circuits Immenses
 +
</syntaxhighlight>
 +
 +
Manipulation trouvée via https://fiches-isn.readthedocs.io/fr/latest/random.html
 +
 +
=Édition=
 +
 +
<syntaxhighlight lang="html4strict">
 +
3 livrets : énoncé, résultat et code source.
 +
3 pages HTML + 3 feuilles de style.
 +
</syntaxhighlight>
 +
 +
Étapes de travail :
 +
 +
*travail sur des '''schémas''' ('''système''' de mise en page extensible)
 +
*mise en commun
 +
*mise en place

Version actuelle datée du 13 mai 2020 à 11:15

@Poete_nrv: présentation du projet

Poete nrv presentation.png

Poete nrv 2.png

Poete nrv 3.png


Writing Bot

@poete_nrv

https://twitter.com/poete_nrv

30.04

#!python
# -*- coding: utf-8 -*-

import mechanize
import lxml.html as parser
import cssselect
import random
import ssl
import time
import datetime
from acces_twi import *
import tweepy

def getHtmlTree(url):
    data = br.open(url, timeout=10)
    source = data.read()
    tree = parser.fromstring(source)
    return tree

def getRandomLink(url, cssselector, avoid):
    tree = getHtmlTree(url)

    for selector in cssselect.parse(cssselector):
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        links = tree.xpath(xpath_selector)
    #Supprimer les avoid = derniers éléments de la liste
    del links[len(links)-avoid:]

    return random.choice(links).get('href')



file = open("execution.txt", "r")
derniere_execution = file.read()

moment_2 = datetime.datetime.now()


if derniere_execution != '':
    moment_1 = datetime.datetime.strptime(derniere_execution, '%Y-%m-%d %H:%M:%S.%f')
    delai = moment_2-moment_1
    delai = delai.total_seconds()
else:
    delai = 0


if delai > 3600 or delai == 0 :

    #Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
    #Pour ça : besoin d'un navigateur : déclaration + informations.
    ssl._create_default_https_context = ssl._create_unverified_context
    br = mechanize.Browser()
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    br.set_handle_robots(False)


    #Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.

    #Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.

    link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)

    print(link_lettre)

    link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
        #enelever certains liens du tableau

    print(link_auteur)

    link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)

    print(link_poeme)


    #Étape 4 : récupérer les poèmes

    poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)

    for selector in cssselect.parse('.poem__content'):
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        poems = poemeTree.xpath(xpath_selector)

        #print(poems[0].text_content())

        #Permet de conserver les retours à la ligne
        for br in poems[0].xpath("//br"):
            br.tail = "\n" + br.tail if br.tail else "\n"


        #print(poems[0].text_content())
        #test ok

        #Étape 5 : décomposer le poème en lignes
        vers = poems[0].text_content().split("\n")

        #Étape 6 : isoler le dernier caractère
        vers_vers = random.choice(vers)
        last_sign = vers_vers[-1:]

        #print(last_sign)

        #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions

        expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
        expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
        expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]

        vers_final = vers_vers

        if last_sign == "," :
            vers_final += random.choice(expr_virgule)
            print(vers_final)

        elif last_sign == ":" :
            vers_final += random.choice(expr_virgule)
            print(vers_final)

        elif last_sign == ";":
            vers_final += random.choice(expr_virgule)
            print(vers_final)

        elif last_sign == ".":
            vers_final += random.choice(expr_point)
            print(vers_final)

        elif last_sign == "!":
            vers_final += random.choice(expr_point)
            print(vers_final)

        elif last_sign == "?":
            vers_final += random.choice(expr_point)
            print(vers_final)

        else:
            vers_final += random.choice(expr_autre)
            print(vers_final)



    file = open("execution.txt", "w")
    file.write(moment_2.strftime('%Y-%m-%d %H:%M:%S.%f'))
    file.close

    #Étape 8 : poster sur Twitter
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)

    api = tweepy.API(auth)

    api.update_status(status=vers_final)
#!python
# -*- coding: utf-8 -*-

import mechanize
import lxml.html as parser
import cssselect
import random
import ssl
import time
import datetime


def getHtmlTree(url):
    data = br.open(url, timeout=10)
    source = data.read()
    tree = parser.fromstring(source)
    return tree

def getRandomLink(url, cssselector, avoid):
    tree = getHtmlTree(url)

    for selector in cssselect.parse(cssselector):
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        links = tree.xpath(xpath_selector)
    #Supprimer les avoid = derniers éléments de la liste
    del links[len(links)-avoid:]

    return random.choice(links).get('href')



file = open("execution.txt", "r")
derniere_execution = file.read()

moment_2 = datetime.datetime.now()

if derniere_execution != '':
    moment_1 = datetime.datetime.strptime(derniere_execution, '%Y-%m-%d %H-%M-%S.%f')
    delai = moment_1-moment_2
else:
    delai = 0
    
print(delai.total_seconds())


if delai.total_seconds() > 3600 :

    #Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source.
    #Pour ça : besoin d'un navigateur : déclaration + informations.
    ssl._create_default_https_context = ssl._create_unverified_context
    br = mechanize.Browser()
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    br.set_handle_robots(False)


    #Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet.

    #Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.

    link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)

    print(link_lettre)

    link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
        #enelever certains liens du tableau

    print(link_auteur)

    link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)

    print(link_poeme)


    #Étape 4 : récupérer les poèmes

    poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme)

    for selector in cssselect.parse('.poem__content'):
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        poems = poemeTree.xpath(xpath_selector)

        #print(poems[0].text_content())

        #Permet de conserver les retours à la ligne
        for br in poems[0].xpath("//br"):
            br.tail = "\n" + br.tail if br.tail else "\n"


        #print(poems[0].text_content())
        #test ok

        #Étape 5 : décomposer le poème en lignes
        vers = poems[0].text_content().split("\n")

        #Étape 6 : isoler le dernier caractère
        vers_vers = random.choice(vers)
        last_sign = vers_vers[-1:]

        #print(last_sign)

        #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions

        expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
        expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
        expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]

        vers_final = vers_vers

        if last_sign == "," :
            vers_final += random.choice(expr_virgule)
            print(vers_final)

        elif last_sign == ":" :
            vers_final += random.choice(expr_virgule)
            print(vers_final)

        elif last_sign == ";":
            vers_final += random.choice(expr_virgule)
            print(vers_final)

        elif last_sign == ".":
            vers_final += random.choice(expr_point)
            print(vers_final)

        elif last_sign == "!":
            vers_final += random.choice(expr_point)
            print(vers_final)

        elif last_sign == "?":
            vers_final += random.choice(expr_point)
            print(vers_final)

        else:
            vers_final += random.choice(expr_autre)
            print(vers_final)

    

    file = open("execution.txt", "w")
    file.write(moment_2)
    file.close

    #Étape 8 : poster sur Twitter
    from acces_twi import *
    import tweepy

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)

    api = tweepy.API(auth)

    api.update_status(status=vers_final)

23.04

#!python
# -*- coding: utf-8 -*-

import mechanize
import lxml.html as parser
import cssselect
import random
import ssl

#Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source. 
#Pour ça : besoin d'un navigateur : déclaration + informations. 
ssl._create_default_https_context = ssl._create_unverified_context
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.set_handle_robots(False)


#Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet. 

def getHtmlTree(url):
    data = br.open(url, timeout=10)
    source = data.read()
    tree = parser.fromstring(source)
    return tree

def getRandomLink(url, cssselector, avoid): 
    tree = getHtmlTree(url) 
    
    for selector in cssselect.parse(cssselector): 
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        links = tree.xpath(xpath_selector)
    #Supprimer les avoid = derniers éléments de la liste
    del links[len(links)-avoid:]   
    
    return random.choice(links).get('href')

#Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.  

link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)

print(link_lettre)

link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
#enelever certains liens du tableau

print(link_auteur)

link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)

print(link_poeme)


#Étape 4 : récupérer les poèmes

poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme) 

for selector in cssselect.parse('.poem__content'):
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
    poems = poemeTree.xpath(xpath_selector)
    
    #print(poems[0].text_content())

    #Permet de conserver les retours à la ligne
    for br in poems[0].xpath("//br"):
        br.tail = "\n" + br.tail if br.tail else "\n"

    
    #print(poems[0].text_content())
    #test ok 
    
    #Étape 5 : décomposer le poème en lignes
    vers = poems[0].text_content().split("\n")  
    
    #Étape 6 : isoler le dernier caractère 
    vers_vers = random.choice(vers).split(" ")
    last_sign = vers_vers[-1:]
    
    #print(last_sign)
    
    #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions
    
    expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
    expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
    expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]
    
    if last_sign == "," :
        vers_final = vers + random.choice(expr_virgule)
        print(vers_final)
    
    elif last_sign == ":" :
        vers_final = vers + random.choice(expr_virgule)
        print(vers_final)
        
    elif last_sign == ";":
        vers_final = vers + random.choice(expr_virgule)
        print(vers_final)
        
    elif last_sign == ".":
        vers_final = vers + random.choice(expr_point)
        print(vers_final)
        
    elif last_sign == "!":
        vers_final = vers + random.choice(expr_point)
        print(vers_final)
        
    elif last_sign == "?":
        vers_final = vers + random.choice(expr_point)
        print(vers_final)
        
    else:
        vers_final = vers + random.choice(expr_autre)
        print(vers_final)
    
    
    
    
    #vers_final = random.choice(vers)+random.choice(us_expressions)
    #print(vers_final)
   
    '''
    #Étape 8 : poster sur Twitter 
    from acces_twi import *
    import tweepy

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    auth.set_access_token(access_token, access_token_secret)

    api = tweepy.API(auth)

    api.update_status(status=vers_final)
    
    #Déclencher le programme à heure fixe : utiliser un fichier txt annexe où inscrire date et heure 
    #fonction pour ajouter du contenu à un fichier texte = write 
    #f = open('execution.txt', 'a')
    
    '''

ALLER PLUS LOIN : UP (20.04)

Derniers réglages à effectuer sur la ponctuation. Créer de nouvelles conditions et de nouveaux tableaux répertoriant les diverses expressions.

Étapes :

  • Après avoir récupéré un vers aléatoire, le programme divise le vers en suite de mots : utiliser la fonction split.
  • Poser ensuite une série de conditions sur le dernier caractère de la suite (utiliser longueur de la chaîne -1 pour cibler le dernier)
  • Remarque : en utilisant [:-1] pas besoin de décomposer le tout en mots puisque prend en compte la longueur de toute la chaîne de caractère!

Trois cas de figures sont possibles :

  • Le vers se termine par une virgule/un point-virgule/deux points
  • Le vers se termine par un point/un point d'exclamation/un point d'interrogation
  • Le vers ne se termine par une lettre de l'alphabet ou un autre signe de ponctuation (comme des guillemets)
#Étape 6 : isoler le dernier caractère 
    vers_vers = random.choice(vers).split(" ")
    last_sign = vers_vers[-1:]
    
    #print(last_sign)
    
    #Étape 7 : ajouter une expression issue du langage ghetto, poser les conditions
    
    expr_point = ["Blow it!", "By gum!","What the hell!","Now piss off!","That's cool.","This is nuts!","Awesome!", "Shit.","Yasssss!","Awright!","Whatever!","Anyway!","Aight!"]
    expr_virgule = ["yo","so keep your shit together.","mind blowing!","fair enough","damn it.","dude","bro","know what I'm sayin?", "so now listen","whatever","awesome","shit","crumbs!","wassup","man","that's right","awright!","aight","alright","whatever","alright"]
    expr_autre = ["y'all.", "yo","...shit happens!","try me","dude","bro","and this is dope","you know","anyway","man", "cuz","for sure","yolo","and that pisses me off","oooh","aight","alright","whatever","alright"]
    
    if last_sign == "," :
        vers_final = vers + random.choice(expr_virgule)
        print(vers_final)
    
    elif last_sign == ":" :
        vers_final = vers + random.choice(expr_virgule)
        print(vers_final)
        
    elif last_sign == ";":
        vers_final = vers + random.choice(expr_virgule)
        print(vers_final)
        
    elif last_sign == ".":
        vers_final = vers + random.choice(expr_point)
        print(vers_final)
        
    elif last_sign == "!":
        vers_final = vers + random.choice(expr_point)
        print(vers_final)
        
    elif last_sign == "?":
        vers_final = vers + random.choice(expr_point)
        print(vers_final)
        
    else:
        vers_final = vers + random.choice(expr_autre)
        print(vers_final)

Message d'erreur : TypeError: can only concatenate list (not "str") to list

GÉRER L'EXÉCUTION DU PROGRAMME

But: travailler avec un fichier texte en parallèle, reprenant tous les moments où le programme a été exécuté.

Étape 1 : créer un fichier texte annexe. Étapes 2 : récupérer le moment d'exécution du programme. Étape 3 : inscrire ce moment dans le programme. (cf exemple)

Pour faire cela, utiliser la fonction write comme dans l'exemple ci-dessous :

# file-append.py
f = open('helloworld.txt','a')
f.write('\n' + 'hello world')
f.close()

ALLER PLUS LOIN (15.04)

Proposition de modification du scénario du programme :

  • À la place d'ajouter "ta mère" le programme utilise une série d'expressions tirées du langage des ghettos américain.
  • Pour aller plus loin : créer une base données permettant au programme de remplacer certains usages français par des expressions "slang" (argot américain) - fonctionne si les éléments récupérés par le programme sont reconnus comme des chaînes de caractères (dés lors, utiliser des balises de conditions : si homme est contenu dans vers alors remplacer homme par dude en utilisant la fonction replace).

Série de sources pour les expressions langagières :

Le nombre d'expressions étant limité, je pense simplement créer un tableau les reprenant toutes, le programme en choisira une au hasard à ajouter au vers.

#Étape 6 : ajouter une expression US 
    us_expressions = ["y'all.", "yo","so keep your shit together.","shit happens!","mind blowing!","fair enough","try me",", damn it.",",dude",",bro","yassss.",",man",". What the hell!",",whatever","alright","that's right","you know","anyway","listen","oooh","aight","cuz","for sure","know what I'm sayin?","I'm easy","now piss off","shit","that's cool","awesome","yo", "wassup", "and this is dope", "for sure", "This is nuts!", "and that pisses me off", "yolo", "crumbs!", "awright!", "Blow it!", "By gum!",]
    
    vers_final = random.choice(vers)+random.choice(us_expressions)
    print(vers_final)

Exemple de résultats :

  • Au teint pâle, aux yeux bleus, si pures et si belles for sure
  • Une tête sur le pavé yo
  • Qui me mit dans le feu me retirant de l'onde ? shit happens!
  • J'avais de grands yeux purs comme le clair des lunes ;shit
  • Un dimanche est dans mon coeur, that's right
  • D'autant ou plus vous me soyez cruelle.cuz

POSTER SUR TWITTER

    #Étape 6 : poster sur Twitter 
    from acces_twi import *
    import tweepy

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    auth.set_access_token(access_token, access_token_secret)

    api = tweepy.API(auth)
    api.update_status(status=vers_final)

DERNIÈRE VERSION DU PROGRAMME (2.04)

Code modifié avec l'ajout du module del permettant de supprimer les éléments inutiles du tableau de liens à récupérer (ici en l'occurence les lettres X, Y et Z).

#!python
# -*- coding: utf-8 -*-
 
import mechanize
import lxml.html as parser
import cssselect
import random
import ssl
 
#Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source. 
#Pour ça : besoin d'un navigateur : déclaration + informations. 
ssl._create_default_https_context = ssl._create_unverified_context
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.set_handle_robots(False)
 
 
#Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet. 
 
def getHtmlTree(url):
    data = br.open(url, timeout=10)
    source = data.read()
    tree = parser.fromstring(source)
    return tree
 
def getRandomLink(url, cssselector, avoid): 
    tree = getHtmlTree(url) 
 
    for selector in cssselect.parse(cssselector): 
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        links = tree.xpath(xpath_selector)

        #supprimer les "avoid" derniers éléments de la liste links
        del links[len(links)-avoid:]
        
        return random.choice(links).get('href')
 
#Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.  
 
link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a', 3)
 
print(link_lettre)
 
link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link', 0)
 
print(link_auteur)
 
link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link', 0)
 
print(link_poeme)
 
 
#Étape 4 : récupérer les poèmes
 
poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme) 
 
for selector in cssselect.parse('.poem__content'):
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
    poems = poemeTree.xpath(xpath_selector)
 
    #print(poems[0].text_content())
 
    #Permet de conserver les retours à la ligne
    for br in poems[0].xpath("//br"):
        br.tail = "\n" + br.tail if br.tail else "\n"
 
    #print(poems[0].text_content())
    #test ok 
 
    #Étape 5 : décomposer le poème en lignes
 
    vers = poems[0].text_content().split("\n")   
 
    print(random.choice(vers)+", ta mère.")

UP

Objectif de cette semaine :

  • Retirer certains liens de la source à parser (lettres XYZ ne contenant pas de noms d'auteur)

Recherches : J’ai trouvé 3 opérateurs qui permettent de supprimer les éléments d’une liste : pop, del et remove. J’ai vite écarté remove qui s’intéresse à la valeur de l’élément et non à son indice comme le fait del ou pop. Mon but est donc d’enlever les 3 derniers liens de ma liste, du coup une tranche de ma liste. Je sais que l’opération del peut fonctionner avec une tranche, mais ça ne semble pas être le cas avec pop. Cette tranche peut s’exprimer comme ça : [23:] (je me suis basée sur l’idée qu’il y avait 26 lettres dans l’alphabet donc 26 liens). Il faudrait donc que j’ajoute del[23:] à mon code.

CODE

Le code fonctionne. Néanmoins quelques améliorations sont encore possibles :

  • Définir des rangs précis lorsque le programme choisi parmi les lettres de l'alphabet (absence d'auteurs pour les lettre X, Y et Z) >> à régler en posant une condition ?
#!python
# -*- coding: utf-8 -*-

import mechanize
import lxml.html as parser
import cssselect
import random
import ssl

#Étape 1 : naviguer sur le site cible poesie.webnet et récupérer son code source. 
#Pour ça : besoin d'un navigateur : déclaration + informations. 
ssl._create_default_https_context = ssl._create_unverified_context
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.set_handle_robots(False)


#Étape 2 : récupérer le code source de la page + les liens des différentes lettres de l'alphabet. 

def getHtmlTree(url):
    data = br.open(url, timeout=10)
    source = data.read()
    tree = parser.fromstring(source)
    return tree

def getRandomLink(url, cssselector): 
    tree = getHtmlTree(url) 
    
    for selector in cssselect.parse(cssselector): 
        xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
        links = tree.xpath(xpath_selector)
        return random.choice(links).get('href')

#Étape 3 : à partir d'une lettre random, récupérer les liens des noms d'auteurs.  

link_lettre = getRandomLink('http://poesie.webnet.fr/lesgrandsclassiques/Author', '.author-list__menu li a')

print(link_lettre)

link_auteur = getRandomLink('http://poesie.webnet.fr'+link_lettre, '.author-list__link')

print(link_auteur)

link_poeme = getRandomLink('http://poesie.webnet.fr'+link_auteur, '.author-list__link')

print(link_poeme)


#Étape 4 : récupérer les poèmes

poemeTree = getHtmlTree('https://poesie.webnet.fr'+link_poeme) 

for selector in cssselect.parse('.poem__content'):
    xpath_selector = cssselect.HTMLTranslator().selector_to_xpath(selector)
    poems = poemeTree.xpath(xpath_selector)
    
    #print(poems[0].text_content())

    #Permet de conserver les retours à la ligne
    for br in poems[0].xpath("//br"):
        br.tail = "\n" + br.tail if br.tail else "\n"
    
    #print(poems[0].text_content())
    #test ok 
    
    #Étape 5 : décomposer le poème en lignes
    
    vers = poems[0].text_content().split("\n")   

    print(random.choice(vers)+", ta mère.")

SCENARIO @POETE_NRV

  • À partir de ce vers, le programme ajoute ",ta mère."
  • Le programme envoie le tweet sur Twitter. Un nouveau tweet est posté toutes les 30 minutes.

ÉNONCÉS DE DIFFÉRENTS BOTS

  • Un bot sur Pingu qui tweet Noot Noot toutes les heures (le nombre de noot faisant référence à l'heure exacte?).
  • Un bot qui terminerait ses phrases par "ta mère". Les sources textuelles seraient des poèmes de Victor Hugo, Baudelaire, Verlaine, Rimbaud et autres poètes romantiques. Ce qui donnerait des combinaisons comme : "demain dés l'aube ta mère" ou "l'éternité ta mère" > @poete_nrv
  • Autre version possible : reprendre les grands titres de l'actualité et les ponctuer par "ta mère"
  • Un bot qui tweet une image représentant des fleurs (ou un bouquet de fleur) ainsi qu'un texte se rapprochant d'une insulte (ex. boudin, avorton, fumier,...). Le nom du bot serait "dites le avec des fleurs". Les images pourraient être trouvées à partir d'une bibliothèque (google image? à partir de la recherche "bouquet de fleurs") et les textes proviendraient d'une page Wikipédia recensant des insultes françaises. Le bot posterait toutes les heures.

Poésie Binaire

Poème en code binaire

1011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001011110011110100110100011011011100101110111011101000100000110110011001010100000110001111011111100100010100011001010101001010111000011011010010110010111100001100101111010011010011110100110100111011111101110010110000011011011010110010111100101101111111001101000001100101111010001000001110101110111011100110001101101001111000011110101111010001000001100001010000011011001100001010000011011001101001110011111011101100101010110000011011000011010011111001011110011111010001000001110101110111001000001110011110010111000111110010110010111101000101110

Traduction

Zeros et uns
Rythment le cod(e).
Repetition,
Zeros et uns
Saut a la ligne,
C'est un secret.

Manipulations du poème

Création d'un programme

Le programme permute les mots de moins de 3 lettres, et les mots de plus de 5 lettres.

Résolution [1]

Le code de Violette

Résolution du code de Violette

print ("Quel est ton nom?")
name = raw_input()
print (name+" est ton nom de poète.") 

with open ('Poetry','r') as POEME:
    poeme = POEME.read()


x = poeme.replace ("a", "aouuuu") 
y = x.replace ("g", "grrrrrrr")
    
print (y)

Dernier énoncé

#!python
# -*- coding: utf-8 -*-

#Définition des ≠ tableaux  
    
article = ["Les", "Le", "une", "un", "le", "L", "la"]
nom = ["editions", "Canape", "mission", "roman", "larme", "code", "ORDINATEUR", "Circuits", "zero", "repetition", "saut", "ligne", "secret"]
complement = ["grand", "transformiste", "vrai", "faux", "nomr", "blanc", "bien", "binaire", "claire", "Immenses"]
verbe = ["avaient donne", "est", "est", "est", "rythment", "est"]
    
#random = module permettant de générer de l'aléatoire  
#new_vers = nouveau tableau vide à remplir avec éléments article/nom/compl/verbe
    
from random import *
        
#Génération du programme dans une boucle de répétition selon le nb demandé par utilisateur 

print("Combien de vers veux-tu générer?")
nombre_lignes = int(raw_input()) 
    
for compteur in range (0, nombre_lignes): 
    new_article = choice(article)
    new_nom = choice(nom)
    new_complement = choice(complement)
    new_verbe = choice(verbe) 
    print(new_article + " " + new_nom + " " + new_complement + " " + new_verbe)

Shuffle.py

with open ('Poetry','r') as POEME:
poeme = POEME.read()
lignes = poeme.splitlines()
from random import *  
shuffle(lignes) 
for lignes in lignes : 
    print(lignes)
Saut a la ligne,
transformiste.
m'avaient donne
une mission :
Repetition,
C'est un secret.
Cest nomr ou blanc 
Cest vrai ou faux
Zeros et uns
touts est tres claire
un ou zero 
L ORDINATEUR
larme amme bien 
Zeros et uns
Les editions
le code binaire 
Rythment le cod(e).
un grand roman
Circuits Immenses
"Le Canape"


touts est tres claire
le code binaire 
un ou zero 
m'avaient donne
transformiste.
Zeros et uns
larme amme bien 
Saut a la ligne,
Cest vrai ou faux
un grand roman
"Le Canape"
Les editions
Cest nomr ou blanc 
Repetition,
une mission :
Zeros et uns
Rythment le cod(e).
C'est un secret.
L ORDINATEUR
Circuits Immenses

Manipulation trouvée via https://fiches-isn.readthedocs.io/fr/latest/random.html

Édition

3 livrets : énoncé, résultat et code source. 
3 pages HTML + 3 feuilles de style.

Étapes de travail :

  • travail sur des schémas (système de mise en page extensible)
  • mise en commun
  • mise en place