Automatisation de Recommandation de Livres avec n8n

Ce workflow automatisé utilise n8n pour rechercher et recommander des livres basés sur un sujet choisi. Exécuté chaque vendredi à 11h00, il extrait des données depuis Open Library pour sélectionner un livre aléatoirement dans la catégorie 'littérature pour la jeunesse'. Si aucun livre n'est trouvé, une notification par email est envoyée. Cette solution facilite le processus de découverte de nouveaux livres tout en économisant du temps et en assurant une communication efficace par email.

62,995 vues
20,524 copies
Automatisation

Documentation Complète

📋 Automatisation de Recommandation de Livres avec n8n

💡 Description

Ce workflow automatisé utilise n8n pour rechercher et recommander des livres basés sur un sujet choisi. Exécuté chaque vendredi à 11h00, il extrait des données depuis Open Library pour sélectionner un livre aléatoirement dans la catégorie 'littérature pour la jeunesse'. Si aucun livre n'est trouvé, une notification par email est envoyée. Cette solution facilite le processus de découverte de nouveaux livres tout en économisant du temps et en assurant une communication efficace par email.

📈 Impact & ROI: Augmente l'efficacité dans la découverte de nouveaux livres, réduit le temps passé à chercher manuellement des recommandations, et améliore l'engagement grâce à des notifications régulières.

🚀 Fonctionnalités Clés

  • ✅ Recommandation automatisée de livres chaque semaine
  • ✅ Intégration avec Open Library pour des données précises
  • ✅ Envoi d'emails automatisés pour informer sur les découvertes
  • ✅ Gestion flexible et personnalisable des sujets de recherche

📊 Architecture Technique

13
Nodes
11
Connexions
2
Services

🔌 Services Intégrés

Open LibraryEmail

🔧 Composition du Workflow

NodeTypeDescription
On clicking 'execute'manualTriggerTraitement des données
Every Friday at 11:00 AMcronTraitement des données
Set SubjectsetTraitement des données
Retrieve Book CounthttpRequestRequête HTTP vers une API externe
Check Book CountifCondition logique pour router le flux
Select Random BookfunctionTransformation de données avec code personnalisé
Retrieve Detailed Book InfohttpRequestRequête HTTP vers une API externe
Retrieve Basic Book InfohttpRequestRequête HTTP vers une API externe
Book RecommendationsetTraitement des données
Filtered Book InfosetTraitement des données
Create Author StringfunctionTransformation de données avec code personnalisé
Send No Book EmailemailSendTraitement des données
Send Book EmailemailSendTraitement des données

📖 Guide d'Implémentation

  1. Import du workflow: Téléchargez le fichier JSON et importez-le dans votre instance n8n
  2. Configuration des credentials: Configurez les accès pour chaque service utilisé
  3. Personnalisation: Adaptez les paramètres selon vos besoins spécifiques
  4. Test: Exécutez le workflow en mode test pour vérifier le bon fonctionnement
  5. Activation: Activez le workflow pour une exécution automatique

🏷️ Tags

livrerecommandationautomatisation

Structure JSON

