Files
@ 7291e4c1ca28
Branch filter:
Location: libtransport.git/3rdparty/o2/examples/twitterdemo/tweeter.cpp
7291e4c1ca28
4.5 KiB
text/x-c++hdr
Add 3rdparty oauth 2 library
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | #include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QDesktopServices>
#include <QDebug>
#include "tweeter.h"
#include "o2globals.h"
#include "o1requestor.h"
#include "o2settingsstore.h"
const char O2_CONSUMER_KEY[] = "2vHeyIxjywIadjEhvbDpg";
const char O2_CONSUMER_SECRET[] = "Xfwe195Kp3ZpcCKgkYs7RKfugTm8EfpLkQvsKfX2vvs";
const int localPort = 8888;
Tweeter::Tweeter(QObject *parent) :
QObject(parent) {
}
void Tweeter::doOAuth() {
o1Twitter_ = new O1Twitter(this);
o1Twitter_->setClientId(O2_CONSUMER_KEY);
o1Twitter_->setClientSecret(O2_CONSUMER_SECRET);
o1Twitter_->setLocalPort(localPort);
// Create a store object for writing the received tokens
O2SettingsStore *store = new O2SettingsStore(O2_ENCRYPTION_KEY);
store->setGroupKey("twitter");
o1Twitter_->setStore(store);
// Connect signals
connect(o1Twitter_, SIGNAL(linkedChanged()),
this, SLOT(onLinkedChanged()));
connect(o1Twitter_, SIGNAL(linkingFailed()),
this, SIGNAL(linkingFailed()));
connect(o1Twitter_, SIGNAL(linkingSucceeded()),
this, SLOT(onLinkingSucceeded()));
connect(o1Twitter_, SIGNAL(openBrowser(QUrl)),
this, SLOT(onOpenBrowser(QUrl)));
connect(o1Twitter_, SIGNAL(closeBrowser()),
this, SLOT(onCloseBrowser()));
qDebug() << "Starting OAuth...";
o1Twitter_->link();
}
void Tweeter::doXAuth(const QString &username, const QString &password) {
oxTwitter_ = new OXTwitter(this);
oxTwitter_->setClientId(O2_CONSUMER_KEY);
oxTwitter_->setClientSecret(O2_CONSUMER_SECRET);
oxTwitter_->setLocalPort(localPort);
oxTwitter_->setUsername(username);
oxTwitter_->setPassword(password);
// Create a store object for writing the received tokens
O2SettingsStore *store = new O2SettingsStore(O2_ENCRYPTION_KEY);
store->setGroupKey("twitter");
oxTwitter_->setStore(store);
connect(oxTwitter_, SIGNAL(linkedChanged()),
this, SLOT(onLinkedChanged()));
connect(oxTwitter_, SIGNAL(linkingFailed()),
this, SIGNAL(linkingFailed()));
connect(oxTwitter_, SIGNAL(linkingSucceeded()),
this, SLOT(onLinkingSucceeded()));
connect(oxTwitter_, SIGNAL(openBrowser(QUrl)),
this, SLOT(onOpenBrowser(QUrl)));
connect(oxTwitter_, SIGNAL(closeBrowser()),
this, SLOT(onCloseBrowser()));
qDebug() << "Starting XAuth...";
qDebug() << "Username:" << username << "Password:" << password;
oxTwitter_->link();
}
void Tweeter::postStatusUpdate(const QString &message) {
if (!o1Twitter_->linked()) {
qWarning() << "Application is not linked to Twitter!";
emit statusPosted();
return;
}
qDebug() << "Status update message:" << message.toLatin1().constData();
QNetworkAccessManager* manager = new QNetworkAccessManager(this);
O1Twitter* o1 = o1Twitter_;
O1Requestor* requestor = new O1Requestor(manager, o1, this);
QByteArray paramName("status");
QList<O1RequestParameter> reqParams = QList<O1RequestParameter>();
reqParams << O1RequestParameter(paramName, message.toLatin1());
QByteArray postData = O1::createQueryParams(reqParams);
QUrl url = QUrl("https://api.twitter.com/1.1/statuses/update.json");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
QNetworkReply *reply = requestor->post(request, reqParams, postData);
connect(reply, SIGNAL(finished()), this, SLOT(tweetReplyDone()));
}
void Tweeter::onOpenBrowser(const QUrl &url) {
qDebug() << "Opening browser with url" << url.toString();
QDesktopServices::openUrl(url);
}
void Tweeter::onCloseBrowser() {
}
void Tweeter::onLinkedChanged() {
qDebug() << "Link changed!";
}
void Tweeter::onLinkingSucceeded() {
O1Twitter* o1t = qobject_cast<O1Twitter *>(sender());
QVariantMap extraTokens = o1t->extraTokens();
if (!extraTokens.isEmpty()) {
emit extraTokensReady(extraTokens);
qDebug() << "Extra tokens in response:";
foreach (QString key, extraTokens.keys()) {
qDebug() << "\t" << key << ":" << extraTokens.value(key).toString();
}
}
emit linkingSucceeded();
}
void Tweeter::tweetReplyDone()
{
QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
if (reply->error() != QNetworkReply::NoError) {
qDebug() << "ERROR:" << reply->errorString();
qDebug() << "content:" << reply->readAll();
} else {
qDebug() << "Tweet posted sucessfully!";
}
emit statusPosted();
}
|