Posts Tagged ‘mp3’

用Flash AS3正则表达式实现百度的MP3搜索

星期天, 三月 2nd, 2008

利用flash的URLRequest向百度发送关健字,再利用正则表达式提取mp3结果列表.再对结果列表再次请求,获取mp3的真实地址.
下面是具体的类



package {
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.ProgressEvent;
    import flash.net.URLVariables;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.xml.*;
    import flash.events.IOErrorEvent;

    public class Mp3Search extends MovieClip {
        private var xmlTextField:TextField = new TextField();
        //dansion.com dansion@163.com,;
        private var loader:URLLoader;
        private var sub:Number;
        public var Mp3List:Array;

        public function Mp3Search() {
            Mp3List=new Array();
            Mp3_search.trackAsMenu=true;
            Mp3_search.addEventListener(MouseEvent.CLICK,search);
        }
        private function search(event:Event):void {
            var variables:URLVariables=new URLVariables("f=ms&tn=baidump3&ct=134217728&lf=&rn=&lm=0");
            variables.word=input.text;
            var request:URLRequest = new URLRequest();
            request.url="http://mp3.baidu.com/m";
            request.data=variables;

            loader = new URLLoader();

            try {
                loader.load(request);
            } catch (error:SecurityError) {
                trace("A SecurityError has occurred.");
            }

            loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
            loader.addEventListener(ProgressEvent.PROGRESS,loaderProgress);

            trace("btn is donw: "+input.text);
        }
        private function loaderCompleteHandler(event:Event):void {
            progress_txt.text="加载完成";
            //var mp3Exp:RegExp=/http://([w-]+.)+[w-]+([w- ./?$,[]%&;:,+=u4e00-u9fa5]*)?216/g;
            //var mp3Exp:RegExp=/http://[^box][0-9]([w-]+.)+[w-]+([w- ./?$,[]%&;:,+=u4e00-u9fa5]*)?216/g;
            var mp3Exp:RegExp=/http://220.181.38.82([w- ./?$,[]%&;:,+=u4e00-u9fa5]*)?216/g;
            var mp3_array:Array=new Array();
            mp3_array=loader.data.match(mp3Exp);
            //trace(loader.data.match(mp3Exp));
            /*for (var i=0; i<mp3_array.length; i++) {
                //trace("输出:  "+mp3_array[i]+"   结束");
                var chineseExp:RegExp=/[u4e00-u9fa5]+/;
                //trace(mp3_array[i].match(chineseExp));
                Mp3Name.push(mp3_array[i].match(chineseExp));
            }*/
            trace("——————–");
            formatURL(mp3_array);

        }
        private function formatURL(array:Array) {
            for (var i=0; i<array.length; i++) {
                SubLoad(array[i],i);
                //sub=i;
            }
        }
        private function SubLoad(url:String,num:Number) {
            var chineseExp:RegExp=/[u4e00-u9fa5]+/;
                //trace(mp3_array[i].match(chineseExp));
                //trace(url);
            //var mp3name:String=new String();
            var mp3name:String=String(url.match(chineseExp));
            
            var subrequest:URLRequest = new URLRequest();
            subrequest.url=url;
          
60; var sub_loader:URLLoader;
            sub_loader = new URLLoader();
            try {
                sub_loader.load(subrequest);
            } catch (error:SecurityError) {
                trace("A SecurityError has occurred.");
            }
            sub_loader.addEventListener(Event.COMPLETE,SubLoaderComplete);
            //sub_loader.addEventListener(ProgressEvent.PROGRESS,loaderProgress);
            function SubLoaderComplete() {
                progress_txt.text="开始分析第"+mp3name+"搜索结果";
                var SubMp3Exp:RegExp=/http://([w-]+.)+[w-]+([w- ./?%&=u4e00-u9fa5]*)?.mp3/g;
                trace(mp3name+" :: "+sub_loader.data.match(SubMp3Exp)[0]);
            }
        }
        private function loaderProgress(event:ProgressEvent):void {
        progress_txt.text=String(event.bytesLoaded)+"/"+String(event.bytesTotal);
        }
        private function errorHandler(event:IOErrorEvent):void {
            trace("IOErrorEvent 出错");    
        }
    }
}



其中主要是两个正则表达式写法.
新建一个MC链接Mp3Search类,MC里有一个文本输入框(名:input),一个表示按扭的MC(Mp3_search),加载提示动态文本框(progress_txt).

转载请注明出处!

点这里下载