SlideShare a Scribd company logo
1 of 33
Download to read offline
Экосистема Evernote:
 API, продвижение и анонс
конкурса для разработчиков


         Игорь Афанасьев
             @iafan
Что такое Evernote
Помни всё!
35 млн
  зарегистрированных
     пользователей
+ пользователи Skitch, Penultimate



    1 млн
     пользователей
 в России и странах СНГ
Android, iOS, Windows Phone,
Windows 8
   новинка!
Mac OS, Windows Desktop
веб-клиент
Chrome, Firefox,
Safari, Internet Explorer
Evernote Clearly (Chrome, Firefox)
Evernote Food (Android, iOS)
Evernote Hello (Android, iOS)
Evernote Peek (iPad)
Skitch (Mac OS, iPad, Android)
Penultimate (iPad)
Evernote для Windows 8
Экосистема Evernote
Галерея Evernote
Каналы продвижения
џГалерея
џПромо-баннеры на сайте evernote.com
џпромо-баннеры в приложениях
 для Mac OS и Windows Desktop
џрусскоязычный блог
џпочтовая рассылка
џТвиттер

џБлог на Хабрахабре
Evernote API
Сайт для разработчиков:
   http://dev.evernote.com/

                Там вы найдете:
           - обзор возможностей API
        - полную документацию по API
  - ресурсы (видео, новости, техподдержка)
- примеры приложений, построенных на API
Русскоязычная поддержка
                           по API:
Обратная связь




                  Ссылка на наше сообщество поддержки
                 есть в виде закладки на каждой странице
                           русскоязычного сайта.
                 При оформлении вопроса выберите раздел
                             “Evernote API”.
Cloud API

Особенности:
џкроссплатформенный (общение
 непосредственно с сервером в онлайне)
џБиблиотеки для C++, C#, Objective-C, Java,
 JavaME, PHP, Perl, Python, Ruby, ActionScript 3
џТребует регистрации и получения
 персонального ключа
Применения:
џлюбые веб-сервисы
џлюбые локальные клиентские приложения
Cloud API

С чего начать работу с Cloud API
џИдете на dev.evernote.com в раздел Cloud API
џЗаполняете анкету на получение ключа
џЗагружаете Evernote API SDK и знакомитесь с
 документацией
џПосле получения ключа он работает только на
 сервере-”песочнице” sandbox.evernote.com
џПо окончании разработки и тестирования
 приложения заполняете на сайте форму и
 активируете ключ на основном сервере
Cloud API: авторизация



    Обычная                           OAuth
 Только для разработчиков    Веб- и клиентские приложения
  (выдается конкретному      (авторизация через веб-форму,
пользователю, авторизация     в базе можно хранить ключи
   через логин и пароль)     для множества пользователей)


           Тип нужно указать при запросе ключа
+ определить права: создание [,чтение, изменение] объектов
Cloud API: OAuth
                   (несколько упрощенная схема)

џПользователь идет на ваш сайт (foo.ru) и
 выбирает функцию “Подключиться к Evernote”
џсайт открывает форму авторизации на сайте
 Evernote:
 https://www.evernote.com/oauth?...&oauth_callback=https%3A%2F%2Ffoo.ru%2Foa
 uthCallback
џПользователь входит в аккаунт Evernote и
 нажимает кнопку "Авторизовать приложение
 Foo".
џПользователь переходит обратно на ваш сайт:
 https://foo.ru/oauthCallback&oauth_token=xxxyyyzzz
Cloud API: Thrift

      http://thrift.apache.org/

Основные принципы:
џСинхронный вызов функций (методов объектов)
 на сервере
џБиблиотеки для разных языков изолируют всю
 сетевую сериализацию запросов и ответов. Для
 программиста это просто создание объектов и
 вызов их методов. Ответы и исключения — тоже
 в виде объектов (структур).
Cloud API: Объекты
http://dev.evernote.com/documentation/reference/

