Multi-debrid

Description

Voici un exemple appliqué d'utilisation des fonctions réseau de flash.
Cette application permet de générer des liens premiums megaupload.
Concrètement, le flash transmet une variable post à une page php qui lui renvoi un page HTML (merci au concept browser de mouloudikhaled). Cette page HTML est retaillée afin de récupérer l'url du lien sous forme de chaine base 64, chaine décodée grâce au script de blackwizard

Utilisation:

-> Générer des liens

- Rentrer les URL megaupload dans la partie gauche séparer par un retour à la ligne
- Sélectionner un serveur en cliquant dans la case blanche à gauche de celui-ci dans la datagrid
- Cliquer sur GO
- Les liens générer s'afficheront à droite

-> Exporter une liste de serveurs

- Cliquer sur le bouton export en haut à droite
- Les données exportées seront dans le cadre de droite

-> Importer une liste de serveur

- Insérer les données à importer dans le cadre de gauche
- Cliquer sur le bouton import en haut à droite

-> Ajouter un serveur

- Cliquer sur nouveau serveur
- Un champ est ajouté à la fin de la datagrid

-> Supprimer un serveur

- Sélectionner le serveur en cliquant sur la cellule vide à gauche
- Cliquer sur supprimer serveur

-> Mode débug

Ce mode vous permet de déterminer le slice d'une page
si débug est cocher, c'est le code HTML de la page qui sera affichée dans le cadre de droite. Elle sera tronquée d'autant de caractère que le nombre inscrit dans le champ slice.
Le slice d'un serveur doit tronquer au début de la chaine 64 (une suite de caractère de la forme aHR0cDovL3d3dzEyMC(...)25jbGljaz0i)

!!!!!! Attention, vous aurez sans doute besoin d'autoriser le programme flash à communiquer a l'extérieur !!!!!!

Source / Exemple :


