Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème API Wikipedia + Twillio

    21 février 2021 à 9:36:57

    Bonjour !

    Je crée un chatbox whatsapp avec Twillio, python, ngrok...

    J'arrive à envoyer des messages : j'ai donc décidé de faire en sorte que le service renvoie la definition Wikipedia de ce que l'utilisateur a rentré dans le chatbox.

    J'ai ce code : 

    from flask import Flask, request
    import requests
    from twilio.twiml.messaging_response import MessagingResponse
    import wikipedia
    app = Flask(__name__)
    a = "0";
    @app.route('/bot', methods=['POST'])
    def bot():
        global a
        incoming_msg = request.values.get('Body', '').lower()
        resp = MessagingResponse()
        msg = resp.message()
        responded = False
        msg.body(wikipedia.summary("Coronavirus"))
        responded = True
        return str(resp)
    
    if __name__ == '__main__':
        app.run()
    

    Il marche avec wikipedia.summary("Coronavirus") ou wikipedia.summary("1862") par exemple, mais pas avec wikipedia.summary("Computer") ou wikipedia.summary("Emmanuel Macron")...

    Des idées ?

    • Partager sur Facebook
    • Partager sur Twitter
      23 février 2021 à 12:15:15

      peut-être une limitation du nombres de caractères (a priori twilio limite à 1600 caractères les messages https://support.twilio.com/hc/en-us/articles/360033806753-Maximum-Message-Length-with-Twilio-Programmable-Messaging )

      essayer avec msg.body(wikipedia.summary("Emmanuel Macron")[:1600]) pour voir si ça fonctionne (ajuster la valeur si besoin)

      • Partager sur Facebook
      • Partager sur Twitter
        23 février 2021 à 14:38:44

        Oui c'était ca !

        Par contre : 

        from flask import Flask, request
        import requests
        from twilio.twiml.messaging_response import MessagingResponse
        import wikipedia
        import requests as r
        import json
        app = Flask(__name__)
        a = "0";
        
        
        
        def get_wiki_image(name):
            endpoint = "https://fr.wikipedia.org/w/api.php?action=query&prop=pageimages&format=json&piprop=original&pilimit=1&titles={}"
        
            try:
                req = r.get(endpoint.format(name))
            except HTTPError as e:
                print(f"Erreur HTTP: {e}")
                return
        
            data = json.loads(req.text)
            page = list(data["query"]["pages"].values())[0]
        
            try:
                url = page["original"]["source"]
            except KeyError:
                print(f"Aucune image trouvée dans la page {name}")
                return
        
            return url
        
        
        @app.route('/bot', methods=['POST'])
        
        
        
        
        def bot():
            global a
            incoming_msg = request.values.get('Body', '').lower()
            resp = MessagingResponse()
            msg = resp.message()
            responded = False
            if "+ image" in incoming_msg:
                incoming_msg = incoming_msg.replace(" + image","")
                msg.media(get_wiki_image(incoming_msg))
                print("L'utilisateur a demandé la définition de Wikipedia de "+incoming_msg+" et a demandé une image")
        
            else:
                print("L'utilisateur a demandé la définition de Wikipedia de "+incoming_msg+" sans image")
            msg.body(wikipedia.summary(incoming_msg, sentences=2)+"\n \n (Texte venant de Wikipedia : "+wikipedia.page(incoming_msg).url+" ).")
            
            responded = True
            return str(resp)
        
        if __name__ == '__main__':
            app.run()
        

        Si je tape "Napoléon Ier", pas d'erreur dans le shell Python, mais dans la console Twilio : HTTP retrieval failure: Attempt to retrieve media failed.

        La photo : https://upload.wikimedia.org/wikipedia/commons/4/40/Francois_Gerard_-_Napoleon_Ier_en_costume_du_Sacre.jpg

        Je sais pas pourquoi ...

        • Partager sur Facebook
        • Partager sur Twitter
          23 février 2021 à 15:57:59

          essaie msg.media_url(...) plutôt que msg.media(..)

          Je suppose que l'erreur est la même quelque soit le mot recherché (et donc l'image retournée) ?

          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2021 à 19:45:48

            AttributeError: 'Message' object has no attribute 'media_url'

            Donc media_url ne marche pas...

            L'erreur est effectivement la même quelque soit le mot recherché !

            • Partager sur Facebook
            • Partager sur Twitter
              27 février 2021 à 14:53:03

              Bonjour !

              Les messages sont envoyés par whatsapp, donc pas besoin de MMS.

              J'avais déjà réussi à envoyer des images par whatsapp...

              • Partager sur Facebook
              • Partager sur Twitter
                1 mars 2021 à 15:29:36

                https://www.twilio.com/docs/whatsapp/api/message-resource 

                ça se passe par media_url a priori (par contre il semble ne pas falloir utiliser le tiwml mais par la librairie Client)

                https://www.twilio.com/docs/whatsapp/tutorial/send-and-receive-media-messages-whatsapp-python 

                • Partager sur Facebook
                • Partager sur Twitter

                Problème API Wikipedia + Twillio

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown