LINUX.ORG.RU

GoogleCL - CLI утилита для работы с сервисами Google

 , ,


1

0

Google в своём блоге анонсировала утилиту для работы с сервисами Google через командную строку под названием GoogleCL

Она позволяет автоматизировать такие задачи как постинг в Blogger, добавление событий в Calendar или редактирование документов в Google Docs.

Например закачать директорию с фотографиями в Picasa теперь можно так:

$ google picasa create --title "My album" ~/Photos/vacation/*.jpg

Ещё примеры использования:

$ google blogger post --blog "My blog" --tags "python, googlecl, development" my_post.html
$ google calendar add "Lunch with Jason tomorrow at noon"
$ google docs edit --title "Shopping list" --editor vim

GoogleCl написана на языке Python и использует библиотеку gdata для работы с Google Data API.
Утилита опубликована под лицензией Apache v2.0.

Скачать:

Домашняя страница GoogleCL

>>> Оригинальный анонс в блоге Google (на английском языке)

★★★★★

Проверено: annoynimous ()

Ответ на: комментарий от sv75

А я и не сказал что его там нет. Просто системами он не используется. Что собственно и было ответом на вопрос существует ли дистрибутив линукса куда нужно доставлять питон по зависимостям. Вы ниточку перечитайте.

KblCb ★★★★★ ()
Ответ на: комментарий от mx__

Так что, никто не может сказать, насколько это безопасно предоствлять такой доступ?

vladymyrk ()

Подскажите пожалуйста, как добавить видео (всё остальное работает).

Я делаю так:

$google youtube post --category «MyVideo» --devtags GoogleCL bb08094ba4.flv

В ответ оно говорит вот такое:

Traceback (most recent call last): File «/usr/local/bin/google», line 463, in <module> main() File «/usr/local/bin/google», line 457, in main run_once(options, args) File «/usr/local/bin/google», line 356, in run_once task.run(client, options, args) File «/usr/lib/pymodules/python2.6/googlecl/youtube/service.py», line 217, in _run_post tags=options.tags, category=options.category) File «/usr/lib/pymodules/python2.6/googlecl/youtube/service.py», line 129, in post_videos self.InsertVideoEntry(video_entry, path) File «/usr/lib/pymodules/python2.6/gdata/youtube/service.py», line 653, in InsertVideoEntry raise YouTubeError(e.args[0]) gdata.youtube.service.YouTubeError: {'status': 400, 'body': «<?xml version='1.0' encoding='UTF-8'?><errors><error><domain>yt:validation</domain><code>invalid_value</code><location type='xpath'>media:group/media:category[@scheme='http://gdata.youtube.com/schemas/2007/categories.cat']/text()</location></error></errors>», 'reason': 'Bad Request'}

sskirtochenko ★★ ()
Ответ на: комментарий от sskirtochenko

Оппа. Разобрался.

Нет такой категории MyVideo. Нужно указывать существующую.

sskirtochenko ★★ ()
Ответ на: комментарий от KblCb

> В этих ваших LSB в качестве формата пакетов прописан rpm, что уже многое о LSB говорит

Для бинарных пакетов есть что-то лучше RPM?

Кроме того, мне всегда казалось что LSB регламентирует место где должна лежать сущность, а не её обязательное наличие


Тебе неправильно казалось. Впрочем, LSB до 3.1 включительно не регламентирует наличие perl/python вообще

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

>Для бинарных пакетов есть что-то лучше RPM?

DEB. Просто, надежно, удобно. Тем более есть тенденция к унификации debian/ubuntu - это то, что миру RPM пока еще не сниться.

anonymous ()
Ответ на: комментарий от AnDoR

> Тот, что в портежах не ставит маны.
fixed

Nao ★★★★★ ()
Ответ на: комментарий от anonymous

> DEB. Просто, надежно, удобно.

Иными словами инженера интеля и нокиа не захотели сделать -
просто, удобно и надежно и когда замутили мееГо то выкинули от туда
деб и воткнули рпм ....

Кстати чтобы был типа сабж и рпм то достаточно сделать :
python setup.py bdist_rpm

Нука напрягись и покажи как это проще делается для ДЕБа.

mx__ ★★★★★ ()
Ответ на: комментарий от anonymous

Зато в мире RPM есть то, чего нет и не предвидится в мире DEB — кровная заинтересованность со стороны коммерческих поставщиков Linux-решений, разрабатывающих и развивающих GNU/Linux (Red Hat и Novel)

dexpl ★★★★★ ()
Ответ на: комментарий от moot

хм.. может завести гуглоблог для домашнего сервера. и скрестить logcheck и GoogleCL. пусть другие серверы его читают и коментят. kill all humans!

А что, запросто. Был же модуль для syslog-ng, который писал логи в Twitter =).

mironov_ivan ★★★★★ ()
Ответ на: комментарий от n01r

>Запускает выбранный бразузер (настройками или окружением) или печатает линку (через -print)

Мне бы результаты поиска от гуглекартинок получить в виде ссылок на картинки. Потом их питоном можно будет скачать все сразу. Я думал хоть этот гугльCL умеет, но похоже что нет.

Leron ★★ ()

Интересная штука, надо будет вообще API поковырять, хотя бы из интереса.

SpeedyWizard ()
Ответ на: комментарий от sskirtochenko

$google youtube post --category «MyVideo» --devtags GoogleCL bb08094ba4.flv

В ответ оно говорит вот такое:

Traceback (most recent call last): File «/usr/local/bin/google»,

вот за это я и ненавижу пистон.

AVL2 ★★★★★ ()
Ответ на: комментарий от Gukl

Ну, спецэффекты выкинуть и получить тупо слайды.

NoMad ★★ ()
Ответ на: комментарий от Leron

Мне бы результаты поиска от гуглекартинок получить в виде ссылок на картинки. Потом их питоном можно будет скачать все сразу. Я думал хоть этот гугльCL умеет, но похоже что нет.

Дык питоном все это можно сделать: даже в `dive into python' есть подходящий пример: urllister, выцепить regexp-ом (начиная с определенной)... только надо не забыть выставить user-agent (пробовал когда-то, только не images, а обычный поиск).

А насчет, собственно, скачивания: почему не wget (при условии, что список уже есть)?

откопал (набросок для обычного поиска запускал «$0 `surfraw -print google <search-query>`»):

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys, urllib
from sgmllib import SGMLParser

class URLLister(SGMLParser):
    def reset(self):                              
        SGMLParser.reset(self)
        self.urls = []

    def start_a(self, attrs):                     
        href = [v for k, v in attrs if k=='href']  
        if href:
            self.urls.extend(href)

class AppURLopener(urllib.FancyURLopener):
    version = "Mozilla/5.0"
urllib._urlopener = AppURLopener()

lookup = sys.argv[1]
begin = '/'+'/'.join(lookup.split('/')[3:])

#proxies = {'http': 'http://localhost:8080'}
#usock = urllib.urlopen(lookup, proxies=proxies)
usock = urllib.urlopen(lookup)

parser = URLLister()
parser.feed(usock.read())         

usock.close()                     
parser.close()                    

urls = iter(parser.urls)
for url in urls:
    if url.startswith(begin): break

for url in urls:
    if url.startswith('http://webcache.googleusercontent.com'): continue
    if url.startswith('http'): print url

n01r ★★ ()
Ответ на: комментарий от n01r

> откопал (набросок для обычного поиска запускал «$0 `surfraw -print google <search-query>`»)

Хм... проверил, в конце три левые ссылки, черновик же). Про контестную рекламу уже молчу.

n01r ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.