UserStore                        NoteStore
Проверка версии протокола,       Работа с блокнотами,
аутентификация                   метками, заметками и их
пользователя, обновление         ресурсами, сохраненными
токена, получение                запросами, подключенными
информации о пользователе,       (чужими) блокнотами, поиск
о месячных лимитах.              заметок по критериям,
                                 экспорт (получение
                                 публичного URL заметки),
                                 открытие доступа к
                                 блокнотам, синхронизация.

                 + типизированные исключения
  + константы: лимиты и регулярные выражения для валидации
Cloud API: Thrift
// подключение к базе пользователей
$userStoreHttpClient = new THttpClient('sandbox.evernote.com', 443,
"/edam/user", 'https');
$userStoreProtocol = new TBinaryProtocol(userStoreHttpClient);
$userStore = new UserStoreClient($userStoreProtocol, $userStoreProtocol);

// аутентификация по ключу разработчика (вызов функции на сервере)
$authResult = $userStore->authenticate($username, $password, $consumerKey,
$consumerSecret);

// получение токена (поля структуры) — он используется при всех запросах
$authToken = $authResult->authenticationToken;

// получение информациии о пользователе
$user = $userStore->getUser($authToken);

// подключение к базе заметок конкретного пользователя
$noteStoreHttpClient = new THttpClient('sandbox.evernote.com', 443,
"/edam/note/" . $user->shardId, 'https');
$noteStoreProtocol = new TBinaryProtocol($noteStoreHttpClient);
$noteStore = new NoteStoreClient($noteStoreProtocol, $noteStoreProtocol);
Cloud API: Thrift
// создание нового объекта-блокнота и заполнение параметров
$notebook = new edam_type_Notebook(); // создаем локальный объект
$notebook->name = “новый блокнот”; // указываем имя

// создание блокнота на сервере и получение его GUID
try {
  $notebook = $noteStore->createNotebook($authToken, $notebook);
} catch (Exception $e) {
  // блокнот создать не удалось
}
$nbguid = $notebook->guid;

// создание нового объекта-заметки и заполнение параметров
$note = new edam_type_Note(); // создаем локальный объект
$note->notebookGuid = $nbguid; // указываем GUID блокнота
$note->title = “Моя заметка”; // заголовок
$note->content = $content_ENML; // контент в формате ENML
$note->created = time() * 1000; // время в миллисекундах

// создание заметки на сервере и получение ее GUID
$note = $noteStore->createNote($authToken, $note);
$noteguid = $note->guid;
Cloud API: Синхронизация
       Полная спецификация — на сайте

Основные принципы:
џКлиентское приложение хранит счетчик
 изменений Update Sequence Number (USN) для
 последнего изменения, полученного с сервера.
џЦикл: приложение запрашивает блок
 изменений начиная с текущего USN, применяет
 эти изменения локально и сохраняет новое
 значение USN.
џUSN достиг максимального значения —
 синхронизация завершена.
Cloud API: Подписка
           Полная спецификация — на сайте

Можно периодически синхронизироваться, а
можно подписаться на определенные
изменения. Подписка — свойство ключа API.
Можно задать фильтр для подписки на
определенное подмножество заметок.
https://foo.ru?userId=evernoteUserId&guid=noteGuid&reason=create



Настройка по запросу через форму на сайте.
Cloud API: ENML
      Полная спецификация и DTD — на сайте

ENML — XHTML с некоторыми особенностями:
џкорневой тег <en-note>
 <en-note> <h1>Hello</h1> <p>World</p> </en-note>
џтег <en-media> для изображений и вложенных
 файлов
 <en-media type="image/jpeg" hash="f03c1c2d96bc67eda02968c8b5af9008" />
џтег <en-crypt> для зашифрованных фрагментов
 (есть пример JavaScript-библиотеки,
 позволяющей открывать эти фрагменты прямо в
 браузере)
 <en-crypt>NKLHX5yK1MlpzemJQijAN6C4545s2EODxQ8Bg1r==</en-crypt>
џтег <en-todo> для флажков задач
 <en-todo />
 <en-todo checked="true" />
Cloud API: Особые заметки
           Полная спецификация — на сайте

В Evernote можно создавать особые заметки,
привязанные к определенному приложению (как
в Evernote Hello и Evernote Food и Skitch).
В обычных клиентских приложениях Evernote
они будут доступны только для чтения.
Note->attributes->contentClass = 'companyName.appName.noteType'


