Eryoutube : téléchargement vidéo youtube flash cs4 as3 v2.20

Description

Il fallait me prévenir que cette application de fonctionnait plus. Ils sont quand même fortiches les informaticiens de chez YouTube ! J'ai passé au moins ... 10 minutes avant de trouver la nouvelle "protection" qu'ils avaient mis en place. Je leur tire mon chapeau !

Ils ont remplacés dans les adresses absolues générées par les routines php, tous les "&" par le caractère unicode 0026, si bien que les adresses trouvées par l'application, étaient devenues inexploitables.

Maintenant, tout refonctionne à nouveau. Vous pouvez télécharger la projection windows à l'adresse ci-dessous.

Il commence à y avoir un peu trop de pub sur ces pages !
==============================================================================================================
Cette application permet de télécharger certaines vidéos de YouTube, car toutes ne sont pas exportables. Mais en compilant l'application en projection Windows, la limitation est relative au premier nombre de votre adresse IP.
Trois ou quatre adresses sont disponibles, et ce logiciel en fait l'inventaire avec l'adresse de la page relative à la vidéo. Si vous recevez trois adresses, toutes sont au format flv. Dans le cas de quatre adresses, la troisième est au format mp4 (Meilleur qualité et compression).
La variable "application-locale" doit être à True pour le développement, et la compilation en mode projection Windows.
Pour mettre le swf en réseau, celle-ci se voit attribuer la valeur False. Dans ce cas, deux proxy placés dans le même répertoire que le swf sont utilisés pour la récupération du code de la page et du téléchargement de la vidéo distante. Tout se trouve dans le zip.

Vous pouvez retrouver cette application en ligne à l'adresse suivante : http://www.erysoft.fr/yt/index.html
De même, la projection Windows est téléchargeable sur cette page.

VBtoTRASH, alias ErySoft le damné !

Source / Exemple :


