|
|
国家地理改版了,原来的shell不行了,
制作了version 2,供大家使用
---------------------------------------------------------
献上一个下载national geographic Photo Of the Day的脚本,并请指正
NGPOD是National Geographic Photo Of the Day的缩写形式。这是美国国家地理杂志的一个栏目,网址为:http://lava.nationalgeographic.com/pod/。该栏目每天向大家提供一幅配有背景资料介绍的国家地理杂志上的照片。并提供两种分辨率(800x600以及1024x768)的Windows壁纸(wallpaper)下载。目前网络上到处流传的一些国家地理杂志的照片绝大多数来自这个栏目。
上面的话来自某位网友写的 windows的下ngpod的程序,NGPOD收藏家,
我是觉得,它的数据管理不爽,才想起写这个程序的。
- #!/bin/bash
- #####################################
- #version 2. 20060807. downcloud@hotmail.com
- #edit on 20050920,downcloud@hotmail.com
- ######################################
- #NGPOD:national geographic Photo Of the Day
- #the earliest ngpod is the April 21, 2001
- declare BYEAR=1 BMONTH=4 BDAY=21
- declare EYEAR=6 EMONTH=8 EDAY=7
- #download year,month,day
- declare DYEAR DMONTH DDAY
- TRUE=1
- FALSE=0
- LOGFILE=.ngpod.log
- declare JUDGE
- ###############################################
- #function difinition area
- getday()
- {
- if [ $BYEAR -gt $EYEAR ];then
- exit
- elif [ $BYEAR -eq $EYEAR ];then
- if [ $BMONTH -gt $EMONTH ];then
- exit
- elif [ $BMONTH -eq $EMONTH ];then
- if [ $BDAY -gt $EDAY ];then
- exit;
- fi
- fi
- fi
- if [ $BYEAR -lt 10 ];then
- DYEAR="0$BYEAR";
- else
- DYEAR=$BYEAR;
- fi
- if [ $BMONTH -lt 10 ];then
- DMONTH=0$BMONTH;
- else
- DMONTH=$BMONTH;
- fi
-
- if [ $BDAY -lt 10 ];then
- DDAY=0$BDAY;
- else
- DDAY=$BDAY;
- fi
- echo "now is year:month:day====$DYEAR $DMONTH $DDAY"
- BDAY=`expr $BDAY + 1`;
- if [ $BMONTH -eq 2 ];then
- if [ $BDAY -eq 29 ];then
- if [ $BYEAR -ne 4 ];then
- BDAY=1;
- BMONTH=3;
- fi
- if [ $BYEAR -ne 8 ];then
- BDAY=1;
- BMONTH=3;
- fi
- fi
-
- if [ $BDAY -eq 30 ];then
- BDAY=1;
- BMONTH=3;
- fi
- fi
- if [ $BDAY -eq 32 ];then
- BMONTH=`expr $BMONTH + 1 ` ;
- BDAY=1;
- fi
- if [ $BDAY -eq 31 ];then
- case $BMONTH in
- 4)
- BMONTH=5;
- BDAY=1;
- ;;
- 6)
- BMONTH=7;
- BDAY=1;
- ;;
- 9)
- BMONTH=10;
- BDAY=1;
- ;;
- 11)
- BMONTH=12;
- BDAY=1;
- ;;
- esac
- fi
- if [ $BMONTH -eq 13 ];then
- BMONTH=1;
- BYEAR=`expr $BYEAR + 1 `
- fi
- return $TRUE;
- }
- sedget_title1()
- {
- sed -n -e 's/.*<title>National Geographic Photo of the Day:\(.*\)<\/title>.*/\1/p' $1
- }
- sedget_title2()
- {
- sed -n -e 's/.*<title>\(.*\)<\/title>.*/\1/p' $1
- }
- sedget_titledate()
- {
- sed -n -e 's/.*<span class="date">\(.*\)<\/span>.*/\1/p' $1
- }
- sedget_jpgname()
- {
- sed -n -e 's/.*\/sm_wallpaper\/\(.*\)"><img.*/\1/p' $1
- }
- sedget_where()
- {
- sed -n -e '/place-photographer" style=".*">/{N;s/.*>\(.*\)/\1/p}' $1
- }
- sedget_when()
- {
- sed -n -e '/.*place-photographer-sub/{s/[[:blank:]]*\([^ ].*\)<\/div.*/\1/p}' $1
- }
- sedget_who()
- {
- sed -n -e 's/.*Photograph by\(.*\)<\/div>/\1/p' $1
- }
- sedget_intro()
- {
- sed -n -e '/<div class="pod-caption"/{N;N;N;N;N;s/.*10px;">\(.*\)/\1/p}' $1 \
- | sed 's/<\/div><\/td>//p' \
- | sed 's/<td .*>//p' \
- | sed 's/<IF .*>//p' \
- | sed -n -e 's/[[:blank:]]*\([^ ].*\)/\1/p'
- }
- sedget_relatedlink()
- {
- sed -n -e '/<REPEAT_LINKS>/{N;s/.*href="\(.*\)">\(.*\)<\/a>.*/\1/p}' $1
- }
- sedget_relatedname()
- {
- sed -n -e '/<REPEAT_LINKS>/{N;s/.*href="\(.*\)">\(.*\)<\/a>.*/\2/p}' $1
- }
- create_introhead()
- {
- local INTROFILE YEAR MONTH
- local -i DAY COUNT TMP
- if [ $# -ne 3 ];then
- return $FALSE
- fi
-
- INTROFILE=$1
- if [ ! -f $INTROFILE ];then
- touch $INTROFILE;
- else
- return $FALSE
- fi
- echo "<html><head>" >>$INTROFILE;
- echo "<meta http-equiv=Content-Type content="text/html; charset=iso8859-1">" >> $INTROFILE;
- echo "<!-- htm file create and translate by downcloud@hotmail.com -->" >>$INTROFILE
- echo "<title>National Geographic Photo of the Day</title></head>" >>$INTROFILE
- YEAR=20$2
- case $3 in
- 01) MONTH=January; DAY=31 ;;
- 02) MONTH=February;
- if [ $YEAR = "04" ];then
- DAY=29
- else
- DAY=28
- fi
- ;;
- 03) MONTH=March ;DAY=31 ;;
- 04) MONTH=April ;DAY=30 ;;
- 05) MONTH=May ;DAY=31 ;;
- 06) MONTH=June ;DAY=30 ;;
- 07) MONTH=July ;DAY=31 ;;
- 08) MONTH=August ;DAY=31 ;;
- 09) MONTH=September ;DAY=30 ;;
- 10) MONTH=October ;DAY=31 ;;
- 11) MONTH=November ;DAY=30 ;;
- 12) MONTH=December ;DAY=31 ;;
-
- ?) return $FALSE ;;
- esac
- echo "<body bgcolor="gray">" >>$INTROFILE
- echo "<table border="0" width="90%">" >>$INTROFILE
- echo " <tr><td align="center">" >>$INTROFILE
- echo " <h1><a target="_blank" href="http://lava.nationalgeographic.com/pod/index.html"> National Geographic Photo of the Day</a></h1>" >>$INTROFILE
- echo " </td></tr>" >>$INTROFILE
- echo " <tr><td align="center">" >>$INTROFILE
- echo " <h2>${YEAR} , ${MONTH}</h2>" >>$INTROFILE
- echo " </td></tr>" >>$INTROFILE
- echo "</table>" >>$INTROFILE
-
- echo "<table width="90%" border=1>" >>$INTROFILE
- COUNT=1
- TMP=0
- while [ $COUNT -le $DAY ]
- do
- TMP=`expr $COUNT % 5`;
- if [ $TMP -eq 1 ];then
- echo "<tr>" >>$INTROFILE
- fi
-
- if [ $COUNT -le 9 ];then
- echo "<td width="20%"><a href="#day0$COUNT">day 0$COUNT</a></td>" >>$INTROFILE
- else
- echo "<td width="20%"><a href="#day$COUNT">day $COUNT</a></td>" >>$INTROFILE
- fi
- TMP=`expr $COUNT % 5`
- if [ $TMP -eq 0 ];then
- echo "</tr>" >>$INTROFILE
- fi
- COUNT=`expr $COUNT + 1`
- done
- if [ $DAY -eq 28 ];then
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "</tr>" >>$INTROFILE
- elif [ $DAY -eq 29 ];then
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "</tr>" >>$INTROFILE
- elif [ $DAY -eq 31 ];then
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "<td width="20%"> </td>" >>$INTROFILE
- echo "</tr>" >>$INTROFILE
- fi
-
-
- echo "</table><br><br>" >>$INTROFILE
- return $TRUE
- }
- create_tail()
- {
- local INTROFILE
- if [ $# -ne 1 ];then
- return $FALSE
- fi
-
- INTROFILE=$1
- echo "</body></html>" >>$INTROFILE
- if [ -e /usr/bin/dos2unix ];then
- dos2unix $INTROFILE
- elif [ -e /bin/dos2unix ];then
- dos2unix $INTROFILE
- fi
-
- }
- create_introtail()
- { local INTROFILE YEAR MONTH DAY
- if [ $# -ne 4 ];then
- return $FALSE
- fi
-
- INTROFILE=$1
- YEAR=$2
- MONTH=$3
- DAY=$4
- #if is a month end,create_tail
- if [ $DAY="28" ] && [ $DAY="02" ] ;then
- if [ ! $YEAR="04" ];then
- if [ ! $YEAR="08" ];then
- create_tail $INTROFILE
- fi
- fi
- return $TRUE
- fi
- if [ $DAY="29" ] && [ $DAY="02" ] ;then
- create_tail $INTROFILE
- return $TRUE
- fi
-
- if [ $DAY="30" ] ;then
- if [ $MONTH="04" ] || [ $MONTH="06" ] || [ $MONTH="09" ] || [ $MONTH="11" ] ;then
- create_tail $INTROFILE
- fi
- return $TRUE
- fi
-
- if [ $DAY="31" ] ;then
- create_tail $INTROFILE
- fi
- }
- update_intro()
- {
- local INTROFILE DAY JPG1024 JPG400 HTMLINK
- local TITLE TITLEDATE WHERE WHEN WHO INTRO RELATEDLINK RELATEDNAME
- local ORIGNAME
-
- INTROFILE=$1;
- DAY=$3
- JPG1024=$4
- JPG400=$5
- HTMLINK=$6
- ORIGNAME=$7
-
- TITLE=`sedget_title1 $2`
-
- TITLE=${TITLE:-`sedget_title2 $2`}
- #for some page,title may be empty
- TITLE=${TITLE:-"National Geographic Photo of the Day:"}
-
- TITLEDATE=`sedget_titledate $2`
- WHERE=`sedget_where $2`
- WHEN=`sedget_when $2`
- WHO=`sedget_who $2`
- INTRO=`sedget_intro $2`
- RELATEDLINK=`sedget_relatedlink $2`
- RELATEDNAME=`sedget_relatedname $2`
-
-
- echo "<br><a name="day${DAY}"></a><br>" >> $INTROFILE
- echo "<table border="0" width="90%">" >>$INTROFILE
- echo " <table border="0" width="100%" bgcolor="\#666666"><tr>" >>$INTROFILE
- echo " <td width="45%" align="right" >${TITLE}</td>" >>$INTROFILE
- echo " <td align="center"><a href="${HTMLINK}">${TITLEDATE}</a></td>" >>$INTROFILE
- echo " </tr></table>" >>$INTROFILE
- echo " <table border="0" width="100%">" >>$INTROFILE
- echo " <tr><td align="right" width="40%">" >>$INTROFILE
- echo " <table border="0" width="100%">" >>$INTROFILE
- echo " <tr><td width="5" >Name:</td><td>${ORIGNAME}</td></tr>" >>$INTROFILE
- echo " <tr><td width="5" >Where:</td><td>${WHERE}</td></tr>" >>$INTROFILE
- echo " <tr><td width="5" >When:</td><td>${WHEN}</td></tr>" >>$INTROFILE
- echo " <tr><td width="5" >Photographer:</td><td>${WHO}</td></tr>" >>$INTROFILE
- echo " <tr><td width="5" >Related:</td><td ><a href="${RELATEDLINK}">${RELATEDNAME}</a></td></tr>" >>$INTROFILE
- echo " </table></td>" >>$INTROFILE
- echo " <td align="center" width="400"><a target="_blank" href="${JPG1024}"><img src="${JPG400}" border="0"></a></td>" >>$INTROFILE
- echo " </tr>" >>$INTROFILE
- echo " </table>" >>$INTROFILE
- echo " <tr><td><br>${INTRO}<br></td>" >>$INTROFILE
- echo " <p>" >>$INTROFILE
- echo " </p></tr>" >>$INTROFILE
- echo "</table>" >>$INTROFILE
-
- return $TRUE;
- }
- #download ngpod
- downloadngpod(){
- local YEAR MONTH DAY
- local DIR JPG1024 JPG400 INTROFILE
- local HTMLINK1 JPGLINK1024 JPGLINK400 EXLINK
- local TMPFILE1 FLIST
- local JPGNAME
-
- EXLINK="http://lava.nationalgeographic.com/"
- FLIST=./ngpod/filelist.txt
- TMPFILE1=.ngpod.tmp
-
- YEAR=$DYEAR
- MONTH=$DMONTH
- DAY=$DDAY
-
- DIR="ngpod/20${YEAR}/${MONTH}"
- mkdir -p "${DIR}_1024x768"
- mkdir -p "${DIR}_400x300"
-
-
- INTROFILE="ngpod/20${YEAR}/ngpod20${YEAR}${MONTH}intro.htm"
-
- if [ ! -f ${INTROFILE} ];then
- create_introhead ${INTROFILE} ${YEAR} ${MONTH};
- fi
-
- HTMLINK1="${EXLINK}cgi-bin/pod/PhotoOfTheDay.cgi?month=${MONTH}&day=${DAY}&year=${YEAR}"
- `curl -o ${TMPFILE1} ${HTMLINK1} 2>/dev/null`
- if [ ! -f ${TMPFILE1} ];then
- echo "download ${THMLINK1} fail"
- echo "download ${THMLINK1} fail" >>${LOGFILE}
- return $FALSE;
- fi
- #get 1024x768 & 400x300 jpeg file link
- JPGNAME=`sedget_jpgname ${TMPFILE1}`
- JPG1024="${MONTH}_1024x768/ngpod20${YEAR}${MONTH}${DAY}_1024x768.jpg"
- JPG400="${MONTH}_400x300/ngpod20${YEAR}${MONTH}${DAY}_400x300.jpg"
-
- update_intro ${INTROFILE} ${TMPFILE1} ${DAY} ${JPG1024} ${JPG400} ${HTMLINK1} ${JPGNAME}
- create_introtail ${INTROFILE} $YEAR $MONTH $DAY
-
-
- JPG1024="ngpod/20${YEAR}/${JPG1024}"
- JPG400="ngpod/20${YEAR}/${JPG400}"
-
- JPGLINK400="${EXLINK}pod/pictures/normal/${JPGNAME}"
- JPGLINK1024="${EXLINK}pod/pictures/lg_wallpaper/${JPGNAME}"
- if [ ! -f ${JPG400} ];then
- ` curl -o ${JPG400} ${JPGLINK400} 2>/dev/null`
- fi
- if [ ! -f ${JPG1024} ];then
- ` curl -o ${JPG1024} ${JPGLINK1024} 2>/dev/null`
- fi
-
- if [ -f ${JPG1024} ];then
- echo "------------------------------------ get $YEAR $MONTH $DAY ngpod OK"
- echo "get $YEAR $MONTH $DAY ngpod OK" >>${LOGFILE}
- else
- echo "?????????????? get $YEAR $MONTH $DAY ngpod fail"
- echo "get $YEAR $MONTH $DAY ngpod fail">>${LOGFILE}
- fi
-
- #write jpg filelist
- echo "=========ngpod====20$YEAR:$MONTH:$DAY======" >>$FLIST
- echo "intro: $HTMLINK1" >>$FLIST
- echo " $JPGLINK1024" >>$FLIST
-
- rm -f ${TMPFILE1}
- return $TRUE
- }
- ##################################3
- if [ ! -e /usr/bin/curl ];then
- if [ ! -e /bin/curl ];then
- echo "could not find download program:curl "
- else
- echo "/bin/curl exist. go on"
- fi
- else
- echo "/usr/bin/curl exist. go on"
- fi
- ########################################
- echo "ngpod is national geographic photo of the day"
- echo "This shell will download ngpod pictures"
- echo " from ${BYEAR}/${BMONTH}/${BDAY} to ${EYEAR}/${EMONTH}/${EDAY}"
- echo "To change begin/end day, edit this shell,line 10,11"
- read -p "Now begin download(Y/N):" JUDGE
- if [ ! $JUDGE = "y" ];then
- if [ ! $JUDGE = "Y" ];then
- echo "This shell will exit now"
- exit
- fi
- fi
- if [ ! -f ${LOGFILE} ];then
- touch ${LOGFILE}
- fi
- ##########################################
- # function run from here
- while [ $TRUE ]
- do
-
- getday
- downloadngpod $DYEAR $DMONTH $DDAY;
- done
复制代码
2006 08 05 debug OK |
|