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