/*
------------------------------------------
---------------Multi-debrid---------------
---------------par-remy2501---------------
------------------------------------------

  • /
//On vide (pour être sur) les 2 grand champ de texte resultat.text = ""; lien.text = ""; // On affecte les données initial à la datagrid my_dg.dataProvider = [{nom:"fast-débrid 1", url:"http://87.98.151.200/", slice:3723, post:'q'}, {nom:"fast-débrid 2", url:"http://87.98.159.117/apache2-default/", slice:3722, post:'q'}, {nom:"mega-débrid 1", url:"http://r24285.ovh.net/debrideur.php", slice:1499, post:'link'}, {nom:"mega-débrid 2", url:"http://r25019.ovh.net/debrideur.php", slice:1499, post:'link'}, {nom:"mega-débrid 3", url:"http://r24386.ovh.net/debrideur.php", slice:1499, post:'link'}]; // On crée la fonction servant à rajouter une collone vide // afin de permettre de sélectionner les lignes facillement // Elle ajoute une collone vide puis les redimentionne function addblankcolone () { my_dg.addColumnAt (0," "); my_dg.getColumnAt (0).editable = false; my_dg.getColumnAt (0).width = 25; my_dg.getColumnAt (1).width = 100; my_dg.getColumnAt (2).width = 225; my_dg.getColumnAt (3).width = 50; } // On utilise la fonction que l'on vien de créer addblankcolone (); // On crée un objet loadVars qui servira à réceptionner les données (la page html) var chargeur_lv:LoadVars = new LoadVars (); // On préferera onData à onLoad car il permet de récupérer les données non traitées chargeur_lv.onData = function (src:String):Void { // On effectue le traitement que si le chargement a réussi (que si on a des données) if (src != undefined) { // Si on a enclenché le mode débug if (btn_debug.selected) { // On utilise le slice du champ de texte temp1 = src.slice (saisie_slice.text); } else { // Sinon on utilise le slice de la datagrid temp1 = src.slice (slice); } // On décompose le traitement de la chaine // On split afin de récupérer la chaine base64 temp2 = temp1.split ("&"); temp3 = temp2[0]; // On décode la-dîte chaine temp4 = decode (temp3); // On split encore afin de supprimer le "onclick =" temp5 = temp4.split ('"'); temp6 = temp5[0]; // Si on a enclenché le mode débug if (btn_debug.selected) { // On affiche la page juste slicée _root.resultat.text += temp3 + "\r"; } else { // Sinon on affiche le lien _root.resultat.text += temp6 + "\r"; } // On incrémente la variable servant à charger les lien un par un i++; // On informe l'utilisateur de l'état du processus etat.text = 'Lien(s) généré(s)'; // On (ré)appelle la fonction de chargement charge (); } else { // Sinon on informe l'utilisateur qu'il y a eu une erreur etat.text = 'Erreur'; } }; // On crée un objet loadVars qui servira à stocker les données post à envoyer var send_lv:LoadVars = new LoadVars (); // On déclare la fonction servant à charger les liens function charge () { // On ne lance le chargement d'un lien que si il existe !! if (my_array[i] != undefined) { // On affecte le lien en paramètre qui sera transmis en post sous le nom défini dans la datagrid send_lv[parampost] = my_array[i]; // On informe l'utilisateur de l'état du processus etat.text = "Chargement du lien premium de " + my_array[i] ; // On lance le chargement send_lv.sendAndLoad (serv,chargeur_lv,"POST"); } } // La fonction servant à décoder une chaine en base64 (vois la source de blackwizard pour plus d'info) function decode (opString:String):String { opString != undefined ? str = opString : str = str; var base64s:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var bits, decOut = '', i:Number = 0; for (i = 0; i < str.length; i += 4) { bits = (base64s.indexOf (str.charAt (i)) & 0xff) << 18 | (base64s.indexOf (str.charAt (i + 1)) & 0xff) << 12 | (base64s.indexOf (str.charAt (i + 2)) & 0xff) << 6 | base64s.indexOf (str.charAt (i + 3)) & 0xff; decOut += String.fromCharCode ((bits & 0xff0000) >> 16, (bits & 0xff00) >> 8, bits & 0xff); } if (str.charCodeAt (i - 2) == 61) { return decOut.substring (0, decOut.length - 2); } else if (str.charCodeAt (i - 1) == 61) { return decOut.substring (0, decOut.length - 1); } else { return decOut.substring (0, decOut.length - 2); } } // Définition de action en cas de click sur le bouton go btn_go.onRelease = function () { // Si l'utilisateur n'a pas selectionner de serveur, on l'en informe if (my_dg.selectedIndex == undefined) { etat.text = 'Vous n\'avez pas sélectionner de serveur !!'; } else { // Sinon // On (re)met la variable i à 0 i = 0; // On stock l'url du serveur serv = my_dg.selectedItem.url; // On stock le slice propre au serveur slice = my_dg.selectedItem.slice; // On stock le nom du post propre au serveur parampost = my_dg.selectedItem.post; // On separe les liens my_array = lien.text.split ('\r'); // On informe l'utilisateur de l'état du processus etat.text = "Split ok"; // On lance le chagement charge (); } }; // Si l'utilisateur click sur ce bouton, le champ de droite est vidé btn_efface_resultat.onRelease = function () { resultat.text = ""; }; // Si l'utilisateur click sur ce bouton, le champ de gauche est vidé btn_efface_lien.onRelease = function () { lien.text = ""; }; // Pour l'ajout d'une nouvelle ligne btn_new.onRelease = function () { // On supprime la colonne vide my_dg.removeColumnAt (0); // On crée un objet "vide" var item_obj:Object = {nom:"", url:"", slice:"", post:""}; // On l'ajoute my_dg.addItem (item_obj); // On remet la colone vide addblankcolone (); }; // Si l'utilisateur clique que ce bouton, on supprime l'élément selectionné btn_suppr.onRelease = function () { my_dg.removeItemAt (my_dg.selectedIndex); }; // Pour l'import btn_import.onRelease = function () { // On supprime la colonne vide my_dg.removeColumnAt (0); // On supprime toute les données my_dg.removeAll (); // On sépare les données temparray = lien.text.split ("\r"); // On resépare chaque élément et on l'ajoute a la datagrid for (l = 0; l < temparray.length; l++) { temptemparray = temparray[l].split ("|"); var item_obj:Object = {nom:temptemparray[0], url:temptemparray[1], slice:temptemparray[2], post:temptemparray[3]}; my_dg.addItem (item_obj); } // On rajoute la colone vide addblankcolone (); // On informe l'utilisateur de l'état du processus etat.text = "Import terminé"; }; // Pour l'export btn_export.onRelease = function () { // On vide le champ de droite resultat.text = ""; // On concatène les donnée de la datagrid for (k = 0; k < my_dg.dataProvider.length; k++) { resultat.text += my_dg.dataProvider[k].nom + "|" + my_dg.dataProvider[k].url + "|" + my_dg.dataProvider[k].slice + "|" + my_dg.dataProvider[k].post + "\r"; } // On informe l'utilisateur de l'état du processus etat.text = "Export terminé"; };

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.