package
{
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.FileReference;
	import flash.net.URLLoaderDataFormat;
	import flash.text.TextFormat;
	
	public class eryoutube extends MovieClip
	{
		private var developpement		: Boolean = false; // True pour développement et projection Win ou Mac | False pour swf en ligne
		private var etat_pret			: Boolean = true;
		private var parametre			: Object = loaderInfo.parameters;
		private var fichier				: FileReference;
		private var flvxy				: String = parametre.fly;
		private var proxy				: String = parametre.xy;
		private var proxy_reseau		: String = "./xyyt.php";
		private var flvxy_reseau		: String = "./flvxy.php";

		public function eryoutube():void
		{
			if (proxy == null || proxy == "") proxy = proxy_reseau;
			if (flvxy == null || flvxy == "") flvxy = flvxy_reseau;
			gestion_bouton_chargement();
			code_page.height = 145;
			bouton_chargement_1.addEventListener(MouseEvent.CLICK, action_chargement_1);
			bouton_chargement_2.addEventListener(MouseEvent.CLICK, action_chargement_2);
			bouton_chargement_3.addEventListener(MouseEvent.CLICK, action_chargement_3);
			bouton_chargement_4.addEventListener(MouseEvent.CLICK, action_chargement_4);
			bouton_chargement_page.addEventListener(MouseEvent.CLICK, action_chargement_page);
			fond_chargement.bouton_annuler.addEventListener(MouseEvent.CLICK, action_annuler_chargement);
			//adresse_page_youtube.addEventListener(MouseEvent.CLICK, adresse_youtube_clic_souris);
		}
		private function gestion_bouton_chargement():void
		{
			bouton_chargement_1.visible = false;
			bouton_chargement_2.visible = false;
			bouton_chargement_3.visible = false;
			bouton_chargement_4.visible = false;
			fond_chargement.visible = false;
		}
		private function chargement_page(url:String):void
		{
			if (!etat_pret) return;
			formater_texte(code_page, "Chargement page en cours ...\r", true, false, false, 0x000000);
			etat_pret = false;
			var requete_page:URLRequest;
			var chargeur_page:URLLoader = new URLLoader();
			if (developpement) requete_page = new URLRequest('http://' + url);
			else requete_page = new URLRequest(proxy + "?adr=" + url.replace("?","&"));
			chargeur_page.addEventListener(Event.COMPLETE, fin_chargement_texte);
			chargeur_page.addEventListener(IOErrorEvent.IO_ERROR, erreur_chargement);
			chargeur_page.addEventListener(SecurityErrorEvent.SECURITY_ERROR, erreur_securite);
			chargeur_page.dataFormat = URLLoaderDataFormat.TEXT;
			chargeur_page.load(requete_page);
		}
		private function recherche_adresse_directe(texte_page:String):void
		{
			var url_page:String;
			adresse_1.text = '';
			adresse_2.text = '';
			adresse_3.text = '';
			adresse_4.text = '';
			var i:int = texte_page.toLowerCase().indexOf('var swfconfig', 0);
			var j:int = texte_page.toLowerCase().indexOf('"csi_page_type":', i);
			if ((i != -1) && (j != -1) && (j > i))
			{
				texte_page = texte_page.substr(i, j - i).replace(/\\/gi,'').replace(/u0026/gi,'&');
				formater_texte(code_page, texte_page.replace('"',''), true, false, true, 0x000000);
				i = texte_page.indexOf('http://v', 0);
				j = texte_page.indexOf(',', i);
				if ((i != -1) && (j != -1) && (j > i))
				{
					url_page = texte_page.substr(i, j - i);
					formater_texte(adresse_1, url_page.replace('"',''), true, false, false, 0x0000FF);
					bouton_chargement_1.visible = true;
					i = texte_page.indexOf('http://v', j);
					j = texte_page.indexOf(',', i);
					if ((i != -1) && (j != -1) && (j > i))
					{
						url_page = texte_page.substr(i, j - i);
						formater_texte(adresse_2, url_page.replace('"',''), true, false, false, 0x0000FF);
						bouton_chargement_2.visible = true;
						i = texte_page.indexOf('http://v', j);
						j = texte_page.indexOf(',', i);
						if ((i != -1) && (j != -1) && (j > i))
						{
							url_page = texte_page.substr(i, j - i);
							formater_texte(adresse_3, url_page.replace('"',''), true, false, false, 0x0000FF);
							bouton_chargement_3.visible = true;
							i = texte_page.indexOf('http://v', j);
							j = texte_page.indexOf('",', i);
							if ((i != -1) && (j != -1) && (j > i))
							{
								url_page = texte_page.substr(i, j - i);
								formater_texte(adresse_4, url_page, true, false, false, 0x0000FF);
								bouton_chargement_4.visible = true;
								return;
							}
						}
					}
				}
			}
			else formater_texte(code_page, "Code page incorrect, ou adresse non autorisée pour cette adresse IP !\r", true, false, true, 0xFF0000);
		}
		private function formater_texte(objet_texte:Object, texte_objet:String, gras:Boolean, italique:Boolean, cumul:Boolean, couleur:int):void
		{
			var format_texte:TextFormat = new TextFormat();
			format_texte.bold = gras;
			format_texte.italic = italique;
			format_texte.color = couleur;
			if (cumul) objet_texte.text += texte_objet;
			else objet_texte.text = texte_objet;
			objet_texte.setTextFormat(format_texte);
		}
		private function chargement_fichier(url:String, nom_fichier:String):void
		{
			if (!etat_pret) return;
			etat_pret = false;
			fond_chargement.texte_pourcentage.text = "0 %";
			fichier = new FileReference(); 
			var chargeur:URLRequest = new URLRequest;
			if (developpement) chargeur.url = 'http://' + url;
			else chargeur.url = flvxy + "?adr=" + url.replace("?","&");
			fichier.addEventListener(Event.OPEN, ouverture_chargement_fichier); 
			fichier.addEventListener(ProgressEvent.PROGRESS, progression_chargement_fichier); 
			fichier.addEventListener(Event.COMPLETE, fin_chargement_fichier); 
			fichier.addEventListener(IOErrorEvent.IO_ERROR, erreur_chargement);
			fichier.addEventListener(SecurityErrorEvent.SECURITY_ERROR, erreur_securite);
			fichier.addEventListener(Event.CANCEL, annuler_chargement_fichier);
			fichier.download(chargeur, nom_fichier);
		}
		// Evènements
		private function fin_chargement_texte(e:Event):void
		{
			etat_pret = true;
			recherche_adresse_directe(e.target.data);
		}
		private function erreur_chargement(e:IOErrorEvent):void
		{
			etat_pret = true;
			formater_texte(code_page, "Adresse introuvable !\r", true, false, true, 0xFF0000);
			fond_chargement.visible = false;
			bouton_chargement_page.visible = true;
		}
		private function erreur_securite(e:SecurityErrorEvent):void
		{
			etat_pret = true;
			formater_texte(code_page, "Erreur sécurité crossdomain !\r", true, false, true, 0xFF0000);
			fond_chargement.visible = false;
			bouton_chargement_page.visible = true;
		}
		private function action_chargement_1(e:MouseEvent):void
		{
			chargement_fichier(adresse_1.text.replace('http://',''), "youtube_1.flv");
		}
		private function action_chargement_2(e:MouseEvent):void
		{
			chargement_fichier(adresse_2.text.replace('http://',''), "youtube_2.flv");
		}
		private function action_chargement_3(e:MouseEvent):void
		{
			if (adresse_4.text == "") chargement_fichier(adresse_3.text.replace('http://',''), "youtube_3.flv");
			else chargement_fichier(adresse_3.text.replace('http://',''), "youtube_3.mp4");
		}
		private function action_chargement_4(e:MouseEvent):void
		{
			chargement_fichier(adresse_4.text.replace('http://',''), "youtube_4.flv");
		}
		private function action_chargement_page(e:MouseEvent):void
		{
			gestion_bouton_chargement();
			chargement_page(adresse_page_youtube.text.replace('http://',''));
		}
		private function progression_chargement_fichier(e:ProgressEvent):void
		{
			var progression:Number;
			if (developpement)
			{
				progression = e.bytesLoaded / e.bytesTotal;
				fond_chargement.barre_progression.width = int(progression * 200);
				formater_texte(fond_chargement.texte_pourcentage, int(progression * 100).toString() + " %", true, false, false, 0x000000);
			}
			else
			{
				progression = e.bytesLoaded;
				fond_chargement.barre_progression.width = int((progression  / 1000) % 200);
				formater_texte(fond_chargement.texte_pourcentage, int(progression / 1000).toString() + " Ko", true, false, false, 0x000000);
			}
		}
		private function ouverture_chargement_fichier(e:Event):void
		{
			fond_chargement.visible = true;
			bouton_chargement_page.visible = false;
			formater_texte(code_page, "Téléchargement fichier en cours ...\r", true, false, false, 0x000000);
			if (!developpement) formater_texte(code_page, "Taille du fichier inconnu.\r", true, false, true, 0x000000);
			fond_chargement.barre_progression.width = 0;
		}
		private function fin_chargement_fichier(e:Event):void
		{
			etat_pret = true;
			fond_chargement.visible = false;
			formater_texte(code_page, "Fin téléchargement.\r", true, false, true, 0x000000);
			bouton_chargement_page.visible = true;
		}
		private function annuler_chargement_fichier(e:Event):void
		{
			etat_pret = true;
			formater_texte(code_page, "Annulation téléchargement fichier.\r", true, false, true, 0x000000);
			bouton_chargement_page.visible = true;
		}
		private function action_annuler_chargement(e:MouseEvent):void
		{
			fichier.cancel();
			fond_chargement.visible = false;
			annuler_chargement_fichier(null);
		}
		private function adresse_youtube_clic_souris(e:MouseEvent):void
		{
			adresse_page_youtube.text = "";
		}
	}
}

Conclusion :


Avec le temps, la structure des pages YouTube risque de changer, mais d'ici là ...

Balise pour le swf :

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="480" height="320" id="eryoutube" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="./eryoutube.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="flashvars" value="xy=./xyyt.php&fly=./flvxy.php" />
<embed src="./eryoutube.swf" quality="high" flashvars="xy=./xyyt.php&fly=./flvxy.php" bgcolor="#ffffff" width="480" height="320" name="eryoutube" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_fr" />
</object>

Codes Sources

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.