Voir le code JSON complet
{
    "id": "12",
    "name": "Find a New Book",
    "nodes": [
        {
            "name": "On clicking 'execute'",
            "type": "n8n-nodes-base.manualTrigger",
            "position": [
                40,
                140
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "name": "Every Friday at 11:00 AM",
            "type": "n8n-nodes-base.cron",
            "position": [
                20,
                330
            ],
            "parameters": {
                "triggerTimes": {
                    "item": [
                        {
                            "hour": 11,
                            "mode": "everyWeek",
                            "weekday": "5"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Set Subject",
            "type": "n8n-nodes-base.set",
            "position": [
                220,
                330
            ],
            "parameters": {
                "values": {
                    "string": [
                        {
                            "name": "subject",
                            "value": "juvenile_literature"
                        }
                    ]
                },
                "options": [],
                "keepOnlySet": true
            },
            "typeVersion": 1
        },
        {
            "name": "Retrieve Book Count",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                420,
                330
            ],
            "parameters": {
                "url": "=http:\/\/openlibrary.org\/subjects\/{{$json[\"subject\"]}}.json",
                "options": [],
                "queryParametersUi": {
                    "parameter": [
                        {
                            "name": "limit",
                            "value": "0"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Check Book Count",
            "type": "n8n-nodes-base.if",
            "position": [
                620,
                330
            ],
            "parameters": {
                "conditions": {
                    "number": [
                        {
                            "value1": "={{$node[\"Retrieve Book Count\"].json[\"work_count\"]}}",
                            "operation": "larger"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Select Random Book",
            "type": "n8n-nodes-base.function",
            "position": [
                820,
                330
            ],
            "parameters": {
                "functionCode": "var retrieve_book = 0;\nvar book_count = items[0].json.work_count;\n\nretrieve_book = Math.floor(Math.random() * book_count) + 1\n\nitems[0].json.retrieve_book = retrieve_book;\nreturn items;"
            },
            "typeVersion": 1
        },
        {
            "name": "Retrieve Detailed Book Info",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                1260,
                330
            ],
            "parameters": {
                "url": "=http:\/\/openlibrary.org.{{$node[\"Retrieve Basic Book Info\"].json[\"works\"][0][\"key\"]}}.json",
                "options": [],
                "queryParametersUi": {
                    "parameter": [
                        {
                            "name": "limit",
                            "value": "1"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Retrieve Basic Book Info",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                1040,
                330
            ],
            "parameters": {
                "url": "=http:\/\/openlibrary.org\/subjects\/{{$json[\"name\"]}}.json",
                "options": [],
                "queryParametersUi": {
                    "parameter": [
                        {
                            "name": "limit",
                            "value": "1"
                        },
                        {
                            "name": "offset",
                            "value": "={{$json[\"retrieve_book\"]}}"
                        },
                        {
                            "name": "detail",
                            "value": "true"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Book Recommendation",
            "type": "n8n-nodes-base.set",
            "position": [
                1830,
                330
            ],
            "parameters": {
                "values": {
                    "string": [
                        {
                            "name": "msgSubject",
                            "value": "=Book Recommendation: {{$node[\"Create Author String\"].json[\"title\"]}}"
                        },
                        {
                            "name": "msgBody",
                            "value": "=<H2><a href=\"{{$node[\"Create Author String\"].json[\"URL\"]}}\">{{$node[\"Create Author String\"].json[\"title\"]}}<\/a><\/H2>\n<p><em>By {{$node[\"Create Author String\"].json[\"authors\"]}}<\/em><br>\n{{$node[\"Create Author String\"].json[\"description\"]}}<\/p>"
                        }
                    ]
                },
                "options": [],
                "keepOnlySet": true
            },
            "typeVersion": 1
        },
        {
            "name": "Filtered Book Info",
            "type": "n8n-nodes-base.set",
            "position": [
                1460,
                330
            ],
            "parameters": {
                "values": {
                    "string": [
                        {
                            "name": "authors",
                            "value": "={{$node[\"Retrieve Basic Book Info\"].json[\"works\"][0][\"authors\"]}}"
                        },
                        {
                            "name": "title",
                            "value": "={{$node[\"Retrieve Basic Book Info\"].json[\"works\"][0][\"title\"]}}"
                        },
                        {
                            "name": "description",
                            "value": "={{$node[\"Retrieve Detailed Book Info\"].json[\"description\"][\"value\"]}}"
                        },
                        {
                            "name": "URL",
                            "value": "=https:\/\/openlibrary.org{{$node[\"Retrieve Basic Book Info\"].json[\"works\"][0][\"key\"]}}"
                        }
                    ]
                },
                "options": [],
                "keepOnlySet": true
            },
            "typeVersion": 1
        },
        {
            "name": "Create Author String",
            "type": "n8n-nodes-base.function",
            "position": [
                1630,
                330
            ],
            "parameters": {
                "functionCode": "var arrAuthors = items[0].json.authors;\n\nvar arrNames = arrAuthors.map(function(author) {\n  return \"<a href=\\\"https:\/\/openlibrary.org\" + author['key'] + \"\\\">\" + author['name'] + \"<\/a>\";\n});\n\nvar names = arrNames.join(\", \");\n\nitems[0].json.authors = names;\n\nreturn items;"
            },
            "typeVersion": 1
        },
        {
            "name": "Send No Book Email",
            "type": "n8n-nodes-base.emailSend",
            "position": [
                830,
                520
            ],
            "parameters": {
                "html": "=<p>Unfortunately, there are no books available for the subject of <em>{{$node[\"Check Book Count\"].json[\"name\"]}}<\/em>. Please update your n8n workflow with a different subject.<\/p>\n\n<p>A list of all available subjects can be found at <a href=\"https:\/\/openlibrary.org\/subjects\">the Open Library<\/a>.<\/p>",
                "options": [],
                "subject": "=Book not found in {{$node[\"Check Book Count\"].json[\"name\"]}}",
                "toEmail": "john.doe@example.com",
                "fromEmail": "john.doe@example.com"
            },
            "credentials": {
                "smtp": "Gmail Creds"
            },
            "typeVersion": 1
        },
        {
            "name": "Send Book Email",
            "type": "n8n-nodes-base.emailSend",
            "position": [
                2030,
                330
            ],
            "parameters": {
                "html": "={{$node[\"Book Recommendation\"].json[\"msgBody\"]}}",
                "options": [],
                "subject": "={{$node[\"Book Recommendation\"].json[\"msgSubject\"]}}",
                "toEmail": "john.doe@example.com",
                "fromEmail": "john.doe@example.com"
            },
            "credentials": {
                "smtp": "Gmail Creds"
            },
            "typeVersion": 1
        }
    ],
    "active": false,
    "settings": [],
    "connections": {
        "Set Subject": {
            "main": [
                [
                    {
                        "node": "Retrieve Book Count",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Check Book Count": {
            "main": [
                [
                    {
                        "node": "Select Random Book",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Send No Book Email",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Filtered Book Info": {
            "main": [
                [
                    {
                        "node": "Create Author String",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Select Random Book": {
            "main": [
                [
                    {
                        "node": "Retrieve Basic Book Info",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Book Recommendation": {
            "main": [
                [
                    {
                        "node": "Send Book Email",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Retrieve Book Count": {
            "main": [
                [
                    {
                        "node": "Check Book Count",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Create Author String": {
            "main": [
                [
                    {
                        "node": "Book Recommendation",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "On clicking 'execute'": {
            "main": [
                [
                    {
                        "node": "Set Subject",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Every Friday at 11:00 AM": {
            "main": [
                [
                    {
                        "node": "Set Subject",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Retrieve Basic Book Info": {
            "main": [
                [
                    {
                        "node": "Retrieve Detailed Book Info",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Retrieve Detailed Book Info": {
            "main": [
                [
                    {
                        "node": "Filtered Book Info",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
                                

Workflows Similaires

Automatisez le Résumé de Vos Emails avec A.I. et Messagerie

Ce workflow n8n vous permet d'automatiser la gestion de vos emails en utilisant l'intelligence artificielle pour résume...

Automatisation de gestion des réunions Zoom et communication

Ce workflow est conçu pour automatiser le processus de planification et de gestion des réunions Zoom tout en assurant ...

Automatisez vos Tweets d'images humoristiques à 17h

Ce workflow n8n est conçu pour les professionnels des réseaux sociaux cherchant à automatiser leur contenu humoristiq...