« Documentation de l'API Jeuxvideo.com » : différence entre les versions

(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==
Kheys
380

modifications