QEverCloud: Evernote SDK для Qt

от автора

Раз уж вы читаете этот пост, то, наверное, знаете, что такое Evernote. Ну и конечно же вы знаете, что такое Qt 🙂
И, может быть, вы, как и я, захотели их объединить.

Если вы пробовали осуществить такое объединение — написать программу на C++/Qt, которая бы обращалась к Evernote Cloud API — то вы уже знаете, что дело это, мягко говоря, нетривиальное. Для C++ создатели Evernote предлагают только сгенерированные компилятором Thrift файлики. От них до чего-то хоть как-то работающего — как до Луны, и, к сожалению, отнюдь не по прямой.

Я этот путь прошел и по результатам этого памятного путешествия решил, что в этот путь людей посылать — оно не очень гуманно. Так что в конце концов я написал свою библиотеку и выложил ее на GitHub.

Чем QEverCloud лучше Evernote SDK?

  • Зависит только от Qt. Никаких танцев с бубнами при компиляции.
  • Интерфейс библиотеки насколько возможно избавлен от технических деталей. Пользоваться ей настолько просто, насколько это имхо возможно.
  • Реализована аутентификация через OAuth.
  • Поскольку для реализации клиента HTTP используется QtNetwork, то нет никаких проблем с поддержкой HTTP proxy.

В качестве примера использования вот простенькая программка, которая создает тестовую заметку в блокноте по умолчанию:

  #include <QCoreApplication> #include <QTextStream> #include <exception> #include <QEverCloud.h>  using namespace qevercloud;   int main(int argc, char *argv[]) {     QCoreApplication a(argc, argv);     QTextStream cout(stdout);     try {         NoteStore* ns = new NoteStore(&a);          // вставьте сюда свой developer token         // https://www.evernote.com/api/DeveloperToken.action         ns->setAuthenticationToken("S=s41:U=427a0c:E=14761d37b39:C=1400a224f39:P=1cd:A=en-devtoken:V=2:H=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");          // там же узнайте свой NoteStore URL         ns->setNoteStoreUrl("https://www.evernote.com/shard/xxx/notestore");          Note note;         note.title = "Тестовая заметка";         note.content = QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")                 + "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">\n"                 + "<en-note>"                 + "<b>Хорошо живет на свете Винни-Пух!</b><br /><br /><p>Хм, похоже, <a href=\"https://github.com/mgsxx/QEverCloud\">QEverCloud</a> таки да работает...</p>"                 + "</en-note>";         ns->createNote(note);     } catch(const std::exception& e) {         cout << "exception occured: " << e.what() << endl;         return 1;     } catch(...) {         cout << "unknown exception occured!" << endl;         return 1;     }     return 0; }  

Developer tokens весьма удобны для своих личных программок, но для более серьезных программ необходимо токен и NoteStore URL получать через OAuth авторизацию. С помощью QEverCloud это делается легко:

 #include <QEverCloudOAuth.h>  ...  // consumerKey и consumerSecret получайте тут: https://dev.evernote.com/doc/, кнопка GET AN API KEY EvernoteOAuthDialog d(consumerKey, consumerSecret, "sandbox.evernote.com"); d.setWindowTitle("Логин в Evernote"); if(d.exec() != QDialog::Accepted) {     QMessageBox::critical(0, "Ошибка", d.oauthError()); } else {     QString authenticationToken = d.oauthResult().authenticationToken;     QString noteStoreUrl = d.oauthResult().noteStoreUrl; }  

ссылка на оригинал статьи http://habrahabr.ru/post/216007/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *