WonderflDownloader
...
@author lizhi
♥0 |
Line 145 |
Modified 2017-03-07 17:50:58 |
MIT License
archived:2017-03-20 15:33:03
ActionScript3 source code
/**
* Copyright lizhi ( http://wonderfl.net/user/lizhi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/gz3y
*/
package
{
import com.bit101.components.HBox;
import com.bit101.components.InputText;
import com.bit101.components.Label;
import com.bit101.components.PushButton;
import com.bit101.components.Style;
import com.bit101.components.TextArea;
import com.bit101.components.VBox;
import deng.fzip.FZip;
import deng.fzip.FZipFile;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.FileReference;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
/**
* ...
* @author lizhi
*/
public class WonderflDownloader extends Sprite
{
private var user:String;
private var page:int = 0;
private var codes:Array = [];
private var userInput:InputText;
private var tf:TextArea;
private var codep:int =-1;
private var allzip:FZip = new FZip;
private var isFavorites:Boolean;
public function WonderflDownloader()
{
Style.embedFonts = false;
Style.fontSize = 12;
var vbox:VBox = new VBox(this, 5, 5);
vbox.spacing = 20;
var hbox:HBox = new HBox();
new Label(hbox, 0, 0, "user");
userInput = new InputText(hbox, 0, 0, "lizhi");
new PushButton(hbox, 0, 0, "start", startHander);
new PushButton(hbox, 0, 0, "start favorites", startFavoritesHander);
vbox.addChild(hbox);
tf = new TextArea(vbox);
tf.setSize(400, 400);
}
private function startHander(e:Event):void
{
isFavorites = false;
user = userInput.text;
page = 0;
nextPage();
}
private function startFavoritesHander(e:Event):void
{
isFavorites = true;
user = userInput.text;
page = 0;
nextPage();
}
private function nextPage():void{
page++;
var loader:URLLoader = new URLLoader;
loader.addEventListener(Event.COMPLETE, loader_complete);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_securityError);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
if (isFavorites)
loader.load(new URLRequest("http://wonderfl.net/user/"+user+"/favorites?page=" + page));
else
loader.load(new URLRequest("http://wonderfl.net/user/"+user+"/codes?page=" + page));
}
private function loader_securityError(e:SecurityErrorEvent):void
{
trace2(e.type);
}
private function loader_complete(e:Event):void
{
trace2(page,e.type);
var loader:URLLoader = e.currentTarget as URLLoader;
var data:String = loader.data +"";
var reg:RegExp =/id\="code_(\S+)"/mg;
var obj:Object;
var have:Boolean = false;
while ((obj = reg.exec(data)) != null){
trace2(obj[1]);
codes.push(obj[1]);
have = true;
}
if(have){
nextPage();
}else{
nextCode();
}
}
private function loader_ioError(e:IOErrorEvent):void
{
trace2(e.type);
nextCode();
}
private function trace2(...args):void{
trace(args);
tf.text += args + "\n";
tf.draw();
tf.textField.scrollV = tf.textField.maxScrollV;
}
private function nextCode():void{
var codeloader:URLLoader = new URLLoader;
codeloader.dataFormat = URLLoaderDataFormat.BINARY;
codeloader.addEventListener(Event.COMPLETE, codeloader_complete);
codeloader.addEventListener(IOErrorEvent.IO_ERROR, codeloader_ioError);
codeloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, codeloader_securityError);
codep++;
var code:String = codes[codep];
if(code){
codeloader.load(new URLRequest("http://wonderfl.net/c/" + code+"/download"));
}else{
var file:FileReference = new FileReference;
var b:ByteArray = new ByteArray;
allzip.serialize(b);
file.save(b, user+(isFavorites?"_favorites_":"") + "_wonderfl.zip");
}
}
private function codeloader_securityError(e:SecurityErrorEvent):void
{
trace2(e.type);
}
private function codeloader_ioError(e:IOErrorEvent):void
{
trace2(e.type, codes[codep], "reload");
codep--;
nextCode();
}
private function codeloader_complete(e:Event):void
{
var data:ByteArray = (e.currentTarget as URLLoader).data as ByteArray;
var fzip:FZip = new FZip;
fzip.loadBytes(data);
for (var i:int = 0; i < fzip.getFileCount();i++ ){
var f:FZipFile = fzip.getFileAt(i) as FZipFile;
trace2(f.filename);
///trace(f.getContentAsString());
}
allzip.addFile(codes[codep] + ".zip", data);
nextCode();
}
}
}