У каждой заметки есть также хэш ключ-значение
для хранения данных внешних приложений.
Максимальный размер каждой пары — 4 Кб.
NoteStore.getNoteApplicationDataEntry + NoteStore.setNoteApplicationDataEntry
Cloud API: “Смотри также”
           Полная спецификация — на сайте

Новая функция Evernote API — возможность
искать связанные по смыслу заметки, блокноты
или метки. На входе — GUID заметки или текст.
На выходе — массив подходящих объектов.
result = NoteStore.findRelated(QueryObject, ResultSpec);
Cloud API: Эскизы
           Полная спецификация — на сайте

Для каждой заметки на сервере создается ее
эскиз. Их можно использовать для визуализации
заметок в ваших приложениях.
На выходе — PNG, JPEG или GIF, вписанный в
прямоугольник нужного вам размера, но не
более 300x300pх
POST-запрос на URL:
https://[sandbox|www].evernote.com/shard/shardID/thm/note/GUID[?size=75]
Внимание, конкурс!
Задание
            Сделайте и опубликуйте приложение на любой
            платформе, работающее с заметками Evernote
            через Cloud API, или интегрируйте
            ваше существующее приложение с Evernote.
Обратная связь




                          Мы постараемся
                          проконсультировать вас по
                          любым сопутствующим
                          вопросам (как техническим, так
                          и организационным).
Критерии оценки работ
џкачество реализации приложения: внешний
 вид и работоспособность
џфункциональность приложения, его
 актуальность для пользователей
џобъем интеграции с Evernote: приложение
 может просто отправлять информацию в наш
 сервис, а может загружать ее, создавать новые
 блокноты, использовать технологию
 распознавания и т. д.
Главный приз
         100 квартальных
        премиум-подписок
        которые вы сможете использовать
      для продвижения своего приложения,
          и реклама вашего приложения
в Галерее, блоге, Твиттере и почтовой рассылке
    (800 000+ русскоязычных пользователей)
Прием заявок
с 11 ноября по 11 декабря

  Подробности опубликуем в блоге
  blog.evernote.com/ru
Спасибо!
www.evernote.com

More Related Content

Viewers also liked

Μαθαίνω για τα Δάση 2015-16
Μαθαίνω για τα Δάση 2015-16Μαθαίνω για τα Δάση 2015-16
Μαθαίνω για τα Δάση 2015-16Afroditi Ntinou
 
Online identity
Online identityOnline identity
Online identityCMHSL
 
POSITION ANNOUNCEMENT: Director, Sustainable Agriculture Network
POSITION ANNOUNCEMENT:  Director, Sustainable Agriculture Network  POSITION ANNOUNCEMENT:  Director, Sustainable Agriculture Network
POSITION ANNOUNCEMENT: Director, Sustainable Agriculture Network Fundación Col
 
Железный предприниматель - победители
Железный предприниматель - победителиЖелезный предприниматель - победители
Железный предприниматель - победителиEvernote
 
StudyNote - Железный предприниматель
StudyNote - Железный предпринимательStudyNote - Железный предприниматель
StudyNote - Железный предпринимательEvernote
 
Evernote Devcup 2012
Evernote Devcup 2012Evernote Devcup 2012
Evernote Devcup 2012Evernote
 
Evernote для разработчиков: ресурсы, API, приложения
Evernote для разработчиков: ресурсы, API, приложенияEvernote для разработчиков: ресурсы, API, приложения
Evernote для разработчиков: ресурсы, API, приложенияEvernote
 

Viewers also liked (9)

Μαθαίνω για τα Δάση 2015-16
Μαθαίνω για τα Δάση 2015-16Μαθαίνω για τα Δάση 2015-16
Μαθαίνω για τα Δάση 2015-16
 
Online identity
Online identityOnline identity
Online identity
 
Presentació pública de Meridià (maig de 2008) [català]
Presentació pública de Meridià (maig de 2008) [català]Presentació pública de Meridià (maig de 2008) [català]
Presentació pública de Meridià (maig de 2008) [català]
 
