CrĂ©ation dâun Projet Symfony avec IA : Utilisation de DTO, Flow et RapidAPI
Le dĂ©veloppement dâapplications modernes sâappuie de plus en plus sur lâintelligence artificielle pour optimiser les processus de crĂ©ation. Cet article explique comment crĂ©er une application Symfony pour scraper des pages web, obtenir un rĂ©sumĂ© et des tags pertinents, en sâappuyant sur des technologies telles que Flow, OpenAI, et RapidAPI. Ce projet a Ă©tĂ© conçu Ă lâaide de prompts personnalisĂ©s sur Cursor, tels que : "Mets en place une API avec Flow et OpenAI".
L'idée principale derriÚre ce projet est de démontrer comment mettre en place rapidement un SaaS (Software as a Service) performant. Dans cet exemple, nous avons créé un service qui permet de scraper n'importe quelle URL et d'en extraire automatiquement les informations pertinentes grùce à l'intelligence artificielle.
Cette approche présente plusieurs avantages :
-
Rapidité de mise en place : En utilisant des outils modernes comme Symfony, ApiPlatform, Flow et l'API OpenAI, nous pouvons développer rapidement un service fonctionnel
-
Scalabilité : L'architecture choisie permet de gérer facilement une montée en charge
-
Valeur ajoutée : L'utilisation de l'IA pour l'analyse du contenu apporte une réelle plus-value au service
Le service peut ĂȘtre utilisĂ© dans de nombreux contextes : veille concurrentielle, agrĂ©gation de contenu, analyse de tendances, etc.
Initialisation du Projet Symfony
Commencez par créer un projet Symfony :
composer create-project symfony/skeleton my_project cd my_project composer require webapp
Ajoutez les dépendances de base :
composer require doctrine annotations composer require api composer require maker http-client symfony/serializer composer require openai-php/client
Vérifiez que le serveur fonctionne :
symfony serve
Votre projet de base est prĂȘt !
ImplĂ©mentation du ContrĂŽleur pour le Scraping et lâAnalyse
Voici un contrĂŽleur basĂ© sur le code source de lâapplication :
<?php
use App\Dto\UrlDto;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use OpenAI;
use Flow\Flow\Flow;
use Flow\FlowFactory;
use Flow\Ip;
class UrlController extends AbstractController
{
public function __construct(
private HttpClientInterface $httpClient,
private string $openaiApiKey
) {}
public function invoke(Request $request, SerializerInterface $serializer): JsonResponse
{
try {
// Decode JSON request body
$data = json_decode($request->getContent(), true);
// Deserialize into UrlDto
$urlDto = $serializer->denormalize($data, UrlDto::class);
// Integrate Flow
$flow = (new FlowFactory())->create(function() use (&$data) {
yield function ($url) use (&$data) {
// Fetch URL content
$response = $this->httpClient->request('GET', $url);
$content = $response->getContent();
// Initialize OpenAI client
$client = OpenAI::client($this->openaiApiKey);
// Get summary and tags from ChatGPT
$result = $client->chat()->create([
'model' => 'gpt-4o-mini',
'messages' => [
[
'role' => 'system',
'content' => 'First provide a concise summary of the webpage content. Then on a new line after "TAGS:", list up to 10 relevant single-word or short-phrase tags, separated by commas.'
],
[
'role' => 'user',
'content' => $content
],
],
'max_tokens' => 400
]);
// Split the response into summary and tags
$data = $result->choices[0]->message->content;
};
});
$ip = new Ip($urlDto->url);
$flow($ip);
$flow->await();
$parts = explode('TAGS:', $data);
$summary = trim($parts[0]);
$tags = isset($parts[1]) ? array_map('trim', explode(',', trim($parts[1]))) : [];
return new JsonResponse([
'url' => $urlDto->url,
'summary' => $summary,
'tags' => $tags,
]);
} catch (\Exception $e) {
return new JsonResponse([
'error' => $e->getMessage()
], 500);
}
}
}
Intégration de Flow pour Orchestrer les Données
Flow est utilisĂ© pour orchestrer les Ă©tapes du pipeline de scraping et dâanalyse. Dans le code ci-dessus :
-
RĂ©cupĂ©ration du contenu : Le contenu de lâURL est rĂ©cupĂ©rĂ© via HttpClientInterface.
-
Analyse via OpenAI : Le contenu est envoyé à OpenAI pour générer un résumé et des tags.
-
Traitement des résultats : Les réponses sont traitées et renvoyées sous forme de JSON.
Mise en Place du SaaS avec RapidAPI
Pour transformer ce projet en SaaS accessible via RapidAPI :
-
Créez un Compte RapidAPI : Inscrivez-vous sur RapidAPI.
-
Publiez vos Endpoints :
-
Créez des endpoints RESTful comme présenté ci-dessus.
-
Configurez les routes et les paramĂštres requis sur RapidAPI.
-
-
Testez et Partagez : Testez votre API directement sur la plateforme et partagez-la avec vos utilisateurs.
Conlusion
Ce projet montre comment utiliser Symfony, ApiPlatform, Flow et OpenAI pour crĂ©er une API performante capable de scraper des pages web et dâanalyser leur contenu. En publiant cette API sur RapidAPI, vous pouvez transformer cette solution en un SaaS accessible Ă tous.
Essayez dâintĂ©grer ces concepts dans vos propres projets et adaptez-les en fonction des besoins de vos utilisateurs. Pour des dĂ©tails supplĂ©mentaires, rĂ©fĂ©rez-vous Ă la source sur UrlScrapingApi.
Le nouvel opérateur de PHP 8.5 va changer ta façon de coder

Comment j'ai connecté Cursor à Slack pour automatiser mes flux de travail d'IA

TeÌleÌcharger de la musique LeÌgalement

đź CrĂ©er un mini-jeu Discord avec VITE : un retour d'expĂ©rience

đ¶ Open Mic du Groover Club - Mai đ§Ą

â¶ïž 2025-05-26 DjMatyo Soundcloud set with MC

đ Du dĂ©veloppement Ă la production : dĂ©ployer une API Symfony avec Upsun

đ De zĂ©ro Ă hĂ©ros avec Sylius : Au cĆur de l'atelier sur les essentiels pratiques

đ Sylius Days 2025 : l'innovation en matiĂšre de commerce Ă©lectronique

đȘđș DJ Matyo Live special Eurovision 2025 đ

Générez automatiquement des miniatures YouTube personnalisées de style Ghibli avec PHP et l'IA

Recherche, Achat et Organisation de Tracks pour DJ Sets

Automating Gmail and Google Calendar with PHP Agents ?đ§ âĄ

Supercharge Your Job Search: Automate with MCP, Astra, Langflow and Arize

DJ Matyo Live

Build a Game for the largest game dev competition in the world

Demande Ă Codex

DJ Matyo Live repost track

Darkwood v1.0.1 release

Transforme ta voix en article de blog avec GPT et Meteor
