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é";
};
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.