Comunicació presentada al VI Foro sobre la Evaluación de la Calidad de la Edu...
Comunicació presentada al VI Foro sobre la Evaluación de la Calidad de la Edu...Comunicació presentada al VI Foro sobre la Evaluación de la Calidad de la Edu...
Comunicació presentada al VI Foro sobre la Evaluación de la Calidad de la Edu...
 
POSITION ANNOUNCEMENT: Director, Sustainable Agriculture Network
POSITION ANNOUNCEMENT:  Director, Sustainable Agriculture Network  POSITION ANNOUNCEMENT:  Director, Sustainable Agriculture Network
POSITION ANNOUNCEMENT: Director, Sustainable Agriculture Network
 
Железный предприниматель - победители
Железный предприниматель - победителиЖелезный предприниматель - победители
Железный предприниматель - победители
 
StudyNote - Железный предприниматель
StudyNote - Железный предпринимательStudyNote - Железный предприниматель
StudyNote - Железный предприниматель
 
Evernote Devcup 2012
Evernote Devcup 2012Evernote Devcup 2012
Evernote Devcup 2012
 
Evernote для разработчиков: ресурсы, API, приложения
Evernote для разработчиков: ресурсы, API, приложенияEvernote для разработчиков: ресурсы, API, приложения
Evernote для разработчиков: ресурсы, API, приложения
 

Similar to Конкурс для разработчиков от Evernote

Тарас Семененко, Evernote
Тарас Семененко, EvernoteТарас Семененко, Evernote
Тарас Семененко, EvernoteDiana Dymolazova
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими рукамиRoman Dvornov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Alina Dolgikh
 
Cocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновCocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновYandex
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerLEDC 2016
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVCmandrew182
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryMax Rozdobudko
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...QA Club Minsk
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...ISsoft
 
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...it-people
 
Антон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
Антон Тюрин, Евгений Сафронов, Инфраструктура под CocaineАнтон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
Антон Тюрин, Евгений Сафронов, Инфраструктура под CocaineTanya Denisyuk
 
Инфраструктура социального проекта
Инфраструктура социального проектаИнфраструктура социального проекта
Инфраструктура социального проектаMedia Gorod
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиковMedia Gorod
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 

Similar to Конкурс для разработчиков от Evernote (20)

Тарас Семененко, Evernote
Тарас Семененко, EvernoteТарас Семененко, Evernote
Тарас Семененко, Evernote
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
 
Cocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновCocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений Сафронов
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developer
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
 
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
 
Антон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
Антон Тюрин, Евгений Сафронов, Инфраструктура под CocaineАнтон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
Антон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
 
Инфраструктура социального проекта
Инфраструктура социального проектаИнфраструктура социального проекта
Инфраструктура социального проекта
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиков
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 

Конкурс для разработчиков от Evernote

  • 1.
  • 2. Экосистема Evernote: API, продвижение и анонс конкурса для разработчиков Игорь Афанасьев @iafan
  • 5. 35 млн зарегистрированных пользователей + пользователи Skitch, Penultimate 1 млн пользователей в России и странах СНГ
  • 6. Android, iOS, Windows Phone, Windows 8 новинка! Mac OS, Windows Desktop веб-клиент Chrome, Firefox, Safari, Internet Explorer Evernote Clearly (Chrome, Firefox) Evernote Food (Android, iOS) Evernote Hello (Android, iOS) Evernote Peek (iPad) Skitch (Mac OS, iPad, Android) Penultimate (iPad)
  • 10. Каналы продвижения џГалерея џПромо-баннеры на сайте evernote.com џпромо-баннеры в приложениях для Mac OS и Windows Desktop џрусскоязычный блог џпочтовая рассылка џТвиттер џБлог на Хабрахабре
  • 12. Сайт для разработчиков: http://dev.evernote.com/ Там вы найдете: - обзор возможностей API - полную документацию по API - ресурсы (видео, новости, техподдержка) - примеры приложений, построенных на API
  • 13. Русскоязычная поддержка по API: Обратная связь Ссылка на наше сообщество поддержки есть в виде закладки на каждой странице русскоязычного сайта. При оформлении вопроса выберите раздел “Evernote API”.
  • 14. Cloud API Особенности: џкроссплатформенный (общение непосредственно с сервером в онлайне) џБиблиотеки для C++, C#, Objective-C, Java, JavaME, PHP, Perl, Python, Ruby, ActionScript 3 џТребует регистрации и получения персонального ключа Применения: џлюбые веб-сервисы џлюбые локальные клиентские приложения
  • 15. Cloud API С чего начать работу с Cloud API џИдете на dev.evernote.com в раздел Cloud API џЗаполняете анкету на получение ключа џЗагружаете Evernote API SDK и знакомитесь с документацией џПосле получения ключа он работает только на сервере-”песочнице” sandbox.evernote.com џПо окончании разработки и тестирования приложения заполняете на сайте форму и активируете ключ на основном сервере
  • 16. Cloud API: авторизация Обычная OAuth Только для разработчиков Веб- и клиентские приложения (выдается конкретному (авторизация через веб-форму, пользователю, авторизация в базе можно хранить ключи через логин и пароль) для множества пользователей) Тип нужно указать при запросе ключа + определить права: создание [,чтение, изменение] объектов
  • 17. Cloud API: OAuth (несколько упрощенная схема) џПользователь идет на ваш сайт (foo.ru) и выбирает функцию “Подключиться к Evernote” џсайт открывает форму авторизации на сайте Evernote: https://www.evernote.com/oauth?...&oauth_callback=https%3A%2F%2Ffoo.ru%2Foa uthCallback џПользователь входит в аккаунт Evernote и нажимает кнопку "Авторизовать приложение Foo". џПользователь переходит обратно на ваш сайт: https://foo.ru/oauthCallback&oauth_token=xxxyyyzzz
  • 18. Cloud API: Thrift http://thrift.apache.org/ Основные принципы: џСинхронный вызов функций (методов объектов) на сервере џБиблиотеки для разных языков изолируют всю сетевую сериализацию запросов и ответов. Для программиста это просто создание объектов и вызов их методов. Ответы и исключения — тоже в виде объектов (структур).
  • 19. Cloud API: Объекты http://dev.evernote.com/documentation/reference/ UserStore NoteStore Проверка версии протокола, Работа с блокнотами, аутентификация метками, заметками и их пользователя, обновление ресурсами, сохраненными токена, получение запросами, подключенными информации о пользователе, (чужими) блокнотами, поиск о месячных лимитах. заметок по критериям, экспорт (получение публичного URL заметки), открытие доступа к блокнотам, синхронизация. + типизированные исключения + константы: лимиты и регулярные выражения для валидации
  • 20. Cloud API: Thrift // подключение к базе пользователей $userStoreHttpClient = new THttpClient('sandbox.evernote.com', 443, "/edam/user", 'https'); $userStoreProtocol = new TBinaryProtocol(userStoreHttpClient); $userStore = new UserStoreClient($userStoreProtocol, $userStoreProtocol); // аутентификация по ключу разработчика (вызов функции на сервере) $authResult = $userStore->authenticate($username, $password, $consumerKey, $consumerSecret); // получение токена (поля структуры) — он используется при всех запросах $authToken = $authResult->authenticationToken; // получение информациии о пользователе $user = $userStore->getUser($authToken); // подключение к базе заметок конкретного пользователя $noteStoreHttpClient = new THttpClient('sandbox.evernote.com', 443, "/edam/note/" . $user->shardId, 'https'); $noteStoreProtocol = new TBinaryProtocol($noteStoreHttpClient); $noteStore = new NoteStoreClient($noteStoreProtocol, $noteStoreProtocol);
  • 21. Cloud API: Thrift // создание нового объекта-блокнота и заполнение параметров $notebook = new edam_type_Notebook(); // создаем локальный объект $notebook->name = “новый блокнот”; // указываем имя // создание блокнота на сервере и получение его GUID try { $notebook = $noteStore->createNotebook($authToken, $notebook); } catch (Exception $e) { // блокнот создать не удалось } $nbguid = $notebook->guid; // создание нового объекта-заметки и заполнение параметров $note = new edam_type_Note(); // создаем локальный объект $note->notebookGuid = $nbguid; // указываем GUID блокнота $note->title = “Моя заметка”; // заголовок $note->content = $content_ENML; // контент в формате ENML $note->created = time() * 1000; // время в миллисекундах // создание заметки на сервере и получение ее GUID $note = $noteStore->createNote($authToken, $note); $noteguid = $note->guid;
  • 22. Cloud API: Синхронизация Полная спецификация — на сайте Основные принципы: џКлиентское приложение хранит счетчик изменений Update Sequence Number (USN) для последнего изменения, полученного с сервера. џЦикл: приложение запрашивает блок изменений начиная с текущего USN, применяет эти изменения локально и сохраняет новое значение USN. џUSN достиг максимального значения — синхронизация завершена.
  • 23. Cloud API: Подписка Полная спецификация — на сайте Можно периодически синхронизироваться, а можно подписаться на определенные изменения. Подписка — свойство ключа API. Можно задать фильтр для подписки на определенное подмножество заметок. https://foo.ru?userId=evernoteUserId&guid=noteGuid&reason=create Настройка по запросу через форму на сайте.
  • 24. Cloud API: ENML Полная спецификация и DTD — на сайте ENML — XHTML с некоторыми особенностями: џкорневой тег <en-note> <en-note> <h1>Hello</h1> <p>World</p> </en-note> џтег <en-media> для изображений и вложенных файлов <en-media type="image/jpeg" hash="f03c1c2d96bc67eda02968c8b5af9008" /> џтег <en-crypt> для зашифрованных фрагментов (есть пример JavaScript-библиотеки, позволяющей открывать эти фрагменты прямо в браузере) <en-crypt>NKLHX5yK1MlpzemJQijAN6C4545s2EODxQ8Bg1r==</en-crypt> џтег <en-todo> для флажков задач <en-todo /> <en-todo checked="true" />
  • 25. Cloud API: Особые заметки Полная спецификация — на сайте В Evernote можно создавать особые заметки, привязанные к определенному приложению (как в Evernote Hello и Evernote Food и Skitch). В обычных клиентских приложениях Evernote они будут доступны только для чтения. Note->attributes->contentClass = 'companyName.appName.noteType' У каждой заметки есть также хэш ключ-значение для хранения данных внешних приложений. Максимальный размер каждой пары — 4 Кб. NoteStore.getNoteApplicationDataEntry + NoteStore.setNoteApplicationDataEntry
  • 26. Cloud API: “Смотри также” Полная спецификация — на сайте Новая функция Evernote API — возможность искать связанные по смыслу заметки, блокноты или метки. На входе — GUID заметки или текст. На выходе — массив подходящих объектов. result = NoteStore.findRelated(QueryObject, ResultSpec);
  • 27. Cloud API: Эскизы Полная спецификация — на сайте Для каждой заметки на сервере создается ее эскиз. Их можно использовать для визуализации заметок в ваших приложениях. На выходе — PNG, JPEG или GIF, вписанный в прямоугольник нужного вам размера, но не более 300x300pх POST-запрос на URL: https://[sandbox|www].evernote.com/shard/shardID/thm/note/GUID[?size=75]
  • 29. Задание Сделайте и опубликуйте приложение на любой платформе, работающее с заметками Evernote через Cloud API, или интегрируйте ваше существующее приложение с Evernote. Обратная связь Мы постараемся проконсультировать вас по любым сопутствующим вопросам (как техническим, так и организационным).
  • 30. Критерии оценки работ џкачество реализации приложения: внешний вид и работоспособность џфункциональность приложения, его актуальность для пользователей џобъем интеграции с Evernote: приложение может просто отправлять информацию в наш сервис, а может загружать ее, создавать новые блокноты, использовать технологию распознавания и т. д.
  • 31. Главный приз 100 квартальных премиум-подписок которые вы сможете использовать для продвижения своего приложения, и реклама вашего приложения в Галерее, блоге, Твиттере и почтовой рассылке (800 000+ русскоязычных пользователей)
  • 32. Прием заявок с 11 ноября по 11 декабря Подробности опубликуем в блоге blog.evernote.com/ru