*nix

индекс
298,30

Скачиваем Google Docs без браузера

Скриптик выглядит как-то так:

#!/bin/bash
token=$(curl -s https://www.google.com/accounts/ClientLogin -d Email=user.name@gmail.com -d Passwd=qwerty -d accountType=GOOGLE -d service=writely -d Gdata-version=3.0 |cut -d "=" -f 2)
set $token
curl --silent --header "Gdata-Version: 3.0" --header "Authorization: GoogleLogin auth=$3" "http://docs.google.com/feeds/user.name@gmail.com/private/full" | tidy -xml -indent -utf8 -quiet > /tmp/gdocs.xml
file=(doc1 doc2 doc3 doc4)
resourceId=(document:0ASpnxqo7zPlfZGQ3Z2Zwc183NWZteDNiM2Y ...) # и ещё 3 resourceId
i=0
while (( i < 4 )) # match num_files
do
wget --header "Gdata-Version: 3.0" --header "Authorization: GoogleLogin auth=$3" "https://docs.google.com/feeds/download/documents/Export?docID=${resourceId[$i]}&exportFormat=txt" -O /tmp/${file[$i]}.txt

sleep 2
i=$i+1
done

А теперь, как принято, разоблачение.
  • Первой строкой получаем жетон аутентификации. Далее его предъявляем для скачивания RSS потока, который сохраняем в файл. Далее из него берём resourceId и скачиваем доки. Тут следует сделать оговорку, что resourceId берётся «вручную» из сохраненного RSS файла. Можно, конечно, и это автоматизировать, но если документов не много то и раздувать скрипт не обязательно.
  • Ссылка для скачивания доков:
    GET /feeds/download/documents/Export?docID=resource_id&exportFormat=format
  • service=writely. Список наименований кодов Гугло-сервисов берется отсюда.
  • resourceId ключевое элемент. Это идентификатор дока. Его берём из RSS потока скачанного в файл /tmp/gdocs.xml. Релевантные тэги выглядят так и находятся в той же записи где название доки.
    <gd:resourceId>
    document:0ASpnxqo7zPlfZGQ3Z2Zwc183Zzc3NnZkY2g</gd:resourceId>
  • exportFormat=txt. Можно выбрать и другие форматы для скачивания. Список тут.
Написано на скорую руку, поэтому любые замечания и критика приветствуются.
+19
23 февраля 2010, 14:33
36

комментарии (17)

+3
DeNn #
Еще есть неплохой питоновый скрипт 1st-soft.net/gdd/
0
q_styler #
Круто =)
–1
alexxxst #
Жетон…
0
temujin #
Я так перевёл слово «token».
–1
alexxxst #
C какого языка? :) Может тогда уж «ключ»?
0
temujin #
На английском в переводе слова «token» есть «жетон». Ключ, наверное, неверно передаст значение.
+2
SegaZero #
не переводите. токен есть токен, давно устоявшийся среди айтишников термин
+1
zokotuhaFly #
Бросьте, все понимают всё равно. Не надо «не переводите» — это дело переводчика или автора.

«Ключ» — пересекается с другими терминами, «жетон» использовался до того, как «устоялся» токен.

Да и вообще это абсолютно второстепенное дело.
0
zokotuhaFly #
а по-моему всё отлично, в случае аутентификации токен — это именно жетон/билет, если уж переводить — и все действия подобны действиям с жетонами/билетами, привычными нам (и им) по будничной жизни. благодаря такому переводу токен даже теряет для новичка свою ненужную таинственность.

(и, «лексема» — при разборе текста)
+3
Frosty #
>> i=$i+1
Это точно работает?
$ i=1
$ echo $i
1
$ i=$i+1
$ echo $i
1+1

По моему правильный вариант: i=$(($i+1))
0
temujin #
Попробуйте echo "$i" в конце.
0
Frosty #
А я что делал?
0
oWeRQ #
let i=$i+1
0
nurakhov #
Я не айтишник, но вопрос есть. Можно ли как-то этот скрипт модернезировать, чтобы передавать содержимое документа на другой сайт? Для точного понимания можно провести параллель со вставкой изображения с одного сайта в другой посредством тега img
0
temujin #
Вполне. На странице Developer Guide есть указание на то как документы загружать в Google Docs. Так что можно объединить скачивание с 1-го сайта и загрузку на 2-й.
0
Grundiss #
Гуглодок без браузера это нереально круто!
А можно вопрос: нафига? :)
Гуглодоки они для удобного пользования, все-таки. А если надо чего-то где-то хранить, а потом качать, то найдите (это сейчас не к автору, а так — безлично) файл-хостинг. Все надо по-назначению использовать.
0
nIx0iD #
Никак не могу отладить данный скрипт для скачивания xls

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.