...

воскресенье, 16 марта 2014 г.

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
// http://ift.tt/12eAxa4
ns->setAuthenticationToken("S=s41:U=427a0c:E=14761d37b39:C=1400a224f39:P=1cd:A=en-devtoken:V=2:H=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

// там же узнайте свой NoteStore URL
ns->setNoteStoreUrl("http://ift.tt/1p0PhPu");

Note note;
note.title = "Тестовая заметка";
note.content = QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ "<!DOCTYPE en-note SYSTEM \"http://ift.tt/RPVBxx\">\n"
+ "<en-note>"
+ "<b>Хорошо живет на свете Винни-Пух!</b><br /><br /><p>Хм, похоже, <a href=\"http://ift.tt/1p0PhPq\">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 получайте тут: http://ift.tt/1p0PhPw, кнопка 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;
}


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий