LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 07-12-2006, 08:32 PM   #16
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30

This has me confused because:

Code:
stardotstar@geko ~ $ file -bi /tmp/splash_daily.jpg 
image/jpeg
and yet despite changine and/or removing the file section I get no joy.

Code:
stardotstar@geko ~ $ xloadimage -onroot /tmp/img.264c8bb569b018170488a59aa1 
Warning: unknown JFIF revision number 0.00
/tmp/img.264c8bb569b018170488a59aa1: unknown or unsupported image type

stardotstar@geko ~ $ file -bi /tmp/img.264c8bb569b018170488a59aa1 
application/x-empty
I think I am understanding what the egrep does - detects from the original file name what the extention is and attaches that to the file command. But I can't actually see what this is asking file to do... man file does not tell me about "setting" the file type this way and so:

Code:
stardotstar@geko ~ $ file -bi /tmp/img.264c8bb569b018170488a59aa1 image/jpeg
application/x-empty
cannot open `image/jpeg' (No such file or directory)
so clearly I am not understanding the purpose of the file command in the script - But then again I don't really know how all the escape characters and conditional statements work.

Without the file statement google gif works just fine:
Code:
stardotstar@geko ~ $ ./backgrounder.2 http://www.google.com/ncr
/tmp/img.74b42f74785bd34f07611f44da is a 276x110 GIF image with 256 colors
  Building XImage...done
so somehow the jpeg is not wanting to play at all...

Will
 
Old 07-12-2006, 09:38 PM   #17
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
Strange, it is not quite doing what I expected. I'll try to summarise my findings and if you can see the benefit of pursuing it I appreciate it - but I understand the effort you have gone to already and don't want to turn this into a new sf project

I have removed the file removal so I can compare what is captured. It seems that anything except gifs get 0 file size and are unknown type.

Here is the result of executing the script on several pages and the list of files generated, IBM and Google worked anything that found a png or jpg failed to write any content:

Code:
stardotstar@geko ~ $ sh -x ./backgrounder.1 http://www.kernel.org 2>&1               
+ uri=http://www.kernel.org
+ wget -O - http://www.kernel.org
+ tr '[A-Z]' '[a-z]'
+ grep -ie '\<img.*src='
+ head -1
+ sed -e 's/.*<img/<img/g' -e 's/><.*$/>/g'
+ read l
+ l=(${l})
++ seq 0 7
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo '<im'
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo sty
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo sol
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo '#bb'
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo src
+ grep -qie src
++ dirname http://www.kernel.org
++ echo '"http://www1.kernel.org/bw-zeus1.png"'
++ tr -d '"'
+ img=http:http://www1.kernel.org/bw-zeus1.png
+ break
++ sha1sum
++ cut -c 1-26
++ date
+ rand=5c9cbd7d07df9a7eb87bf46873
+ wget -q http:http://www1.kernel.org/bw-zeus1.png -O /tmp/img.5c9cbd7d07df9a7eb87bf46873
+ read l
+ exit 0
stardotstar@geko ~ $ ls -l /tmp/img*
-rw-r--r-- 1 stardotstar stardotstar 0 Jul 13 12:10 /tmp/img.5c9cbd7d07df9a7eb87bf46873
Code:
stardotstar@geko ~ $ sh -x ./backgrounder.2 http://www.ibm.org 2>&1
+ uri=http://www.ibm.org
+ tr '[A-Z]' '[a-z]'
+ grep -ie '\<img.*src='
+ head -1
+ sed -e 's/.*<img/<img/g' -e 's/><.*$/>/g'
+ read l
+ wget -O - http://www.ibm.org
+ l=(${l})
++ seq 0 6
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo '<im'
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo hei
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo wid
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo bor
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo alt
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo src
+ grep -qie src
++ dirname http://www.ibm.org
++ echo '"//www.ibm.com/i/v14/t/ibm-logo.gif"'
++ tr -d '"'
+ img=http://www.ibm.com/i/v14/t/ibm-logo.gif
+ break
++ date
++ sha1sum
++ cut -c 1-26
+ rand=9eff1d95e7b8154bd10389f9d4
+ wget -q http://www.ibm.com/i/v14/t/ibm-logo.gif -O /tmp/img.9eff1d95e7b8154bd10389f9d4
+ file -bi /tmp/img.9eff1d95e7b8154bd10389f9d4
+ egrep -qe '^image\/(gi|j[pf]|pn)'
+ xloadimage -onroot /tmp/img.9eff1d95e7b8154bd10389f9d4
/tmp/img.9eff1d95e7b8154bd10389f9d4 is a 110x52 GIF image with 16 colors
  Building XImage...done
+ break
+ exit 0
stardotstar@geko ~ $ ls -l /tmp/img*
-rw-r--r-- 1 stardotstar stardotstar   0 Jul 13 12:10 /tmp/img.5c9cbd7d07df9a7eb87bf46873
-rw-r--r-- 1 stardotstar stardotstar 430 Oct  8  2004 /tmp/img.9eff1d95e7b8154bd10389f9d4
as you can see the IBM gif saved at 430 bytes and xloadimage worked fine.
so too below for google:

Code:
stardotstar@geko ~ $ sh -x ./backgrounder.2 http://www.google.com/ncr 2>&1
+ uri=http://www.google.com/ncr
+ wget -O - http://www.google.com/ncr
+ tr '[A-Z]' '[a-z]'
+ grep -ie '\<img.*src='
+ head -1
+ sed -e 's/.*<img/<img/g' -e 's/><.*$/>/g'
+ read l
+ l=(${l})
++ seq 0 4
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ grep -qie src
+ echo '<im'
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo src
+ grep -qie src
++ dirname http://www.google.com/ncr
++ echo '"/intl/en/images/logo.gif"'
++ tr -d '"'
+ img=http://www.google.com/intl/en/images/logo.gif
+ break
++ date
++ sha1sum
++ cut -c 1-26
+ rand=29a9da6b4c41a55add118c1f7d
+ wget -q http://www.google.com/intl/en/images/logo.gif -O /tmp/img.29a9da6b4c41a55add118c1f7d
+ file -bi /tmp/img.29a9da6b4c41a55add118c1f7d
+ egrep -qe '^image\/(gi|j[pf]|pn)'
+ xloadimage -onroot /tmp/img.29a9da6b4c41a55add118c1f7d
/tmp/img.29a9da6b4c41a55add118c1f7d is a 276x110 GIF image with 256 colors
  Building XImage...done
+ break
+ exit 0
stardotstar@geko ~ $ ls -l /tmp/img*
-rw-r--r-- 1 stardotstar stardotstar 8558 Jun  8 05:38 /tmp/img.29a9da6b4c41a55add118c1f7d
-rw-r--r-- 1 stardotstar stardotstar    0 Jul 13 12:10 /tmp/img.5c9cbd7d07df9a7eb87bf46873
-rw-r--r-- 1 stardotstar stardotstar  430 Oct  8  2004 /tmp/img.9eff1d95e7b8154bd10389f9d4
-rw-r--r-- 1 stardotstar stardotstar    0 Jul 13 12:06
When I point at a jpg - like the png it always just producds a null file type and content:

Code:
stardotstar@geko ~ $ file -bi /tmp/img*
image/gif
application/x-empty
image/gif
application/x-empty
application/x-empty
application/x-empty
Thanks

Will

UPDATE - I simplified the script further to try and see what was not working:

Code:
stardotstar@geko ~ $ sh -x ./backgrounder.4 http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ uri=http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ wget -O - http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ tr '[A-Z]' '[a-z]'
+ grep -ie '\<img.*src='
+ head -1
+ sed -e 's/.*<img/<img/g' -e 's/><.*$/>/g'
+ read l
+ l=(${l})
++ seq 0 1
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo '<im'
+ grep -qie src
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo src
+ grep -qie src
++ dirname http://antwrp.gsfc.nasa.gov/apod/astropix.html
++ echo '"image/0607/shuttlego_nasa.gif"'
++ tr -d '"'
+ img=http://antwrp.gsfc.nasa.gov/apodimage/0607/shuttlego_nasa.gif
+ break
+ wget -q http://antwrp.gsfc.nasa.gov/apodimage/0607/shuttlego_nasa.gif -O /tmp/img.daily
+ xloadimage -onroot /tmp/img.daily
Warning: unknown JFIF revision number 0.00
/tmp/img.daily: unknown or unsupported image type
+ read l
+ exit 0
stardotstar@geko ~ $ cat backgrounder.4
#!/bin/sh
uri="$1"; wget -O - "$uri" 2>/dev/null|tr [A-Z] [a-z]|grep -ie "\<img.*src=" 2>/dev/null|head -1\
|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})
 for i in $(seq 0 $[${#l[@]}-1]); do
  echo "${l[$i]:0:3}"|grep -qie src && { img="$(dirname "$uri")$(echo ${l[$i]:4}|tr -d "\"")"; break; };
 done
wget -q "$img" -O "/tmp/img.daily";
xloadimage -onroot "/tmp/img.daily" ;
done; exit 0
stardotstar@geko ~ $ ls -l /tmp/img.daily 
-rw-r--r-- 1 stardotstar stardotstar 0 Jul 13 15:50 /tmp/img.daily
This is a good site to test because it has daily changing images adn they vary file types... The current gif there is not working but it is an animation so maybe that is that.

Last edited by stardotstar; 07-13-2006 at 12:58 AM.
 
Old 07-15-2006, 06:03 AM   #18
unSpawn
Moderator
 
Registered: May 2001
Posts: 29,415
Blog Entries: 55

Rep: Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594
"File" doesn't set anything, it just reads the MIME tag (in this case, due to -i). Egrep then (silently: -q) tries to match any string starting with "image/" and gi, jp or pn. "application/x-empty" means wget retrieved the file OK, but the file does not contain data. I'll cleanup some other stuff, rewrite in full and add comments. Note you loose PNG because xloadimage doesn't support it. You can of course always subsitute it for a loader that does. Also note you need to provide an URI in the format protocol://domain.tld/file.extension so protocol://domain.tld/ will not do. I could fix it by checking for and counting slashes or TLD position in "${uri:7}" and then not using "dirname" but not now. I also kept in recognition using "file" because I think that's the minimal check to do. I don't want to rely on extension alone.

Code:
#!/bin/sh
# Whatever first parameter is supplied serves as URI to grab.
uri="$1"
# If no arg given or protocol doesn't match that for teh intarweb we exit with a warning.
if [ "$#" != "1" -o "${uri:0:7}" != "http://" ]; then
 echo "${0##*/}: only one parameter needed: (URI + HTML rendered page: http://doma.in/file.ext), exiting." > /dev/stderr
 exit 1
fi
# Grab file and dump on stdout, make all lowercase, grep for HTML image tag, and only use first line.
# (not grep -m1), sed strips off tags before and after. Now dump the string in variable "l" and turn it into array.
wget -O - "$uri" 2>/dev/null|tr [A-Z] [a-z]|grep -ie "\<img.*src=" 2>/dev/null|head -1\
|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})
 # for each element in the array check if it matches the HTML image "src" tag,
 # first found match (break) gets stuffed in the "img" variable.
 for i in $(seq 0 $[${#l[@]}-1]); do
  echo "${l[$i]:0:3}"|grep -qie src
  if [ "$?" = "0" ]; then
    # Make compound of URI base, strip the src= part.
    img="$(dirname "$uri")$(echo ${l[$i]:4}|tr -d "\"")"
    # Decidedly lame way to strip not having a page:
    if [ "${img:0:10}" = "http:http:" ]; then
     img=${img:5}
    fi
    break
  fi
 done
 # Lame way to get a randomised string for temp file.
 rand=$(date|sha1sum|cut -c 1-26)
 # Grab image and output to temp file.
 wget -q "$img" -O "/tmp/img.$rand"
 if [ -s "/tmp/img.$rand" ]; then
 # If size is not nil, check magic and find GIF or JPEG-type image (case insensitive).
  file -bi "/tmp/img.$rand" 2>/dev/null|egrep -qie "^image/(gi|jp)"
   if [ "$?" = "0" ]; then
    loadImgRes=$(xloadimage -onroot "/tmp/img.$rand" 2>&1)
    # If xloadimage fails dump some info to stderr.
    if [ "$?" != "0" ]; then
      echo "${0##*/}: xloadimage failed with message \"${loadImgRes}\"."
      echo "${0##*/}: grabbed image was \"${img}\"."
      echo "${0##*/}: temp image stats:"
      stat "/tmp/img.$rand" 1>&2
      file "/tmp/img.$rand" 1>&2
    fi
   else
    # Issue warning for unsupported image
    echo "${0##*/}: grabbed image is unsupported by xloadimage." > /dev/stderr
   fi
 else
 # Add a warning for zero-sized images.
   echo "${0##*/}: grabbed image was empty." > /dev/stderr
 fi
 # Remove the temporary image regardless.
 rm -f "/tmp/img.$rand"
# End of outer loop.
done
exit 0
BTW, thanks the debug output and for helping make *your* application "better".
 
Old 07-16-2006, 12:22 AM   #19
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
Wow, thanks heaps. I really appreciate your taking the time to work on this project for me I am following the code and it is very informative - one day I hope to be able to tackle stuff like this.

I am still running into the zero size get problem. The astropix site is a good reference because they have only one pic and it changes from gif to jpg regularly which is the situation on my intranet (mainly catalogue pics that could be jpeg straight from a digital camera or gifs needing transparency for inclusion in a website. etc.)

http://antwrp.gsfc.nasa.gov/apod/astropix.html
I am using that for reference whilst at home over weekend at at nights because the intranet is not available.

I find that I am still continually getting zero file sizes but when I point wget directly at the image link it works...

Code:
geko stardotstar # xloadimage -onroot gcenter_2mass_big.jpg 
gcenter_2mass_big.jpg is a 620x1214 JPEG image, color space YCbCr, 3 comps, Huffman coding.
  Building XImage...done
works manually but when the backgrounder script is called:

Code:
geko stardotstar # wget http://antwrp.gsfc.nasa.gov/apod/image/0607/gcenter_2mass_big.jpg
--15:20:11--  http://antwrp.gsfc.nasa.gov/apod/image/0607/gcenter_2mass_big.jpg
           => `gcenter_2mass_big.jpg.1'
Resolving antwrp.gsfc.nasa.gov... 128.183.17.121
Connecting to antwrp.gsfc.nasa.gov|128.183.17.121|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 626,425 (612K) [image/jpeg]

100%[====================================>] 626,425       53.18K/s    ETA 00:00

15:20:24 (50.48 KB/s) - `gcenter_2mass_big.jpg.1' saved [626425/626425]
perhaps it is a timeout thing... wget the image works and then the root window allows it to be set.
Code:
geko stardotstar # sh -x /home/stardotstar/backgrounder.4 http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ uri=http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ '[' 1 '!=' 1 -o http:// '!=' http:// ']'
+ wget -O - http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ tr '[A-Z]' '[a-z]'
+ grep -ie '\<img.*src='
+ head -1
+ sed -e 's/.*<img/<img/g' -e 's/><.*$/>/g'
+ read l
+ l=(${l})
++ seq 0 1
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo '<im'
+ grep -qie src
+ '[' 1 = 0 ']'
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo src
+ grep -qie src
+ '[' 0 = 0 ']'
++ dirname http://antwrp.gsfc.nasa.gov/apod/astropix.html
++ echo '"image/0607/gcenter_2mass.jpg"'
++ tr -d '"'
+ img=http://antwrp.gsfc.nasa.gov/apodimage/0607/gcenter_2mass.jpg
+ '[' http://ant = http:http: ']'
+ break
++ date
++ sha1sum
++ cut -c 1-26
+ rand=b0a9622f6ca5ad0e12610caa41
+ wget -q http://antwrp.gsfc.nasa.gov/apodimage/0607/gcenter_2mass.jpg -O /tmp/img.b0a9622f6ca5ad0e12610caa41
+ '[' -s /tmp/img.b0a9622f6ca5ad0e12610caa41 ']'
+ echo 'backgrounder.4: grabbed image was empty.'
backgrounder.4: grabbed image was empty.
+ rm -f /tmp/img.b0a9622f6ca5ad0e12610caa41
+ read l
+ exit 0
I am not at work now but the symptoms are the same as they were previously - so I havn;t bothered to turn off image cleanup.
BTW I have been prowling around sf and googling this type of solution and found chbg and such but they are not nearly as simple and convenient as this script.

Will

Last edited by stardotstar; 07-16-2006 at 12:24 AM.
 
Old 07-16-2006, 04:34 AM   #20
unSpawn
Moderator
 
Registered: May 2001
Posts: 29,415
Blog Entries: 55

Rep: Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594Reputation: 3594
getImg.sh 1.4 (final)

I am still running into the zero size get problem.
That's because of how the img src links work, sometimes relative, sometimes full paths:
Code:
./getImg-v2.sh http://www.google.com/ncr
base: "http://www.google.com"
img: "/intl/en/images/logo.gif"
./getImg-v2.sh http://www.kernel.org
base: "http:"
img: "http://www1.kernel.org/bw-zeus1.png"
./getImg-v2.sh http://www.ibm.org
base: "http:"
img: "//www.ibm.com/i/v14/t/ibm-logo.gif"
./getImg-v2.sh http://antwrp.gsfc.nasa.gov/apod/astropix.html
base: "http://antwrp.gsfc.nasa.gov/apod"
img: "image/0607/gcenter_2mass.jpg"

I've corrected that and added some checks. After testing with your submitted URI's I consider this somewhat "final" but it still isn't optimised etc, etc. Please respect the License and retain comment headers when using/distributing.
Code:
#!/bin/bash
# getImg.sh 1.4 unspawn (www.linuxquestions.org) for stardotstar
# Purpose: grab web-based image from page (URI)
# License: GPLv2
# Args: 1: http://doma.in/HTML-rendered-page.ext
# Deps: Bash, GNU utils, wget, xloadimage
# Run from: manual or cron

# Checks
# 0. wget, xloadimage
for b in wget xloadimage; do
 which $b 2>&1>/dev/null; case "$?" in 
  0) ;;
  *) echo "${0##*/}: $b not found or not in PATH, exiting"\
      > /dev/stderr; exit 127;;
 esac
done

# Whatever first parameter is supplied serves as URI to grab.
uri="$1"
# 2. If no arg given or protocol doesn't match that for teh intarweb we exit with a warning.
if [ "$#" != "1" -o "${uri:0:7}" != "http://" ]; then
 echo "${0##*/}: only one parameter needed: (URI + HTML rendered page: http://doma.in/file.ext), exiting." > /dev/stderr
 exit 1
fi
# Grab file and dump on stdout, make all lowercase, grep for HTML image tag, and only use first line.
# (not grep -m1), sed strips off tags before and after. Now dump the string in variable "l" and turn it into array.
wget -O - "$uri" 2>/dev/null|tr [A-Z] [a-z]|grep -ie "\<img.*src=" 2>/dev/null|head -1\
|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})
 # for each element in the array check if it matches the HTML image "src" tag,
 # first found match (break) gets stuffed in the "img" variable.
 for i in $(seq 0 $[${#l[@]}-1]); do
  echo "${l[$i]:0:3}"|grep -qie src
  if [ "$?" = "0" ]; then
    # Strip the src= part.
    #img="$(echo ${l[$i]:4}|tr -d "\"")"
    img="$(echo ${l[$i]:4}|tr -d "\"")"
    break
  fi
 done

 # Correct wrong approach:
 # 3. Get base
 base=$(dirname "$uri")
 # 4. Correct ifempty
 if [ "${#base}" = "5" -a "${base}" = "http:" ]; then
  base=EMPTY
  # 5. Follows whole URI is contained in img tag
  if [ "${img:0:2}" = "//" ]; then
   img="http://${img:2}"
  fi
 else
  img="${base}/${img}"
 fi
 # Minor checks
 # 6. Bail out if img is empty
 if [ "${#img}" -lt "18" -o -z "${img}" ]; then
  echo "${0##*/}: img URI too short or empty (\""${img}"\")." > /dev/stderr
  exit 1
 fi
 # Lame way to get a randomised string for temp file.
 rand=$(date|sha1sum|cut -c 1-26)
 # Grab image and output to temp file.
 wget -q "$img" -O "/tmp/img.$rand"
 if [ -s "/tmp/img.$rand" ]; then
 # 7. If size is not nil, check magic and find GIF or JPEG-type image (case insensitive).
  file -bi "/tmp/img.$rand" 2>/dev/null|egrep -qie "^image/(gi|jp)"
   if [ "$?" = "0" ]; then
    loadImgRes=$(xloadimage -onroot "/tmp/img.$rand" 2>&1)
    # 8. If xloadimage fails dump some info to stderr.
    if [ "$?" != "0" ]; then
      echo "${0##*/}: xloadimage failed with message \"${loadImgRes}\"."
      echo "${0##*/}: grabbed image was \"${img}\"."
      echo "${0##*/}: temp image stats:"
      stat "/tmp/img.$rand" 1>&2
      file "/tmp/img.$rand" 1>&2
    fi
   else
    # Issue warning for unsupported image
    echo "${0##*/}: grabbed image is unsupported by xloadimage." > /dev/stderr
   fi
 else
 # Add a warning for zero-sized images.
   echo "${0##*/}: grabbed image was empty." > /dev/stderr
 fi
 # Remove the temporary image regardless.
 rm -f "/tmp/img.$rand"
# End of outer loop.
done
exit 0

* If you (stardotstar) want to do something in return (though no pressure, this script is provided for free so if you can't / won't I understand), then post the name of a (GNU/Linux distro-agnostic!) background image loader that does handle PNG and other image formats. That's all. Have fun!
 
Old 07-16-2006, 06:34 AM   #21
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
Of course I will respect the GPLv2 Licence and I am very appreciative of your efforts and insight into my particular problem. This, to me, is the very heart of the open source community spirit and I revere you for your skill and admire the willingness you exhibit in sharing it.

If I can find a programme which
Quote:
a (GNU/Linux distro-agnostic!) background image loader that does handle PNG and other image formats.
I will most certainly publish it here. Certainly your assistance has assisted me in making some substantial steps toward being able to tackle such things myself as an aspiring programmer.

Best Regards,
Will.*
 
Old 07-20-2006, 05:44 PM   #22
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
This application is working a treat and I want first of all to thank you despawn for taking the time to develop it for me - and teaching me a new level in scripting. I am proud to say that this has led to my actually being able to demonstrate that I have *tried* to solve the current requirement I need to add to the script to finish it and make it match the windows clients...

The script currently loads the picture of the day perfectly (well I can't get it to work as well with multiple screens as Windows but that is way out of scope :lol: ) but the product or content is accompanied by a part number/name and description.

I am trying to get ImageMagick to print the name of the image on the picture and have so far got it to print static text but can't get it to write the ${img} - which I think is what it should be...

the relevant part is:

Code:
addTitleText=$(convert -fill white -draw 'text 100,100 "${img}"' /tmp/img.$rand /tmp/titled 2>&1)
	loadImgRes=$(xloadimage -onroot -center -border black -fullscreen "/tmp/titled" 2>&1)
All this does is write ${img} on the image in white at 100,100

I have also not been able to get convert to output over the top of the img.$rand or write *to* titled.$rand because of syntax problems (I must get a good tutorial on scripting). I also tried to echo the output of the file name to a text file with:

'text 100,100 ${img}'

appended and then call that in the script with convert using the @ modifier. to no avail...

I'm sure all this is just knowledge about how to insert variables in scripts with respect to "'\/ etc - makes my head spin

Ideally if I can strip the .jpg or .gif or whatever off the name and print it on the image it will be adequete - I will work out how to add the comments later.

Can I get some assistance with this please?

This is the current full listing (you will see that I have butchered some of it by writing the daily randomised file name to a wallpaper directory so the screensaver uses it, and removal of the titled temp file as well as the img.$rand at the end.

Oh, and root tail since I can now use it with nautilus background management turned off :grin:

Finally, can we not just use convert/ImageMagick to handle any file types that are not compatible with xloadimage??? That would satisfy the request you made in your last post? (just a thought>)


Code:
#!/bin/bash
# getImg.sh 1.4 unspawn (www.linuxquestions.org) for stardotstar
# Purpose: grab web-based image from page (URI)
# License: GPLv2
# Args: 1: http://doma.in/HTML-rendered-page.ext
# Deps: Bash, GNU utils, wget, xloadimage
# Run from: manual or cron

# Checks
# 0. wget, xloadimage
for b in wget xloadimage; do
 which $b 2>&1>/dev/null; case "$?" in 
  0) ;;
  *) echo "${0##*/}: $b not found or not in PATH, exiting"\
      > /dev/stderr; exit 127;;
 esac
done

# Set a pretty repeat pattern while we wait for the image to load. 

xloadimage -onroot /home/stardotstar/wallpaper.png

# Whatever first parameter is supplied serves as URI to grab.
uri="$1"
# 2. If no arg given or protocol doesn't match that for teh intarweb we exit with a warning.
if [ "$#" != "1" -o "${uri:0:7}" != "http://" ]; then
 echo "${0##*/}: only one parameter needed: (URI + HTML rendered page: http://doma.in/file.ext), exiting." > /dev/stderr
 exit 1
fi
# Grab file and dump on stdout, make all lowercase, grep for HTML image tag, and only use first line.
# (not grep -m1), sed strips off tags before and after. Now dump the string in variable "l" and turn it into array.
wget -O - "$uri" 2>/dev/null|tr [A-Z] [a-z]|grep -ie "\<img.*src=" 2>/dev/null|head -1\
|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})
 # for each element in the array check if it matches the HTML image "src" tag,
 # first found match (break) gets stuffed in the "img" variable.
 for i in $(seq 0 $[${#l[@]}-1]); do
  echo "${l[$i]:0:3}"|grep -qie src
  if [ "$?" = "0" ]; then
    # Strip the src= part.
    #img="$(echo ${l[$i]:4}|tr -d "\"")"
    img="$(echo ${l[$i]:4}|tr -d "\"")"
    break
  fi
 done

 # Correct wrong approach:
 # 3. Get base
 base=$(dirname "$uri")
 # 4. Correct ifempty
 if [ "${#base}" = "5" -a "${base}" = "http:" ]; then
  base=EMPTY
  # 5. Follows whole URI is contained in img tag
  if [ "${img:0:2}" = "//" ]; then
   img="http://${img:2}"
  fi
 else
  img="${base}/${img}"
 fi
 # Minor checks
 # 6. Bail out if img is empty
 if [ "${#img}" -lt "18" -o -z "${img}" ]; then
  echo "${0##*/}: img URI too short or empty (\""${img}"\")." > /dev/stderr
  exit 1
 fi
 # Lame way to get a randomised string for temp file.
 rand=$(date|sha1sum|cut -c 1-26)
 # Grab image and output to temp file.
 wget -q "$img" -O "/tmp/img.$rand"
 if [ -s "/tmp/img.$rand" ]; then
 # 7. If size is not nil, check magic and find GIF or JPEG-type image (case insensitive).
  file -bi "/tmp/img.$rand" 2>/dev/null|egrep -qie "^image/(gi|jp)"
   if [ "$?" = "0" ]; then
#    loadImgRes=$(xloadimage -onroot -at 5,30 -border black "/tmp/img.$rand" 2>&1)
	addTitleText=$(convert -fill white -draw 'text 100,100 "${img}"' /tmp/img.$rand /tmp/titled 2>&1)
	loadImgRes=$(xloadimage -onroot -center -border black -fullscreen "/tmp/titled" 2>&1)
    # 8. If xloadimage fails dump some info to stderr.
    if [ "$?" != "0" ]; then
      echo "${0##*/}: xloadimage failed with message \"${loadImgRes}\"."
      echo "${0##*/}: grabbed image was \"${img}\"."
      echo "${0##*/}: temp image stats:"
      stat "/tmp/img.$rand" 1>&2
      file "/tmp/img.$rand" 1>&2
    fi
   else
    # Issue warning for unsupported image
    echo "${0##*/}: grabbed image is unsupported by xloadimage." > /dev/stderr
   fi
 else
 # Add a warning for zero-sized images.
   echo "${0##*/}: grabbed image was empty." > /dev/stderr
 fi
 # Remove the temporary image regardless.
 cp "/tmp/img.$rand" /home/wparker/AV/dailywallpaper/
 rm -f "/tmp/img.$rand"
 rm -f /tmp/titled
# End of outer loop.
done
# Call root-tail to finish screen setup
root-tail -fn -misc-fixed-*-*-*-*-10 --wordwrap -g 1000x150+5+610 /var/log/acpid,darkred /var/log/messages,purple &
exit 1
 
Old 07-20-2006, 06:16 PM   #23
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
OK by hacking around and talking to the windows developer I have made some progress:

I reset img early to newimg and use that to title the image with convert:

Code:
    # Strip the src= part.
    #img="$(echo ${l[$i]:4}|tr -d "\"")"
    img="$(echo ${l[$i]:4}|tr -d "\"")"
    newimg="${img}"

...

addTitleText=$(convert -fill white -draw 'text 100,100 '${newimg} /tmp/img.$rand /tmp/titled 2>&1)
...so now the titling of the picture is "image/0607/pictureoday.jpg" - perhaps I should be grepping the short image description from the web page...
 
Old 07-20-2006, 09:11 PM   #24
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,248
Blog Entries: 8

Rep: Reputation: 235Reputation: 235Reputation: 235
Code:
#!/bin/bash
# getImg.sh 1.4 unspawn (www.linuxquestions.org) for stardotstar
# Purpose: grab web-based image from page (URI)
# License: GPLv2
# Args: 1: http://doma.in/HTML-rendered-page.ext
# Deps: Bash, GNU utils, wget, xloadimage
# Run from: manual or cron

# konsolebox mod 1.4.1
# please tell me if you find bugs

# i suggest you use some variables
#XLOADIMAGE=/home/stardotstar/wallpaper.png
#DEBUG=1 OR novalue

# sends error message and exit
error() { echo "$@" >&2; exit 1; }
# you'll find this helpful when debugging
#debug() { [ "$DEBUG" ] && echo "$@" >&2; }

# Checks for wget and xloadimage
for b in wget xloadimage; do
 if ! which $b 2>&1>/dev/null; then
  error "$b not found or not in PATH"
 fi
done

# Set a pretty repeat pattern while we wait for the image to load. 
xloadimage -onroot /home/stardotstar/wallpaper.png

# Whatever first parameter is supplied serves as URI to grab.
uri="$1"
# 2. If no arg given or protocol doesn't match that for teh intarweb we exit with a warning.
if [ "$#" != "1" -o "${uri:0:7}" != "http://" ]; then
 error "${0##*/}: only one parameter needed: (URI + HTML rendered page: http://doma.in/file.ext), exiting."
fi

# Grab file and dump on stdout and grep for HTML image tags and make HtTp: lowercase
declare -a imgs
declare -i imgcount=0
for a in $(wget -O - "$uri" 2>/dev/null | grep -oi "<img src=[^ ]*" | sed -e s/"<img src="// -e s/"http:\/\/"/"http:\/\/"/i); do
 imgs[$((++imgcount))]="$a"
done

if [ -z "${imgs[1]}" ]; then
 error "no image tag found from $uri"
fi

# Print the results
for ((a=1; a<=imgcount; a++)); do
 echo "[$a] ${imgs[a]}"
done

while read l; do
 # Pick the selected image
 img="${imgs[l]}"
 if [ -z "$img" ]; then
   error "invalid image number"
   continue
 fi
 
 # Correct wrong approach:
 if ! [ "${img:0:5}" = "http:" ]; then
   # 3. Get base
   base=$(dirname "$uri")
   # appends img to base with // cleared
   img="${base}/${img/*\/\/}"
 fi
 
 # Minor checks
 # 6. Bail out if img is empty
 if [ "${#img}" -lt "18" -o -z "${img}" ]; then
  error "${0##*/}: img URI too short or empty (\""${img}"\")."
 fi
 
 # Still a lame way to get a randomised string for temp file.
 # We can also do some checks like unused files if we like but not for now
 declare -i rand=0
 until ((rand++ )); [ ! -e "/tmp/img.${rand}" ]; do
  :
 done
 touch /tmp/img.$rand 2>&1 >/dev/null || error "we can't create a new temp file"
 
 # Grab image and output to temp file.
 wget -q "$img" -O "/tmp/img.$rand"
 
 # no modifications from here and not yet tested
 
 if [ -s "/tmp/img.$rand" ]; then
 # 7. If size is not nil, check magic and find GIF or JPEG-type image (case insensitive).
  file -bi "/tmp/img.$rand" 2>/dev/null | egrep -qie "^image/(gi|jp)"
  if [ "$?" = "0" ]; then
   # loadImgRes=$(xloadimage -onroot -at 5,30 -border black "/tmp/img.$rand" 2>&1)
   addTitleText=$(convert -fill white -draw 'text 100,100 "${img}"' /tmp/img.$rand /tmp/titled 2>&1)
   loadImgRes=$(xloadimage -onroot -center -border black -fullscreen "/tmp/titled" 2>&1) 
   # 8. If xloadimage fails dump some info to stderr.
   if [ "$?" != "0" ]; then
    echo "${0##*/}: xloadimage failed with message \"${loadImgRes}\"."
    echo "${0##*/}: grabbed image was \"${img}\"."
    echo "${0##*/}: temp image stats:"
    stat "/tmp/img.$rand" 1>&2
    file "/tmp/img.$rand" 1>&2
   fi
  else
   # Issue warning for unsupported image
   echo "${0##*/}: grabbed image is unsupported by xloadimage." > /dev/stderr
  fi
 else
  # Add a warning for zero-sized images.
  echo "${0##*/}: grabbed image was empty." > /dev/stderr
 fi
 
 # Remove the temporary image regardless.
 cp "/tmp/img.$rand" /home/wparker/AV/dailywallpaper/
 rm -f "/tmp/img.$rand"
 
 rm -f /tmp/titled
 # End of outer loop.
done

# Call root-tail to finish screen setup
root-tail -fn -misc-fixed-*-*-*-*-10 --wordwrap -g 1000x150+5+610 /var/log/acpid,darkred /var/log/messages,purple &
exit 1
 
Old 07-20-2006, 09:13 PM   #25
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,248
Blog Entries: 8

Rep: Reputation: 235Reputation: 235Reputation: 235
sorry i immediately pressed the submit button without even making an intro. i just made some modifications to the script above. hope you'll find it useful. nice script by the way unspawn.
 
Old 07-20-2006, 11:40 PM   #26
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
Hi Konsolebox;

there seem to be some problems with this version:

Code:
geko stardotstar # chmod a+x /usr/bin/getImg.sh
geko stardotstar # getImg.sh http://antwrp.gsfc.nasa.gov/apod/astropix.html
/home/stardotstar/wallpaper.png is 14x14 PNG image, color type RGB, 8 bit
  Building XImage...done
[1] <IMG
[2] SRC="image/0607/PIA08576marsmeteorites45.jpg"
2
getImg.sh: grabbed image was empty.

invalid image number
geko stardotstar # getImg.sh http://antwrp.gsfc.nasa.gov/apod/astropix.html
/home/stardotstar/wallpaper.png is 14x14 PNG image, color type RGB, 8 bit
  Building XImage...done
[1] <IMG
[2] SRC="image/0607/PIA08576marsmeteorites45.jpg"
1
getImg.sh: grabbed image was empty.

invalid image number
geko stardotstar # gvim /usr/bin/getImg.sh 
(vim:1296): GnomeUI-WARNING **: While connecting to session manager:
Authentication Rejected, reason : None of the authentication protocols specified are supported and host-based authentication failed.
geko stardotstar # getImg.sh http://antwrp.gsfc.nasa.gov/apod/astropix.html
/home/stardotstar/wallpaper.png is 14x14 PNG image, color type RGB, 8 bit
  Building XImage...done
[1] <IMG
[2] SRC="image/0607/PIA08576marsmeteorites45.jpg"

invalid image number
geko stardotstar # getImg.sh http://antwrp.gsfc.nasa.gov/apod/astropix.html
/home/stardotstar/wallpaper.png is 14x14 PNG image, color type RGB, 8 bit
  Building XImage...done
[1] <IMG
[2] SRC="image/0607/PIA08576marsmeteorites45.jpg"
2
getImg.sh: grabbed image was empty.

invalid image number
I am inexperienced and so can't put my finger on it but it always presents an incorrect image selection and then either gets a zero size file or reports an invalid image number.

Although this could be useful since there are applications that require selecting the correct image in this case I don't want any interactivity and the page I am grabbing from has only one image. (well it has been known to have mouseovers and the second one is desirable but that is out of scope for now )

Thank you for ocntributing I will continue to try and grok your additions and integrate them if I can ...

Further to the zero image size problem the jpg in the above instance is also downloading as zero size... and yet it can be grabbed happily from browser etc...

Code:
geko stardotstar # wget http://antwrp.gsfc.nasa.gov/apod/image/0607/PIA08576marsmeteorites45.jpg -O thisimage
--14:42:41--  http://antwrp.gsfc.nasa.gov/apod/image/0607/PIA08576marsmeteorites45.jpg
           => `thisimage'
Resolving antwrp.gsfc.nasa.gov... 128.183.17.121
Connecting to antwrp.gsfc.nasa.gov|128.183.17.121|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 199,174 (195K) [image/jpeg]

100%[====================================>] 199,174       53.22K/s    ETA 00:00

14:42:46 (47.33 KB/s) - `thisimage' saved [199174/199174]

geko stardotstar # xloadimage thisimage
thisimage is a 727x540 JPEG image, color space YCbCr, 3 comps, Huffman coding.
  Building XImage...done
I wonder if it is the // in this example:

Code:
geko stardotstar # sh -x getImg.sh http://www.google.com/ncr
+ for b in wget xloadimage
+ which wget
+ case "$?" in
+ for b in wget xloadimage
+ which xloadimage
+ case "$?" in
+ xloadimage -onroot /home/stardotstar/wallpaper.png
/home/stardotstar/wallpaper.png is 14x14 PNG image, color type RGB, 8 bit
  Building XImage...done
+ uri=http://www.google.com/ncr
+ '[' 1 '!=' 1 -o http:// '!=' http:// ']'
+ wget -O - http://www.google.com/ncr
+ tr '[A-Z]' '[a-z]'
+ grep -ie '\<img.*src='
+ head -1
+ sed -e 's/.*<img/<img/g' -e 's/><.*$/>/g'
+ read l
+ l=(${l})
++ seq 0 4
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo '<im'
+ grep -qie src
+ '[' 1 = 0 ']'
+ for i in '$(seq 0 $[${#l[@]}-1])'
+ echo src
+ grep -qie src
+ '[' 0 = 0 ']'
++ echo '"/intl/en/images/logo.gif"'
++ tr -d '"'
+ img=/intl/en/images/logo.gif
+ newimg=/intl/en/images/logo.gif
+ break
++ dirname http://www.google.com/ncr
+ base=http://www.google.com
+ '[' 21 = 5 -a http://www.google.com = http: ']'
+ img=http://www.google.com//intl/en/images/logo.gif
+ '[' 46 -lt 18 -o -z http://www.google.com//intl/en/images/logo.gif ']'
++ date
++ sha1sum
++ cut -c 1-26
+ rand=cb0894b63afc2d1d663abe40fa
+ wget -q http://www.google.com//intl/en/images/logo.gif -O /tmp/img.cb0894b63afc2d1d663abe40fa
+ '[' -s /tmp/img.cb0894b63afc2d1d663abe40fa ']'
+ echo 'getImg.sh: grabbed image was empty.'
getImg.sh: grabbed image was empty.
+ cp /tmp/img.cb0894b63afc2d1d663abe40fa /home/wparker/AV/dailywallpaper/
+ rm -f /tmp/img.cb0894b63afc2d1d663abe40fa
+ rm -f /tmp/titled
+ read l
+ root-tail -fn '-misc-fixed-*-*-*-*-10' --wordwrap -g 1000x150+5+610 /var/log/acpid,darkred /var/log/messages,purple
+ exit 0
again it seems to be related to relative and explicit paths...


Will

Last edited by stardotstar; 07-20-2006 at 11:53 PM.
 
Old 07-21-2006, 12:10 AM   #27
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,248
Blog Entries: 8

Rep: Reputation: 235Reputation: 235Reputation: 235
sorry about that. this should fix the problem now

Code:
#!/bin/bash
# getImg.sh 1.4 unspawn (www.linuxquestions.org) for stardotstar
# Purpose: grab web-based image from page (URI)
# License: GPLv2
# Args: 1: http://doma.in/HTML-rendered-page.ext
# Deps: Bash, GNU utils, wget, xloadimage
# Run from: manual or cron

# konsolebox mod 1.4.2
# please tell me if you find bugs

# i suggest you use some variables
#XLOADIMAGE=/home/stardotstar/wallpaper.png
#DEBUG=1 OR novalue

# sends error message and exit
error() { echo "$@" >&2; exit 1; }
# you'll find this helpful when debugging
#debug() { [ "$DEBUG" ] && echo "$@" >&2; }

# Checks for wget and xloadimage
for b in wget xloadimage; do
 if ! which $b 2>&1>/dev/null; then
  error "$b not found or not in PATH"
 fi
done

# Set a pretty repeat pattern while we wait for the image to load. 
xloadimage -onroot /home/stardotstar/wallpaper.png

# Whatever first parameter is supplied serves as URI to grab.
uri="$1"
# 2. If no arg given or protocol doesn't match that for teh intarweb we exit with a warning.
if [ "$#" != "1" -o "${uri:0:7}" != "http://" ]; then
 error "${0##*/}: only one parameter needed: (URI + HTML rendered page: http://doma.in/file.ext), exiting."
fi

# Grab file and dump on stdout and grep for HTML image tags and make HtTp: lowercase
declare -a imgs
declare -i imgcount=0
for a in $(wget -O - "$uri" 2>/dev/null | grep -oi "<img src=[^ ]*" | sed -e s/"<img src="//i -e s/"http:\/\/"/"http:\/\/"/i); do
 eval "imgs[$((++imgcount))]=$a"
done

if [ -z "${imgs[1]}" ]; then
 error "no image tag found from $uri"
fi

# Print the results
for ((a=1; a<=imgcount; a++)); do
 echo "[$a] ${imgs[a]}"
done

while read l; do
 # Pick the selected image
 img="${imgs[l]}"
 if [ -z "$img" ]; then
   error "invalid image number"
   continue
 fi
 
 # Correct wrong approach:
 if ! [ "${img:0:5}" = "http:" ]; then
   # 3. Get base
   base=$(dirname "$uri")
   # appends img to base with // cleared
   img="${base}/${img/*\/\/}"
 fi
 
 # Minor checks
 # 6. Bail out if img is empty
 if [ "${#img}" -lt "18" -o -z "${img}" ]; then
  error "${0##*/}: img URI too short or empty (\""${img}"\")."
 fi
 
 # Still a lame way to get a randomised string for temp file.
 # We can also do some checks like unused files if we like but not for now
 declare -i rand=0
 until ((rand++ )); [ ! -e "/tmp/img.${rand}" ]; do
  :
 done
 touch /tmp/img.$rand 2>&1 >/dev/null || error "we can't create a new temp file"
 
 # Grab image and output to temp file.
 wget -q "$img" -O "/tmp/img.$rand"

 # no modifications from here and not yet tested
 
 if [ -s "/tmp/img.$rand" ]; then
 # 7. If size is not nil, check magic and find GIF or JPEG-type image (case insensitive).
  file -bi "/tmp/img.$rand" 2>/dev/null | egrep -qie "^image/(gi|jp)"
  if [ "$?" = "0" ]; then
   # loadImgRes=$(xloadimage -onroot -at 5,30 -border black "/tmp/img.$rand" 2>&1)
   addTitleText=$(convert -fill white -draw 'text 100,100 "${img}"' /tmp/img.$rand /tmp/titled 2>&1)
   loadImgRes=$(xloadimage -onroot -center -border black -fullscreen "/tmp/titled" 2>&1) 
   # 8. If xloadimage fails dump some info to stderr.
   if [ "$?" != "0" ]; then
    echo "${0##*/}: xloadimage failed with message \"${loadImgRes}\"."
    echo "${0##*/}: grabbed image was \"${img}\"."
    echo "${0##*/}: temp image stats:"
    stat "/tmp/img.$rand" 1>&2
    file "/tmp/img.$rand" 1>&2
   fi
  else
   # Issue warning for unsupported image
   echo "${0##*/}: grabbed image is unsupported by xloadimage." > /dev/stderr
  fi
 else
  # Add a warning for zero-sized images.
  echo "${0##*/}: grabbed image was empty." > /dev/stderr
 fi
 
 # Remove the temporary image regardless.
 cp "/tmp/img.$rand" /home/wparker/AV/dailywallpaper/
 rm -f "/tmp/img.$rand"
 
 rm -f /tmp/titled
 # End of outer loop.
done

# Call root-tail to finish screen setup
root-tail -fn -misc-fixed-*-*-*-*-10 --wordwrap -g 1000x150+5+610 /var/log/acpid,darkred /var/log/messages,purple &
exit 1
regards
 
Old 07-21-2006, 12:12 AM   #28
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
Ahhhhh, big problem we have been having here is that some of the files that are not making it down have mixed lower and upper case in file name...

so:

Code:
# Grab file and dump on stdout, make all lowercase, grep for HTML image tag, and only use first line.
# (not grep -m1), sed strips off tags before and after. Now dump the string in variable "l" and turn it into array.

#wget -O - "$uri" 2>/dev/null|tr [A-Z] [a-z]|grep -ie "\<img.*src=" 2>/dev/null|head -1\
#|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})

# Here I allowed the file name to preserve its case...
wget -O - "$uri" 2>/dev/null|grep -ie "\<img.*src=" 2>/dev/null|head -1\
|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})
and this worked fine for the image file that was complaining before.


Last edited by stardotstar; 07-21-2006 at 12:13 AM.
 
Old 07-21-2006, 12:29 AM   #29
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,248
Blog Entries: 8

Rep: Reputation: 235Reputation: 235Reputation: 235
Good job there. Have you already tried my new mod? I've already tested the script and was able to download the image files properly. The reason why the script didn't work before is because of the uppercase IMG and SRC. And i have to use eval to reconstruct the statements removing the double quotes from being included in the variable's value.

But anyways. We already have two scripts here. So I hope you'll be successful building the rpm script. Best luck then.

Edit: batch script I mean

Last edited by konsolebox; 07-21-2006 at 12:35 AM.
 
Old 07-21-2006, 01:41 AM   #30
stardotstar
Member
 
Registered: Nov 2002
Location: /au/qld/bne/4157
Distribution: Gentoo mactel-linux
Posts: 238

Original Poster
Rep: Reputation: 30
OK I am forging ahead with the title grabbing;

By modifying unspawn's greps and parsing I have managed to come up with a separate script that successfully looks for the first HTML <b> tag and head -1's that output from wget; then writes it to a text file which I try to strip the tags off...

Code:
#!/bin/bash

# Checks
# 0. wget, xloadimage
for b in wget xloadimage; do
 which $b 2>&1>/dev/null; case "$?" in 
  0) ;;
  *) echo "${0##*/}: $b not found or not in PATH, exiting"\
      > /dev/stderr; exit 127;;
 esac
done

# Whatever first parameter is supplied serves as URI to grab.
uri="$1"
# 2. If no arg given or protocol doesn't match that for the intarweb we exit with a warning.
if [ "$#" != "1" -o "${uri:0:7}" != "http://" ]; then
 echo "${0##*/}: only one parameter needed: (URI + HTML rendered page: http://doma.in/file.ext), exiting." > /dev/stderr
 exit 1
fi


# Grab file and dump on stdout, make all lowercase, grep for HTML image tag, and only use first line.
# (not grep -m1), sed strips off tags before and after. Now dump the string in variable "l" and turn it into array.
#wget -O - "$uri" 2>/dev/null|tr [A-Z] [a-z]|grep -ie "\<img.*src=" 2>/dev/null|head -1\
#|sed -e "s/.*<img/<img/g" -e "s/><.*$/>/g"|while read l; do l=(${l})
wget -O - "$uri" 2>/dev/null|grep -ie "<b>" 2>/dev/null|head -1 > /tmp/title.txt 
cat /tmp/title.txt
 # for each element in the array check if it matches the HTML image "src" tag,
 # first found match (break) gets stuffed in the "img" variable.
cat /tmp/title.txt|tr -d "<b>/" > /tmp/title.txt
cat /tmp/title.txt
    # Strip the src= part.
    #title="$(echo ${l[$i]:4}|tr -d "\"")"
    #title="$(echo ${l[$i]:4})"
    break
echo "$title" > /dev/stderr
exit 0
so what I get when I run it is *nearly* the title of my picture:

Code:
geko stardotstar # sh -x ./greptitle.sh http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ for b in wget xloadimage
+ which wget
+ case "$?" in
+ for b in wget xloadimage
+ which xloadimage
+ case "$?" in
+ uri=http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ '[' 1 '!=' 1 -o http:// '!=' http:// ']'
+ wget -O - http://antwrp.gsfc.nasa.gov/apod/astropix.html
+ grep -ie '<b>'
+ head -1
+ cat /tmp/title.txt
<b> Strangers on Mars </b> <br>
+ cat /tmp/title.txt
+ tr -d '<b>/'
+ cat /tmp/title.txt
 Strangers on Mars  r
+ break
+ echo ''

+ exit 0
You can see that the

<b> Strangers on Mars </b> <br>

almost gets properly formed - removing <b> and </b> <b > using tr (badly :lol: )
but I am left with the r which if I delete it ruins the text.

What I need is a way now of stripping leading white space and *all* the tags after the first <

I will keep hacking at it but I would appreciate some gentle nudges in the right direction.

Because our team formats the intranet page that displays the pic of the day (actually based on a very similar layout to that astronomy page - because it is so simple - image, title and description) I am using the astronomy page as a reference - because it can be tested naturally.

Will
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
How to set the login background image when using KDM PTrenholme Fedora 0 04-15-2006 09:20 AM
How to set up web page background? freekamail Linux - Newbie 2 12-19-2005 09:48 AM
Can't set desktop background image in Gnome TruckStuff Linux - General 1 07-18-2005 03:15 PM
set focus on a text form of a web page? codec Programming 2 12-31-2004 04:32 AM
Kicking off a script form a web page Hazzie Programming 2 04-26-2004 01:09 PM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 12:46 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration