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.