Задачка на "подумать".
Вот есть у меня блог на blogger.com (свой блог на своём хостинге не предлагать, про такой вариант знаю, может, когда-нить так и сделаю, там вопросы бекапа просто отпадают).
Вот не доверяю гуглу, хочу сделать регулярное резервное копирование. Чтобы "сделал и забыл".
Как вообще можно сказать текущий снимок блога? Есть ссылка - http://draft.blogger.com/feeds/*много цифры*/archive
Несмотря на страшные цифры - она не меняется по идее, постоянна. Но не уверен, что она есть всегда, может, создаётся предварительно скриптом.
Если просто браузером скачать - результат вполне предсказуем. Если разлогиниться на гугле и скормить ссылку браузеру - не работает. Вывод такой - требуется аутентификация.
Хотелось бы использовать, к примеру, wget, и закронить его, чтобы каждую неделю скачивал снимок куда-нить (весит он немного совсем). Пробовал указывать опции что-то вроде --user --password - не получилось.
Вообще реально такое сделать, или там у гугла какая-то хитрая привязка?
Резервное копирование блога
А как там скачивается архив блога? Ссылка?
Могу посоветовать использовать скрипт, с wget, bash, python не знаю как, а на php через сокеты. Удаленная авторизация, сам такое не делал, но вот нашел скрипт.
function PostRequest($url, $referer, $_data) {
// convert variables array to string:
$data = array();
while(list($n,$v) = each($_data)){
$data[] = "$n=$v";
}
$data = implode('&', $data);
// format --> test1=a&test2=b etc.
// parse the given URL
$url = parse_url($url);
if ($url['scheme'] != 'http') {
die('Only HTTP request are supported !');
}
// extract host and path:
$host = $url['host'];
$path = $url['path'];
// open a socket connection on port 80
$fp = fsockopen($host, 80);
//echo $path;
// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
//fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
$result = '';
while(!feof($fp)) {
// receive the results of the request
$result .= fgets($fp, 128);
}
// close the socket connection:
fclose($fp);
// split the result header from the content
$result = explode("\r\n\r\n", $result, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
// return as array:
return array($header, $content);
}
// submit these variables to the server:
$data = array(
'login' => 'YOUR_LOGIN',
'passw' => 'YOUR_PASSWORD'
);
// send a request to example.com (referer = jonasjohn.de)
list($header, $content) = PostRequest("URL","",$data);
// print the result of the whole request:
print $header;
print $content;
// --> prints the headers
Sonic, спасибо. Можно будет попробовать.
php тут некритично... с ним немного знаком, думаю, и так запущу, либо переведу на что-нить другое. Через сокеты не пробовал. Я думал. что просто wget-ом по идее можно.
http://draft.blogger.com/feeds/*много цифры*/archive - вот такого вида ссылка.
Ну у меня http://draft.blogger.com/feeds/4950738840510510857/archive
В "записках дебианщика" помню промелькало решение, как раз про blogger даже.
Добрый день
У гугла же существует API для авторизации и не только. Ознакомиться можно здесь.
Таким образом можно составить подобный shell скрипт:
#!/bin/sh
Email=$1
Passw=$2
die()
{
echo "$1" >&2
exit 1
}
# using google API to login
auth=`wget -q -O- --post-data="Email=$Email&Passwd=$Passw&service=blogger&accountType=GOOGLE&source=wget-home-1" https://www.google.com/accounts/ClientLogin | grep Auth | cut -d= -f 2`
[ -z "$auth" ] && die "Login failed"
# get some page of the blogger.com using received auth code
wget --header "Authorization: GoogleLogin auth=$auth" http://www.blogger.com/home
Вместо последней ссылки можно подставить ссылку на Ваш архив, если эта ссылка постоянная. Иначе можно перейти на страницу, где находится эта ссылка и загрепать её.