?

Log in

No account? Create an account
Этот пост (опять) касается только тех, кто хостит фотографии на… - Them's the breaks
May 19th, 2010
10:17 pm

[Link]

Previous Entry Share Next Entry
Этот пост (опять) касается только тех, кто хостит фотографии на сервисе fotki.com и публикует их в ЖЖ.

В продолжение вот этой темы.

Вниманию заинтересованных читателей предлагается окончательный (на сегодня) вариант shell-скрипта, проверяющего битые линки на картинки в ЖЖ.

Изменено:
- добавлена параметризация (имя пользователя и количество постов на странице)
- результаты форматируются удобнее и сохраняются в отдельных каталогах в формате /username.YYYYMMDD/
- исправлены некоторые баги
- можно использовать cron для автоматического запуска.

За последние две недели ежедневных запусков проблем не замечено.


Вначале файлы. Их три (см. ниже), создать их можно в любом текстовом редакторе и поименовать согласно описанию, после чего сделать исполняемыми.
Файлы нажлежит поместить в "домашнюю" директорию пользователя, в поддиректорию ljpics.
Отредактировать нужно только два кусочка в файле "scheduled", они выделны красным - это имя пользователя и количество постов на странице ЖЖ.

После этого можно запускать на исполнение файл "scheduled" - результат будет в подкаталоге с именем пользователя и датой, в файле "errors.txt" (а если он пустой, значит, битых линков нет).

Файл №1, называется "scheduled"

##### don't forget to change the CD command if using different dir #####
cd ~/ljpics

##### change the following parameters accordingly
##### parameters are user name and number of posts per one page
##### WARNING: do NOT use underscores "_" in username, use dash "-" instead 

username="cold-n-sour"
numposts=20

##### get directory name according to current date YYYYMMDD
dirname=$(perl -e 'use POSIX;$a=print strftime "%Y%m%d",localtime time;')
dirname="$username.$dirname"
echo dirname is "$dirname"

##### create folder if it isn't there yet
if test -d $dirname
then
	echo dir exists
else
	echo dir does not exist
	mkdir $dirname
fi

##### copy starting scripts there
cp _gp $dirname
cp runme $dirname
cd $dirname

##### 
./runme $username $numposts


Файл №2, называется "_gp"

echo running $0

### GET PARAMETERS ###

#userid to use in url construction
userid=$1
echo userid is $userid

#number of posts per page
declare -i increment 
increment=$2
echo increment is $increment

#file to save results
resultfile=$3
echo resultfile is $resultfile

#number of posts to skip
declare -i startpost
startpost=0

#number of posts found
declare -i lines
lines=0

#wil be used in cycle later for comparison
declare -i linesold

#empty the receiving file
: >${resultfile}

#full url of LJ
ljurl="http://$userid.livejournal.com"

echo ljurl is $ljurl

#start the cycle:
while true
do
	echo startpost is $startpost
	linesold=$lines

	#multiple single quotes are used here to pass parameters to sed
	curl $ljurl/?skip=$startpost | sed 's!'$ljurl'!\
'$ljurl'!g' |grep -E -e "$ljurl\/[0-9]+.html\"" |cut -d"\"" -f1 |uniq >>${resultfile}

	lines=$(grep -c "" $resultfile)
	echo total posts before: $linesold
	echo total posts after: $lines
	if  [ $linesold == $lines ]
	then 
		echo "Done fetching posts"
		break
	else
		echo "Gonna try again"
		startpost+=$increment
	fi
done


Файл №3, называется "runme"

echo running $0

username=$1
increment=$2
echo username is $username increment is $increment

postfilebase="ljposts"
postsfile="$postfilebase.txt"
postsfileuniq="$postfilebase.uniq.txt"

./_gp $username $increment $postsfile

ljurl="http://$username.livejournal.com"

#calculate length of base url for numeric sort
declare -i urllen
urllen=${#ljurl}
urllen+=2 # ending slash and one more to start from the next character 

echo sorting starts with position ${urllen}

#sort posts in reverse numerical order, position of first number is urllen
sort -rnuk 1.${urllen} ${postsfile} >${postsfileuniq}

awk '/^http.*([0-9])+.html/ {print "echo echo " $0 "\ncurl " $0 "?usescheme=lynx| sed \047s/src=\"/\\\n/g\047 | sed \047s/.jpg/.jpg\\\n/g\047 | sed \047s/.png/.png\\\n/g\047 | awk \047/\^http:\\\/\\\/images[0-9]+\.fotki\.com/ {print \"curl -fr 0-10 \" $0 \";echo\"}\047"}' ${postsfileuniq} >getpics.txt

chmod a+x getpics.txt

./getpics.txt >checkpics.txt

chmod a+x checkpics.txt

./checkpics.txt >checkpics.result.txt 2>&1

#only leave "*html" and "error" in the output to clean it up
grep -a -E -e "error|html" checkpics.result.txt >checkpics.result0.txt

#leave only one line above "error" so that we only see posts with broken links
grep -B 1 error checkpics.result0.txt >errors.txt

#count total number of pics tested
grep -c "curl" checkpics.txt

#count number of broken links
grep -c "error" checkpics.result0.txt

date



Я не знаю, можно ли как-то запустить все это хозяйство под windows - нужно будет, наверное, что-то вроде cygwin или его аналогов.

Tags: ,

(7 comments | Leave a comment)

Comments
 
[User Picture]
From:patrick_t_jet
Date:May 20th, 2010 06:14 am (UTC)
(Link)
"Скажите, а это вот так и у магазина можно стенку поднять?" (С) :)
[User Picture]
From:cold_n_sour
Date:May 20th, 2010 01:07 pm (UTC)
(Link)
:)
у тебя, кстати, 4 линка битых тоже есть. дать номера постов?
[User Picture]
From:patrick_t_jet
Date:May 21st, 2010 04:03 am (UTC)
(Link)
Они вроде как сами восстанавливаются со временем, силами фоток?

я ж не программер, мне твои изыскания не инструмент, увы
[User Picture]
From:cold_n_sour
Date:May 21st, 2010 07:03 pm (UTC)
(Link)
я специально как-то месяц не чистил - ничего само не восстановилось.

я не изыскания предлагаю, а прямо адреса постов, где есть битые линки :)
[User Picture]
From:patrick_t_jet
Date:May 21st, 2010 07:40 pm (UTC)
(Link)
давай:)
[User Picture]
From:cold_n_sour
Date:May 21st, 2010 10:53 pm (UTC)
(Link)
http://patrick-t-jet.livejournal.com/60393.html
curl: (22) The requested URL returned error: 404
--
http://patrick-t-jet.livejournal.com/59003.html
curl: (22) The requested URL returned error: 403
--
http://patrick-t-jet.livejournal.com/54815.html
curl: (22) The requested URL returned error: 404
--
http://patrick-t-jet.livejournal.com/41686.html
curl: (22) The requested URL returned error: 404
[User Picture]
From:cold_n_sour
Date:May 21st, 2010 10:56 pm (UTC)
(Link)
ха! в последнем посте битый линк - мой! в комментах.
Мои фотографии Powered by LiveJournal.com