Geeknote — консольный клиент для Evernote

    Приветствую, коллеги!

    Хочу рассказать вам о нашем проекте — Geeknote. Это консольный клиент для Evernote. Проект Open Source и исходные коды доступны на Github. Geeknote позволяет работать с Evernote из командной строки. Реализованы все основные функции Evernote — создание/удаление заметок, создание блокнотов и тегов, поиск, а так же редактирование через обычный текстовый редактор заметок в формате markdown. То есть можно использовать Evernote в bash скриптах, cron, любых приложениях, где нельзя использовать Evernote SDK. Расскажу подробнее про проект.


    Идея проекта

    Мы активные пользователи Evernote и используем его в наших делах, личных и не личных, а так же глубоко верим в удобство идеологии Evernote — храни все в одном месте. И раз Evernote это сосредоточение информации для нас, мы подумали, что было бы удобно его использовать и в целях сбора статистики серверов, которые мы ведем. Так пришла мысль написать простой клиент для командной строки, который можно было бы использовать в cron + bash скриптах наших серверов.

    Что было и сделано. В результате использования нам в Evernote прилетает информация:
    • критические и не очень ошибки на серверах;
    • статистики по бекапам;
    • статистика по нагрузке;
    • различная информация с наших сайтов;
    • прочая информация, которая так или иначе мониторилась.

    Просто шаблон мониторинга изменился — все стало приходить в отдельно выделенные блокноты в Evernote. Нам понравилось, это оказалось очень удобным. Мы решили сделать публичный клиент, для всех. И назвали его Geeknote, думаю понятно почему.

    Что Geeknote умеет?

    Вся функциональность Geeknote описана в документации, с примерами использования каждой команды. Но я заострю внимание на особенных вещах, которые мне нравятся.

    Редактирование в текстовом редакторе

    Geeknote позволяет редактировать заметку в обычном консольном текстовом редакторе, который вам нравится — nano, mcedit и т.д.

    $ geeknote edit --note "Shoplist 22.05.2012" --title "Shoplist 23.05.2012" --content "WRITE"


    Передаем слово WRITE в качестве атрибута контента и открывается текстовый редактор по умолчанию.
    О редактировании заметок в документации.
    После редактирования заметки в текстовом редакторе она прогоняется через markdown обработчик и сохраняется в Evernote.

    Создание заметки — напрямую и из файла

    В Geeknote можно создавать заметку напрямую через консоль, или указать в качестве источника файл, который вы хотите загрузить. Файл должен быть текстовый, Geeknote пока работает только с текстовой информацией.

    Пример создания просто заметки:

    
    $ geeknote create --title "Shopping list 22.04.2012"
                      --content "Don't forget to buy milk, turkey and chips."
                      --notebook "Family"
                      --tags "shop, holiday, important"
    

    И из файла:

    
    $ geeknote create --title "Web-site queues"
                      --content /home/website/queues.log
                      --notebook "Projects"
                      --tags "queues, logs"
    


    Вывод --url-only

    В Geeknote можно выполнять поиск с атрибутом --url-only, таким образом в результатах поиска вы увидите ссылки на веб-версию каждой заметки.

    $ geeknote find --search "Shopping" --url-only


    Интерактивный веб-терминал

    Для демонсттрации работы Geeknote на сайте мы разработали интерактивный веб-терминал, который умеет работать с реальными аккаунтами Evernote и с Sandbox, если хотите просто потестировать. Авторизация происходит через oAUTH.



    Терминал имеет весь функционал Geeknote, даже редактирование через edit. Отключены системные команды, такие как login и settings.

    Технически веб-терминал Geeknote работает на web-sockets + Tornado в бекенде и временными сессиями.

    Сохранение предыдущей сессии поиска

    Если вы выполняли поиск, вы можете обращаться к найденным заметкам через их индекс в результатах. Geeknote запоминает последнюю сессию поиска в базе данных. Пример:

    
    $ geeknote find "*"
    Search request: intitle: *
    Total found: 9
      1 : 02.07.2012  Go shopping
      2 : 02.07.2012  Shopping list 22.04.2012
      3 : 01.07.2012  webpp.ru log
      4 : 01.07.2012  The title
      5 : 23.06.2012  Shopping list 25.04.2012
      6 : 23.06.2012  Shopping list 22.04.2012
      7 : 20.06.2012  Martin_Dzhordzh - Igra_prestolov_Kniga_I
      8 : 20.06.2012  2012-06-15-are-you-a-problem-or-a-solution
      9 : 20.06.2012  2012-06-13-pedagogical-poem-by-anton-makarenko
    
    $ geeknote show 1
    # Или удалить
    $ geeknote remove 2
    # Или отредактировать в редакторе
    $ geeknote edit 3 --content "WRITE"
    


    Синхронизация директорий

    В пакете Geeknote мы добавили приложение gnsync, которое предназначено для синхронизации локальных директорий с файлами с блокнотами в Evernote.

    Например есть у вас директория, куда каждый день складируются отчеты о состояниях, логи и т.д. Каждый день — новые файлы. Настраиваете по крону через gnsync синхронизировать эту директорию с нужным блокнотом в Evernote и все, все новые файлы будут добавляться в качестве новых заметок.

    Пример команды gnsync:

    
    $ gnsync --path /home/project/xmpp/logs/
             --mask "*.logs"
             --logpath /home/user/logs/xmpp2evernote.log
             --notebook "XMPP logs"
    


    Автокомплит команд

    Если вы будете работать с Geeknote вручную, то можете использовать двойное нажатие TAB для автокомплита команд и подсказок.

    Проект сегодня

    Проект участвует в конкурсе Evernote Devcup. Судя по голосам и лайкам, а так же фидбеку за неделю, как мы запустились — идея проекта востребована. Если вам понравился Geeknote, пожалуйста, поддержите нас голосом в конкурсе.
    Наша страница на проекте. Будем благодарны.

    Специально для конкурса было подготовлено видео проекта, кратко рассказывающее о нем, на английском.



    Проект будет и дальше развиваться, так как мы используем его для своих нужд, а так же получили фидбек и это радует. Если у вас есть идеи о функциональности, прошу оставить их в комментариях или на странице Github проекта.

    Об авторах

    Меня зовут Родненко Виталий, давно я писал статьи на хабр про поиск нечетких дубликатов и алгоритм шинглов для веб-документов, и в своем техническом блоге показывал простую его реализацию на Python. А так же мои коллеги Моисеенко Семен и Гуреев Иван — любимые сотрудники нашей студии.

    Резюме

    Geeknote — консольный клиент для Evernote. Позволяет работать с Evernote из командной строки, открывая тем самым возможности использования Evernote в автоматизации, системном администрировании, программировании bash скриптов и т.д.
    Share post

    Similar posts

    Comments 26

      +4
      Круто! Иногда очень даже полезно иметь evernote поближе к терминалу.
      Поставил.
        0
        Только вот возникла проблема с установкой, я ввёл, как и сказано, python geeknote.py login, вошёл в систему и работаю. Но нет ли встроенного именно инсталлятора? Каждый раз писать python ~/Projects/geeknote/geeknote.py как-то не очень. Конечно, можно сделать и симлинк и алиас, но нет ли готовых средств?
          0
          Мы собрали deb пакет, после установки в консоле появятся команды: geeknote и gnsync. Правда это актуально для Debian и Ubuntu.
            +1
            может лучше в pip добавить?
              0
              Хм, я вообще под макосью работаю, так что deb-пакеты мне не сильно помогли. Сделайте хоть какой-нибудь install.py, который делает симлинки в /usr/local/bin — и будет хорошо всем, у кого не debian-based система!
                0
                silvansky10, спасибо за совет, мы сделаем в следующей версии инсталляторы. С ними действительно человечней выглядит.
                  0
                  Спасибо!
                    0
                    А пока нет инсталлятора, мой вариант простой и быстрой установки для тех, у кого не дебиан:

                    cd geeknote/
                    echo alias geeknote=\"python $PWD/geeknote.py\" >> ~/.profile
                    echo alias gnsync=\"python $PWD/gnsync.py\" >> ~/.profile
                    


                    Разумеется, вместо .profile нужно указать Ваш файл настроек bash/sh/etc…
            +1
            Очевидно, чего не хватает. Хочется fuse(под маком — macfuse) псевдофайловую систему для evernote, тогда точно будет БОМБА!
              0
                0
                Спасибо за идею! Пометили как важную, fuse под Evernote будет очень круто!
                +2
                По-моему, это просто прекрасно!
                  0
                  А вот для любителей Emacs, если кто ещё не видел. :)

                  code.google.com/p/emacs-evernote-mode/
                    0
                    wolong@wolong-laptop:/tmp$ geeknote show
                    Unexpected value "" for argument "--note"
                    Options for: show
                    Available arguments:
                    --note : The name or ID from the previous search of a note to show.
                    wolong@wolong-laptop:/tmp$ geeknote notebook-create
                    Traceback (most recent call last):
                      File "/usr/local/lib/geeknone/geeknote.py", line 730, in main
                        Notebooks().create(**ARGS)
                    TypeError: create() takes exactly 2 arguments (1 given)
                    wolong@wolong-laptop:/tmp$ geeknote login
                    Traceback (most recent call last):
                      File "/usr/local/lib/geeknone/geeknote.py", line 701, in main
                        User().login(**ARGS)
                      File "/usr/local/lib/geeknone/geeknote.py", line 45, in wrapper
                        return func(*args, **kwargs)
                      File "/usr/local/lib/geeknone/geeknote.py", line 329, in login
                        if self.getEvernote().auth():
                      File "/usr/local/lib/geeknone/geeknote.py", line 145, in auth
                        self.authToken = GNA.getToken()
                      File "/usr/local/lib/geeknone/oauth.py", line 117, in getToken
                        self.getTmpOAuthToken()
                      File "/usr/local/lib/geeknone/oauth.py", line 133, in getTmpOAuthToken
                        self.getTokenRequestData(oauth_callback="https://"+self.url['base']))
                      File "/usr/local/lib/geeknone/oauth.py", line 95, in loadPage
                        conn.request(method, uri, params, headers)
                      File "/usr/lib/python2.7/httplib.py", line 958, in request
                        self._send_request(method, url, body, headers)
                      File "/usr/lib/python2.7/httplib.py", line 992, in _send_request
                        self.endheaders(body)
                      File "/usr/lib/python2.7/httplib.py", line 954, in endheaders
                        self._send_output(message_body)
                      File "/usr/lib/python2.7/httplib.py", line 814, in _send_output
                        self.send(msg)
                      File "/usr/lib/python2.7/httplib.py", line 776, in send
                        self.connect()
                      File "/usr/lib/python2.7/httplib.py", line 1161, in connect
                        self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
                      File "/usr/lib/python2.7/ssl.py", line 381, in wrap_socket
                        ciphers=ciphers)
                      File "/usr/lib/python2.7/ssl.py", line 143, in __init__
                        self.do_handshake()
                      File "/usr/lib/python2.7/ssl.py", line 305, in do_handshake
                        self._sslobj.do_handshake()
                    SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
                    


                    Что-то тут не то. Установил только что.
                      0
                      Сейчас проверим. Какая у Вас ОС?
                        0
                        ubuntu 12.04
                          0
                          К сожалению, под Ubuntu 12.04 Geeknote не работает, это указано на странице Install. Это ошибка Evernote SDK под Python, как только они обновленную версию выпустят, за пересоберем Geeknote.
                            0
                            я в своём проекте ubunote обошёл это так
                            0
                            очень надеюсь что скоро пофиксят
                        0
                        zotero
                          0
                          Кстати, а под линукс есть нормальный клиент для evernote? Я видел только nevernote, но он просто ужасен(и интерфейс, и производительность: грузится вечность).
                            0
                            Нет, клиента нет. Только под Windows, OS X и веб-версия.
                              0
                              Веб-клиент неплох, а теперь вот и консольный есть =)
                              0
                              после вызода сервиса гугл драйв итегрированного с гугл докс сервис со временем сдохнет.

                              Only users with full accounts can post comments. Log in, please.