Kheys
410
modifications
(Section ''Accès aux forums'' (pas encore terminée)) |
|||
Ligne 815 : | Ligne 815 : | ||
=== Script Python === | === Script Python === | ||
La classe Python suivante permet d'interagir avec les forums de cette manière. Il vous suffit d'entrer la valeur de votre cookie ''coniunctio'' et d'appeler les fonctions souhaitées avec le contenu des messages ou topics. | La classe Python suivante permet d'interagir avec les forums de cette manière. Il vous suffit d'entrer la valeur de votre cookie ''coniunctio'' et d'appeler les fonctions souhaitées avec le contenu des messages ou topics. | ||
Bien que cette méthode permette d'outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps. | |||
<pre> | |||
import requests, json | |||
from requests import Response | |||
from bs4 import BeautifulSoup | |||
DIV_CLASS = 'js-form-session-data' | |||
class ForumClient: | |||
def __init__(self, coniuntio: str): | |||
self._cookies = {'coniunctio':coniuntio} | |||
def _scrape_input_tokens(self, res: Response) -> dict: | |||
soup = BeautifulSoup(res.text, 'html.parser') | |||
form = soup.find('div', {'class':DIV_CLASS}) | |||
jsi = form.findChildren("input") | |||
tokens = { | |||
"fs_session":jsi[0].attrs["value"], | |||
"fs_timestamp":jsi[1].attrs["value"], | |||
"fs_version":jsi[2].attrs["value"], | |||
jsi[3].attrs["name"]:jsi[3].attrs["value"], | |||
"form_alias_rang":"1", | |||
"g-recaptcha-response":"" | |||
} | |||
return tokens | |||
def _get_forum_URL(self, forum_id) -> str: | |||
return requests.get(f'https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm').url | |||
def _get_topic_URL(self, topic_id) -> str: | |||
return requests.get(f'https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm').url | |||
def post_message(self, topic_id: int, message: str) -> Response: | |||
""" | |||
topic_id, int : ID du topic | |||
message, str : votre message | |||
renvoie un objet Response | |||
""" | |||
topic_URL = self._get_topic_URL(topic_id) | |||
res = requests.get(topic_URL, cookies=self._cookies) | |||
data = self._scrape_input_tokens(res) | |||
data['message_topic'] = message | |||
res = requests.post(topic_URL, data=data, cookies=self._cookies) | |||
return res | |||
def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -> Response: | |||
""" | |||
forum_id, int : ID du forum | |||
titre, str : titre du topic | |||
message, str : corps du topic | |||
[sondage], dict : dictionnaire de la forme { | |||
"question_sondage" : "Question ?", | |||
"reponse_sondage[]" : ["reponse 1", "reponse 2"] | |||
} | |||
""" | |||
forum_URL = self._get_forum_URL(forum_id) | |||
res = requests.get(forum_URL, cookies=self._cookies) | |||
data = self._scrape_input_tokens(res) | |||
data['titre_topic'] = titre | |||
data['message_topic'] = message | |||
if sondage: | |||
data |= sondage | |||
data['submit_sondage'] = '1' | |||
res = requests.post(forum_URL, data=data, cookies=self._cookies) | |||
return res | |||
if __name__ == '__main__': | |||
client = ForumClient("votre coniunctio ici") | |||
# Exemples d'utilisation | |||
# Pour poster un message | |||
client.post_message(74204156, "Je poste depuis Python :)") | |||
# Pour poster un topic | |||
client.post_topic(51, 'Je poste depuis Python', 'Et toi ? :)') | |||
</pre> | |||
==Ressources== | ==Ressources== |