/[scripts]/trunk/webthumb
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/webthumb

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by dpavlin, Mon Jul 26 06:48:59 2004 UTC revision 61 by dpavlin, Wed Feb 6 21:26:10 2008 UTC
# Line 27  Line 27 
27  # import (part of ImageMagick package)  # import (part of ImageMagick package)
28  #  #
29  # It will create snapshot of following size  # It will create snapshot of following size
30  W=800  W=1024
31  H=800  H=768
32    
33  # and then resize it to  # and then resize it to (comment out to disable)
34  RESIZE=200x  #RESIZE=200x
35    
36    # turn locally visible Xnest server to watch progress
37    DEBUG=0
38    test ! -z "$3" && DEBUG=1
39    
40    # wait for $WAIT seconds for page to load
41    WAIT=30
42    
43  # some configurable paths  # some configurable paths
44  BROWSER=mozilla-firefox  BROWSER=mozilla-firefox
45  XSERVER=vncserver  XSERVER=Xvfb
46    XWIT=xwit
47  URL=$1  URL=$1
48  FILE=${2:-screenshot.jpg}  FILE=${2:-screenshot.jpg}
49    
50  FRAMESET="`mktemp`.html"  FRAMESET="`mktemp`.html"
51    PROFILE_DIR=`mktemp -d`
52  PORT=8888  PORT=8888
53    
54    LOCAL_DISPLAY=$DISPLAY
55    
56    if [ -z "$URL" ] ; then
57            echo "usage: $0 http://url.to.capture [screenshot.jpg]"
58            exit 1
59    fi
60    
61    if [ -z "`which $XWIT`" ] ; then
62            echo "$0 really need $XWIT to operate. please install it."
63            exit 1
64    fi
65    
66    if [ -z "`which $XSERVER`" ] ; then
67            echo "$0 really need $XSERVER to operate. please install it."
68            exit 1
69    fi
70    
71    while netstat -ln | grep ":$PORT " >/dev/null ; do
72            PORT=`expr $PORT + 1`
73    done
74    
75    echo "### using port $PORT"
76    
77  echo -n "testing URL $URL "  echo -n "testing URL $URL "
78  if HEAD $URL >/dev/null ; then  if HEAD $URL >/dev/null ; then
79          echo "ok"          echo "ok"
# Line 50  else Line 82  else
82          exit 1          exit 1
83  fi  fi
84    
85  echo "starting vnc X server"  echo "starting X server $XSERVER"
86    
87    export DISPLAY=:42
88    
 export DISPLAY=`$XSERVER -geometry ${W}x${H} -depth 24 2>&1 \  
         | grep : | head -1 | cut -d: -f2 | sed 's/^/:/'`  
89    
90  function kill_vnc() {  if [ "$DEBUG" == 1 ] ; then
91          vncserver -kill $DISPLAY          echo "Using locally visible debug server on $LOCAL_DISPLAY"
92            Xnest -display $LOCAL_DISPLAY -ac -geometry ${W}x${H} -depth 24 $DISPLAY 2>/dev/null &
93    else
94            $XSERVER -ac -screen 0 ${W}x${H}x24 $DISPLAY 2>/dev/null &
95    fi
96    
97    XSERVER_PID=$!
98    echo "using pid $XSERVER_PID for X server"
99    
100    function kill_x_server() {
101            echo "Killing server $XSERVER_PID"
102            kill $XSERVER_PID
103          rm -f $FRAMESET          rm -f $FRAMESET
104            rm -fr $PROFILE_DIR
105            exit 1
106  }  }
107  trap 'echo "QUIT!" >&2; kill_vnc; exit 1' INT QUIT TERM SEGV  trap 'kill_x_server' INT QUIT TERM SEGV EXIT
108    
109  # create frameset to load site and after site is loaded trigger this script  # create frameset to load site and after site is loaded trigger this script
110  cat > $FRAMESET <<END_OF_FRAMESET  cat > $FRAMESET <<END_OF_FRAMESET
# Line 75  END_OF_FRAMESET Line 120  END_OF_FRAMESET
120    
121  echo "Using frameset html $FRAMESET"  echo "Using frameset html $FRAMESET"
122    
123  echo "preview available with: vncviewer $DISPLAY"  echo "preview available with: xwd -display $DISPLAY -root | xwud"
124    
125  echo "making 'Screenshot' profile"  echo "making 'Screenshot' profile in $PROFILE_DIR"
126  $BROWSER -CreateProfile Screenshot | grep Success  $BROWSER -CreateProfile "Screenshot $PROFILE_DIR" 2>/dev/null | grep Success
127    
128  echo "launching browser $BROWSER with $URL"  echo "launching browser $BROWSER with $URL"
129  $BROWSER -id Screenshot -P Screenshot -width $W -height $H $FRAMESET 2>&1 >/dev/null &  $BROWSER -P Screenshot -width $W -height $H $FRAMESET 2>/dev/null &
130    BROWSER_PID=$!
131    
132  echo "staring web server (wait for page to load)"  function kill_browser() {
133            echo "Killing browser $BROWSER_PID"
134            kill $BROWSER_PID
135            echo "Killing server $XSERVER_PID"
136            kill $XSERVER_PID
137            rm -f $FRAMESET
138            rm -fr $PROFILE_DIR
139            exit 1
140    }
141    trap 'kill_browser' INT QUIT TERM SEGV EXIT
142    
143    echo "waiting for on_load event from browser $BROWSER_PID for ${WAIT}s"
144    
145  # there is hard-coded limit here:  # there is hard-coded limit here:
146  # we will wait 60sec for page to load and render  # we will wait $WAIT sec for page to load and render
147    
148  echo -e "HTTP/1.0 304 Not modified\r\n\r\n" | nc -l -w 60 -p $PORT >/dev/null  echo -e "HTTP/1.0 304 Not modified\r\n\r\n" | nc -l -w $WAIT -p $PORT >/dev/null || echo "Timeout after $WAIT sec!"
149    
150  # get Mozilla Firefox window id (for resize)  # get Mozilla Firefox window id (for resize)
151    WINDOW_ID=`xwininfo -display $DISPLAY -root -tree | grep gecko | cut -d\" -f1 | sort -n | head -1`
 WINDOW_ID=`xwininfo -display $DISPLAY -name "Mozilla Firefox" | grep "Window id:" | cut -d" " -f4`  
152    
153  if [ -z "$WINDOW_ID" ] ; then  if [ -z "$WINDOW_ID" ] ; then
154          echo "can't find window with name 'Mozilla Firefox'"          echo "can't find window with name 'Mozilla Firefox'"
155          exit 1          exit 1
156  fi  fi
157    
158    # move window to foreground
159    $XWIT -display $DISPLAY -id $WINDOW_ID -pop
160    
161  echo "resizing window $WINDOW_ID to maximum size"  echo "resizing window $WINDOW_ID to maximum size"
162  xwit -display $DISPLAY -id $WINDOW_ID -resize $W $H  $XWIT -display $DISPLAY -id $WINDOW_ID -move 0 0
163    $XWIT -display $DISPLAY -id $WINDOW_ID -resize $W $H
164    
165    
166  echo -n "wating for browser ping..."  echo -n "wating for browser ping..."
# Line 121  if [ -z "$DUMP_ID" ] ; then Line 180  if [ -z "$DUMP_ID" ] ; then
180  fi  fi
181    
182  echo "saving window $DUMP_ID to $FILE"  echo "saving window $DUMP_ID to $FILE"
183  import -window $DUMP_ID -geometry $RESIZE $FILE  if [ ! -z "$RESIZE" ] ; then
184            RESIZE="-geometry $RESIZE"
185    fi
186    
187  kill_vnc  import -window $DUMP_ID $RESIZE $FILE
188    

Legend:
Removed from v.1  
changed lines
  Added in v.61

  ViewVC Help
Powered by ViewVC 1.1.26