yarkov
@yarkov
Помог ответ? Отметь решением.

Как правильно поступить с датой?

Есть сайт, который раз в 3-5 дней отдает список прокси по такому URL:
http://site.com/proxy/list_{dd.mm.YYYY}.txt
Мне нужно сделать так:
Отправить запрос на урл с сегодняшней датой
Если статус 404, то уменьшить дату на 1 и снова послать запрос и так пока не получу статус 200

Пока есть вот такой код:
get_proxy_list() {
	savefile=~/.PROXY_LIST
	date=$(date +%d.%m.%Y)
	url="http://site.com/proxy/list_${date}.txt"
	# Вот тут надо вкорячить while status -ne 200
	status=$(wget --spider -S ${url} 2>&1 | grep "HTTP/" | awk '{print $2}')
	if [ "${status}" -eq 200 ]; then
		wget --output-document=${savefile} ${url} 2>&1
		cat ${savefile}
	elif [ -f ${savefile} ]; then
		cat ${savefile}
	else
		echo "Proxy list not found"
	fi
}
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
yarkov
@yarkov Автор вопроса
Помог ответ? Отметь решением.
Все получилось в итоге вот так:
__get_date() {
	local date=$(date --date="-$1 day" +%d.%m.%Y)
	echo ${date}
}

__get_url() {
	local date="$1"
	echo "http://webanetlabs.net/freeproxylist/proxylist_at_${date}.txt"
}

__get_status() {
	local offset="$1"
	local date=$(__get_date ${offset})
	local __url=$(__get_url ${date})
	local status=$(wget --spider -S ${__url} 2>&1 | grep "HTTP/" | awk '{print $2}')
	echo "${status}"
}

get_proxy_list() {
	local savefile=~/.PROXY_LIST
	local counter=0
	while [ $(__get_status ${counter}) != "200" ]; do
		counter=$(($counter + 1))
	done
	local date=$(__get_date ${counter})
	local url=$(__get_url ${date})
	wget --output-document=${savefile} ${url} > /dev/null 2>&1
	cat ${savefile}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Сначала переделай это
get_proxy_list() {
  savefile=~/.PROXY_LIST
  date=$(date +%d.%m.%Y)
  url="http://site.com/proxy/list_${date}.txt"

  ...

}


В это
make_dmy_date() {
    date "+%d.%m.%Y"
}

make_proxy_url() {
    echo "http://site.com/proxy/list_$(make_dmy_date).txt"
}

make_proxy_ofname() {
    echo "~/.PROXY_LIST"
}

get_proxy_list() {
  url=$1
  savefile=$2

  ...

}

get_proxy_list `make_proxy_url` `make_proxy_ofname`


А потом уже пиши функции, какие нужно. Если нужно декрементировать дату, пиши для этого функцию. Заодно внутри функции идёт контроль над кодом, но и сам код может получиться нетривиальным, так как при декременте даты нужно учитывать, что она может дойти до нуля и это нужно будет тоже обкладывать кодом каким-то.

А если всё в куче писать, то будет вот такая свалка, как у тебя сейчас, - неповоротливая и непригодная для каких-то тонких изменений и настройки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы