Dávkové snímkování webů
Na root.cz jsem nedávno objevil zajímavý článek o tom, jak Seznam.cz provádí snímání webů. Nejvíce mne upoutala zmínka o webkit jádru, které bylo uvažováno jako jedna nových alternativ pro nový systém snímání obrazovek. Nejčastěji byly zmiňované problémy se špatnou detekcí kompletního načtení webové stránky a tak jsem si vzpoměl na AIR, kde máme také Webkit k dispozici a kde je detekce kompletního načtení webu k dispozici. Během hodinky tak byl na světě AIRový program, který snímá webové stránky bez nutnosti naší interakce. Zdroják aplikace je v detailu článku.

Zdrojový kód aplikace:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" horizontalAlign="left">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.controls.Image;
import mx.graphics.codec.JPEGEncoder;
import mx.managers.CursorManager;
import mx.graphics.ImageSnapshot;
private var URLS:Array = ["http://www.flash.cz/portal/","http://www.adobe.com/","http://www.zive.cz/default.aspx"];
private var snapW:uint = 200;
private var snapH:uint = 150;
private function startConvert():void{
browser.addEventListener(Event.COMPLETE,loadcomplete);
saveScreen();
}
private function nextBatch():void{
if(URLS.length>0){
browser.location = URLS.pop();
CursorManager.setBusyCursor();
}
}
private var imgs:uint = 1;
private function saveScreen():void{
var sx:Number = snapW/browser.width;
var sy:Number = snapH/browser.height;
var resizer:Matrix=new Matrix();
resizer.scale(sx,sy);
var bmp:BitmapData = ImageSnapshot.captureBitmapData(browser,resizer,null,null,null,true);
var jpgEnc:JPEGEncoder = new JPEGEncoder(100);
var jpgBytes:ByteArray = jpgEnc.encode(bmp);
//vytvoření náhledu
var s_img:Bitmap = new Bitmap(bmp);
var uic:UIComponent = new UIComponent();
uic.width = s_img.width;
uic.height = s_img.height;
uic.addChild(s_img);
box.addChild(uic);
//uložení souboru
var file:File = File.documentsDirectory;
file = file.resolvePath(img.text+".jpg");
var IMG:FileStream = new FileStream();
IMG.openAsync(file,FileMode.WRITE);
IMG.writeBytes(jpgBytes);
IMG.close();
img.text ="img"+String(imgs);
imgs++;
CursorManager.removeBusyCursor();
nextBatch();
}
[Bindable]
private var goSave:Boolean = false;
private function loadcomplete(evt:Event):void{
saveScreen();
}
]]>
</mx:Script>
<mx:Panel width="250" height="100%" layout="vertical" title="Snímky" id="screens">
<mx:VBox height="100%" id="box">
</mx:VBox>
</mx:Panel>
<mx:ApplicationControlBar dock="true">
<mx:Button click="startConvert()" label="Start Batch"/>
<mx:TextInput id="img" text="img" width="222"/>
</mx:ApplicationControlBar>
<mx:HTML width="1024" height="768" location="http://www.google.cz" id="browser"/>
</mx:WindowedApplication>
Samotná aplikace kromě snímků ukládá i vytvořené náhledy do adresáře Documents.
Leden 18th, 2010 at 19.19
Some people do not get know where to get the dissertation international close to this post. So, I can offer your nice tought. But some of them would look for the thesis writing service.