?

Log in

No account? Create an account
Скрипя скриптами - Them's the breaks
October 28th, 2010
08:29 pm

[Link]

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

Здесь помещается окончательный вариант скрипта, описанного мной в предыдущих постах, доступных по тегу "Сын ошибок трудных". Скрипт с момента последней публикации несколько переработан (надеюсь, к лучшему) и засунут весь в один файл.




Текст скрипта - зеленый. Весь текст надлежит засунуть в один файл и дать ему (файлу) аттрибут "исполняемый".

Параметры, которые надо заменить, выделены красным. Их два - имя пользователя и количество постов на странице. Приятного чтения! :)

#! /bin/bash

##### 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"

#number of posts per page, according to LJ settings
increment=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

##### cd there
cd $dirname

echo username is $username increment is $increment

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

echo increment is $increment

echo postsfile is $postsfile

#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
: >${postsfile}

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

echo ljurl is $ljurl

#start the cycle, get all public posts:
while true
do
	echo Skipping $startpost posts
	linesold=$lines

	curl -sS $ljurl/?skip=$startpost | grep -oiEe "$ljurl/[0-9]+\.html" |uniq >>${postsfile}

	lines=$(grep -c "" $postsfile)
	summary="Total posts before: $linesold, after: $lines"
	if  [ $linesold == $lines ]
	then 
		echo "$summary, done fetching posts!"
		break
	else
		echo "$summary, gonna try again"
		startpost+=$increment
	fi
done

#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}

uniqposts=$(grep -c "html" $postsfileuniq)

echo unique posts: $uniqposts

awk '/^http.*([0-9])+.html/ {print "echo echo " $0 "\ncurl -sS " $0 "?usescheme=lynx| perl -e  \047while (<>) {while ($_=~ m| src=\"(http://[^ ]*\\.fotki.com/[^ ]*\.[^ ]{3})\\\"|gi){ print \"curl -s -S -fr 0-10 $1\; echo; echo $1\;\\n\"}}\047"}' ${postsfileuniq} > getpics.txt

chmod a+x getpics.txt

echo "Getting image URLs from $uniqposts posts"

./getpics.txt >checkpics.txt

chmod a+x checkpics.txt

uniqpics=$(grep -c "curl " checkpics.txt)

echo "Checking $uniqpics images"

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

#only leave "http" (both posts and pics) and curl error msgs in the output to clean it up
grep -a -E -e "curl: |http" checkpics.result.txt >checkpics.result0.txt

#leave error message, post URL and picture URL:
cat checkpics.result0.txt |  perl -e '$post="";$err="";$postprinted=0;while(<>){chomp;if($err){if(!$postprinted){print"$post\n"; $postprinted=1;}print "$err ($_)\n";$err="";}elsif($_=~m/(.*\.html)/gi){$post=$_;$postprinted=0;}elsif($_=~m/^curl.*/){$err=$_;}}' >errors.txt

#count number of broken links
numerrors=$(grep -c "curl: " checkpics.result0.txt)
echo Errors found: $numerrors

date
##### end

Tags: ,

(4 comments | Leave a comment)

Comments
 
From:tatiphoto
Date:October 29th, 2010 06:37 pm (UTC)
(Link)
Витя, я конечно вечером у мужа спрошу, что надо с этим делать :-) Заранее спасибо как говорится. Ты вот мне лучше скажи - у тебя с Fotki.com с загрузкой через Java все нормально в последнее время? У меня уже полуистеричное состояние - я не могу загрузить ни одной фотки в течение последних скажем трех недель, открыла тикет на фотках, они меня спрашивают про конфигурацию сети, файервол и пр лабуду. убила бы. Муж уже послал им распечатку конкретной ошибки - нет, похоже они не исправят. Вчера в 11 вечером сидела и ревела - наверное придется уходить куда то,, жалко 8 лет трудов и фоток... столько альбомов... как у тебя, мысли есть?
[User Picture]
From:cold_n_sour
Date:October 29th, 2010 09:09 pm (UTC)
(Link)
я не использую java - у меня PictureSync, работает без проблем.
[User Picture]
From:cold_n_sour
Date:October 29th, 2010 09:10 pm (UTC)
(Link)
From:tatiphoto
Date:January 2nd, 2011 06:40 pm (UTC)
(Link)
Витя, не мог бы ты мне в письме написать, что с этим скриптом делать? Где запускать. КАк и пр. Спасибо.
Мои фотографии Powered by LiveJournal.com