Post on 05-Dec-2014
description
Экосистема Evernote:API, продвижение и анонс
конкурса для разработчиков
Игорь Афанасьев@iafan
Что такое Evernote
Помни всё!
35 млнзарегистрированных
пользователей+ пользователи Skitch, Penultimate
1 млнпользователей
в России и странах СНГ
Android, iOS, Windows PhoneWindows 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
Каналы продвижения
џ
џ
џпромо-баннеры в приложенияхдля Mac OS и Windows Desktop
џрусскоязычный блог
џпочтовая рассылка
џТвиттер
џБлог на Хабрахабре
Галерея
Промо-баннеры на сайте evernote.com
Evernote API
Там вы найдете:- обзор возможностей API
- полную документацию по API- ресурсы (видео, новости, техподдержка)
- примеры приложений, построенных на API
Сайт для разработчиков:
http://dev.evernote.com/
Русскоязычная поддержкапо API:
Ссылка на наше сообщество поддержкиесть в виде закладки на каждой странице
русскоязычного сайта.
При оформлении вопроса выберите раздел“Evernote API”.
Об
рат
ная
свя
зь
Особенности:џкроссплатформенный (общение
непосредственно с сервером в онлайне)џБиблиотеки для C++, Objective-C, Java,
JavaME, PHP, Perl, Python, Ruby, ActionScript 3џТребует регистрации и получения
персонального ключа
Применения:џлюбые веб-сервисыџлюбые локальные клиентские приложения
C#,
Cloud API
С чего начать работу с Cloud API
џИдете на dev.evernote.com в раздел Cloud APIџЗаполняете анкету на получение ключаџЗагружаете Evernote API SDK и знакомитесь с
документациейџПосле получения ключа он работает только на
сервере-”песочнице” sandbox.evernote.comџПо окончании разработки и тестирования
приложения заполняете на сайте форму и активируете ключ на основном сервере
Cloud API
Cloud API: авторизация
Только для разработчиков(выдается конкретному
пользователю, авторизациячерез логин и пароль)
Обычная OAuthВеб- и клиентские приложения(авторизация через веб-форму,
в базе можно хранить ключидля множества пользователей)
Тип нужно указать при запросе ключа+ определить права: создание [,чтение, изменение] объектов
Cloud API: OAuth
џПользователь идет на ваш сайт (foo.ru) и выбирает функцию “Подключиться к Evernote”
џсайт открывает форму авторизации на сайте Evernote:
џПользователь входит в аккаунт Evernote и нажимает кнопку "Авторизовать приложение Foo".
џПользователь переходит обратно на ваш сайт:
https://www.evernote.com/oauth?...&oauth_callback=https%3A%2F%2Ffoo.ru%2FoauthCallback
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
// создание нового объекта-блокнота и заполнение параметров // создаем локальный объект
// указываем имя
// создание блокнота на сервере и получение его GUID
// блокнот создать не удалось
// создание нового объекта-заметки и заполнение параметров // создаем локальный объект // указываем GUID блокнота // заголовок
// контент в формате ENML// время в миллисекундах
// создание заметки на сервере и получение ее GUID
$notebook = new edam_type_Notebook();$notebook->name = “новый блокнот”;
$notebook = $noteStore->createNotebook($authToken, $notebook);
$nbguid = $notebook->guid;
$note = new edam_type_Note();$note->notebookGuid = $nbguid;$note->title = “Моя заметка”;$note->content = $content_ENML; $note->created = time() * 1000;
$note = $noteStore->createNote($authToken, $note);$noteguid = $note->guid;
try {
} catch (Exception $e) {
}
Cloud API: Синхронизация
Полная спецификация — на сайте
Основные принципы:
џКлиентское приложение хранит счетчик изменений Update Sequence Number (USN) для последнего изменения, полученного с сервера.
џЦикл: приложение запрашивает блок изменений начиная с текущего USN, применяет эти изменения локально и сохраняет новое значение USN.
џUSN достиг максимального значения — синхронизация завершена.
Cloud API: Подписка
Полная спецификация — на сайте
Можно периодически синхронизироваться, а можно подписаться на определенные изменения. Подписка — свойство ключа API. Можно задать фильтр для подписки на определенное подмножество заметок.
Настройка по запросу через форму на сайте.
https://foo.ru?userId= &guid= &reason=evernoteUserId noteGuid create
Cloud API: ENML
Полная спецификация и DTD — на сайте
ENML — XHTML с некоторыми особенностями:џкорневой тег <en-note>
џтег <en-media> для изображений и вложенных файлов
џтег <en-crypt> для зашифрованных фрагментов (есть пример JavaScript-библиотеки, позволяющей открывать эти фрагменты прямо в браузере)
џтег <en-todo> для флажков задач
<en-note> </en-note>
<en-media type="image/jpeg" hash="f03c1c2d96bc67eda02968c8b5af9008" />
<en-crypt>NKLHX5yK1MlpzemJQijAN6C4545s2EODxQ8Bg1r==</en-crypt>
<en-todo /><en-todo checked="true" />
<h1>Hello</h1> <p>World</p>
Cloud API: Особые заметки
В Evernote можно создавать особые заметки, привязанные к определенному приложению (как в Evernote Hello и Evernote Food и Skitch).В обычных клиентских приложениях Evernoteони будут доступны только для чтения.
У каждой заметки есть также хэш ключ-значение для хранения данных внешних приложений. Максимальный размер каждой пары — 4 Кб.
Note->attributes->contentClass = 'companyName.appName.noteType'
NoteStore.getNoteApplicationDataEntry + NoteStore.setNoteApplicationDataEntry
Полная спецификация — на сайте
Cloud API: “Смотри также”
Новая функция Evernote API — возможность искать связанные по смыслу заметки, блокноты или метки. На входе — GUID заметки или текст. На выходе — массив подходящих объектов.
result = NoteStore.findRelated( , );QueryObject ResultSpec
Полная спецификация — на сайте
Cloud API: Эскизы
Для каждой заметки на сервере создается ее эскиз. Их можно использовать для визуализации заметок в ваших приложениях.
На выходе — PNG, JPEG или GIF, вписанный в прямоугольник нужного вам размера, но не более 300x300pх
POST-запрос на URL:
https:// .evernote.com/shard/ /thm/note/ [?size= ][sandbox|www] shardID GUID 75
Полная спецификация — на сайте
Внимание, конкурс!
Сделайте и опубликуйте приложение на любой платформе, работающее с заметками Evernote через Cloud API, или интегрируйтеваше существующее приложение с Evernote.
Об
рат
ная
свя
зь Мы постараемся проконсультировать вас по любым сопутствующим вопросам (как техническим, так и организационным).
Задание
Критерии оценки работ
џкачество реализации приложения: внешний вид и работоспособность
џфункциональность приложения, его актуальность для пользователей
џобъем интеграции с Evernote: приложение может просто отправлять информацию в наш сервис, а может загружать ее, создавать новые блокноты, использовать технологию распознавания и т. д.
Главный приз
100 квартальныхпремиум-подписок
которые вы сможете использоватьдля продвижения своего приложения,
и реклама вашего приложенияв Галерее, блоге, Твиттере и почтовой рассылке
(800 000+ русскоязычных пользователей)
Подробности опубликуем в блоге
Прием заявокс 11 ноября по 11 декабря
blog.evernote.com/ru
Спасибо!
www.evernote.com